Files
dotfiles/.pi/agent/extensions/tmux-subagent/src/models.test.ts
2026-04-09 23:14:57 +01:00

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");
});