{"record":{"id":"1c266f34204b0056","repo":"microsoft/aspire","slug":"model-version-and-format-must-be-omitted-when-using-a","errorCode":null,"errorMessage":"Model version and format must be omitted when using a FoundryModel.","messagePattern":"Model version and format must be omitted when using a FoundryModel\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Foundry/FoundryExtensions.cs","lineNumber":105,"sourceCode":"    /// <summary>\n    /// Adds a Microsoft Foundry deployment resource to a Microsoft Foundry resource.\n    /// </summary>\n    [AspireExport(\"addDeployment\")]\n    internal static IResourceBuilder<FoundryDeploymentResource> AddDeploymentForPolyglot(\n        this IResourceBuilder<FoundryResource> builder,\n        [ResourceName] string name,\n        [AspireUnion(typeof(FoundryModel), typeof(string))] object model,\n        string? modelVersion = null,\n        string? format = null)\n    {\n        ArgumentNullException.ThrowIfNull(builder);\n        ArgumentNullException.ThrowIfNull(model);\n        ArgumentException.ThrowIfNullOrEmpty(name);\n\n        return model switch\n        {\n            FoundryModel foundryModel when modelVersion is null && format is null => builder.AddDeployment(name, foundryModel),\n            FoundryModel => throw new ArgumentException(\"Model version and format must be omitted when using a FoundryModel.\", nameof(modelVersion)),\n            string modelName when modelVersion is not null && format is not null => builder.AddDeployment(name, modelName, modelVersion, format),\n            string => throw new ArgumentException(\"Model version and format are required when the model is provided as a string.\", nameof(modelVersion)),\n            _ => throw new ArgumentException(\"Model must be a FoundryModel or a string model name.\", nameof(model))\n        };\n    }\n\n    /// <summary>\n    /// Adds and returns a Microsoft Foundry Deployment resource to the application model using a <see cref=\"FoundryModel\"/>.\n    /// </summary>\n    /// <param name=\"builder\">The Microsoft Foundry resource builder.</param>\n    /// <param name=\"name\">The name of the Microsoft Foundry Deployment resource.</param>\n    /// <param name=\"model\">The model descriptor, using the <see cref=\"FoundryModel\"/> class like so: <code lang=\"csharp\">aiFoundry.AddDeployment(name: \"chat\", model: FoundryModel.OpenAI.Gpt5Mini)</code></param>\n    /// <returns>A reference to the <see cref=\"IResourceBuilder{T}\"/>.</returns>\n    /// <remarks>\n    /// <example>\n    /// Create a deployment for the OpenAI GTP-5-mini model:\n    /// <code lang=\"csharp\">\n    /// var builder = DistributedApplication.CreateBuilder(args);","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Foundry/FoundryExtensions.cs#L87-L123","documentation":"AddDeploymentForPolyglot accepts either a FoundryModel object or a plain string model name plus version and format. When a FoundryModel is passed, the version and format are already embedded in the model, so supplying modelVersion or format is contradictory and throws this ArgumentException.","triggerScenarios":"Calling builder.AddDeploymentForPolyglot(name, foundryModelInstance, modelVersion: \"1.0\", format: \"OpenAI\") — passing any non-null version/format alongside a FoundryModel.","commonSituations":"Copy-pasting code that used the string overload then swapping in a FoundryModel without removing the version/format arguments.","solutions":["Remove the modelVersion and format arguments when passing a FoundryModel","If you need explicit version/format, pass the model as a string with both modelVersion and format instead"],"exampleFix":"// before\nbuilder.AddDeploymentForPolyglot(\"deploy\", foundryModel, \"2024-10-01\", \"OpenAI\");\n// after\nbuilder.AddDeploymentForPolyglot(\"deploy\", foundryModel);","handlingStrategy":"validation","validationCode":"if (model is FoundryModel && (modelVersion is not null || format is not null))\n    throw new ArgumentException(\"Do not pass modelVersion/format with a FoundryModel.\");","typeGuard":"bool IsFoundryModel(object? m) => m is FoundryModel;","tryCatchPattern":"try { builder.AddDeploymentForPolyglot(name, model, version, format); }\ncatch (ArgumentException ex) when (ex.Message.Contains(\"must be omitted\")) { /* drop version/format args */ }","preventionTips":["Never pass version/format arguments alongside a FoundryModel instance","Use named arguments so omitted parameters are explicit","Prefer the FoundryModel overload; treat string+version+format as the fallback"],"tags":["azure-foundry","arguments","aspire-hosting"],"backgroundTag":"mutually-exclusive-options","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}