microsoft/semantic-kernel · error · NotSupportedException

The provided response modalities '{modalityString}' is not s

Error message

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

What it means

Thrown inside GetResponseModalities (ParseResponseModalitiesEnumerable) when executionSettings.Modalities is an IEnumerable<string> and one element cannot be parsed into the ChatResponseModalities flags enum (case-insensitive Enum.TryParse fails). Each unrecognized modality string triggers this before the rest are processed.

Source

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

    /// <summary>
    /// Gets the response modalities from the execution settings.
    /// </summary>
    /// <param name="executionSettings">The execution settings.</param>
    /// <returns>The response modalities as a <see cref="ChatResponseModalities"/> flags enum.</returns>
    private static ChatResponseModalities GetResponseModalities(OpenAIPromptExecutionSettings executionSettings)
    {
        static ChatResponseModalities ParseResponseModalitiesEnumerable(IEnumerable<string> responseModalitiesStrings)
        {
            ChatResponseModalities result = ChatResponseModalities.Default;
            foreach (var modalityString in responseModalitiesStrings)
            {
                if (Enum.TryParse<ChatResponseModalities>(modalityString, true, out var parsedModality))
                {
                    result |= parsedModality;
                }
                else
                {
                    throw new NotSupportedException($"The provided response modalities '{modalityString}' is not supported.");
                }
            }

            return result;
        }

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

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

        if (executionSettings.Modalities is IEnumerable<string> responseModalitiesStrings)
        {

View on GitHub (pinned to c028a0c7dc)

Solutions

  1. Use only valid ChatResponseModalities names: 'Text', 'Audio', 'Image' (and 'Default'); verify the enum members for your package version.
  2. Validate each modality string against the enum before assigning Modalities.
  3. Load modalities from config via a strongly typed list and reject unknown values early.

Example fix

// before
settings.Modalities = new List<string> { "Text", "Video" };
// throws: The provided response modalities 'Video' is not supported.

// after
settings.Modalities = new List<string> { "Text", "Audio" };
Defensive patterns

Strategy: validation

Validate before calling

static readonly HashSet<string> s_modalities = Enum.GetNames<ChatResponseModalities>().ToHashSet(StringComparer.OrdinalIgnoreCase);

bool ValidateModalities(IEnumerable<string> mods) => mods.All(m => s_modalities.Contains(m));

Type guard

bool AreValidModalities(IEnumerable<string> mods)
    => mods.All(m => Enum.TryParse<ChatResponseModalities>(m, true, out _));

Try / catch

try { /* kernel call with Modalities = new[] { "Text", "Audio" } */ }
catch (NotSupportedException ex) when (ex.Message.Contains("response modalities"))
{ throw new ConfigurationException($"Invalid response modalities. Valid names: {string.Join(", ", Enum.GetNames<ChatResponseModalities>())}.", ex); }

Prevention

When it happens

Trigger: Setting Modalities to a string collection containing a value that is not a member of Azure.AI.OpenAI.Chat.ChatResponseModalities — e.g. new[] { "Text", "Video" } (Video is not a valid member), or a typo like new[] { "txt" }, or new[] { "text", "audoi" }.

Common situations: Loading modalities from config with a misspelled or unsupported modality name. Assuming 'video', 'image-generation', or other non-enum names are accepted. Copying modality strings from a different provider's docs.

Related errors


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