test(api): add failing model profile registry specs
This commit is contained in:
@@ -2,5 +2,12 @@
|
|||||||
"name": "@aiquant/api",
|
"name": "@aiquant/api",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module"
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"test": "vitest run --"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"typescript": "^5.9.2",
|
||||||
|
"vitest": "^2.1.9"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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/);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user