63 lines
2.0 KiB
TypeScript
63 lines
2.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import type { ModelAliasIndex } from "../../agents/model-selection.js";
|
|
import type { ClawdbotConfig } from "../../config/config.js";
|
|
import { parseInlineDirectives } from "./directive-handling.js";
|
|
import {
|
|
maybeHandleModelDirectiveInfo,
|
|
resolveModelSelectionFromDirective,
|
|
} from "./directive-handling.model.js";
|
|
|
|
function baseAliasIndex(): ModelAliasIndex {
|
|
return { byAlias: new Map(), byKey: new Map() };
|
|
}
|
|
|
|
describe("/model chat UX", () => {
|
|
it("shows summary for /model with no args", async () => {
|
|
const directives = parseInlineDirectives("/model");
|
|
const cfg = { commands: { text: true } } as unknown as ClawdbotConfig;
|
|
|
|
const reply = await maybeHandleModelDirectiveInfo({
|
|
directives,
|
|
cfg,
|
|
agentDir: "/tmp/agent",
|
|
activeAgentId: "main",
|
|
provider: "anthropic",
|
|
model: "claude-opus-4-5",
|
|
defaultProvider: "anthropic",
|
|
defaultModel: "claude-opus-4-5",
|
|
aliasIndex: baseAliasIndex(),
|
|
allowedModelCatalog: [],
|
|
resetModelOverride: false,
|
|
});
|
|
|
|
expect(reply?.text).toContain("Current:");
|
|
expect(reply?.text).toContain("Browse: /models");
|
|
expect(reply?.text).toContain("Switch: /model <provider/model>");
|
|
});
|
|
|
|
it("auto-applies closest match for typos", () => {
|
|
const directives = parseInlineDirectives("/model anthropic/claud-opus-4-5");
|
|
const cfg = { commands: { text: true } } as unknown as ClawdbotConfig;
|
|
|
|
const resolved = resolveModelSelectionFromDirective({
|
|
directives,
|
|
cfg,
|
|
agentDir: "/tmp/agent",
|
|
defaultProvider: "anthropic",
|
|
defaultModel: "claude-opus-4-5",
|
|
aliasIndex: baseAliasIndex(),
|
|
allowedModelKeys: new Set(["anthropic/claude-opus-4-5"]),
|
|
allowedModelCatalog: [{ provider: "anthropic", id: "claude-opus-4-5" }],
|
|
provider: "anthropic",
|
|
});
|
|
|
|
expect(resolved.modelSelection).toEqual({
|
|
provider: "anthropic",
|
|
model: "claude-opus-4-5",
|
|
isDefault: true,
|
|
});
|
|
expect(resolved.errorText).toBeUndefined();
|
|
});
|
|
});
|