返回提交历史
Modified
g4f/Provider/base_provider.py
+21
-9
Modified
g4f/errors.py
+3
-0
XFEstudio/gpt4free
Remove usage of get_event_loop helper
cb0e0655
代码差异
2 个文件
+24
-9
@@ -8,6 +8,7 @@ from inspect import signature, Parameter
8
8
from .helper import get_event_loop, get_cookies, format_prompt
9
9
from ..typing import CreateResult, AsyncResult, Messages
10
10
from ..base_provider import BaseProvider
11
from ..errors import NestAsyncioError
11
12
12
13
if sys.version_info < (3, 10):
13
14
NoneType = type(None)
@@ -48,7 +49,7 @@ class AbstractProvider(BaseProvider):
48
49
Returns:
49
50
str: The created result as a string.
50
51
"""
51
loop = loop or get_event_loop()
52
loop = loop or asyncio.get_running_loop()
52
53
53
54
def create_func() -> str:
54
55
return "".join(cls.create_completion(model, messages, False, **kwargs))
@@ -101,8 +102,6 @@ class AsyncProvider(AbstractProvider):
101
102
model: str,
102
103
messages: Messages,
103
104
stream: bool = False,
104
*,
105
loop: AbstractEventLoop = None,
106
105
**kwargs
107
106
) -> CreateResult:
108
107
"""
@@ -119,9 +118,15 @@ class AsyncProvider(AbstractProvider):
119
118
Returns:
120
119
CreateResult: The result of the completion creation.
121
120
"""
122
loop = loop or get_event_loop()
123
coro = cls.create_async(model, messages, **kwargs)
124
yield loop.run_until_complete(coro)
121
try:
122
loop = asyncio.get_running_loop()
123
if not hasattr(loop.__class__, "_nest_patched"):
124
raise NestAsyncioError(
125
'Use "create_async" instead of "create" function in a running event loop. Or use "nest_asyncio" package.'
126
)
127
except RuntimeError:
128
pass
129
yield asyncio.run(cls.create_async(model, messages, **kwargs))
125
130
126
131
@staticmethod
127
132
@abstractmethod
@@ -159,8 +164,6 @@ class AsyncGeneratorProvider(AsyncProvider):
159
164
model: str,
160
165
messages: Messages,
161
166
stream: bool = True,
162
*,
163
loop: AbstractEventLoop = None,
164
167
**kwargs
165
168
) -> CreateResult:
166
169
"""
@@ -177,7 +180,16 @@ class AsyncGeneratorProvider(AsyncProvider):
177
180
Returns:
178
181
CreateResult: The result of the streaming completion creation.
179
182
"""
180
loop = loop or get_event_loop()
183
try:
184
loop = asyncio.get_running_loop()
185
if not hasattr(loop.__class__, "_nest_patched"):
186
raise NestAsyncioError(
187
'Use "create_async" instead of "create" function in a running event loop. Or use "nest_asyncio" package.'
188
)
189
except RuntimeError:
190
loop = asyncio.new_event_loop()
191
asyncio.set_event_loop(loop)
192
181
193
generator = cls.create_async_generator(model, messages, stream=stream, **kwargs)
182
194
gen = generator.__aiter__()
183
195
@@ -23,4 +23,7 @@ class RetryNoProviderError(Exception):
23
23
pass
24
24
25
25
class VersionNotFoundError(Exception):
26
pass
27
28
class NestAsyncioError(Exception):
26
29
pass