test(api): add failing model profile registry specs

This commit is contained in:
2026-03-28 17:01:49 +08:00
parent de1525a2d6
commit b6fb48e5b3
2 changed files with 80 additions and 1 deletions
+8 -1
View File
@@ -2,5 +2,12 @@
"name": "@aiquant/api",
"version": "0.0.0",
"private": true,
"type": "module"
"type": "module",
"scripts": {
"test": "vitest run --"
},
"devDependencies": {
"typescript": "^5.9.2",
"vitest": "^2.1.9"
}
}
+72
View File
@@ -0,0 +1,72 @@
import { describe, expect, it } from "vitest";
import { createConfigFromEnv, createModelProfileRegistry } from "./model-profile-registry";
describe("model profile registry", () => {
const env = {
MODEL_PROFILES_JSON: JSON.stringify([
{
name: "signal.fast.v1",
provider: "openai-compatible",
apiBase: "https://example.com/v1",
apiKeyRef: "OPENAI_API_KEY",
model: "gpt-4.1-mini",
temperature: 0.2,
timeoutMs: 10_000,
capabilities: {
structuredOutputs: true,
jsonMode: true
},
tags: ["fast"]
},
{
name: "optimizer.reasoning.v1",
provider: "openai-compatible",
apiBase: "https://example.com/v1",
apiKeyRef: "OPENAI_API_KEY",
model: "o4-mini",
temperature: 0.6,
timeoutMs: 20_000,
capabilities: {
structuredOutputs: true,
jsonMode: true
},
tags: ["reasoning"]
}
]),
AGENT_MODEL_BINDINGS_JSON: JSON.stringify({
signal: "signal.fast.v1",
risk: "signal.fast.v1",
evaluator: "optimizer.reasoning.v1",
optimizer: "optimizer.reasoning.v1"
})
};
it("loads model profiles from environment-backed config", () => {
const config = createConfigFromEnv(env);
expect(config.modelProfiles).toHaveLength(2);
expect(config.agentBindings.optimizer).toBe("optimizer.reasoning.v1");
});
it("resolves agent bindings to concrete profiles", () => {
const config = createConfigFromEnv(env);
const registry = createModelProfileRegistry(config);
expect(registry.get("signal.fast.v1").model).toBe("gpt-4.1-mini");
expect(registry.resolveAgentBinding("optimizer").model).toBe("o4-mini");
});
it("rejects bindings to unknown profiles", () => {
expect(() =>
createModelProfileRegistry({
modelProfiles: createConfigFromEnv(env).modelProfiles,
agentBindings: {
signal: "signal.fast.v1",
risk: "signal.fast.v1",
evaluator: "signal.fast.v1",
optimizer: "missing-profile"
}
})
).toThrow(/Unknown model profile/);
});
});