diff --git a/go/adk/pkg/models/anthropic_adk.go b/go/adk/pkg/models/anthropic_adk.go index 85234d3359..92353a496b 100644 --- a/go/adk/pkg/models/anthropic_adk.go +++ b/go/adk/pkg/models/anthropic_adk.go @@ -259,7 +259,6 @@ func genaiContentsToAnthropicMessages(contents []*genai.Content, config *genai.G Content: toolResultBlocks, }) } else { - // Regular user message var contentBlocks []anthropic.ContentBlockParamUnion // Add images first @@ -272,9 +271,13 @@ func genaiContentsToAnthropicMessages(contents []*genai.Content, config *genai.G contentBlocks = append(contentBlocks, anthropic.NewTextBlock(strings.Join(textParts, "\n"))) } + msgRole := anthropic.MessageParamRoleUser + if role == "model" || role == "assistant" { + msgRole = anthropic.MessageParamRoleAssistant + } if len(contentBlocks) > 0 { messages = append(messages, anthropic.MessageParam{ - Role: anthropic.MessageParamRoleUser, + Role: msgRole, Content: contentBlocks, }) } diff --git a/go/adk/pkg/models/anthropic_adk_test.go b/go/adk/pkg/models/anthropic_adk_test.go index 7c8de5b21d..7f786e5833 100644 --- a/go/adk/pkg/models/anthropic_adk_test.go +++ b/go/adk/pkg/models/anthropic_adk_test.go @@ -171,6 +171,23 @@ func TestAnthropicUsageToGenai(t *testing.T) { } } +func TestGenaiContentsToAnthropicMessagesKeepsAssistantTextRole(t *testing.T) { + contents := []*genai.Content{ + {Role: "user", Parts: []*genai.Part{{Text: "hi"}}}, + {Role: "model", Parts: []*genai.Part{{Text: "hello, how can I help?"}}}, + {Role: "user", Parts: []*genai.Part{{Text: "list the pods"}}}, + {Role: "assistant", Parts: []*genai.Part{{Text: "there are no pods"}}}, + } + + messages, _ := genaiContentsToAnthropicMessages(contents, nil) + + require.Len(t, messages, 4) + assert.Equal(t, anthropic.MessageParamRoleUser, messages[0].Role) + assert.Equal(t, anthropic.MessageParamRoleAssistant, messages[1].Role) + assert.Equal(t, anthropic.MessageParamRoleUser, messages[2].Role) + assert.Equal(t, anthropic.MessageParamRoleAssistant, messages[3].Role) +} + // anthropicTestServer serves canned Messages API responses and records the // request body the SDK sent. func anthropicTestServer(t *testing.T, handler func(w http.ResponseWriter)) (*AnthropicModel, *[]byte) {