refactor(config): drop agent.provider

This commit is contained in:
Peter Steinberger
2025-12-26 00:43:44 +01:00
parent 8b815bce94
commit 1ef888ca23
14 changed files with 98 additions and 61 deletions

View File

@@ -0,0 +1,53 @@
import { describe, expect, it } from "vitest";
import type { ClawdisConfig } from "../config/config.js";
import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "./defaults.js";
import { resolveConfiguredModelRef } from "./model-selection.js";
describe("resolveConfiguredModelRef", () => {
it("parses provider/model from agent.model", () => {
const cfg = {
agent: { model: "openai/gpt-4.1-mini" },
} satisfies ClawdisConfig;
const resolved = resolveConfiguredModelRef({
cfg,
defaultProvider: DEFAULT_PROVIDER,
defaultModel: DEFAULT_MODEL,
});
expect(resolved).toEqual({ provider: "openai", model: "gpt-4.1-mini" });
});
it("falls back to default provider when agent.model omits it", () => {
const cfg = {
agent: { model: "claude-opus-4-5" },
} satisfies ClawdisConfig;
const resolved = resolveConfiguredModelRef({
cfg,
defaultProvider: DEFAULT_PROVIDER,
defaultModel: DEFAULT_MODEL,
});
expect(resolved).toEqual({
provider: DEFAULT_PROVIDER,
model: "claude-opus-4-5",
});
});
it("falls back to defaults when agent.model is missing", () => {
const cfg = {} satisfies ClawdisConfig;
const resolved = resolveConfiguredModelRef({
cfg,
defaultProvider: DEFAULT_PROVIDER,
defaultModel: DEFAULT_MODEL,
});
expect(resolved).toEqual({
provider: DEFAULT_PROVIDER,
model: DEFAULT_MODEL,
});
});
});

View File

@@ -31,15 +31,17 @@ export function resolveConfiguredModelRef(params: {
defaultProvider: string;
defaultModel: string;
}): ModelRef {
const rawProvider = params.cfg.agent?.provider?.trim() || "";
const rawModel = params.cfg.agent?.model?.trim() || "";
const providerFallback = rawProvider || params.defaultProvider;
if (rawModel) {
const parsed = parseModelRef(rawModel, providerFallback);
if (parsed) return parsed;
return { provider: providerFallback, model: rawModel };
const trimmed = rawModel.trim();
if (trimmed.includes("/")) {
const parsed = parseModelRef(trimmed, params.defaultProvider);
if (parsed) return parsed;
}
// TODO(steipete): drop this fallback once provider-less agent.model is fully deprecated.
return { provider: params.defaultProvider, model: trimmed };
}
return { provider: providerFallback, model: params.defaultModel };
return { provider: params.defaultProvider, model: params.defaultModel };
}
export function buildAllowedModelSet(params: {