From 0ca6af14e07ad38244a49761b7139e26308e97c9 Mon Sep 17 00:00:00 2001 From: Ace Data Cloud Dev Date: Mon, 13 Apr 2026 00:47:38 +0800 Subject: [PATCH] feat(chat): add tool-calling event support for aichat2 Update chat models and operator to support aichat2's tool-calling SSE events. This prepares the data layer for the tool-calling UI components (ToolCallBlock, ArtifactBlock, ThinkingBlock) added in PR #427. Changes: - IChatConversationResponse: add type, tool_id, tool_name, tool_display_name, input, output, is_error, duration_ms, content - IChatConversationRequest: add tools_enabled, tools_filter - chatOperator stream callback: forward all tool-calling event fields --- src/models/chat.ts | 12 ++++++++++++ src/operators/chat.ts | 12 +++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/models/chat.ts b/src/models/chat.ts index ed151c29b..a5f2589c2 100644 --- a/src/models/chat.ts +++ b/src/models/chat.ts @@ -136,12 +136,24 @@ export interface IChatConversationRequest { messages?: IChatMessage[]; action?: IChatConversationAction; model: IChatModelName; + tools_enabled?: boolean; + tools_filter?: string[]; } export interface IChatConversationResponse { answer: string; delta_answer: string; id?: string; + // aichat2 tool-calling event fields + type?: string; + tool_id?: string; + tool_name?: string; + tool_display_name?: string; + input?: Record; + output?: string; + is_error?: boolean; + duration_ms?: number; + content?: string; } export interface IChatConversationsResponse { diff --git a/src/operators/chat.ts b/src/operators/chat.ts index 8b136420c..39edcac98 100644 --- a/src/operators/chat.ts +++ b/src/operators/chat.ts @@ -79,7 +79,17 @@ class ChatOperator { options.stream({ answer: finalAnswer, delta_answer: json.delta_answer || '', - id + id, + // Forward aichat2 event types for tool-calling UI + type: json.type, + tool_id: json.tool_id, + tool_name: json.tool_name, + tool_display_name: json.tool_display_name, + input: json.input, + output: json.output, + is_error: json.is_error, + duration_ms: json.duration_ms, + content: json.content }); } } catch (err) {