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

XFEstudio/gpt4free

Fix AsyncClient / loop is already running

0043e049
Heiner Lohaus <hlohaus@users.noreply.github.com>
提交于

代码差异

2 个文件 +12 -10
Modified g4f/client/__init__.py +10 -9
@@ -152,8 +152,7 @@ async def async_iter_response(
152 152 content = filter_json(content)
153 153 yield ChatCompletion.model_construct(content, finish_reason, completion_id, int(time.time()))
154 154 finally:
155 if hasattr(response, 'aclose'):
156 await safe_aclose(response)
155 await safe_aclose(response)
157 156
158 157 async def async_iter_append_model_and_provider(
159 158 response: AsyncChatCompletionResponseType
@@ -167,8 +166,7 @@ async def async_iter_append_model_and_provider(
167 166 chunk.provider = last_provider.get("name")
168 167 yield chunk
169 168 finally:
170 if hasattr(response, 'aclose'):
171 await safe_aclose(response)
169 await safe_aclose(response)
172 170
173 171 class Client(BaseClient):
174 172 def __init__(
@@ -292,7 +290,7 @@ class Images:
292 290 proxy = self.client.proxy
293 291
294 292 response = None
295 if isinstance(provider, type) and issubclass(provider, AsyncGeneratorProvider):
293 if hasattr(provider_handler, "create_async_generator"):
296 294 messages = [{"role": "user", "content": f"Generate a image: {prompt}"}]
297 295 async for item in provider_handler.create_async_generator(model, messages, prompt=prompt, **kwargs):
298 296 if isinstance(item, ImageResponse):
@@ -354,7 +352,7 @@ class Images:
354 352 if proxy is None:
355 353 proxy = self.client.proxy
356 354
357 if isinstance(provider, type) and issubclass(provider, AsyncGeneratorProvider):
355 if hasattr(provider, "create_async_generator"):
358 356 messages = [{"role": "user", "content": "create a variation of this image"}]
359 357 generator = None
360 358 try:
@@ -364,8 +362,7 @@ class Images:
364 362 response = chunk
365 363 break
366 364 finally:
367 if generator and hasattr(generator, 'aclose'):
368 await safe_aclose(generator)
365 await safe_aclose(generator)
369 366 elif hasattr(provider, 'create_variation'):
370 367 if asyncio.iscoroutinefunction(provider.create_variation):
371 368 response = await provider.create_variation(image, model=model, response_format=response_format, proxy=proxy, **kwargs)
@@ -454,7 +451,11 @@ class AsyncCompletions:
454 451 )
455 452 stop = [stop] if isinstance(stop, str) else stop
456 453
457 response = provider.create_completion(
454 if hasattr(provider, "create_async_generator"):
455 create_handler = provider.create_async_generator
456 else:
457 create_handler = provider.create_completion
458 response = create_handler(
458 459 model,
459 460 messages,
460 461 stream=stream,
Modified g4f/client/helper.py +2 -1
@@ -46,7 +46,8 @@ def filter_none(**kwargs) -> dict:
46 46
47 47 async def safe_aclose(generator: AsyncGenerator) -> None:
48 48 try:
49 await generator.aclose()
49 if generator and hasattr(generator, 'aclose'):
50 await generator.aclose()
50 51 except Exception as e:
51 52 logging.warning(f"Error while closing generator: {e}")
52 53