Commit ac090aa
Changed files (3)
src/llm/gpt.py
@@ -107,7 +107,7 @@ async def gpt_response(client: Client, message: Message, *, gpt_stream: bool = G
kwargs["progress"] = status_msg
if context_type.get("error"):
logger.warning(context_type["error"])
- await modify_progress(message=status_msg, text=context_type["error"], force_update=True, **kwargs)
+ await modify_progress(message=status_msg, text=f"{msg}\n{context_type['error']}", force_update=True, **kwargs)
config, response = await merge_tools_response(config, **kwargs)
# skip send a new request if tool_model is the same as the current model
if response and config["completions"]["model"] == GPT.TOOLS_MODEL and response.get("content"):
src/llm/models.py
@@ -23,7 +23,7 @@ def get_context_type(conversations: list[Message]) -> dict:
if info["mtype"] == "audio":
has_audio = True
if has_audio or has_video:
- res["error"] = f"⚠️暂不支持视频/音频模型, 已忽略上下文中的视频/音频消息\n可以先用 `{PREFIX.ASR}` 命令转为文字后再使用 `{PREFIX.GPT}`"
+ res["error"] = f"⚠️已忽略上下文中的视频/音频消息\n可以先用 `{PREFIX.ASR}` 命令转为文字后再使用 `{PREFIX.GPT}`"
return res
src/llm/response_stream.py
@@ -116,14 +116,15 @@ async def parse_error(resp: dict, retry: int, **kwargs) -> dict:
"""Parse GPT error.
Returns:
- {"error": bool, "retry": bool}
+ {"error": "msg", "retry": bool}
"""
- error_result = {"error": False, "retry": False}
+ error_result = {"error": "", "retry": False}
error_code = glom(resp, "error.code", default=0)
error_msg = ""
content = None
reasoning_content = None
is_finished = False
+ finish_reason = ""
tool_call = {}
with contextlib.suppress(Exception):
metadata = glom(resp, "error.metadata.raw", default="{}")
@@ -132,13 +133,16 @@ async def parse_error(resp: dict, retry: int, **kwargs) -> dict:
content = glom(choice, "delta.content", default=None)
reasoning_content = glom(choice, "delta.reasoning_content", default=None)
tool_call = glom(choice, "delta.tool_calls.0", default=None)
- is_finished = glom(choice, "finish_reason", default="") == "stop"
+ finish_reason = glom(choice, "finish_reason", default=None)
+ is_finished = str(finish_reason) == "stop"
if is_finished or any(x is not None for x in [content, reasoning_content, tool_call]):
- return {"error": False, "retry": False}
+ return {"error": "", "retry": False}
if error_code != 0:
logger.warning(resp)
- error_result["error"] = True
+ error_result["error"] = error_msg
await modify_progress(text=f"[{error_code}] {error_msg}\n重试次数: {retry + 1}/{GPT.MAX_RETRY + 1}", force_update=True, **kwargs)
if retry < GPT.MAX_RETRY:
error_result["retry"] = True
+ if finish_reason is not None:
+ error_result["error"] = finish_reason
return error_result