refactor(config): drop agent.provider
This commit is contained in:
53
src/agents/model-selection.test.ts
Normal file
53
src/agents/model-selection.test.ts
Normal 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,
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -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: {
|
||||
|
||||
Reference in New Issue
Block a user