summaryrefslogtreecommitdiffstats
path: root/g4f/Provider/helper.py
diff options
context:
space:
mode:
authorHeiner Lohaus <heiner@lohaus.eu>2023-09-26 10:03:37 +0200
committerHeiner Lohaus <heiner@lohaus.eu>2023-09-26 10:03:37 +0200
commit3c2755bc72efa0d8e5d8b2883443530ba67ecad4 (patch)
tree778a3c87768574ecd5f9a4927fbb58fc4137c32b /g4f/Provider/helper.py
parentAItianhuSpace Provider with GPT 4 added (diff)
downloadgpt4free-3c2755bc72efa0d8e5d8b2883443530ba67ecad4.tar
gpt4free-3c2755bc72efa0d8e5d8b2883443530ba67ecad4.tar.gz
gpt4free-3c2755bc72efa0d8e5d8b2883443530ba67ecad4.tar.bz2
gpt4free-3c2755bc72efa0d8e5d8b2883443530ba67ecad4.tar.lz
gpt4free-3c2755bc72efa0d8e5d8b2883443530ba67ecad4.tar.xz
gpt4free-3c2755bc72efa0d8e5d8b2883443530ba67ecad4.tar.zst
gpt4free-3c2755bc72efa0d8e5d8b2883443530ba67ecad4.zip
Diffstat (limited to 'g4f/Provider/helper.py')
-rw-r--r--g4f/Provider/helper.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/g4f/Provider/helper.py b/g4f/Provider/helper.py
new file mode 100644
index 00000000..e14ae65e
--- /dev/null
+++ b/g4f/Provider/helper.py
@@ -0,0 +1,54 @@
+from __future__ import annotations
+
+import asyncio
+import sys
+from asyncio import AbstractEventLoop
+
+import browser_cookie3
+
+_cookies: dict[str, dict[str, str]] = {}
+
+# Use own event_loop_policy with a selector event loop on windows.
+if sys.platform == 'win32':
+ _event_loop_policy = asyncio.WindowsSelectorEventLoopPolicy()
+else:
+ _event_loop_policy = asyncio.get_event_loop_policy()
+
+# If event loop is already running, handle nested event loops
+# If "nest_asyncio" is installed, patch the event loop.
+def get_event_loop() -> AbstractEventLoop:
+ try:
+ asyncio.get_running_loop()
+ except RuntimeError:
+ return _event_loop_policy.get_event_loop()
+ try:
+ event_loop = _event_loop_policy.get_event_loop()
+ if not hasattr(event_loop.__class__, "_nest_patched"):
+ import nest_asyncio
+ nest_asyncio.apply(event_loop)
+ return event_loop
+ except ImportError:
+ raise RuntimeError(
+ 'Use "create_async" instead of "create" function in a running event loop. Or install the "nest_asyncio" package.')
+
+# Load cookies for a domain from all supported browser.
+# Cache the results in the "_cookies" variable
+def get_cookies(cookie_domain: str) -> dict:
+ if cookie_domain not in _cookies:
+ _cookies[cookie_domain] = {}
+ try:
+ for cookie in browser_cookie3.load(cookie_domain):
+ _cookies[cookie_domain][cookie.name] = cookie.value
+ except:
+ pass
+ return _cookies[cookie_domain]
+
+
+def format_prompt(messages: list[dict[str, str]], add_special_tokens=False):
+ if add_special_tokens or len(messages) > 1:
+ formatted = "\n".join(
+ ["%s: %s" % ((message["role"]).capitalize(), message["content"]) for message in messages]
+ )
+ return f"{formatted}\nAssistant:"
+ else:
+ return messages[0]["content"] \ No newline at end of file