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
- Pass a single valid ChatResponseModalities name (e.g. 'Text', 'Audio', 'Default'), case-insensitive.
- For combinations, use the flags form (e.g. 'Text, Audio' as the enum allows) or supply an array.
- 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
- Pass combinations as an array, not a comma string.
- Validate with Enum.TryParse before assigning.
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
- The provided response modalities '{modalityString}' is not s
- The provided response modalities '{executionSettings.Modalit
- Failed to get a response from the chat completion service.
- The provided reasoning effort '{textEffortLevel}' is not sup
- The provided reasoning effort '{effortLevelObject.GetType()}
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/773be2107d16d4b0.
Report an issue: GitHub.