45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import {
|
|
formatModelReference,
|
|
listAvailableModelReferences,
|
|
normalizeAvailableModelReference,
|
|
resolveChildModel,
|
|
} from "./models.ts";
|
|
|
|
test("resolveChildModel prefers the per-task override over the required top-level model", () => {
|
|
const selection = resolveChildModel({
|
|
taskModel: "openai/gpt-5",
|
|
topLevelModel: "anthropic/claude-sonnet-4-5",
|
|
});
|
|
|
|
assert.equal(selection.requestedModel, "openai/gpt-5");
|
|
assert.equal(selection.resolvedModel, "openai/gpt-5");
|
|
});
|
|
|
|
test("formatModelReference returns provider/id", () => {
|
|
const ref = formatModelReference({ provider: "anthropic", id: "claude-sonnet-4-5" });
|
|
|
|
assert.equal(ref, "anthropic/claude-sonnet-4-5");
|
|
});
|
|
|
|
test("listAvailableModelReferences formats all configured available models", () => {
|
|
const refs = listAvailableModelReferences({
|
|
getAvailable: () => [
|
|
{ provider: "anthropic", id: "claude-sonnet-4-5" },
|
|
{ provider: "openai", id: "gpt-5" },
|
|
],
|
|
});
|
|
|
|
assert.deepEqual(refs, ["anthropic/claude-sonnet-4-5", "openai/gpt-5"]);
|
|
});
|
|
|
|
test("normalizeAvailableModelReference matches canonical refs case-insensitively", () => {
|
|
const normalized = normalizeAvailableModelReference("OpenAI/GPT-5", [
|
|
"anthropic/claude-sonnet-4-5",
|
|
"openai/gpt-5",
|
|
]);
|
|
|
|
assert.equal(normalized, "openai/gpt-5");
|
|
});
|