{"record":{"id":"1210e71db7a869e3","repo":"vercel/ai","slug":"image-generation-completed-but-no-image-was-found","errorCode":null,"errorMessage":"Image generation completed but no image was found.","messagePattern":"Image generation completed but no image was found\\.","errorType":"exception","errorClass":"InvalidResponseDataError","httpStatus":null,"severity":"error","filePath":"packages/luma/src/luma-image-model.ts","lineNumber":197,"sourceCode":"      pollSettings?.pollIntervalMillis ?? this.pollIntervalMillis;\n\n    for (let i = 0; i < maxPollAttempts; i++) {\n      const { value: statusResponse } = await getFromApi({\n        url,\n        validateUrl: false,\n        headers,\n        abortSignal,\n        fetch: this.config.fetch,\n        failedResponseHandler: this.createLumaErrorHandler(),\n        successfulResponseHandler: createJsonResponseHandler(\n          lumaGenerationResponseSchema,\n        ),\n      });\n\n      switch (statusResponse.state) {\n        case 'completed':\n          if (!statusResponse.assets?.image) {\n            throw new InvalidResponseDataError({\n              data: statusResponse,\n              message: `Image generation completed but no image was found.`,\n            });\n          }\n          return statusResponse.assets.image;\n        case 'failed':\n          throw new InvalidResponseDataError({\n            data: statusResponse,\n            message: `Image generation failed.`,\n          });\n      }\n      await delay(pollIntervalMillis);\n    }\n\n    throw new Error(\n      `Image generation timed out after ${this.maxPollAttempts} attempts.`,\n    );\n  }","sourceCodeStart":179,"sourceCodeEnd":215,"githubUrl":"https://github.com/vercel/ai/blob/69428b1f8b037e4d118fb4853428d5c4e620493c/packages/luma/src/luma-image-model.ts#L179-L215","documentation":"Luma's image generation reached the 'completed' state, but the polled status response contains no assets.image URL. pollForImageUrl treats a completed generation without an image as invalid provider data and throws InvalidResponseDataError including the full statusResponse as data.","triggerScenarios":"Polling a Luma generation whose state is 'completed' while assets or assets.image is undefined/null — e.g. Luma completed the job but failed to attach the asset, or the response schema changed.","commonSituations":"Luma API-side anomaly, expired or purged assets on long-polling jobs, proxy/mocks stripping fields, or SDK version lagging behind Luma API changes.","solutions":["Inspect error.data (statusResponse) to confirm what the API actually returned","Retry the generation; if reproducible, check the Luma dashboard/API for the generation id","Poll promptly — assets may expire on finished generations","Upgrade @ai-sdk/luma to track Luma API schema changes","Report to Luma support if completed jobs consistently lack assets"],"exampleFix":"// before\nconst { image } = await generateImage({ model: luma.image('photon-1'), prompt: 'cat' }); // completed, no image\n// after\n// retry and handle\ntry {\n  const { image } = await generateImage({ model: luma.image('photon-1'), prompt: 'cat' });\n} catch (e) {\n  if (InvalidResponseDataError.isInstance(e)) { /* inspect e.data, retry generation */ }\n}","handlingStrategy":"retry","validationCode":null,"typeGuard":"function hasCompletedImage(r: unknown): r is { state: 'completed'; assets: { image: string } } {\n  const s = r as any;\n  return s?.state === 'completed' && typeof s?.assets?.image === 'string';\n}","tryCatchPattern":"try {\n  const { image } = await generateImage({ model: luma.image('photon-1'), prompt });\n} catch (e) {\n  if (InvalidResponseDataError.isInstance(e) && e.data?.state === 'completed') {\n    // retry generation or check the generation id in Luma's API\n  } else throw e;\n}","preventionTips":["Consume image results promptly after completion","Add one retry with backoff around generateImage","Keep @ai-sdk/luma updated with Luma API changes","Log e.data (statusResponse) to detect recurring provider-side anomalies"],"tags":["image","api-response","polling","invalid-data"],"backgroundTag":"empty-poll-result","analyzedSha":"69428b1f8b037e4d118fb4853428d5c4e620493c","analyzedAt":"2026-08-30T12:32:21.016Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}