{"record":{"id":"edd409a3b8af5874","repo":"CoplayDev/unity-mcp","slug":"unknown-model-provider-id","errorCode":null,"errorMessage":"Unknown model provider '{id}'.","messagePattern":"Unknown model provider '(.+?)'\\.","errorType":"validation","errorClass":"NotSupportedException","httpStatus":null,"severity":"error","filePath":"MCPForUnity/Editor/Services/AssetGen/Providers/AssetGenProviders.cs","lineNumber":24,"sourceCode":"{\n    /// <summary>\n    /// Factory + registry for asset-gen provider adapters. Resolves a provider id to its adapter\n    /// (model: tripo/meshy; image: fal/openrouter; audio: fal; marketplace: sketchfab); unknown ids\n    /// throw <see cref=\"NotSupportedException\"/>. <see cref=\"List\"/> advertises providers and reports\n    /// <c>Configured</c> existence only — never a key value.\n    /// </summary>\n    public static class AssetGenProviders\n    {\n        public static IModelProviderAdapter Model(string id)\n        {\n            switch ((id ?? string.Empty).ToLowerInvariant())\n            {\n                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        {","sourceCodeStart":6,"sourceCodeEnd":42,"githubUrl":"https://github.com/CoplayDev/unity-mcp/blob/c21bf496bca87d54e75bad048563c3adb1782081/MCPForUnity/Editor/Services/AssetGen/Providers/AssetGenProviders.cs#L6-L42","documentation":"AssetGenProviders.Model lowercases the provider id and switches over it, returning an adapter for known model providers ('tripo', 'meshy'). Any other id hits default and throws NotSupportedException. The supported ids are enumerated in List().","triggerScenarios":"Calling Model() with an id not in the switch, such as a typo ('tripo3d', 'mshy'), a case-variant that still fails, or an unsupported provider name.","commonSituations":"An AI/LLM hallucinating a provider name; config referencing an old or renamed provider; a caller assuming a provider exists for models when it only exists for another kind.","solutions":["Use a supported model provider id: 'tripo' or 'meshy'.","Call AssetGenProviders.List() to enumerate the current supported set and kinds before choosing.","Fix typos and ensure the id is passed exactly (casing does not matter due to lowercasing)."],"exampleFix":"// before\nvar adapter = AssetGenProviders.Model(\"tripo3d\"); // typo\n\n// after\nvar adapter = AssetGenProviders.Model(\"tripo\");","handlingStrategy":"validation","validationCode":"var supported = AssetGenProviders.List().Where(p => p.Kind == \"model\").Select(p => p.Id).ToHashSet();\nif (!supported.Contains(id.ToLowerInvariant()))\n    throw new ArgumentException($\"Unknown model provider '{id}'. Supported: {string.Join(\", \", supported)}\");\nvar adapter = AssetGenProviders.Model(id);","typeGuard":"static readonly HashSet<string> KnownModelProviders = new HashSet<string> { \"tripo\", \"meshy\" };\nstatic bool IsKnownModelProvider(string id) => KnownModelProviders.Contains((id ?? \"\").ToLowerInvariant());","tryCatchPattern":"try { var adapter = AssetGenProviders.Model(id); }\ncatch (NotSupportedException ex) when (ex.Message.Contains(\"Unknown model provider\"))\n{\n    // Correct the id or fall back to a configured default model provider.\n    var adapter = AssetGenProviders.Model(\"tripo\");\n}","preventionTips":["Enumerate AssetGenProviders.List() and filter by Kind before choosing an id.","Keep a local constant of supported ids to validate user/AI input.","Treat provider ids as exact tokens (case-insensitive)."],"tags":["assetgen","provider","validation"],"backgroundTag":null,"analyzedSha":"c21bf496bca87d54e75bad048563c3adb1782081","analyzedAt":"2026-08-13T17:36:56.095Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}