diff --git a/extensions/deepinfra/video-generation-provider.test.ts b/extensions/deepinfra/video-generation-provider.test.ts index 124b228dc937..ff1517087292 100644 --- a/extensions/deepinfra/video-generation-provider.test.ts +++ b/extensions/deepinfra/video-generation-provider.test.ts @@ -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({ diff --git a/extensions/deepinfra/video-generation-provider.ts b/extensions/deepinfra/video-generation-provider.ts index a533d966c47b..cac81dc69da6 100644 --- a/extensions/deepinfra/video-generation-provider.ts +++ b/extensions/deepinfra/video-generation-provider.ts @@ -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; }