{"record":{"id":"feb25d05051cfc83","repo":"vercel/ai","slug":"no-video-generated","errorCode":null,"errorMessage":"No video generated.","messagePattern":"No video generated\\.","errorType":"exception","errorClass":"NoVideoGeneratedError","httpStatus":null,"severity":"error","filePath":"packages/ai/src/generate-video/generate-video.ts","lineNumber":455,"sourceCode":"      }\n    }\n\n    warnings.push(...result.warnings);\n\n    responses.push({\n      timestamp: result.response.timestamp,\n      modelId: result.response.modelId,\n      headers: result.response.headers,\n      providerMetadata: result.providerMetadata,\n    });\n\n    if (result.providerMetadata != null) {\n      mergeProviderMetadata(providerMetadata, result.providerMetadata);\n    }\n  }\n\n  if (videos.length === 0) {\n    throw new NoVideoGeneratedError({ responses });\n  }\n\n  if (warnings.length > 0) {\n    logWarnings({\n      warnings,\n      provider: model.provider,\n      model: model.modelId,\n    });\n  }\n\n  return {\n    video: videos[0],\n    videos,\n    warnings,\n    responses,\n    providerMetadata,\n  };\n}","sourceCodeStart":437,"sourceCodeEnd":473,"githubUrl":"https://github.com/vercel/ai/blob/69428b1f8b037e4d118fb4853428d5c4e620493c/packages/ai/src/generate-video/generate-video.ts#L437-L473","documentation":"After all generation attempts finish, experimental_generateVideo collects the produced videos; if the array is empty, it throws NoVideoGeneratedError (which carries the provider `responses`). This means the provider call(s) succeeded at the transport level but returned no usable video data — often a content-policy refusal, unsupported prompt, or an empty/unexpected provider response body.","triggerScenarios":"Provider returns a 200 response whose body contains no video (filtered/moderated prompt, empty output list); all polled status checks report completion with no artifacts; a custom doGenerate implementation resolves with an empty videos array.","commonSituations":"Prompts rejected by the provider's safety filters; model id that does not actually produce output (preview/deprecated models); a custom mock model that returns no videos; quota/entitlement issues where the provider silently returns empty results.","solutions":["Inspect error.responses (and result warnings) to see what the provider actually returned.","Adjust the prompt to comply with the provider's content policy and retry.","Verify the model id is valid and enabled for your account/region.","Handle AI_NoVideoGeneratedError explicitly in catch blocks and offer the user a retry path.","If using a custom model, make doGenerate/doStatus return a non-empty videos array."],"exampleFix":"// before\nconst { video } = await experimental_generateVideo({ model, prompt }); // throws when empty\n\n// after\ntry {\n  const { video } = await experimental_generateVideo({ model, prompt });\n} catch (error) {\n  if (NoVideoGeneratedError.isInstance(error)) {\n    console.warn('No video returned:', error.responses);\n    // retry with adjusted prompt or notify user\n  } else {\n    throw error;\n  }\n}","handlingStrategy":"try-catch","validationCode":"// No reliable pre-call check; validate the prompt against provider policy and model availability\nif (!isModelEnabledForAccount(modelId)) {\n  throw new Error(`model ${modelId} not enabled for this account`);\n}","typeGuard":"null","tryCatchPattern":"try {\n  const result = await experimental_generateVideo({ model, prompt });\n} catch (error) {\n  if (NoVideoGeneratedError.isInstance(error)) {\n    console.warn('Provider returned no video:', error.responses);\n    // retry with adjusted prompt or notify the user\n  } else throw error;\n}","preventionTips":["Pre-screen prompts against the provider's content policy.","Log error.responses to diagnose empty provider outputs.","Verify model id entitlement/region support before calling.","Build an explicit retry-with-feedback path for empty results."],"tags":["video","empty-response","content-policy","provider"],"backgroundTag":"empty-provider-response","analyzedSha":"69428b1f8b037e4d118fb4853428d5c4e620493c","analyzedAt":"2026-08-30T12:32:21.016Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}