BoundaryML/baml · error

Invalid OpenAI client provider variant: {}

Error message

Invalid OpenAI client provider variant: {}

What it means

OpenAIClientProviderVariant::from_str parses an OpenAI-family provider variant string (openai, azure-openai, ollama, openai-responses, openai-transcriptions, openai-generic, openrouter). Unknown strings raise "Invalid OpenAI client provider variant: {s}".

Source

Thrown at engine/baml-lib/llm-client/src/clientspec.rs:166

            "baml-round-robin" => Ok(ClientProvider::Strategy(StrategyClientProvider::RoundRobin)),
            _ => Err(anyhow::anyhow!("Invalid client provider: {}", s)),
        }
    }
}

impl std::str::FromStr for OpenAIClientProviderVariant {
    type Err = anyhow::Error;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "openai" => Ok(OpenAIClientProviderVariant::Base),
            "ollama" => Ok(OpenAIClientProviderVariant::Ollama),
            "azure-openai" => Ok(OpenAIClientProviderVariant::Azure),
            "openai-responses" => Ok(OpenAIClientProviderVariant::Responses),
            "openai-transcriptions" => Ok(OpenAIClientProviderVariant::Transcriptions),
            "openai-generic" => Ok(OpenAIClientProviderVariant::Generic),
            "openrouter" => Ok(OpenAIClientProviderVariant::OpenRouter),
            _ => Err(anyhow::anyhow!(
                "Invalid OpenAI client provider variant: {}",
                s
            )),
        }
    }
}

impl std::str::FromStr for StrategyClientProvider {
    type Err = anyhow::Error;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "round-robin" => Ok(StrategyClientProvider::RoundRobin),
            "fallback" => Ok(StrategyClientProvider::Fallback),
            _ => Err(anyhow::anyhow!(
                "Invalid strategy client provider variant: {}",
                s
            )),

View on GitHub (pinned to bd85ce9dee)

Solutions

  1. Use one of the exact variant strings: openai, azure-openai, ollama, openai-responses, openai-transcriptions, openai-generic, openrouter.
  2. Fix casing/typos (variants are lowercase-hyphenated).
  3. If targeting a non-OpenAI provider, use the corresponding ClientProvider instead of an OpenAI variant.

Example fix

// before
provider "azure"
// after
provider "azure-openai"
Defensive patterns

Strategy: try-catch

Validate before calling

const VARIANTS = ["openai","azure-openai","ollama","openai-responses","openai-transcriptions","openai-generic","openrouter"];
if (!VARIANTS.includes(v)) throw new Error(`unknown OpenAI variant: ${v}`);

Try / catch

s.parse::<OpenAIClientProviderVariant>().map_err(|e| { eprintln!("{e}"); e })?

Prevention

When it happens

Trigger: Passing a provider string to the OpenAI variant parser that is not one of the recognized OpenAI-family variants — e.g. "google-ai" or "vllm".

Common situations: Typos like "azure" (must be "azure-openai"); inventing variant names like "openai-chat"; misconfiguring strategy sub-clients with non-OpenAI provider strings.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12). Data as JSON: /api/errors/2c21d234220ce190. Report an issue: GitHub.