{"record":{"id":"bb00ce37112d8a1e","repo":"vercel/ai","slug":"video-model-model-modelid-does-not-implement-do-bb00ce","errorCode":null,"errorMessage":"Video model ${model.modelId} does not implement doStart. Use generateVideo for models without an asynchronous start/status flow.","messagePattern":"Video model (.+?) does not implement doStart\\. Use generateVideo for models without an asynchronous start/status flow\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/ai/src/generate-video/start-video.ts","lineNumber":135,"sourceCode":"  seed?: number;\n  frameImages?: Array<{\n    image: DataContent;\n    frameType: Experimental_VideoModelV4FrameType;\n  }>;\n  inputReferences?: Array<\n    DataContent | { data: DataContent; mediaType?: string }\n  >;\n  generateAudio?: boolean;\n  providerOptions?: ProviderOptions;\n  maxRetries?: number;\n  abortSignal?: AbortSignal;\n  headers?: Record<string, string>;\n  webhookUrl?: string;\n}): Promise<StartVideoResult> {\n  const model = resolveVideoModel(modelArg);\n\n  if (model.doStart == null) {\n    throw new Error(\n      `Video model ${model.modelId} does not implement doStart. ` +\n        'Use generateVideo for models without an asynchronous start/status flow.',\n    );\n  }\n\n  if (!Number.isInteger(n) || n < 1) {\n    throw new Error(\n      `Invalid n: expected a positive integer, received ${JSON.stringify(n)}.`,\n    );\n  }\n\n  // A start yields one operation covering all n videos: refuse to silently\n  // exceed a known per-call limit instead of splitting into several starts.\n  const knownMaxVideosPerCall =\n    maxVideosPerCall ??\n    (typeof model.maxVideosPerCall === 'function'\n      ? await model.maxVideosPerCall({ modelId: model.modelId })\n      : model.maxVideosPerCall);","sourceCodeStart":117,"sourceCodeEnd":153,"githubUrl":"https://github.com/vercel/ai/blob/69428b1f8b037e4d118fb4853428d5c4e620493c/packages/ai/src/generate-video/start-video.ts#L117-L153","documentation":"experimental_startVideo requires a model implementing doStart (the async start/status flow). If the resolved model has no doStart, it cannot produce an operation; the SDK throws and points you to generateVideo, which handles models without an async flow.","triggerScenarios":"Calling experimental_startVideo (or startVideoStep) with a video model whose provider only supports synchronous generation (doStart undefined).","commonSituations":"Using startVideo against a synchronous video model; custom model implementation missing doStart; migrating code from generateVideo to startVideo without checking model support.","solutions":["Switch to a model that supports the async start/status flow.","Use generateVideo instead for synchronous models.","Implement doStart in your custom model wrapper if you own it.","Gate the call at runtime by checking typeof model.doStart === 'function'."],"exampleFix":"// before\nconst op = await experimental_startVideo({ model: syncModel, prompt });\n// after\nconst { video } = await generateVideo({ model: syncModel, prompt }); // sync model\n// or: const op = await experimental_startVideo({ model: asyncModel, prompt });","handlingStrategy":"type-guard","validationCode":"if (model.doStart == null) {\n  // use generateVideo for this model instead\n}","typeGuard":"function supportsDoStart(model) {\n  return typeof model?.doStart === 'function';\n}","tryCatchPattern":"try {\n  await experimental_startVideo({ model, prompt, n });\n} catch (e) {\n  if (e.message.includes('does not implement doStart')) {\n    const { video } = await generateVideo({ model, prompt, n });\n  }\n}","preventionTips":["Route models without async support to generateVideo.","Verify doStart exists on custom model implementations.","Maintain a capability map of your models.","Update provider packages to versions with async video support."],"tags":["video","capability","unsupported-operation"],"backgroundTag":"model-capability-not-implemented","analyzedSha":"69428b1f8b037e4d118fb4853428d5c4e620493c","analyzedAt":"2026-08-30T12:32:21.016Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}