XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

Improve event loop

3b8dfff9
Heiner Lohaus <heiner@lohaus.eu>
提交于

代码差异

3 个文件 +49 -47
Modified g4f/Provider/Ylokh.py +4 -1
@@ -51,7 +51,9 @@ class Ylokh(AsyncGeneratorProvider):
51 51 if stream:
52 52 async for line in response.content:
53 53 line = line.decode()
54 if line.startswith("data: ") and not line.startswith("data: [DONE]"):
54 if line.startswith("data: "):
55 if line.startswith("data: [DONE]"):
56 break
55 57 line = json.loads(line[6:-1])
56 58 content = line["choices"][0]["delta"].get("content")
57 59 if content:
@@ -71,6 +73,7 @@ class Ylokh(AsyncGeneratorProvider):
71 73 ("stream", "bool"),
72 74 ("proxy", "str"),
73 75 ("temperature", "float"),
76 ("top_p", "float"),
74 77 ]
75 78 param = ", ".join([": ".join(p) for p in params])
76 79 return f"g4f.provider.{cls.__name__} supports: ({param})"
Modified g4f/Provider/base_provider.py +40 -41
@@ -35,30 +35,6 @@ class BaseProvider(ABC):
35 35 ]
36 36 param = ", ".join([": ".join(p) for p in params])
37 37 return f"g4f.provider.{cls.__name__} supports: ({param})"
38
39
40 _cookies = {}
41
42 def get_cookies(cookie_domain: str) -> dict:
43 if cookie_domain not in _cookies:
44 _cookies[cookie_domain] = {}
45 try:
46 for cookie in browser_cookie3.load(cookie_domain):
47 _cookies[cookie_domain][cookie.name] = cookie.value
48 except:
49 pass
50 return _cookies[cookie_domain]
51
52
53 def format_prompt(messages: list[dict[str, str]], add_special_tokens=False):
54 if add_special_tokens or len(messages) > 1:
55 formatted = "\n".join(
56 ["%s: %s" % ((message["role"]).capitalize(), message["content"]) for message in messages]
57 )
58 return f"{formatted}\nAssistant:"
59 else:
60 return messages.pop()["content"]
61
62 38
63 39
64 40 class AsyncProvider(BaseProvider):
@@ -67,8 +43,9 @@ class AsyncProvider(BaseProvider):
67 43 cls,
68 44 model: str,
69 45 messages: list[dict[str, str]],
70 stream: bool = False, **kwargs: Any) -> CreateResult:
71
46 stream: bool = False,
47 **kwargs
48 ) -> CreateResult:
72 49 yield asyncio.run(cls.create_async(model, messages, **kwargs))
73 50
74 51 @staticmethod
@@ -90,7 +67,20 @@ class AsyncGeneratorProvider(AsyncProvider):
90 67 stream: bool = True,
91 68 **kwargs
92 69 ) -> CreateResult:
93 yield from run_generator(cls.create_async_generator(model, messages, stream=stream, **kwargs))
70 loop = asyncio.new_event_loop()
71 try:
72 asyncio.set_event_loop(loop)
73 generator = cls.create_async_generator(model, messages, stream=stream, **kwargs)
74 gen = generator.__aiter__()
75 while True:
76 try:
77 yield loop.run_until_complete(gen.__anext__())
78 except StopAsyncIteration:
79 break
80 finally:
81 asyncio.set_event_loop(None)
82 loop.close()
83
94 84
95 85 @classmethod
96 86 async def create_async(
@@ -99,27 +89,36 @@ class AsyncGeneratorProvider(AsyncProvider):
99 89 messages: list[dict[str, str]],
100 90 **kwargs
101 91 ) -> str:
102 chunks = [chunk async for chunk in cls.create_async_generator(model, messages, stream=False, **kwargs)]
103 if chunks:
104 return "".join(chunks)
92 return "".join([chunk async for chunk in cls.create_async_generator(model, messages, stream=False, **kwargs)])
105 93
106 94 @staticmethod
107 95 @abstractmethod
108 96 def create_async_generator(
109 model: str,
110 messages: list[dict[str, str]],
111 **kwargs
112 ) -> AsyncGenerator:
97 model: str,
98 messages: list[dict[str, str]],
99 **kwargs
100 ) -> AsyncGenerator:
113 101 raise NotImplementedError()
114 102
115 103
116 def run_generator(generator: AsyncGenerator[Union[Any, str], Any]):
117 loop = asyncio.new_event_loop()
118 gen = generator.__aiter__()
104 _cookies = {}
119 105
120 while True:
106 def get_cookies(cookie_domain: str) -> dict:
107 if cookie_domain not in _cookies:
108 _cookies[cookie_domain] = {}
121 109 try:
122 yield loop.run_until_complete(gen.__anext__())
110 for cookie in browser_cookie3.load(cookie_domain):
111 _cookies[cookie_domain][cookie.name] = cookie.value
112 except:
113 pass
114 return _cookies[cookie_domain]
123 115
124 except StopAsyncIteration:
125 break
116
117 def format_prompt(messages: list[dict[str, str]], add_special_tokens=False):
118 if add_special_tokens or len(messages) > 1:
119 formatted = "\n".join(
120 ["%s: %s" % ((message["role"]).capitalize(), message["content"]) for message in messages]
121 )
122 return f"{formatted}\nAssistant:"
123 else:
124 return messages[0]["content"]
Modified testing/test_needs_auth.py +5 -5
@@ -17,7 +17,7 @@ _providers = [
17 17 g4f.Provider.Bard
18 18 ]
19 19
20 _instruct = "Hello, tell about you in one sentence."
20 _instruct = "Hello, are you GPT 4?."
21 21
22 22 _example = """
23 23 OpenaiChat: Hello! How can I assist you today? 2.0 secs
@@ -39,14 +39,14 @@ No Stream Total: 10.14 secs
39 39 print("Bing: ", end="")
40 40 for response in log_time_yield(
41 41 g4f.ChatCompletion.create,
42 model=g4f.models.gpt_35_turbo,
42 model=g4f.models.default,
43 43 messages=[{"role": "user", "content": _instruct}],
44 44 provider=g4f.Provider.Bing,
45 45 #cookies=g4f.get_cookies(".huggingface.co"),
46 #stream=True,
46 stream=True,
47 47 auth=True
48 48 ):
49 print(response, end="")
49 print(response, end="", flush=True)
50 50 print()
51 51 print()
52 52
@@ -75,7 +75,7 @@ def run_stream():
75 75 model=None,
76 76 messages=[{"role": "user", "content": _instruct}],
77 77 ):
78 print(response, end="")
78 print(response, end="", flush=True)
79 79 print()
80 80 print("Stream Total:", log_time(run_stream))
81 81 print()