on main help sign in
Merge pull request #21 from adamdottv/adam/anthropic-empty-messages
b8383f5Kujtim Hoxha
internal/llm/provider/anthropic.go+8−5
@@ -258,10 +258,10 @@ func (a *anthropicProvider) convertToAnthropicTools(tools []tools.BaseTool) []an
258}
258}
259
259
260func (a *anthropicProvider) convertToAnthropicMessages(messages []message.Message) []anthropic.MessageParam {
260func (a *anthropicProvider) convertToAnthropicMessages(messages []message.Message) []anthropic.MessageParam {
261− anthropicMessages := make([]anthropic.MessageParam, len(messages))
261+ anthropicMessages := make([]anthropic.MessageParam, 0, len(messages))
262 cachedBlocks := 0
262 cachedBlocks := 0
263
263
264− for i, msg := range messages {
264+ for _, msg := range messages {
265 switch msg.Role {
265 switch msg.Role {
266 case message.User:
266 case message.User:
267 content := anthropic.NewTextBlock(msg.Content().String())
267 content := anthropic.NewTextBlock(msg.Content().String())
@@ -271,7 +271,7 @@ func (a *anthropicProvider) convertToAnthropicMessages(messages []message.Messag
271 }
271 }
272 cachedBlocks++
272 cachedBlocks++
273 }
273 }
274− anthropicMessages[i] = anthropic.NewUserMessage(content)
274+ anthropicMessages = append(anthropicMessages, anthropic.NewUserMessage(content))
275
275
276 case message.Assistant:
276 case message.Assistant:
277 blocks := []anthropic.ContentBlockParamUnion{}
277 blocks := []anthropic.ContentBlockParamUnion{}
@@ -295,14 +295,17 @@ func (a *anthropicProvider) convertToAnthropicMessages(messages []message.Messag
295 blocks = append(blocks, anthropic.ContentBlockParamOfRequestToolUseBlock(toolCall.ID, inputMap, toolCall.Name))
295 blocks = append(blocks, anthropic.ContentBlockParamOfRequestToolUseBlock(toolCall.ID, inputMap, toolCall.Name))
296 }
296 }
297
297
298+ // Skip empty assistant messages completely
299+ if len(blocks) > 0 {
298− anthropicMessages[i] = anthropic.NewAssistantMessage(blocks...)
300+ anthropicMessages = append(anthropicMessages, anthropic.NewAssistantMessage(blocks...))
301+ }
299
302
300 case message.Tool:
303 case message.Tool:
301 results := make([]anthropic.ContentBlockParamUnion, len(msg.ToolResults()))
304 results := make([]anthropic.ContentBlockParamUnion, len(msg.ToolResults()))
302 for i, toolResult := range msg.ToolResults() {
305 for i, toolResult := range msg.ToolResults() {
303 results[i] = anthropic.NewToolResultBlock(toolResult.ToolCallID, toolResult.Content, toolResult.IsError)
306 results[i] = anthropic.NewToolResultBlock(toolResult.ToolCallID, toolResult.Content, toolResult.IsError)
304 }
307 }
305− anthropicMessages[i] = anthropic.NewUserMessage(results...)
308+ anthropicMessages = append(anthropicMessages, anthropic.NewUserMessage(results...))
306 }
309 }
307 }
310 }
308
311