Skip to content

Commit f644ad6

Browse files
committed
Raise Bedrock translator patch coverage
Codecov flagged the PR because the new Bedrock RequestBody branch left one real error path uncovered and one assistant error path that the code could never reach. The user-message image error is now covered directly, and assistant conversion no longer advertises an impossible error return. Constraint: PR envoyproxy#2237 is blocked by Codecov patch coverage on internal/translator/anthropic_awsbedrock.go Rejected: Add a synthetic assistant error test | convertAssistantMessage cannot currently fail, so such a test would require artificial production behavior Confidence: high Scope-risk: narrow Directive: Do not reintroduce an error return for assistant conversion unless a real assistant block conversion can fail Tested: go test ./internal/translator -coverprofile=/tmp/translator.after.cover Tested: go test ./internal/translator -run 'TestAnthropicToAWSBedrockTranslator_RequestBody_(ToolResultMessages|ToolResultMessagesWithSystemMessages|SingleToolResultNotCoalesced|UnexpectedRole|UserArrayContent|UserArrayContentError|AssistantMessage)' -count=1 Tested: go vet ./internal/translator Tested: make lint Not-tested: go test ./... failed locally because port 6060 is occupied by amass, Docker Hub CRD fetch timed out, required e2e Docker image is missing, and Ollama model qwen3:1.7b is unavailable
1 parent 0db1e84 commit f644ad6

2 files changed

Lines changed: 37 additions & 8 deletions

File tree

internal/translator/anthropic_awsbedrock.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,7 @@ func (a *anthropicToAWSBedrockTranslator) RequestBody(_ []byte, body *anthropics
9797
}
9898
i++
9999
case anthropicschema.MessageRoleAssistant:
100-
bedrockMsg, convErr := a.convertAssistantMessage(msg)
101-
if convErr != nil {
102-
return nil, nil, convErr
103-
}
104-
bedrockReq.Messages = append(bedrockReq.Messages, bedrockMsg)
100+
bedrockReq.Messages = append(bedrockReq.Messages, a.convertAssistantMessage(msg))
105101
i++
106102
default:
107103
return nil, nil, fmt.Errorf("%w: unexpected role: %s", internalapi.ErrInvalidRequestBody, msg.Role)
@@ -233,13 +229,13 @@ func (a *anthropicToAWSBedrockTranslator) convertUserMessage(msg *anthropicschem
233229
return bedrockMsg, nil
234230
}
235231

236-
func (a *anthropicToAWSBedrockTranslator) convertAssistantMessage(msg *anthropicschema.MessageParam) (*awsbedrock.Message, error) {
232+
func (a *anthropicToAWSBedrockTranslator) convertAssistantMessage(msg *anthropicschema.MessageParam) *awsbedrock.Message {
237233
bedrockMsg := &awsbedrock.Message{Role: awsbedrock.ConversationRoleAssistant}
238234
if msg.Content.Text != "" {
239235
bedrockMsg.Content = []*awsbedrock.ContentBlock{
240236
{Text: ptr.To(msg.Content.Text)},
241237
}
242-
return bedrockMsg, nil
238+
return bedrockMsg
243239
}
244240
bedrockMsg.Content = make([]*awsbedrock.ContentBlock, 0, len(msg.Content.Array))
245241
for i := range msg.Content.Array {
@@ -274,7 +270,7 @@ func (a *anthropicToAWSBedrockTranslator) convertAssistantMessage(msg *anthropic
274270
})
275271
}
276272
}
277-
return bedrockMsg, nil
273+
return bedrockMsg
278274
}
279275

280276
func (a *anthropicToAWSBedrockTranslator) convertToolResultMessage(msg *anthropicschema.MessageParam) *awsbedrock.Message {

internal/translator/anthropic_awsbedrock_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -955,6 +955,39 @@ func TestAnthropicToAWSBedrockTranslator_RequestBody_UserArrayContent(t *testing
955955
assert.Equal(t, []string{"END", "STOP"}, bedrockReq.InferenceConfig.StopSequences)
956956
}
957957

958+
func TestAnthropicToAWSBedrockTranslator_RequestBody_UserArrayContentError(t *testing.T) {
959+
translator := NewAnthropicToAWSBedrockTranslator("")
960+
req := &anthropicschema.MessagesRequest{
961+
Model: "test-model",
962+
MaxTokens: 100,
963+
Messages: []anthropicschema.MessageParam{
964+
{
965+
Role: anthropicschema.MessageRoleUser,
966+
Content: anthropicschema.MessageContent{
967+
Array: []anthropicschema.ContentBlockParam{
968+
{Image: &anthropicschema.ImageBlockParam{
969+
Type: "image",
970+
Source: anthropicschema.ImageSource{
971+
Base64: &anthropicschema.Base64ImageSource{
972+
Type: "base64",
973+
MediaType: "application/pdf",
974+
Data: "not-used",
975+
},
976+
},
977+
}},
978+
},
979+
},
980+
},
981+
},
982+
}
983+
rawBody, err := json.Marshal(req)
984+
require.NoError(t, err)
985+
986+
_, _, err = translator.RequestBody(rawBody, req, false)
987+
require.Error(t, err)
988+
assert.Contains(t, err.Error(), "unsupported image format application/pdf")
989+
}
990+
958991
func TestAnthropicToAWSBedrockTranslator_RequestBody_ToolResultMessages(t *testing.T) {
959992
translator := NewAnthropicToAWSBedrockTranslator("")
960993
req := &anthropicschema.MessagesRequest{

0 commit comments

Comments
 (0)