{"record":{"id":"64dbc8855b5d9472","repo":"vercel/ai","slug":"prodia-multipart-response-missing-output-video","errorCode":null,"errorMessage":"Prodia multipart response missing output video","messagePattern":"Prodia multipart response missing output video","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/prodia/src/prodia-video-model.ts","lineNumber":225,"sourceCode":"          text: jsonStr,\n          schema: zodSchema(prodiaJobResultSchema),\n        });\n      } else if (contentDisposition.includes('name=\"output\"')) {\n        videoBytes = part.body;\n        if (partContentType.startsWith('video/')) {\n          videoMediaType = partContentType;\n        }\n      } else if (partContentType.startsWith('video/')) {\n        videoBytes = part.body;\n        videoMediaType = partContentType;\n      }\n    }\n\n    if (!jobResult) {\n      throw new Error('Prodia multipart response missing job part');\n    }\n    if (!videoBytes) {\n      throw new Error('Prodia multipart response missing output video');\n    }\n\n    return {\n      value: { jobResult, videoBytes, videoMediaType },\n      responseHeaders,\n    };\n  };\n}\n\nasync function resolveVideoFileData(\n  file: NonNullable<\n    Parameters<NonNullable<VideoModelV4['doGenerate']>>[0]['image']\n  >,\n  abortSignal?: AbortSignal,\n): Promise<{ bytes: Uint8Array; mediaType: string }> {\n  if (file.type === 'file') {\n    const data =\n      typeof file.data === 'string'","sourceCodeStart":207,"sourceCodeEnd":243,"githubUrl":"https://github.com/vercel/ai/blob/69428b1f8b037e4d118fb4853428d5c4e620493c/packages/prodia/src/prodia-video-model.ts#L207-L243","documentation":"The multipart response contained the job JSON part but no output part carrying video bytes. The Prodia video model must return the generated video data, so when no \"output\" part (and no video/* part) is present in the multipart body it throws this error.","triggerScenarios":"A Prodia video doGenerate call returned multipart with a name=\"job\" part, but no name=\"output\" part or video/* part — typically when the generation job finished without producing a video (job failure, content policy rejection, empty result).","commonSituations":"Job completed with a failed/error status embedded in the job JSON while the SDK still expected video bytes; prompt blocked by safety filters; Prodia-side storage/CDN issue preventing the video from being attached; insufficient credits producing an empty output.","solutions":["Read the Prodia provider metadata / jobResult surfaced by the SDK (and Prodia dashboard) to check the job's status and error fields.","Retry the generation with a modified prompt in case content filtering or a transient job failure caused the empty output.","Verify your Prodia account has sufficient credits/quota for video generation.","Update @ai-sdk/prodia in case a newer provider response format needs different parsing."],"exampleFix":"// before: ignoring job status\nconst { video } = await generateVideo({ model: prodia.video('...'), prompt });\n\n// after: catch and inspect job status\ntry {\n  const { video } = await generateVideo({ model: prodia.video('...'), prompt });\n} catch (e) {\n  console.error('No video returned; check Prodia job status/credits', e);\n}\n","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  const { video } = await generateVideo({ model: prodia.video(modelId), prompt });\n} catch (error) {\n  if (error instanceof Error && error.message === 'Prodia multipart response missing output video') {\n    // job likely failed: check Prodia job status, credits, and content policy\n  }\n  throw error;\n}","preventionTips":["Check the job status in Prodia provider metadata or dashboard after failures.","Ensure sufficient credits/quota before submitting video jobs.","Sanitize prompts to reduce content-policy rejections.","Implement one retry with a modified prompt for transient job failures."],"tags":["network","multipart","video","empty-response","prodia"],"backgroundTag":"empty-generation-output","analyzedSha":"69428b1f8b037e4d118fb4853428d5c4e620493c","analyzedAt":"2026-08-30T12:32:21.016Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}