Merge pull request #21 from adamdottv/adam/anthropic-empty-messages

Kujtim Hoxha created

Change summary

internal/llm/provider/anthropic.go | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)

Detailed changes

internal/llm/provider/anthropic.go 🔗

@@ -258,10 +258,10 @@ func (a *anthropicProvider) convertToAnthropicTools(tools []tools.BaseTool) []an
 }
 
 func (a *anthropicProvider) convertToAnthropicMessages(messages []message.Message) []anthropic.MessageParam {
-	anthropicMessages := make([]anthropic.MessageParam, len(messages))
+	anthropicMessages := make([]anthropic.MessageParam, 0, len(messages))
 	cachedBlocks := 0
 
-	for i, msg := range messages {
+	for _, msg := range messages {
 		switch msg.Role {
 		case message.User:
 			content := anthropic.NewTextBlock(msg.Content().String())
@@ -271,7 +271,7 @@ func (a *anthropicProvider) convertToAnthropicMessages(messages []message.Messag
 				}
 				cachedBlocks++
 			}
-			anthropicMessages[i] = anthropic.NewUserMessage(content)
+			anthropicMessages = append(anthropicMessages, anthropic.NewUserMessage(content))
 
 		case message.Assistant:
 			blocks := []anthropic.ContentBlockParamUnion{}
@@ -295,14 +295,17 @@ func (a *anthropicProvider) convertToAnthropicMessages(messages []message.Messag
 				blocks = append(blocks, anthropic.ContentBlockParamOfRequestToolUseBlock(toolCall.ID, inputMap, toolCall.Name))
 			}
 
-			anthropicMessages[i] = anthropic.NewAssistantMessage(blocks...)
+			// Skip empty assistant messages completely
+			if len(blocks) > 0 {
+				anthropicMessages = append(anthropicMessages, anthropic.NewAssistantMessage(blocks...))
+			}
 
 		case message.Tool:
 			results := make([]anthropic.ContentBlockParamUnion, len(msg.ToolResults()))
 			for i, toolResult := range msg.ToolResults() {
 				results[i] = anthropic.NewToolResultBlock(toolResult.ToolCallID, toolResult.Content, toolResult.IsError)
 			}
-			anthropicMessages[i] = anthropic.NewUserMessage(results...)
+			anthropicMessages = append(anthropicMessages, anthropic.NewUserMessage(results...))
 		}
 	}