57 lines
2.0 KiB
TypeScript
57 lines
2.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import {
|
|
ModelConfigurationError,
|
|
modelIds,
|
|
validateModelConfigurationCandidateSet,
|
|
type ModelConfigCandidate,
|
|
} from "../../apps/api/src/model-configuration.js";
|
|
|
|
function candidateSet(): ModelConfigCandidate[] {
|
|
return modelIds.map((modelId, index) => ({
|
|
model_id: modelId,
|
|
display_name: modelId,
|
|
enabled: true,
|
|
is_default: index === 0,
|
|
recommendation_priority: index + 1,
|
|
route_profile: { endpoint: "https://mock.invalid/v1/images" },
|
|
gateway_account_ref: "mock-gateway",
|
|
error_mapping_profile: { timeout: "upstream_timeout" },
|
|
credit_cost: 1,
|
|
supported_ratios: ["3:4", "1:1", "4:3", "9:16"],
|
|
reference_limits: { max_file_bytes: 1_024, max_files: 2, max_total_bytes: 2_048 },
|
|
prompt_max_length: 1_000,
|
|
safety_source: "provider",
|
|
}));
|
|
}
|
|
|
|
describe("TDD-WP3-MDL-002 invalid full configuration sets", () => {
|
|
it.each([
|
|
["missing", undefined],
|
|
["fractional", 1.5],
|
|
["zero", 0],
|
|
["negative", -1],
|
|
])("rejects a %s recommendation priority", (_name, value) => {
|
|
const models = candidateSet();
|
|
models[1].recommendation_priority = value as number;
|
|
expect(() => validateModelConfigurationCandidateSet(models)).toThrowError(
|
|
expect.objectContaining({ code: "MODEL_RECOMMENDATION_PRIORITY_INVALID" }),
|
|
);
|
|
});
|
|
|
|
it("rejects duplicate priorities", () => {
|
|
const models = candidateSet();
|
|
models[1].recommendation_priority = models[0].recommendation_priority;
|
|
expect(() => validateModelConfigurationCandidateSet(models)).toThrowError(
|
|
expect.objectContaining({ code: "MODEL_RECOMMENDATION_PRIORITY_CONFLICT" }),
|
|
);
|
|
});
|
|
|
|
it.each(["missing model", "unknown model"])("rejects a candidate with a %s", (scenario) => {
|
|
const models = candidateSet();
|
|
if (scenario === "missing model") models.pop();
|
|
else models[2].model_id = "unknown-model";
|
|
expect(() => validateModelConfigurationCandidateSet(models)).toThrowError(ModelConfigurationError);
|
|
});
|
|
});
|