From 3afdfbbb33c6f7eb70b6323c439256f349945efc Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Wed, 29 Apr 2026 11:30:07 +0800 Subject: [PATCH 1/2] fix: aws arn modelid need use actual name --- core/relay/adaptor/antling/adaptor.go | 8 +--- core/relay/adaptor/antling/adaptor_test.go | 4 +- core/relay/adaptor/aws/claude/adapter.go | 9 ++-- core/relay/adaptor/aws/claude/adapter_test.go | 46 +++++++++++++++++++ core/relay/adaptor/aws/claude/model_test.go | 32 +++++++++++++ 5 files changed, 86 insertions(+), 13 deletions(-) create mode 100644 core/relay/adaptor/aws/claude/model_test.go diff --git a/core/relay/adaptor/antling/adaptor.go b/core/relay/adaptor/antling/adaptor.go index 4e7fb87e..97606c3c 100644 --- a/core/relay/adaptor/antling/adaptor.go +++ b/core/relay/adaptor/antling/adaptor.go @@ -107,13 +107,7 @@ func (a *Adaptor) SetupRequestHeader( req.Header.Set("Anthropic-Version", anthropicVersion) if rawBetas := c.Request.Header.Get(anthropic.AnthropicBeta); rawBetas != "" { - req.Header.Set( - anthropic.AnthropicBeta, - anthropic.FixBetasStringWithModel( - anthropic.ResolveModelName(meta.OriginModel, meta.ActualModel), - rawBetas, - ), - ) + req.Header.Set(anthropic.AnthropicBeta, rawBetas) } return nil diff --git a/core/relay/adaptor/antling/adaptor_test.go b/core/relay/adaptor/antling/adaptor_test.go index 3c0af53f..c5f12326 100644 --- a/core/relay/adaptor/antling/adaptor_test.go +++ b/core/relay/adaptor/antling/adaptor_test.go @@ -91,7 +91,7 @@ func TestAntLingSetupRequestHeaderAnthropic(t *testing.T) { nil, ) ctx.Request.Header.Set("Anthropic-Version", "2023-06-01") - ctx.Request.Header.Set("Anthropic-Beta", "test-beta") + ctx.Request.Header.Set("Anthropic-Beta", "computer-use-2025-01-24") req := httptest.NewRequestWithContext( context.Background(), @@ -111,5 +111,5 @@ func TestAntLingSetupRequestHeaderAnthropic(t *testing.T) { assert.Equal(t, "Bearer test-key", req.Header.Get("Authorization")) assert.Equal(t, "test-key", req.Header.Get("X-Api-Key")) assert.Equal(t, "2023-06-01", req.Header.Get("Anthropic-Version")) - assert.Equal(t, "test-beta", req.Header.Get("Anthropic-Beta")) + assert.Equal(t, "computer-use-2025-01-24", req.Header.Get("Anthropic-Beta")) } diff --git a/core/relay/adaptor/aws/claude/adapter.go b/core/relay/adaptor/aws/claude/adapter.go index af151833..3ae28288 100644 --- a/core/relay/adaptor/aws/claude/adapter.go +++ b/core/relay/adaptor/aws/claude/adapter.go @@ -186,10 +186,7 @@ func (a *Adaptor) DoRequest( ) } - awsModelID := awsModelID( - anthropic.ResolveModelName(meta.OriginModel, meta.ActualModel), - region, - ) + awsModelID := awsModelIDFromMeta(meta, region) awsClient, err := utils.AwsClientFromMeta(meta) if err != nil { @@ -245,6 +242,10 @@ func (a *Adaptor) DoRequest( }, nil } +func awsModelIDFromMeta(meta *meta.Meta, region string) string { + return awsModelID(meta.ActualModel, region) +} + func (a *Adaptor) DoResponse( meta *meta.Meta, _ adaptor.Store, diff --git a/core/relay/adaptor/aws/claude/adapter_test.go b/core/relay/adaptor/aws/claude/adapter_test.go index 304b060b..c5106726 100644 --- a/core/relay/adaptor/aws/claude/adapter_test.go +++ b/core/relay/adaptor/aws/claude/adapter_test.go @@ -111,3 +111,49 @@ func TestHandleAnthropicRequest_PreservesLegacyThinkingForOldModels(t *testing.T require.True(t, hasOutputConfig) assert.Equal(t, "low", outputConfig["effort"]) } + +func TestHandleAnthropicRequest_ContextManagementUsesResolvedModel(t *testing.T) { + m := meta.NewMeta(nil, mode.Anthropic, "claude-sonnet-4-6", coremodel.ModelConfig{}) + m.ActualModel = "claude-opus-4-7" + + reqBody := map[string]any{ + "model": "claude-sonnet-4-6", + "max_tokens": 4096, + "messages": []map[string]any{ + {"role": "user", "content": "hello"}, + }, + "context_management": map[string]any{ + "edits": []map[string]any{ + {"type": "clear_tool_uses_20250919"}, + {"type": "unsupported"}, + }, + }, + } + + data, err := sonic.Marshal(reqBody) + require.NoError(t, err) + + req, err := http.NewRequestWithContext( + t.Context(), + http.MethodPost, + "http://localhost/v1/messages", + bytes.NewBuffer(data), + ) + require.NoError(t, err) + + adaptor := &awsa.Adaptor{} + _, err = adaptor.ConvertRequest(m, nil, req) + require.NoError(t, err) + + converted, ok := m.Get(awsa.ConvertedRequest) + require.True(t, ok) + + body, ok := converted.([]byte) + require.True(t, ok) + + var awsReq map[string]any + require.NoError(t, sonic.Unmarshal(body, &awsReq)) + + _, ok = awsReq["context_management"] + assert.False(t, ok) +} diff --git a/core/relay/adaptor/aws/claude/model_test.go b/core/relay/adaptor/aws/claude/model_test.go new file mode 100644 index 00000000..cab6cd6a --- /dev/null +++ b/core/relay/adaptor/aws/claude/model_test.go @@ -0,0 +1,32 @@ +package aws + +import ( + "testing" + + "github.com/labring/aiproxy/core/relay/meta" + "github.com/stretchr/testify/assert" +) + +func TestAWSModelIDFromMetaUsesActualModel(t *testing.T) { + m := &meta.Meta{ + OriginModel: "claude-opus-4-7", + ActualModel: "claude-3-haiku-20240307", + } + + assert.Equal( + t, + "us.anthropic.claude-3-haiku-20240307-v1:0", + awsModelIDFromMeta(m, "us-east-1"), + ) +} + +func TestAWSModelIDFromMetaPreservesActualARN(t *testing.T) { + const arn = "arn:aws:bedrock:us-east-1:123456789012:provisioned-model/test" + + m := &meta.Meta{ + OriginModel: "claude-opus-4-7", + ActualModel: arn, + } + + assert.Equal(t, arn, awsModelIDFromMeta(m, "us-east-1")) +} From b680c15abcb07722a9e317b549b1715a080e16f7 Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Wed, 29 Apr 2026 11:47:36 +0800 Subject: [PATCH 2/2] fix: ci lint --- core/relay/adaptor/aws/claude/model_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/relay/adaptor/aws/claude/model_test.go b/core/relay/adaptor/aws/claude/model_test.go index cab6cd6a..8a220e66 100644 --- a/core/relay/adaptor/aws/claude/model_test.go +++ b/core/relay/adaptor/aws/claude/model_test.go @@ -1,3 +1,4 @@ +//nolint:testpackage package aws import (