{"record":{"id":"a3e8ea2634af39ad","repo":"microsoft/semantic-kernel","slug":"the-provided-response-modalities-modalitystring-a3e8ea","errorCode":null,"errorMessage":"The provided response modalities '{modalityString}' is not supported.","messagePattern":"The provided response modalities '(.+?)' is not supported\\.","errorType":"exception","errorClass":"NotSupportedException","httpStatus":null,"severity":"error","filePath":"dotnet/src/Connectors/Connectors.OpenAI/Core/ClientCore.ChatCompletion.cs","lineNumber":1131,"sourceCode":"    /// <item><description>A string representation of the enum (e.g., \"Text, Audio\")</description></item>\n    /// <item><description>An <see cref=\"IEnumerable{String}\"/> of modality names (e.g., [\"text\", \"audio\"])</description></item>\n    /// <item><description>A <see cref=\"JsonElement\"/> containing either a string, or array of strings</description></item>\n    /// </list>\n    /// </remarks>\n    private static ChatResponseModalities GetResponseModalities(OpenAIPromptExecutionSettings executionSettings)\n    {\n        static ChatResponseModalities ParseResponseModalitiesEnumerable(IEnumerable<string> responseModalitiesStrings)\n        {\n            ChatResponseModalities result = ChatResponseModalities.Default;\n            foreach (var modalityString in responseModalitiesStrings)\n            {\n                if (Enum.TryParse<ChatResponseModalities>(modalityString, true, out var parsedModality))\n                {\n                    result |= parsedModality;\n                }\n                else\n                {\n                    throw new NotSupportedException($\"The provided response modalities '{modalityString}' is not supported.\");\n                }\n            }\n\n            return result;\n        }\n\n        if (executionSettings.Modalities is null)\n        {\n            return ChatResponseModalities.Default;\n        }\n\n        if (executionSettings.Modalities is ChatResponseModalities responseModalities)\n        {\n            return responseModalities;\n        }\n\n        if (executionSettings.Modalities is IEnumerable<string> responseModalitiesStrings)\n        {","sourceCodeStart":1113,"sourceCodeEnd":1149,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/dotnet/src/Connectors/Connectors.OpenAI/Core/ClientCore.ChatCompletion.cs#L1113-L1149","documentation":"Thrown inside ParseResponseModalitiesEnumerable when Modalities is an enumerable of strings and one element does not parse (case-insensitive) into the ChatResponseModalities flags enum (e.g. Text, Audio, Image). The offending token is reported.","triggerScenarios":"executionSettings.Modalities is a string[]/List<string> and contains a value that is not a ChatResponseModalities member, e.g. [\"text\",\"video\"] or [\"txt\"].","commonSituations":"Config-driven modality lists with typos or vendor-specific tokens; copying modality names from a different provider; uppercase/spacing mistakes (Enum.TryParse is case-insensitive but not whitespace-tolerant).","solutions":["Use only ChatResponseModalities member names (Text, Audio, Image, Default, etc.) in the enumerable.","Trim each string before adding it.","If unsure of valid names, enumerate typeof(ChatResponseModalities).GetEnumNames() and filter input."],"exampleFix":"// before\nsettings.Modalities = new[] { \"text\", \"video\" };\n// after\nsettings.Modalities = new[] { \"text\", \"audio\" };","handlingStrategy":"validation","validationCode":"static IEnumerable<string> NormalizeModalities(IEnumerable<string> ms) { var names = typeof(ChatResponseModalities).GetEnumNames(); foreach (var m in ms) { var t = m.Trim(); if (!names.Any(n => n.Equals(t, StringComparison.OrdinalIgnoreCase))) throw new ArgumentException($\"Unknown modality {m}\"); yield return t; } }","typeGuard":"static bool AreModalitiesValid(IEnumerable<string> ms) { var names = typeof(ChatResponseModalities).GetEnumNames(); return ms.All(m => names.Any(n => n.Equals(m.Trim(), StringComparison.OrdinalIgnoreCase))); }","tryCatchPattern":"try { await client.GetChatCompletionAsync(...); }\ncatch (NotSupportedException ex) when (ex.Message.Contains(\"response modalities\")) { /* filter to valid names and retry */ }","preventionTips":["Trim whitespace from each token.","Filter input against GetEnumNames()."],"tags":["openai","chat-completion","response-modalities","enum-parse"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}