fix: validate deepinfra video seeds

This commit is contained in:
Peter Steinberger
2026-05-28 16:32:58 -04:00
parent 6966c202b9
commit ccf3476a4a
2 changed files with 37 additions and 1 deletions

View File

@@ -123,6 +123,34 @@ describe("deepinfra video generation provider", () => {
expect(release).toHaveBeenCalledOnce();
});
it("does not forward malformed video seed values", async () => {
postJsonRequestMock.mockResolvedValue({
response: {
json: async () => ({
video_url: "/generated/video.mp4",
request_id: "req_seed",
inference_status: { status: "succeeded" },
}),
},
release: vi.fn(async () => {}),
});
const provider = buildDeepInfraVideoGenerationProvider();
await provider.generateVideo({
provider: "deepinfra",
model: "deepinfra/Pixverse/Pixverse-T2V",
prompt: "A bicycle weaving through a rainy neon street",
cfg: {},
providerOptions: {
seed: 1.5,
},
});
expect(postJsonRequestMock).toHaveBeenCalledOnce();
const postRequest = requireFirstPostJsonRequest();
expect(Reflect.get(Reflect.get(postRequest ?? {}, "body") ?? {}, "seed")).toBeUndefined();
});
it("reports malformed native video JSON as a provider error", async () => {
const release = vi.fn(async () => {});
postJsonRequestMock.mockResolvedValue({

View File

@@ -93,6 +93,14 @@ function resolveDurationSeconds(value: number | undefined): number | undefined {
return value <= 6.5 ? 5 : 8;
}
function resolveSeed(value: unknown): number | undefined {
const seed = coerceProviderNumber(value);
if (seed == null || !Number.isSafeInteger(seed) || seed < 0 || seed > 4_294_967_295) {
return undefined;
}
return seed;
}
function buildDeepInfraVideoBody(
req: VideoGenerationRequest,
model: string,
@@ -109,7 +117,7 @@ function buildDeepInfraVideoBody(
if (duration) {
body.duration = duration;
}
const seed = coerceProviderNumber(options.seed);
const seed = resolveSeed(options.seed);
if (seed != null) {
body.seed = seed;
}