| 1 | package boot |
| 2 | |
| 3 | import ( |
| 4 | "errors" |
| 5 | "reasonix/internal/config" |
| 6 | "reasonix/internal/netclient" |
| 7 | "reasonix/internal/provider" |
| 8 | "reflect" |
| 9 | "testing" |
| 10 | ) |
| 11 | |
| 12 | func TestReasoningCatalogUsesResolvedModelOverride(t *testing.T) { |
| 13 | cfg := &config.Config{Providers: []config.ProviderEntry{{Name: "gateway", Kind: "openai", BaseURL: "https://example.invalid/v1", Models: []string{"a", "b"}, SupportedEfforts: []string{"low", "high"}, ModelOverrides: map[string]config.ProviderModelOverride{ |
| 14 | "b": {SupportedEfforts: []string{"deliberate"}, DefaultEffort: "deliberate"}, |
| 15 | }}}} |
| 16 | catalog := NewLocalProviderResolver(cfg, netclient.ProxySpec{}).Catalog() |
| 17 | if len(catalog) != 2 || !reflect.DeepEqual(catalog[1].Efforts, []string{"deliberate"}) || catalog[1].DefaultEffort != "deliberate" { |
| 18 | t.Fatalf("catalog=%+v", catalog) |
| 19 | } |
| 20 | } |
| 21 | func TestConfiguredEffortRejectsBeforeCredentialsOrIO(t *testing.T) { |
| 22 | for _, e := range []config.ProviderEntry{ |
| 23 | {Kind: "openai", Model: "deepseek-v4-flash", BaseURL: "https://api.deepseek.com", Effort: "ultra"}, |
| 24 | {Kind: "openai", Model: "m", BaseURL: "https://example.invalid", SupportedEfforts: []string{"high"}, DefaultEffort: "max"}, |
| 25 | } { |
| 26 | _, err := NewProvider(&e) |
| 27 | var unsupported *provider.UnsupportedReasoningEffort |
| 28 | if !errors.As(err, &unsupported) { |
| 29 | t.Fatalf("expected exact-effort rejection, got %v", err) |
| 30 | } |
| 31 | } |
| 32 | } |
| 33 | |
| 34 | func TestStoredDeepSeekEffortCompatibility(t *testing.T) { |
| 35 | for _, kind := range []string{"openai", "anthropic"} { |
| 36 | for _, effort := range []string{"medium", "xhigh"} { |
| 37 | entry := config.ProviderEntry{Name: "legacy", Kind: kind, Model: "deepseek-v4-flash", BaseURL: "https://api.deepseek.com", Effort: effort} |
| 38 | if _, err := NewProvider(&entry); err != nil { |
| 39 | t.Fatalf("%s/%s: %v", kind, effort, err) |
| 40 | } |
| 41 | } |
| 42 | } |
| 43 | } |
| 44 |