@@ -197,6 +197,41 @@ func GetChatUsage(chat *uctypes.AIChat) uctypes.AIUsage {
197197 return usage
198198}
199199
200+ func processToolResults (stopReason * uctypes.WaveStopReason , chatOpts uctypes.WaveChatOpts , sseHandler * sse.SSEHandlerCh ) {
201+ var toolResults []uctypes.AIToolResult
202+ for _ , toolCall := range stopReason .ToolCalls {
203+ inputJSON , _ := json .Marshal (toolCall .Input )
204+ log .Printf ("TOOLUSE name=%s id=%s input=%s\n " , toolCall .Name , toolCall .ID , utilfn .TruncateString (string (inputJSON ), 40 ))
205+ result := ResolveToolCall (toolCall , chatOpts )
206+ toolResults = append (toolResults , result )
207+ if result .ErrorText != "" {
208+ log .Printf (" error=%s\n " , result .ErrorText )
209+ } else {
210+ log .Printf (" result=%s\n " , utilfn .TruncateString (result .Text , 40 ))
211+ }
212+ }
213+
214+ if chatOpts .Config .APIType == APIType_OpenAI {
215+ toolResultMsgs , err := openai .ConvertToolResultsToOpenAIChatMessage (toolResults )
216+ if err != nil {
217+ _ = sseHandler .AiMsgError (fmt .Sprintf ("Failed to convert tool results to OpenAI messages: %v" , err ))
218+ _ = sseHandler .AiMsgFinish ("" , nil )
219+ } else {
220+ for _ , msg := range toolResultMsgs {
221+ chatstore .DefaultChatStore .PostMessage (chatOpts .ChatId , & chatOpts .Config , msg )
222+ }
223+ }
224+ } else {
225+ toolResultMsg , err := anthropic .ConvertToolResultsToAnthropicChatMessage (toolResults )
226+ if err != nil {
227+ _ = sseHandler .AiMsgError (fmt .Sprintf ("Failed to convert tool results to Anthropic message: %v" , err ))
228+ _ = sseHandler .AiMsgFinish ("" , nil )
229+ } else {
230+ chatstore .DefaultChatStore .PostMessage (chatOpts .ChatId , & chatOpts .Config , toolResultMsg )
231+ }
232+ }
233+ }
234+
200235func RunAIChat (ctx context.Context , sseHandler * sse.SSEHandlerCh , chatOpts uctypes.WaveChatOpts ) error {
201236 log .Printf ("RunAIChat\n " )
202237 firstStep := true
@@ -239,39 +274,7 @@ func RunAIChat(ctx context.Context, sseHandler *sse.SSEHandlerCh, chatOpts uctyp
239274 continue
240275 }
241276 if stopReason != nil && stopReason .Kind == uctypes .StopKindToolUse {
242- var toolResults []uctypes.AIToolResult
243- for _ , toolCall := range stopReason .ToolCalls {
244- inputJSON , _ := json .Marshal (toolCall .Input )
245- log .Printf ("TOOLUSE name=%s id=%s input=%s\n " , toolCall .Name , toolCall .ID , utilfn .TruncateString (string (inputJSON ), 40 ))
246- result := ResolveToolCall (toolCall , chatOpts )
247- toolResults = append (toolResults , result )
248- if result .ErrorText != "" {
249- log .Printf (" error=%s\n " , result .ErrorText )
250- } else {
251- log .Printf (" result=%s\n " , utilfn .TruncateString (result .Text , 40 ))
252- }
253- }
254-
255- // Convert tool results to messages and post to chat store
256- if chatOpts .Config .APIType == APIType_OpenAI {
257- toolResultMsgs , err := openai .ConvertToolResultsToOpenAIChatMessage (toolResults )
258- if err != nil {
259- _ = sseHandler .AiMsgError (fmt .Sprintf ("Failed to convert tool results to OpenAI messages: %v" , err ))
260- _ = sseHandler .AiMsgFinish ("" , nil )
261- } else {
262- for _ , msg := range toolResultMsgs {
263- chatstore .DefaultChatStore .PostMessage (chatOpts .ChatId , & chatOpts .Config , msg )
264- }
265- }
266- } else {
267- toolResultMsg , err := anthropic .ConvertToolResultsToAnthropicChatMessage (toolResults )
268- if err != nil {
269- _ = sseHandler .AiMsgError (fmt .Sprintf ("Failed to convert tool results to Anthropic message: %v" , err ))
270- _ = sseHandler .AiMsgFinish ("" , nil )
271- } else {
272- chatstore .DefaultChatStore .PostMessage (chatOpts .ChatId , & chatOpts .Config , toolResultMsg )
273- }
274- }
277+ processToolResults (stopReason , chatOpts , sseHandler )
275278
276279 var messageID string
277280 if len (rtnMessage ) > 0 && rtnMessage [0 ] != nil {
0 commit comments