microsoft/semantic-kernel · error · NotSupportedException

The provided response modalities '{responseModalitiesString}

Error message

The provided response modalities '{responseModalitiesString}' is not supported.

What it means

Thrown when Modalities is a single string that fails case-insensitive Enum.TryParse against ChatResponseModalities. The whole token is reported. This is the scalar counterpart of error 394.

Source

Thrown at dotnet/src/Connectors/Connectors.OpenAI/Core/ClientCore.ChatCompletion.cs:1159

        }

        if (executionSettings.Modalities is ChatResponseModalities responseModalities)
        {
            return responseModalities;
        }

        if (executionSettings.Modalities is IEnumerable<string> responseModalitiesStrings)
        {
            return ParseResponseModalitiesEnumerable(responseModalitiesStrings);
        }

        if (executionSettings.Modalities is string responseModalitiesString)
        {
            if (Enum.TryParse<ChatResponseModalities>(responseModalitiesString, true, out var parsedResponseModalities))
            {
                return parsedResponseModalities;
            }
            throw new NotSupportedException($"The provided response modalities '{responseModalitiesString}' is not supported.");
        }

        if (executionSettings.Modalities is JsonElement responseModalitiesElement)
        {
            if (responseModalitiesElement.ValueKind == JsonValueKind.String &&
                Enum.TryParse<ChatResponseModalities>(responseModalitiesElement.GetString(), true, out var parsedResponseModalities))
            {
                return parsedResponseModalities;
            }

            if (responseModalitiesElement.ValueKind == JsonValueKind.Array)
            {
                var modalitiesEnumeration = JsonSerializer.Deserialize<IEnumerable<string>>(responseModalitiesElement.GetRawText())!;
                return ParseResponseModalitiesEnumerable(modalitiesEnumeration);
            }

            throw new NotSupportedException($"The provided response modalities '{executionSettings.Modalities?.GetType()}' is not supported.");
        }

View on GitHub (pinned to c028a0c7dc)

Solutions

  1. Pass a single valid ChatResponseModalities name (e.g. 'Text', 'Audio', 'Default'), case-insensitive.
  2. For combinations, use the flags form (e.g. 'Text, Audio' as the enum allows) or supply an array.
  3. Avoid comma-bundling multiple modalities in one string unless the enum supports flags parsing.

Example fix

// before
settings.Modalities = "text,audio";
// after
settings.Modalities = new[] { "text", "audio" };
Defensive patterns

Strategy: validation

Validate before calling

static string NormalizeModalityString(string? s) { if (s is not null && Enum.TryParse<ChatResponseModalities>(s, true, out _)) return s; throw new ArgumentException($"Unknown modality {s}"); }

Type guard

static bool IsValidModalityString(string? s) => s is not null && Enum.TryParse<ChatResponseModalities>(s, true, out _);

Try / catch

try { await client.GetChatCompletionAsync(...); }
catch (NotSupportedException ex) when (ex.Message.Contains("response modalities")) { /* use array form for combinations */ }

Prevention

When it happens

Trigger: executionSettings.Modalities is a string like 'video', 'txt', or 'text,audio' (comma-bundled instead of a flags enum name) that does not match a single enum member.

Common situations: Passing a comma-separated list as one string instead of an array; typos; mixing in non-enum tokens.

Related errors


AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13). Data as JSON: /api/errors/773be2107d16d4b0. Report an issue: GitHub.