diff --git a/jingrow/ai/api/chat.py b/jingrow/ai/api/chat.py index de05777ae..ab22208ab 100644 --- a/jingrow/ai/api/chat.py +++ b/jingrow/ai/api/chat.py @@ -42,28 +42,17 @@ def _summarize_tool_result(result: dict) -> str: return text -def _get_tool_label(tool_name: str) -> str: - """根据工具名称返回 label(前端友好显示名),用于前端展示""" - try: - tool = ToolRegistry.get(tool_name) - if tool and tool.label: - return tool.label - except Exception: - pass - return tool_name - - -def _get_tool_icon(tool_name: str) -> tuple[str, str]: - """根据工具名称返回 (icon, color),透传 JSON 配置值 +def _get_tool_meta(tool_name: str) -> tuple[str, str, str]: + """根据工具名称返回 (label, icon, color),透传 JSON 配置值 Returns: - (icon, color) 二元组,如 ("tabler:search", "#3b82f6") + (label, icon, color) 三元组,如 ("Create Record", "tabler:plus", "#10b981") """ - default = ("", "") + default = ("", "", "") try: tool = ToolRegistry.get(tool_name) if tool: - return (tool.icon or "", tool.color or "") + return (tool.label or tool_name, tool.icon or "", tool.color or "") except Exception: pass return default @@ -249,19 +238,19 @@ def chat_stream_sse(chat_name, content, file_record_names=None): for tc in tool_calls_this_round: # ----- 实时 Tool Call SSE: begin ----- - tc_icon, tc_color = _get_tool_icon(tc["name"]) + tc_label, tc_icon, tc_color = _get_tool_meta(tc["name"]) begin_data = { "id": tc["id"], "name": tc["name"], - "label": _get_tool_label(tc["name"]), + "label": tc_label, "arguments": tc.get("arguments", "{}"), "icon": tc_icon, "color": tc_color, } yield sse_event("tool_call_begin", begin_data) - + result = ToolRegistry.execute_fc(tc["name"], tc["arguments"]) - + # ----- 实时 Tool Call SSE: result ----- success = result.get("success", False) yield sse_event("tool_call_result", { @@ -270,18 +259,18 @@ def chat_stream_sse(chat_name, content, file_record_names=None): "success": success, "summary": _summarize_tool_result(result), }) - + current_messages.append({ "role": "tool", "tool_call_id": tc["id"], "content": json.dumps(result, ensure_ascii=False), }) - + # 累积 tool call 到持久化列表 all_tool_calls.append({ "id": tc["id"], "name": tc["name"], - "label": _get_tool_label(tc["name"]), + "label": tc_label, "icon": tc_icon, "color": tc_color, "status": "completed" if success else "failed",