Files
Local-Cursor/internal/backend/agent/model/provider_limits_test.go

70 lines
2.0 KiB
Go
Raw Permalink Normal View History

package modeladapter
import (
"errors"
"fmt"
"testing"
)
func TestAnthropicOutputLimitFromError(t *testing.T) {
cases := []struct {
name string
err error
want int
}{
{
name: "one-api 风格超限错误提取上限",
err: errors.New(`anthropic adapter status=400 body={"error":{"type":"<nil>","message":"Requested token count exceeds the configured maximum output length of 131072 tokens. (request id: 202611021331431481912008268d9d6mRcDNnYN)"},"type":"error"}`),
want: 131072,
},
{
name: "其他 400 文本不匹配",
err: errors.New("anthropic adapter status=400 body={\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"max temperature allowed is 1.0\"}}"),
want: 0,
},
{
name: "nil 错误",
err: nil,
want: 0,
},
{
name: "无数字的变体不匹配",
err: errors.New("exceeds the configured maximum output length of abc tokens"),
want: 0,
},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
if got := anthropicOutputLimitFromError(tc.err); got != tc.want {
t.Fatalf("anthropicOutputLimitFromError() = %d, 期望 %d", got, tc.want)
}
})
}
}
func TestAnthropicBodyMaxTokens(t *testing.T) {
cases := []struct {
name string
body map[string]any
want int
}{
{"常规构造为 int", map[string]any{"max_tokens": 278000}, 278000},
{"RequestBodyOverride 反序列化为 float64", map[string]any{"max_tokens": float64(278000)}, 278000},
{"int64 兼容", map[string]any{"max_tokens": int64(278000)}, 278000},
{"字段缺失", map[string]any{}, 0},
{"非数值类型", map[string]any{"max_tokens": "278000"}, 0},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
if got := anthropicBodyMaxTokens(tc.body); got != tc.want {
t.Fatalf("anthropicBodyMaxTokens() = %d, 期望 %d", got, tc.want)
}
})
}
if got := anthropicBodyMaxTokens(nil); got != 0 {
t.Fatalf("nil body 应返回 0, got %d", got)
}
if got := fmt.Sprint(anthropicOutputLimitPattern.String()); got == "" {
t.Fatal("onAnthropic pattern 不应为空")
}
}