{"record":{"id":"ace9bd953c78b7a7","repo":"CoplayDev/unity-mcp","slug":"unknown-image-provider-id","errorCode":null,"errorMessage":"Unknown image provider '{id}'.","messagePattern":"Unknown image provider '(.+?)'\\.","errorType":"validation","errorClass":"NotSupportedException","httpStatus":null,"severity":"error","filePath":"MCPForUnity/Editor/Services/AssetGen/Providers/AssetGenProviders.cs","lineNumber":37,"sourceCode":"                case \"tripo\":\n                    return new TripoAdapter();\n                case \"meshy\":\n                    return new MeshyAdapter();\n                default:\n                    throw new NotSupportedException($\"Unknown model provider '{id}'.\");\n            }\n        }\n\n        public static IImageProviderAdapter Image(string id)\n        {\n            switch ((id ?? string.Empty).ToLowerInvariant())\n            {\n                case \"fal\":\n                    return new FalAdapter();\n                case \"openrouter\":\n                    return new OpenRouterAdapter();\n                default:\n                    throw new NotSupportedException($\"Unknown image provider '{id}'.\");\n            }\n        }\n\n        public static IAudioProviderAdapter Audio(string id)\n        {\n            switch ((id ?? string.Empty).ToLowerInvariant())\n            {\n                case \"fal\":\n                    return new FalAudioAdapter();\n                default:\n                    throw new NotSupportedException($\"Unknown audio provider '{id}'.\");\n            }\n        }\n\n        public static IMarketplaceProviderAdapter Marketplace(string id)\n        {\n            switch ((id ?? string.Empty).ToLowerInvariant())\n            {","sourceCodeStart":19,"sourceCodeEnd":55,"githubUrl":"https://github.com/CoplayDev/unity-mcp/blob/c21bf496bca87d54e75bad048563c3adb1782081/MCPForUnity/Editor/Services/AssetGen/Providers/AssetGenProviders.cs#L19-L55","documentation":"AssetGenProviders.Image lowercases the provider id and switches over it, returning an adapter for known image providers ('fal', 'openrouter'). Any other id hits default and throws NotSupportedException.","triggerScenarios":"Calling Image() with an id not in the switch, e.g. 'stability', 'dalle', or a typo of 'fal'/'openrouter'.","commonSituations":"An AI/LLM hallucinating an image provider; config referencing a provider that is not implemented for images; a caller mixing up model vs image provider ids.","solutions":["Use a supported image provider id: 'fal' or 'openrouter'.","Enumerate providers via AssetGenProviders.List() and filter by Kind == 'image' before selecting.","Check spelling; the id is case-insensitive but must match exactly otherwise."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"var supported = AssetGenProviders.List().Where(p => p.Kind == \"image\").Select(p => p.Id).ToHashSet();\nif (!supported.Contains(id.ToLowerInvariant()))\n    throw new ArgumentException($\"Unknown image provider '{id}'. Supported: {string.Join(\", \", supported)}\");\nvar adapter = AssetGenProviders.Image(id);","typeGuard":"static readonly HashSet<string> KnownImageProviders = new HashSet<string> { \"fal\", \"openrouter\" };\nstatic bool IsKnownImageProvider(string id) => KnownImageProviders.Contains((id ?? \"\").ToLowerInvariant());","tryCatchPattern":"try { var adapter = AssetGenProviders.Image(id); }\ncatch (NotSupportedException ex) when (ex.Message.Contains(\"Unknown image provider\"))\n{\n    var adapter = AssetGenProviders.Image(\"fal\");\n}","preventionTips":["Filter AssetGenProviders.List() by Kind == 'image' to get valid ids.","Validate AI-suggested provider names against the supported set.","Do not assume a model provider id is also a valid image provider id."],"tags":["assetgen","provider","validation"],"backgroundTag":null,"analyzedSha":"c21bf496bca87d54e75bad048563c3adb1782081","analyzedAt":"2026-08-13T17:36:56.095Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}