Files
omniai-ds-code-package/src/utils/videoRouting.test.ts
T

88 lines
3.7 KiB
TypeScript

import { describe, it, expect } from "vitest";
import { resolveHappyHorseRequestModel, HAPPY_HORSE_UI_MODEL, HAPPY_HORSE_T2V_MODEL, HAPPY_HORSE_I2V_MODEL, HAPPY_HORSE_R2V_MODEL } from "./happyHorseRouting";
import { resolveViduRequestModel, VIDU_UI_MODEL, VIDU_T2V_MODEL, VIDU_I2V_MODEL } from "./viduRouting";
import { resolvePixverseRequestModel, PIXVERSE_UI_MODEL, PIXVERSE_T2V_MODEL, PIXVERSE_I2V_MODEL, PIXVERSE_KF2V_MODEL } from "./pixverseRouting";
type ResolveFn = (input: { model: string; referenceUrls?: string[]; imageReferenceCount?: number }) => string;
// 三家路由在参考图数量上的分支差异是回归测试重点。
// HappyHorse: 0->t2v, 1->i2v, >=2->r2v
// Vidu: 0->t2v, >=1->i2v (无 r2v)
// Pixverse: 0->t2v, 1->i2v, >=2->kf2v
describe.each([
{ name: "HappyHorse", resolve: resolveHappyHorseRequestModel, ui: HAPPY_HORSE_UI_MODEL, t2v: HAPPY_HORSE_T2V_MODEL, i2v: HAPPY_HORSE_I2V_MODEL, third: HAPPY_HORSE_R2V_MODEL },
{ name: "Vidu", resolve: resolveViduRequestModel, ui: VIDU_UI_MODEL, t2v: VIDU_T2V_MODEL, i2v: VIDU_I2V_MODEL, third: null },
{ name: "Pixverse", resolve: resolvePixverseRequestModel, ui: PIXVERSE_UI_MODEL, t2v: PIXVERSE_T2V_MODEL, i2v: PIXVERSE_I2V_MODEL, third: PIXVERSE_KF2V_MODEL },
] as Array<{ name: string; resolve: ResolveFn; ui: string; t2v: string; i2v: string; third: string | null }>)(
"$name routing by imageReferenceCount",
({ resolve, ui, t2v, i2v, third }) => {
it("returns the input model unchanged when it is not this provider", () => {
expect(resolve({ model: "some-other-model" })).toBe("some-other-model");
});
it("routes 0 reference images to t2v", () => {
expect(resolve({ model: ui, imageReferenceCount: 0 })).toBe(t2v);
});
it("routes 1 reference image to i2v", () => {
expect(resolve({ model: ui, imageReferenceCount: 1 })).toBe(i2v);
});
if (third) {
it("routes >=2 reference images to the third model", () => {
expect(resolve({ model: ui, imageReferenceCount: 2 })).toBe(third);
expect(resolve({ model: ui, imageReferenceCount: 5 })).toBe(third);
});
} else {
it("routes >=1 reference images to i2v (no third model for this provider)", () => {
expect(resolve({ model: ui, imageReferenceCount: 2 })).toBe(i2v);
expect(resolve({ model: ui, imageReferenceCount: 5 })).toBe(i2v);
});
}
},
);
describe("reference count fallback (referenceUrls when imageReferenceCount omitted)", () => {
it("HappyHorse counts non-empty urls", () => {
expect(
resolveHappyHorseRequestModel({
model: HAPPY_HORSE_UI_MODEL,
referenceUrls: ["", " ", "https://example.com/a.png"],
}),
).toBe(HAPPY_HORSE_I2V_MODEL);
});
it("Vidu falls back to 0 when all urls are empty/whitespace", () => {
expect(
resolveViduRequestModel({
model: VIDU_UI_MODEL,
referenceUrls: ["", " "],
}),
).toBe(VIDU_T2V_MODEL);
});
it("Pixverse counts two non-empty urls as kf2v", () => {
expect(
resolvePixverseRequestModel({
model: PIXVERSE_UI_MODEL,
referenceUrls: ["https://a.png", "https://b.png"],
}),
).toBe(PIXVERSE_KF2V_MODEL);
});
it("imageReferenceCount takes precedence over referenceUrls length", () => {
// Even though referenceUrls has 3 entries, explicit count of 0 wins.
expect(
resolveHappyHorseRequestModel({
model: HAPPY_HORSE_UI_MODEL,
referenceUrls: ["a", "b", "c"],
imageReferenceCount: 0,
}),
).toBe(HAPPY_HORSE_T2V_MODEL);
});
it("handles undefined referenceUrls with undefined count", () => {
expect(resolveViduRequestModel({ model: VIDU_UI_MODEL })).toBe(VIDU_T2V_MODEL);
});
});