Files
2026-07-13 13:39:12 +08:00

83 lines
2.4 KiB
TypeScript

/**
* Vision Bridge Auto-Router Tests
*/
import { describe, it, expect, beforeEach, vi } from "vitest";
import {
getBestVisionModel,
getFallbackModels,
recordLatency,
clearSelectionCache,
getLatencyStats,
} from "@/lib/guardrails/visionBridgeRouter";
describe("Vision Bridge Auto-Router", () => {
beforeEach(() => {
clearSelectionCache();
});
describe("getBestVisionModel", () => {
it("should return a vision-capable model", () => {
const model = getBestVisionModel();
expect(model).toBeTruthy();
expect(typeof model).toBe("string");
});
it("should respect fixed model override", () => {
const fixedModel = "openai/gpt-4o-mini";
const model = getBestVisionModel({ fixedModel });
expect(model).toBe(fixedModel);
});
it("should exclude specified models", () => {
const model = getBestVisionModel({
excludedModels: ["openai/gpt-4o-mini", "openai/gpt-4o"],
});
expect(model).not.toBe("openai/gpt-4o-mini");
expect(model).not.toBe("openai/gpt-4o");
});
});
describe("getFallbackModels", () => {
it("should return fallback models excluding the primary", () => {
const primary = "openai/gpt-4o-mini";
const fallbacks = getFallbackModels(primary);
expect(fallbacks).not.toContain(primary);
expect(fallbacks.length).toBeGreaterThan(0);
});
it("should respect max fallback attempts", () => {
const fallbacks = getFallbackModels("openai/gpt-4o-mini", {
maxFallbackAttempts: 2,
});
expect(fallbacks.length).toBeLessThanOrEqual(2);
});
});
describe("recordLatency", () => {
it("should record latency measurements", () => {
recordLatency("test-model", 100, true);
recordLatency("test-model", 150, true);
recordLatency("test-model", 200, false);
const stats = getLatencyStats();
expect(stats["test-model"]).toBeTruthy();
expect(stats["test-model"].samples).toBe(3);
});
});
describe("getLatencyStats", () => {
it("should return latency statistics", () => {
recordLatency("model-a", 100, true);
recordLatency("model-a", 120, true);
recordLatency("model-b", 200, true);
const stats = getLatencyStats();
expect(stats["model-a"]).toBeTruthy();
expect(stats["model-b"]).toBeTruthy();
expect(stats["model-a"].avg).toBe(110);
expect(stats["model-a"].successRate).toBe(1);
});
});
});