71 lines
1.9 KiB
TypeScript
71 lines
1.9 KiB
TypeScript
import { describe, expect, it } from "bun:test";
|
|
|
|
import {
|
|
agentModelOptions,
|
|
isSupportedModel,
|
|
resolveDefaultModel,
|
|
supportedModels,
|
|
} from "../../src/chat/models.js";
|
|
import { parseAgentModelOptions } from "../../src/chat/modelConfig.js";
|
|
|
|
describe("agent model config", () => {
|
|
it("keeps every exposed option in the supported model list", () => {
|
|
expect(agentModelOptions.map((model) => model.id)).toEqual(supportedModels);
|
|
expect(
|
|
agentModelOptions.every(
|
|
(model) => model.label && model.description && model.icon,
|
|
),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("validates supported model ids", () => {
|
|
expect(isSupportedModel("deepseek/deepseek-v4-flash")).toBe(true);
|
|
expect(isSupportedModel("unknown/model")).toBe(false);
|
|
});
|
|
|
|
it("rejects unsupported default models", () => {
|
|
expect(resolveDefaultModel("deepseek/deepseek-v4-pro")).toBe(
|
|
"deepseek/deepseek-v4-pro",
|
|
);
|
|
expect(() => resolveDefaultModel("unknown/model")).toThrow(
|
|
"unsupported default agent model",
|
|
);
|
|
});
|
|
|
|
it("parses full model option config from JSON", () => {
|
|
expect(
|
|
parseAgentModelOptions(
|
|
JSON.stringify([
|
|
{
|
|
id: "provider/model",
|
|
label: "自定义",
|
|
description: "自定义模型",
|
|
icon: "bolt",
|
|
},
|
|
]),
|
|
),
|
|
).toEqual([
|
|
{
|
|
id: "provider/model",
|
|
label: "自定义",
|
|
description: "自定义模型",
|
|
icon: "bolt",
|
|
},
|
|
]);
|
|
});
|
|
|
|
it("rejects invalid model option config", () => {
|
|
expect(() => parseAgentModelOptions("not-json")).toThrow(
|
|
"OPENCODE_MODEL_OPTIONS must be valid JSON",
|
|
);
|
|
expect(() =>
|
|
parseAgentModelOptions(
|
|
JSON.stringify([
|
|
{ id: "provider/model", label: "模型" },
|
|
{ id: "provider/model", label: "重复模型" },
|
|
]),
|
|
),
|
|
).toThrow("duplicate OPENCODE_MODEL_OPTIONS id");
|
|
});
|
|
});
|