{"record":{"id":"1442422e5ad1d20d","repo":"HeyPuter/puter","slug":"upstream-failed","errorCode":"upstream_failed","errorMessage":"Video generation failed","messagePattern":"Video generation failed","errorType":"http","errorClass":"HttpError","httpStatus":400,"severity":"error","filePath":"src/backend/drivers/ai-video/providers/openai/OpenAIVideoProvider.ts","lineNumber":147,"sourceCode":"            size: normalizedSize as OpenAI.VideoSize,\n        };\n\n        if (inputReference) {\n            createParams.input_reference =\n                inputReference as OpenAI.VideoCreateParams['input_reference'];\n        }\n\n        const createResponse = await this.#openai.videos.create(createParams);\n        const finalJob = await this.#pollUntilComplete(createResponse);\n\n        if (finalJob.status === 'failed') {\n            const errorMessage =\n                finalJob.error?.message ?? 'Video generation failed';\n            // Same reasoning as TogetherVideoProvider — Sora's `failed`\n            // status covers both user input issues (content policy) and\n            // their own outages; expose as `upstream_failed` 400 so the\n            // alarm gate skips it instead of paging on 500.\n            throw new HttpError(400, errorMessage, {\n                legacyCode: 'upstream_failed',\n                fields: { provider: 'openai' },\n            });\n        }\n\n        const finalResolution =\n            this.#normalizeSize(finalJob.size, selectedModel) ?? normalizedSize;\n        const finalTier = this.#determineSizeTier(\n            selectedModel,\n            finalResolution,\n        );\n        const finalCostPerSecondCents = this.#getCostPerSecond(\n            selectedModel,\n            finalTier,\n        );\n\n        if (!finalCostPerSecondCents) {\n            throw new Error(","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/HeyPuter/puter/blob/908ec23eda38526170322c3edf71ba45ecb1ca95/src/backend/drivers/ai-video/providers/openai/OpenAIVideoProvider.ts#L129-L165","documentation":"Error \"Video generation failed\" thrown in HeyPuter/puter.","triggerScenarios":"Thrown at src/backend/drivers/ai-video/providers/openai/OpenAIVideoProvider.ts:147 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry the request; if it persists, check the OpenAI API status and request parameters.","Inspect logs for the upstream failure detail."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"908ec23eda38526170322c3edf71ba45ecb1ca95","analyzedAt":"2026-08-12T20:53:15.911Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}