@@ -93,8 +93,7 @@ func (a *anthropicClient) convertMessages(messages []message.Message) (anthropic
9393 }
9494
9595 if len (blocks ) == 0 {
96- logging .Warn ("There is a message without content, investigate" )
97- // This should never happend but we log this because we might have a bug in our cleanup method
96+ logging .Warn ("There is a message without content, investigate, this should not happen" )
9897 continue
9998 }
10099 anthropicMessages = append (anthropicMessages , anthropic .NewAssistantMessage (blocks ... ))
@@ -196,8 +195,8 @@ func (a *anthropicClient) send(ctx context.Context, messages []message.Message,
196195 preparedMessages := a .preparedMessages (a .convertMessages (messages ), a .convertTools (tools ))
197196 cfg := config .Get ()
198197 if cfg .Debug {
199- jsonData , _ := json .Marshal (preparedMessages )
200- logging .Debug ("Prepared messages" , "messages" , string (jsonData ))
198+ // jsonData, _ := json.Marshal(preparedMessages)
199+ // logging.Debug("Prepared messages", "messages", string(jsonData))
201200 }
202201 attempts := 0
203202 for {
@@ -243,8 +242,8 @@ func (a *anthropicClient) stream(ctx context.Context, messages []message.Message
243242 preparedMessages := a .preparedMessages (a .convertMessages (messages ), a .convertTools (tools ))
244243 cfg := config .Get ()
245244 if cfg .Debug {
246- jsonData , _ := json .Marshal (preparedMessages )
247- logging .Debug ("Prepared messages" , "messages" , string (jsonData ))
245+ // jsonData, _ := json.Marshal(preparedMessages)
246+ // logging.Debug("Prepared messages", "messages", string(jsonData))
248247 }
249248 attempts := 0
250249 eventChan := make (chan ProviderEvent )
@@ -257,6 +256,7 @@ func (a *anthropicClient) stream(ctx context.Context, messages []message.Message
257256 )
258257 accumulatedMessage := anthropic.Message {}
259258
259+ currentToolCallID := ""
260260 for anthropicStream .Next () {
261261 event := anthropicStream .Current ()
262262 err := accumulatedMessage .Accumulate (event )
@@ -267,7 +267,19 @@ func (a *anthropicClient) stream(ctx context.Context, messages []message.Message
267267
268268 switch event := event .AsAny ().(type ) {
269269 case anthropic.ContentBlockStartEvent :
270- eventChan <- ProviderEvent {Type : EventContentStart }
270+ if event .ContentBlock .Type == "text" {
271+ eventChan <- ProviderEvent {Type : EventContentStart }
272+ } else if event .ContentBlock .Type == "tool_use" {
273+ currentToolCallID = event .ContentBlock .ID
274+ eventChan <- ProviderEvent {
275+ Type : EventToolUseStart ,
276+ ToolCall : & message.ToolCall {
277+ ID : event .ContentBlock .ID ,
278+ Name : event .ContentBlock .Name ,
279+ Finished : false ,
280+ },
281+ }
282+ }
271283
272284 case anthropic.ContentBlockDeltaEvent :
273285 if event .Delta .Type == "thinking_delta" && event .Delta .Thinking != "" {
@@ -280,11 +292,30 @@ func (a *anthropicClient) stream(ctx context.Context, messages []message.Message
280292 Type : EventContentDelta ,
281293 Content : event .Delta .Text ,
282294 }
295+ } else if event .Delta .Type == "input_json_delta" {
296+ if currentToolCallID != "" {
297+ eventChan <- ProviderEvent {
298+ Type : EventToolUseDelta ,
299+ ToolCall : & message.ToolCall {
300+ ID : currentToolCallID ,
301+ Finished : false ,
302+ Input : event .Delta .JSON .PartialJSON .Raw (),
303+ },
304+ }
305+ }
283306 }
284- // TODO: check if we can somehow stream tool calls
285-
286307 case anthropic.ContentBlockStopEvent :
287- eventChan <- ProviderEvent {Type : EventContentStop }
308+ if currentToolCallID != "" {
309+ eventChan <- ProviderEvent {
310+ Type : EventToolUseStop ,
311+ ToolCall : & message.ToolCall {
312+ ID : currentToolCallID ,
313+ },
314+ }
315+ currentToolCallID = ""
316+ } else {
317+ eventChan <- ProviderEvent {Type : EventContentStop }
318+ }
288319
289320 case anthropic.MessageStopEvent :
290321 content := ""
@@ -378,10 +409,11 @@ func (a *anthropicClient) toolCalls(msg anthropic.Message) []message.ToolCall {
378409 switch variant := block .AsAny ().(type ) {
379410 case anthropic.ToolUseBlock :
380411 toolCall := message.ToolCall {
381- ID : variant .ID ,
382- Name : variant .Name ,
383- Input : string (variant .Input ),
384- Type : string (variant .Type ),
412+ ID : variant .ID ,
413+ Name : variant .Name ,
414+ Input : string (variant .Input ),
415+ Type : string (variant .Type ),
416+ Finished : true ,
385417 }
386418 toolCalls = append (toolCalls , toolCall )
387419 }
0 commit comments