{"record":{"id":"3baf13e94e4cbb8c","repo":"microsoft/semantic-kernel","slug":"the-provided-reasoning-effort-effortlevelobject","errorCode":null,"errorMessage":"The provided reasoning effort '{effortLevelObject.GetType()}' is not supported.","messagePattern":"The provided reasoning effort '(.+?)' is not supported\\.","errorType":"validation","errorClass":"NotSupportedException","httpStatus":null,"severity":"error","filePath":"dotnet/src/Connectors/Connectors.OpenAI/Core/ClientCore.ChatCompletion.cs","lineNumber":581,"sourceCode":"\n        if (effortLevelObject is ChatReasoningEffortLevel effort)\n        {\n            return effort;\n        }\n\n        if (effortLevelObject is string textEffortLevel)\n        {\n            return textEffortLevel.ToUpperInvariant() switch\n            {\n                \"LOW\" => ChatReasoningEffortLevel.Low,\n                \"MEDIUM\" => ChatReasoningEffortLevel.Medium,\n                \"HIGH\" => ChatReasoningEffortLevel.High,\n                \"MINIMAL\" => new(\"minimal\"),\n                _ => throw new NotSupportedException($\"The provided reasoning effort '{textEffortLevel}' is not supported.\")\n            };\n        }\n\n        throw new NotSupportedException($\"The provided reasoning effort '{effortLevelObject.GetType()}' is not supported.\");\n    }\n\n    protected static ChatWebSearchOptions? GetWebSearchOptions(OpenAIPromptExecutionSettings executionSettings)\n    {\n        if (executionSettings.WebSearchOptions is null)\n        {\n            return null;\n        }\n\n        if (executionSettings.WebSearchOptions is ChatWebSearchOptions webSearchOptions)\n        {\n            return webSearchOptions;\n        }\n\n        if (executionSettings.WebSearchOptions is string webSearchOptionsString)\n        {\n            return ModelReaderWriter.Read<ChatWebSearchOptions>(BinaryData.FromString(webSearchOptionsString));\n        }","sourceCodeStart":563,"sourceCodeEnd":599,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/dotnet/src/Connectors/Connectors.OpenAI/Core/ClientCore.ChatCompletion.cs#L563-L599","documentation":"Sibling throw to 381: it fires when ReasoningEffort is supplied as an object that is neither the native ChatReasoningEffortLevel enum nor a string. The connector supports exactly those two shapes; anything else (int, bool, JsonElement of non-string kind, anonymous object) has no defined conversion, so the actual runtime type is reported.","triggerScenarios":"ReasoningEffort is deserialized from JSON into a non-string JsonElement or passed as a numeric/boolean/object value. For example, binding 'reasoning_effort': 1 from config, or feeding a JObject.","commonSituations":"Loading execution settings from appsettings.json where the value is a number; serializing settings across processes and losing the original type; MCP/config-driven pipelines that emit arbitrary JSON values.","solutions":["Provide ReasoningEffort as a string ('low'/'medium'/'high'/'minimal') or as a ChatReasoningEffortLevel enum instance.","If the value comes from JSON, ensure it is a JSON string token, not a number or object.","Coerce/normalize the value to a string before assigning it to the settings."],"exampleFix":"// before\nsettings.ReasoningEffort = 1; // or JsonElement number\n// after\nsettings.ReasoningEffort = \"medium\";","handlingStrategy":"type-guard","validationCode":"object SetReasoningEffort(object value) => value switch { string s when ValidEfforts.Contains(s) => s.ToLowerInvariant(), ChatReasoningEffortLevel => value, _ => throw new ArgumentException(\"ReasoningEffort must be string or ChatReasoningEffortLevel\") };","typeGuard":"static bool IsSupportedEffortObject(object? o) => o is string s ? ValidEfforts.Contains(s) : o is ChatReasoningEffortLevel;","tryCatchPattern":"try { await client.GetChatCompletionAsync(...); }\ncatch (NotSupportedException ex) when (ex.Message.Contains(\"reasoning effort\")) { settings.ReasoningEffort = \"medium\"; }","preventionTips":["Ensure JSON config deserializes ReasoningEffort as a string, not a number.","Avoid anonymous/object types for this field."],"tags":["openai","reasoning","chat-completion","type-coercion"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}