{"record":{"id":"b5e137e4415380f5","repo":"CoplayDev/unity-mcp","slug":"unknown-audio-provider-id","errorCode":null,"errorMessage":"Unknown audio provider '{id}'.","messagePattern":"Unknown audio provider '(.+?)'\\.","errorType":"validation","errorClass":"NotSupportedException","httpStatus":null,"severity":"error","filePath":"MCPForUnity/Editor/Services/AssetGen/Providers/AssetGenProviders.cs","lineNumber":48,"sourceCode":"            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            {\n                case \"sketchfab\":\n                    return new SketchfabAdapter();\n                default:\n                    throw new NotSupportedException($\"Unknown marketplace provider '{id}'.\");\n            }\n        }\n\n        public static IReadOnlyList<ProviderInfo> List()\n        {\n            return new List<ProviderInfo>\n            {","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/CoplayDev/unity-mcp/blob/c21bf496bca87d54e75bad048563c3adb1782081/MCPForUnity/Editor/Services/AssetGen/Providers/AssetGenProviders.cs#L30-L66","documentation":"AssetGenProviders.Audio lowercases the provider id and switches over it, returning an adapter for known audio providers ('fal' only). Any other id hits default and throws NotSupportedException.","triggerScenarios":"Calling Audio() with an id other than 'fal', such as 'elevenlabs', 'suno', or a typo.","commonSituations":"An AI/LLM hallucinating an audio provider; assuming a provider that exists for images also exists for audio; config referencing an unimplemented audio provider.","solutions":["Use the supported audio provider id: 'fal'.","Enumerate providers via AssetGenProviders.List() and filter by Kind == 'audio' before selecting.","If you need an unlisted audio provider, it must be implemented and registered first."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"var supported = AssetGenProviders.List().Where(p => p.Kind == \"audio\").Select(p => p.Id).ToHashSet();\nif (!supported.Contains(id.ToLowerInvariant()))\n    throw new ArgumentException($\"Unknown audio provider '{id}'. Supported: {string.Join(\", \", supported)}\");\nvar adapter = AssetGenProviders.Audio(id);","typeGuard":"static readonly HashSet<string> KnownAudioProviders = new HashSet<string> { \"fal\" };\nstatic bool IsKnownAudioProvider(string id) => KnownAudioProviders.Contains((id ?? \"\").ToLowerInvariant());","tryCatchPattern":"try { var adapter = AssetGenProviders.Audio(id); }\ncatch (NotSupportedException ex) when (ex.Message.Contains(\"Unknown audio provider\"))\n{\n    var adapter = AssetGenProviders.Audio(\"fal\");\n}","preventionTips":["Only 'fal' is supported for audio today; validate against List().","Do not forward image-only provider ids to the audio path.","Re-check supported ids after upgrades, since the set may grow."],"tags":["assetgen","provider","validation","audio"],"backgroundTag":null,"analyzedSha":"c21bf496bca87d54e75bad048563c3adb1782081","analyzedAt":"2026-08-13T17:36:56.095Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}