package anthropic import ( "testing" "gitea.stevedudenhoeffer.com/steve/go-llm/v2/provider" anth "github.com/liushuangls/go-anthropic/v2" ) func TestBuildRequest_ThinkingByLevel(t *testing.T) { p := New("k") cases := []struct { level string wantBudget int }{ {"", 0}, {"low", thinkingBudgetLow}, {"medium", thinkingBudgetMedium}, {"high", thinkingBudgetHigh}, } for _, tc := range cases { t.Run("level="+tc.level, func(t *testing.T) { req := provider.Request{ Model: "claude-opus-4-7", Reasoning: tc.level, Messages: []provider.Message{{Role: "user", Content: "hi"}}, } out := p.buildRequest(req) if tc.wantBudget == 0 { if out.Thinking != nil { t.Fatalf("Thinking should be nil for level=%q, got %+v", tc.level, out.Thinking) } return } if out.Thinking == nil { t.Fatalf("Thinking should be set for level=%q", tc.level) } if out.Thinking.Type != anth.ThinkingTypeEnabled { t.Errorf("Thinking.Type = %q, want enabled", out.Thinking.Type) } if out.Thinking.BudgetTokens != tc.wantBudget { t.Errorf("BudgetTokens = %d, want %d", out.Thinking.BudgetTokens, tc.wantBudget) } if out.MaxTokens <= tc.wantBudget { t.Errorf("MaxTokens (%d) must exceed BudgetTokens (%d)", out.MaxTokens, tc.wantBudget) } }) } } func TestBuildRequest_ThinkingDropsTemperature(t *testing.T) { p := New("k") temp := 0.7 req := provider.Request{ Model: "claude-opus-4-7", Reasoning: "high", Temperature: &temp, Messages: []provider.Message{{Role: "user", Content: "hi"}}, } out := p.buildRequest(req) if out.Temperature != nil { t.Errorf("Temperature should be dropped when thinking is enabled, got %v", *out.Temperature) } } func TestBuildRequest_NoThinkingPreservesTemperature(t *testing.T) { p := New("k") temp := 0.7 req := provider.Request{ Model: "claude-opus-4-7", Temperature: &temp, Messages: []provider.Message{{Role: "user", Content: "hi"}}, } out := p.buildRequest(req) if out.Temperature == nil { t.Fatal("Temperature should be set when thinking is disabled") } got := float64(*out.Temperature) if got < 0.69 || got > 0.71 { t.Errorf("Temperature should be ~0.7 when thinking is disabled, got %v", got) } }