microsoft/semantic-kernel · error · ArgumentException

Invalid execution settings, cannot convert to OllamaPromptEx

Error message

Invalid execution settings, cannot convert to OllamaPromptExecutionSettings

What it means

Thrown as an ArgumentException when JsonSerializer.Deserialize<OllamaPromptExecutionSettings> returns null after serializing the incoming PromptExecutionSettings to JSON and attempting conversion. This occurs when the JSON round-trip yields a null object, which is unexpected and indicates the input settings could not be mapped to the Ollama settings type.

Source

Thrown at dotnet/src/Connectors/Connectors.Ollama/Settings/OllamaPromptExecutionSettings.cs:36

    /// Gets the specialization for the Ollama execution settings.
    /// </summary>
    /// <param name="executionSettings">Generic prompt execution settings.</param>
    /// <returns>Specialized Ollama execution settings.</returns>
    public static OllamaPromptExecutionSettings FromExecutionSettings(PromptExecutionSettings? executionSettings)
    {
        switch (executionSettings)
        {
            case null:
                return new();
            case OllamaPromptExecutionSettings settings:
                return settings;
        }

        var json = JsonSerializer.Serialize(executionSettings);
        var ollamaExecutionSettings = JsonSerializer.Deserialize<OllamaPromptExecutionSettings>(json, JsonOptionsCache.ReadPermissive);
        if (ollamaExecutionSettings is null)
        {
            throw new ArgumentException(
            $"Invalid execution settings, cannot convert to {nameof(OllamaPromptExecutionSettings)}",
            nameof(executionSettings));
        }

        // Restore the function choice behavior that lost internal state(list of function instances) during serialization/deserialization process.
        ollamaExecutionSettings!.FunctionChoiceBehavior = executionSettings.FunctionChoiceBehavior;

        return ollamaExecutionSettings;
    }

    /// <summary>
    /// Sets the stop sequences to use. When this pattern is encountered the
    /// LLM will stop generating text and return. Multiple stop patterns may
    /// be set by specifying multiple separate stop parameters in a model file.
    /// </summary>
    [JsonPropertyName("stop")]
    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
    public IList<string>? Stop

View on GitHub (pinned to c028a0c7dc)

Solutions

  1. Pass OllamaPromptExecutionSettings directly if you know you are using Ollama.
  2. Ensure the execution settings object is a valid, non-null instance with serializable properties.
  3. If passing a generic PromptExecutionSettings, verify its properties are compatible with OllamaPromptExecutionSettings schema.

Example fix

// before
var settings = new PromptExecutionSettings(); // generic
// triggers conversion path

// after
var settings = new OllamaPromptExecutionSettings
{
    Temperature = 0.7,
    MaxTokens = 512
};
Defensive patterns

Strategy: type-guard

Validate before calling

if (executionSettings is not null &&
    executionSettings is not OllamaPromptExecutionSettings &&
    executionSettings is not PromptExecutionSettings)
{
    // potentially incompatible; convert explicitly
}

Type guard

static bool IsCompatibleSettings(PromptExecutionSettings? s) =>
    s is null or OllamaPromptExecutionSettings or PromptExecutionSettings;

Prevention

When it happens

Trigger: Passing a PromptExecutionSettings subclass to FromExecutionSettings whose JSON representation deserializes to null for OllamaPromptExecutionSettings; passing a malformed or empty settings object.

Common situations: Cross-connector settings reuse where a settings object incompatible with Ollama is passed; a custom PromptExecutionSettings with unusual serialization behavior; null or default settings that produce empty JSON.

Related errors


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