@@ -258,10 +258,10 @@ func (a *anthropicProvider) convertToAnthropicTools(tools []tools.BaseTool) []an
258258}
259259
260260func (a *anthropicProvider) convertToAnthropicMessages(messages []message.Message) []anthropic.MessageParam {
261− anthropicMessages := make([]anthropic.MessageParam, len(messages))
261+ anthropicMessages := make([]anthropic.MessageParam, 0, len(messages))
262262 cachedBlocks := 0
263263
264− for i, msg := range messages {
264+ for _, msg := range messages {
265265 switch msg.Role {
266266 case message.User:
267267 content := anthropic.NewTextBlock(msg.Content().String())
@@ -271,7 +271,7 @@ func (a *anthropicProvider) convertToAnthropicMessages(messages []message.Messag
271271 }
272272 cachedBlocks++
273273 }
274− anthropicMessages[i] = anthropic.NewUserMessage(content)
274+ anthropicMessages = append(anthropicMessages, anthropic.NewUserMessage(content))
275275
276276 case message.Assistant:
277277 blocks := []anthropic.ContentBlockParamUnion{}
@@ -295,14 +295,17 @@ func (a *anthropicProvider) convertToAnthropicMessages(messages []message.Messag
295295 blocks = append(blocks, anthropic.ContentBlockParamOfRequestToolUseBlock(toolCall.ID, inputMap, toolCall.Name))
296296 }
297297
298− anthropicMessages[i] = anthropic.NewAssistantMessage(blocks...)
298+ // Skip empty assistant messages completely
299+ if len(blocks) > 0 {
300+ anthropicMessages = append(anthropicMessages, anthropic.NewAssistantMessage(blocks...))
301+ }
299302
300303 case message.Tool:
301304 results := make([]anthropic.ContentBlockParamUnion, len(msg.ToolResults()))
302305 for i, toolResult := range msg.ToolResults() {
303306 results[i] = anthropic.NewToolResultBlock(toolResult.ToolCallID, toolResult.Content, toolResult.IsError)
304307 }
305− anthropicMessages[i] = anthropic.NewUserMessage(results...)
308+ anthropicMessages = append(anthropicMessages, anthropic.NewUserMessage(results...))
306309 }
307310 }
308311