Skip to content

Commit 3afdfbb

Browse files
committed
fix: aws arn modelid need use actual name
1 parent ab2c8d0 commit 3afdfbb

5 files changed

Lines changed: 86 additions & 13 deletions

File tree

core/relay/adaptor/antling/adaptor.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,7 @@ func (a *Adaptor) SetupRequestHeader(
107107
req.Header.Set("Anthropic-Version", anthropicVersion)
108108

109109
if rawBetas := c.Request.Header.Get(anthropic.AnthropicBeta); rawBetas != "" {
110-
req.Header.Set(
111-
anthropic.AnthropicBeta,
112-
anthropic.FixBetasStringWithModel(
113-
anthropic.ResolveModelName(meta.OriginModel, meta.ActualModel),
114-
rawBetas,
115-
),
116-
)
110+
req.Header.Set(anthropic.AnthropicBeta, rawBetas)
117111
}
118112

119113
return nil

core/relay/adaptor/antling/adaptor_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func TestAntLingSetupRequestHeaderAnthropic(t *testing.T) {
9191
nil,
9292
)
9393
ctx.Request.Header.Set("Anthropic-Version", "2023-06-01")
94-
ctx.Request.Header.Set("Anthropic-Beta", "test-beta")
94+
ctx.Request.Header.Set("Anthropic-Beta", "computer-use-2025-01-24")
9595

9696
req := httptest.NewRequestWithContext(
9797
context.Background(),
@@ -111,5 +111,5 @@ func TestAntLingSetupRequestHeaderAnthropic(t *testing.T) {
111111
assert.Equal(t, "Bearer test-key", req.Header.Get("Authorization"))
112112
assert.Equal(t, "test-key", req.Header.Get("X-Api-Key"))
113113
assert.Equal(t, "2023-06-01", req.Header.Get("Anthropic-Version"))
114-
assert.Equal(t, "test-beta", req.Header.Get("Anthropic-Beta"))
114+
assert.Equal(t, "computer-use-2025-01-24", req.Header.Get("Anthropic-Beta"))
115115
}

core/relay/adaptor/aws/claude/adapter.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,7 @@ func (a *Adaptor) DoRequest(
186186
)
187187
}
188188

189-
awsModelID := awsModelID(
190-
anthropic.ResolveModelName(meta.OriginModel, meta.ActualModel),
191-
region,
192-
)
189+
awsModelID := awsModelIDFromMeta(meta, region)
193190

194191
awsClient, err := utils.AwsClientFromMeta(meta)
195192
if err != nil {
@@ -245,6 +242,10 @@ func (a *Adaptor) DoRequest(
245242
}, nil
246243
}
247244

245+
func awsModelIDFromMeta(meta *meta.Meta, region string) string {
246+
return awsModelID(meta.ActualModel, region)
247+
}
248+
248249
func (a *Adaptor) DoResponse(
249250
meta *meta.Meta,
250251
_ adaptor.Store,

core/relay/adaptor/aws/claude/adapter_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,49 @@ func TestHandleAnthropicRequest_PreservesLegacyThinkingForOldModels(t *testing.T
111111
require.True(t, hasOutputConfig)
112112
assert.Equal(t, "low", outputConfig["effort"])
113113
}
114+
115+
func TestHandleAnthropicRequest_ContextManagementUsesResolvedModel(t *testing.T) {
116+
m := meta.NewMeta(nil, mode.Anthropic, "claude-sonnet-4-6", coremodel.ModelConfig{})
117+
m.ActualModel = "claude-opus-4-7"
118+
119+
reqBody := map[string]any{
120+
"model": "claude-sonnet-4-6",
121+
"max_tokens": 4096,
122+
"messages": []map[string]any{
123+
{"role": "user", "content": "hello"},
124+
},
125+
"context_management": map[string]any{
126+
"edits": []map[string]any{
127+
{"type": "clear_tool_uses_20250919"},
128+
{"type": "unsupported"},
129+
},
130+
},
131+
}
132+
133+
data, err := sonic.Marshal(reqBody)
134+
require.NoError(t, err)
135+
136+
req, err := http.NewRequestWithContext(
137+
t.Context(),
138+
http.MethodPost,
139+
"http://localhost/v1/messages",
140+
bytes.NewBuffer(data),
141+
)
142+
require.NoError(t, err)
143+
144+
adaptor := &awsa.Adaptor{}
145+
_, err = adaptor.ConvertRequest(m, nil, req)
146+
require.NoError(t, err)
147+
148+
converted, ok := m.Get(awsa.ConvertedRequest)
149+
require.True(t, ok)
150+
151+
body, ok := converted.([]byte)
152+
require.True(t, ok)
153+
154+
var awsReq map[string]any
155+
require.NoError(t, sonic.Unmarshal(body, &awsReq))
156+
157+
_, ok = awsReq["context_management"]
158+
assert.False(t, ok)
159+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package aws
2+
3+
import (
4+
"testing"
5+
6+
"github.com/labring/aiproxy/core/relay/meta"
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestAWSModelIDFromMetaUsesActualModel(t *testing.T) {
11+
m := &meta.Meta{
12+
OriginModel: "claude-opus-4-7",
13+
ActualModel: "claude-3-haiku-20240307",
14+
}
15+
16+
assert.Equal(
17+
t,
18+
"us.anthropic.claude-3-haiku-20240307-v1:0",
19+
awsModelIDFromMeta(m, "us-east-1"),
20+
)
21+
}
22+
23+
func TestAWSModelIDFromMetaPreservesActualARN(t *testing.T) {
24+
const arn = "arn:aws:bedrock:us-east-1:123456789012:provisioned-model/test"
25+
26+
m := &meta.Meta{
27+
OriginModel: "claude-opus-4-7",
28+
ActualModel: arn,
29+
}
30+
31+
assert.Equal(t, arn, awsModelIDFromMeta(m, "us-east-1"))
32+
}

0 commit comments

Comments
 (0)