{"record":{"id":"6c3573dbe96ea514","repo":"HeyPuter/puter","slug":"internal-error-6c3573","errorCode":"internal_error","errorMessage":"No provider found for model ${model.id}","messagePattern":"No provider found for model (.+?)","errorType":"http","errorClass":"HttpError","httpStatus":500,"severity":"critical","filePath":"src/backend/drivers/ai-image/ImageGenerationDriver.ts","lineNumber":178,"sourceCode":"        }\n        if (!modelId && intendedProvider) {\n            modelId = this.#providers[intendedProvider]?.getDefaultModel();\n        }\n        if (!modelId)\n            throw new HttpError(400, 'Missing `model`', {\n                legacyCode: 'bad_request',\n            });\n\n        const model = this.#resolveModel(modelId, intendedProvider);\n        if (!model) {\n            throw new HttpError(400, `Model not found: ${args.model}`, {\n                legacyCode: 'bad_request',\n            });\n        }\n\n        const provider = this.#providers[model.provider!];\n        if (!provider) {\n            throw new HttpError(\n                500,\n                `No provider found for model ${model.id}`,\n                { legacyCode: 'internal_error' },\n            );\n        }\n\n        // `width`/`height` or `aspect_ratio` -> `ratio: {w,h}`\n        this.#normalizeRatio(args);\n\n        // Audit log for abuse / billing. Fired before the upstream call\n        // so a failed generate still shows up in the log (prompt_block\n        // uses this to track user-by-user image prompts).\n        const completionId = crypto.randomUUID();\n        this.clients.event.emit(\n            'ai.log.image',\n            {\n                actor,\n                completionId,","sourceCodeStart":160,"sourceCodeEnd":196,"githubUrl":"https://github.com/HeyPuter/puter/blob/908ec23eda38526170322c3edf71ba45ecb1ca95/src/backend/drivers/ai-image/ImageGenerationDriver.ts#L160-L196","documentation":"#resolveModel found the model id in #modelIdMap (so the model is declared), but the model's provider field doesn't match any key in #providers. Throws HTTP 500 internal_error — this is a server-side configuration inconsistency, not a caller mistake. A model entry points at a provider that was never instantiated/registered.","triggerScenarios":"Config declares a model under a provider, but that provider failed to register or was misnamed, so model.provider has no matching #providers entry.","commonSituations":"Provider registration failed silently on boot (bad credentials/config), a provider id typo between the model map and the providers map, or partial config where a model is listed but its provider isn't enabled.","solutions":["Check boot logs for the provider failing to register (missing API key, bad config).","Ensure the provider named by model.provider is actually enabled and instantiated.","Reconcile config: every model's provider must have a registered provider entry."],"exampleFix":"// before — config lists a model for 'stability' but provider not registered\n// after — enable/register the matching provider, or remove the orphan model entry","handlingStrategy":"validation","validationCode":"// On boot, assert every declared model's provider is actually registered.\nfor (const m of declaredModels) {\n  if (!providers[m.provider]) {\n    throw new Error(`config inconsistency: model ${m.id} -> missing provider ${m.provider}`);\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Reconcile config so every model's provider is registered.","Check boot logs for provider registration failures (missing API keys).","Run a startup self-check that maps models to live providers."],"tags":["ai-image","config","internal-error","provider-registration"],"backgroundTag":null,"analyzedSha":"908ec23eda38526170322c3edf71ba45ecb1ca95","analyzedAt":"2026-08-12T20:53:15.911Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}