优化异步处理,避免事件循环问题并增强错误日志记录

This commit is contained in:
墨梓柒
2025-08-19 16:59:51 +08:00
parent 7a68ab0319
commit fab4656185
6 changed files with 82 additions and 26 deletions

View File

@@ -159,14 +159,23 @@ class ClientRegistry:
return decorator
def get_client_class_instance(self, api_provider: APIProvider) -> BaseClient:
def get_client_class_instance(self, api_provider: APIProvider, force_new=False) -> BaseClient:
"""
获取注册的API客户端实例
Args:
api_provider: APIProvider实例
force_new: 是否强制创建新实例(用于解决事件循环问题)
Returns:
BaseClient: 注册的API客户端实例
"""
# 如果强制创建新实例,直接创建不使用缓存
if force_new:
if client_class := self.client_registry.get(api_provider.client_type):
return client_class(api_provider)
else:
raise KeyError(f"'{api_provider.client_type}' 类型的 Client 未注册")
# 正常的缓存逻辑
if api_provider.name not in self.client_instance_cache:
if client_class := self.client_registry.get(api_provider.client_type):
self.client_instance_cache[api_provider.name] = client_class(api_provider)

View File

@@ -388,6 +388,7 @@ class OpenaiClient(BaseClient):
base_url=api_provider.base_url,
api_key=api_provider.api_key,
max_retries=0,
timeout=api_provider.timeout,
)
async def get_response(
@@ -520,6 +521,11 @@ class OpenaiClient(BaseClient):
extra_body=extra_params,
)
except APIConnectionError as e:
# 添加详细的错误信息以便调试
logger.error(f"OpenAI API连接错误嵌入模型: {str(e)}")
logger.error(f"错误类型: {type(e)}")
if hasattr(e, '__cause__') and e.__cause__:
logger.error(f"底层错误: {str(e.__cause__)}")
raise NetworkConnectionError() from e
except APIStatusError as e:
# 重封装APIError为RespNotOkException