fix:尝试修复炸飞问题
This commit is contained in:
@@ -198,6 +198,7 @@ class LLM_request:
|
|||||||
headers["Accept"] = "text/event-stream"
|
headers["Accept"] = "text/event-stream"
|
||||||
|
|
||||||
async with aiohttp.ClientSession() as session:
|
async with aiohttp.ClientSession() as session:
|
||||||
|
try:
|
||||||
async with session.post(api_url, headers=headers, json=payload) as response:
|
async with session.post(api_url, headers=headers, json=payload) as response:
|
||||||
# 处理需要重试的状态码
|
# 处理需要重试的状态码
|
||||||
if response.status in policy["retry_codes"]:
|
if response.status in policy["retry_codes"]:
|
||||||
@@ -320,11 +321,36 @@ class LLM_request:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"解析流式输出错误: {str(e)}")
|
logger.exception(f"解析流式输出错误: {str(e)}")
|
||||||
except GeneratorExit:
|
except GeneratorExit:
|
||||||
logger.warning("流式输出被中断")
|
logger.warning("流式输出被中断,正在清理资源...")
|
||||||
break
|
# 确保资源被正确清理
|
||||||
|
await response.release()
|
||||||
|
# 返回已经累积的内容
|
||||||
|
result = {
|
||||||
|
"choices": [{"message": {"content": accumulated_content, "reasoning_content": reasoning_content}}],
|
||||||
|
"usage": usage,
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
response_handler(result)
|
||||||
|
if response_handler
|
||||||
|
else self._default_response_handler(result, user_id, request_type, endpoint)
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"处理流式输出时发生错误: {str(e)}")
|
logger.error(f"处理流式输出时发生错误: {str(e)}")
|
||||||
break
|
# 确保在发生错误时也能正确清理资源
|
||||||
|
try:
|
||||||
|
await response.release()
|
||||||
|
except Exception as cleanup_error:
|
||||||
|
logger.error(f"清理资源时发生错误: {cleanup_error}")
|
||||||
|
# 返回已经累积的内容
|
||||||
|
result = {
|
||||||
|
"choices": [{"message": {"content": accumulated_content, "reasoning_content": reasoning_content}}],
|
||||||
|
"usage": usage,
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
response_handler(result)
|
||||||
|
if response_handler
|
||||||
|
else self._default_response_handler(result, user_id, request_type, endpoint)
|
||||||
|
)
|
||||||
content = accumulated_content
|
content = accumulated_content
|
||||||
think_match = re.search(r"<think>(.*?)</think>", content, re.DOTALL)
|
think_match = re.search(r"<think>(.*?)</think>", content, re.DOTALL)
|
||||||
if think_match:
|
if think_match:
|
||||||
@@ -349,6 +375,19 @@ class LLM_request:
|
|||||||
else self._default_response_handler(result, user_id, request_type, endpoint)
|
else self._default_response_handler(result, user_id, request_type, endpoint)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
except (aiohttp.ClientError, asyncio.TimeoutError) as e:
|
||||||
|
if retry < policy["max_retries"] - 1:
|
||||||
|
wait_time = policy["base_wait"] * (2**retry)
|
||||||
|
logger.error(f"网络错误,等待{wait_time}秒后重试... 错误: {str(e)}")
|
||||||
|
await asyncio.sleep(wait_time)
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
logger.critical(f"网络错误达到最大重试次数: {str(e)}")
|
||||||
|
raise RuntimeError(f"网络请求失败: {str(e)}") from e
|
||||||
|
except Exception as e:
|
||||||
|
logger.critical(f"未预期的错误: {str(e)}")
|
||||||
|
raise RuntimeError(f"请求过程中发生错误: {str(e)}") from e
|
||||||
|
|
||||||
except aiohttp.ClientResponseError as e:
|
except aiohttp.ClientResponseError as e:
|
||||||
# 处理aiohttp抛出的响应错误
|
# 处理aiohttp抛出的响应错误
|
||||||
if retry < policy["max_retries"] - 1:
|
if retry < policy["max_retries"] - 1:
|
||||||
|
|||||||
Reference in New Issue
Block a user