microsoft/semantic-kernel · error · NotSupportedException

The provided response modalities '{responseModalitiesString}

Error message

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

What it means

Thrown inside GetResponseModalities when executionSettings.Modalities is a single string and Enum.TryParse<ChatResponseModalities> fails (case-insensitive). The string is not a valid member of the ChatResponseModalities flags enum.

Source

Thrown at dotnet/src/Connectors/Connectors.AzureOpenAI/Core/AzureClientCore.ChatCompletion.cs:185

        }

        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)
            {
                var modalityString = responseModalitiesElement.GetString();
                if (Enum.TryParse<ChatResponseModalities>(modalityString, true, out var parsedResponseModalities))
                {
                    return parsedResponseModalities;
                }

                throw new NotSupportedException($"The provided response modalities '{modalityString}' is not supported.");
            }

            if (responseModalitiesElement.ValueKind == JsonValueKind.Array)
            {
                try

View on GitHub (pinned to c028a0c7dc)

Solutions

  1. Pass a single valid enum name: "Text", "Audio", "Image", or "Default".
  2. For multiple modalities pass an IEnumerable<string> (handled by ParseResponseModalitiesEnumerable) or a ChatResponseModalities flags value (e.g. ChatResponseModalities.Text | ChatResponseModalities.Audio).
  3. Validate the string with Enum.TryParse before assignment.

Example fix

// before
settings.Modalities = "Text,Audio"; // single string, parse fails (no comma-split)
// throws: The provided response modalities 'Text,Audio' is not supported.

// after
settings.Modalities = new[] { "Text", "Audio" };
Defensive patterns

Strategy: validation

Validate before calling

static bool IsValidModality(string s) => Enum.TryParse<ChatResponseModalities>(s, true, out _);

// before assigning
if (!IsValidModality(modalityString))
    throw new ArgumentException($"'{modalityString}' is not a ChatResponseModalities value.");

Type guard

bool IsValidSingleModality(string s) => Enum.TryParse<ChatResponseModalities>(s, true, out _);

Try / catch

try { /* assign settings.Modalities = "Text" */ }
catch (NotSupportedException ex) when (ex.Message.Contains("response modalities"))
{ throw new ConfigurationException("Use a single ChatResponseModalities name or an array for multiple.", ex); }

Prevention

When it happens

Trigger: Setting Modalities = "video" (or any other non-member string such as "txt", "Voice", or a comma-separated "Text,Audio"). Enum.TryParse does not split commas, so 'Text,Audio' as one string also fails.

Common situations: Passing a comma-separated multi-modality string instead of an array. Typo in the modality name. Using a modality not supported by the enum version in use.

Related errors


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