summaryrefslogtreecommitdiffstats
path: root/g4f
diff options
context:
space:
mode:
authorHeiner Lohaus <hlohaus@users.noreply.github.com>2024-01-20 18:23:54 +0100
committerHeiner Lohaus <hlohaus@users.noreply.github.com>2024-01-20 18:23:54 +0100
commitcb0e065581423460663c58d1d169c54f0faa3084 (patch)
tree9f1504e6475e8bef43bf5fd79f5cb827aed3d591 /g4f
parentImprove asserts in unittests (diff)
downloadgpt4free-cb0e065581423460663c58d1d169c54f0faa3084.tar
gpt4free-cb0e065581423460663c58d1d169c54f0faa3084.tar.gz
gpt4free-cb0e065581423460663c58d1d169c54f0faa3084.tar.bz2
gpt4free-cb0e065581423460663c58d1d169c54f0faa3084.tar.lz
gpt4free-cb0e065581423460663c58d1d169c54f0faa3084.tar.xz
gpt4free-cb0e065581423460663c58d1d169c54f0faa3084.tar.zst
gpt4free-cb0e065581423460663c58d1d169c54f0faa3084.zip
Diffstat (limited to '')
-rw-r--r--g4f/Provider/base_provider.py30
-rw-r--r--g4f/errors.py3
2 files changed, 24 insertions, 9 deletions
diff --git a/g4f/Provider/base_provider.py b/g4f/Provider/base_provider.py
index fd92d17a..95f1b0b2 100644
--- a/g4f/Provider/base_provider.py
+++ b/g4f/Provider/base_provider.py
@@ -8,6 +8,7 @@ from inspect import signature, Parameter
from .helper import get_event_loop, get_cookies, format_prompt
from ..typing import CreateResult, AsyncResult, Messages
from ..base_provider import BaseProvider
+from ..errors import NestAsyncioError
if sys.version_info < (3, 10):
NoneType = type(None)
@@ -48,7 +49,7 @@ class AbstractProvider(BaseProvider):
Returns:
str: The created result as a string.
"""
- loop = loop or get_event_loop()
+ loop = loop or asyncio.get_running_loop()
def create_func() -> str:
return "".join(cls.create_completion(model, messages, False, **kwargs))
@@ -101,8 +102,6 @@ class AsyncProvider(AbstractProvider):
model: str,
messages: Messages,
stream: bool = False,
- *,
- loop: AbstractEventLoop = None,
**kwargs
) -> CreateResult:
"""
@@ -119,9 +118,15 @@ class AsyncProvider(AbstractProvider):
Returns:
CreateResult: The result of the completion creation.
"""
- loop = loop or get_event_loop()
- coro = cls.create_async(model, messages, **kwargs)
- yield loop.run_until_complete(coro)
+ try:
+ loop = asyncio.get_running_loop()
+ if not hasattr(loop.__class__, "_nest_patched"):
+ raise NestAsyncioError(
+ 'Use "create_async" instead of "create" function in a running event loop. Or use "nest_asyncio" package.'
+ )
+ except RuntimeError:
+ pass
+ yield asyncio.run(cls.create_async(model, messages, **kwargs))
@staticmethod
@abstractmethod
@@ -159,8 +164,6 @@ class AsyncGeneratorProvider(AsyncProvider):
model: str,
messages: Messages,
stream: bool = True,
- *,
- loop: AbstractEventLoop = None,
**kwargs
) -> CreateResult:
"""
@@ -177,7 +180,16 @@ class AsyncGeneratorProvider(AsyncProvider):
Returns:
CreateResult: The result of the streaming completion creation.
"""
- loop = loop or get_event_loop()
+ try:
+ loop = asyncio.get_running_loop()
+ if not hasattr(loop.__class__, "_nest_patched"):
+ raise NestAsyncioError(
+ 'Use "create_async" instead of "create" function in a running event loop. Or use "nest_asyncio" package.'
+ )
+ except RuntimeError:
+ loop = asyncio.new_event_loop()
+ asyncio.set_event_loop(loop)
+
generator = cls.create_async_generator(model, messages, stream=stream, **kwargs)
gen = generator.__aiter__()
diff --git a/g4f/errors.py b/g4f/errors.py
index b874435a..c0e6ddfc 100644
--- a/g4f/errors.py
+++ b/g4f/errors.py
@@ -23,4 +23,7 @@ class RetryNoProviderError(Exception):
pass
class VersionNotFoundError(Exception):
+ pass
+
+class NestAsyncioError(Exception):
pass \ No newline at end of file