From 0043e0494c49ad264b3d98e333943d990e11ac62 Mon Sep 17 00:00:00 2001 From: Heiner Lohaus Date: Mon, 25 Nov 2024 09:15:27 +0100 Subject: Fix AsyncClient / loop is already running --- g4f/client/__init__.py | 19 ++++++++++--------- g4f/client/helper.py | 3 ++- 2 files changed, 12 insertions(+), 10 deletions(-) (limited to 'g4f') diff --git a/g4f/client/__init__.py b/g4f/client/__init__.py index 05539e21..dcd408ab 100644 --- a/g4f/client/__init__.py +++ b/g4f/client/__init__.py @@ -152,8 +152,7 @@ async def async_iter_response( content = filter_json(content) yield ChatCompletion.model_construct(content, finish_reason, completion_id, int(time.time())) finally: - if hasattr(response, 'aclose'): - await safe_aclose(response) + await safe_aclose(response) async def async_iter_append_model_and_provider( response: AsyncChatCompletionResponseType @@ -167,8 +166,7 @@ async def async_iter_append_model_and_provider( chunk.provider = last_provider.get("name") yield chunk finally: - if hasattr(response, 'aclose'): - await safe_aclose(response) + await safe_aclose(response) class Client(BaseClient): def __init__( @@ -292,7 +290,7 @@ class Images: proxy = self.client.proxy response = None - if isinstance(provider, type) and issubclass(provider, AsyncGeneratorProvider): + if hasattr(provider_handler, "create_async_generator"): messages = [{"role": "user", "content": f"Generate a image: {prompt}"}] async for item in provider_handler.create_async_generator(model, messages, prompt=prompt, **kwargs): if isinstance(item, ImageResponse): @@ -354,7 +352,7 @@ class Images: if proxy is None: proxy = self.client.proxy - if isinstance(provider, type) and issubclass(provider, AsyncGeneratorProvider): + if hasattr(provider, "create_async_generator"): messages = [{"role": "user", "content": "create a variation of this image"}] generator = None try: @@ -364,8 +362,7 @@ class Images: response = chunk break finally: - if generator and hasattr(generator, 'aclose'): - await safe_aclose(generator) + await safe_aclose(generator) elif hasattr(provider, 'create_variation'): if asyncio.iscoroutinefunction(provider.create_variation): response = await provider.create_variation(image, model=model, response_format=response_format, proxy=proxy, **kwargs) @@ -454,7 +451,11 @@ class AsyncCompletions: ) stop = [stop] if isinstance(stop, str) else stop - response = provider.create_completion( + if hasattr(provider, "create_async_generator"): + create_handler = provider.create_async_generator + else: + create_handler = provider.create_completion + response = create_handler( model, messages, stream=stream, diff --git a/g4f/client/helper.py b/g4f/client/helper.py index 909cc132..7b022e8c 100644 --- a/g4f/client/helper.py +++ b/g4f/client/helper.py @@ -46,7 +46,8 @@ def filter_none(**kwargs) -> dict: async def safe_aclose(generator: AsyncGenerator) -> None: try: - await generator.aclose() + if generator and hasattr(generator, 'aclose'): + await generator.aclose() except Exception as e: logging.warning(f"Error while closing generator: {e}") -- cgit v1.2.3