BoundaryML/baml · error

Invalid client provider: {}

Error message

Invalid client provider: {}

What it means

ClientProvider::from_str parses a provider name string into the ClientProvider enum. Any string not matching the known providers (openai, azure-openai, google-ai, vertex-ai, fallback, round-robin, etc.) raises "Invalid client provider: {s}".

Source

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

            )),
            "openai-transcriptions" => Ok(ClientProvider::OpenAI(
                OpenAIClientProviderVariant::Transcriptions,
            )),
            "baml-ollama-chat" => Ok(ClientProvider::OpenAI(OpenAIClientProviderVariant::Ollama)),
            "ollama" => Ok(ClientProvider::OpenAI(OpenAIClientProviderVariant::Ollama)),
            "openrouter" => Ok(ClientProvider::OpenAI(
                OpenAIClientProviderVariant::OpenRouter,
            )),
            "anthropic" => Ok(ClientProvider::Anthropic),
            "baml-anthropic-chat" => Ok(ClientProvider::Anthropic),
            "aws-bedrock" => Ok(ClientProvider::AwsBedrock),
            "google-ai" => Ok(ClientProvider::GoogleAi),
            "vertex-ai" => Ok(ClientProvider::Vertex),
            "fallback" => Ok(ClientProvider::Strategy(StrategyClientProvider::Fallback)),
            "baml-fallback" => Ok(ClientProvider::Strategy(StrategyClientProvider::Fallback)),
            "round-robin" => Ok(ClientProvider::Strategy(StrategyClientProvider::RoundRobin)),
            "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: {}",

View on GitHub (pinned to bd85ce9dee)

Solutions

  1. Use an exact valid provider string: openai, azure-openai, aws-bedrock, google-ai, vertex-ai, fallback, round-robin (or baml- prefixed aliases).
  2. Check BAML docs for the exact provider name for your target model.
  3. Upgrade the BAML runtime if the provider exists only in newer versions.

Example fix

// before
client "Mine" {
  provider "Bedrock"
  options { ... }
}
// after
client "Mine" {
  provider "aws-bedrock"
  options { ... }
}
Defensive patterns

Strategy: try-catch

Validate before calling

const PROVIDERS = ["openai","azure-openai","aws-bedrock","google-ai","vertex-ai","fallback","round-robin"];
if (!PROVIDERS.includes(providerName)) throw new Error(`unknown provider: ${providerName}`);

Try / catch

match s.parse::<ClientProvider>() {
    Ok(p) => p,
    Err(e) => { log::error!("bad provider name: {e}"); return Err(e); }
}

Prevention

When it happens

Trigger: Declaring a BAML client with `provider "..."` set to an unrecognized string, or calling ClientProvider::from_str programmatically with an arbitrary name.

Common situations: Typo like "openai_chat" or "bedrock" (should be "aws-bedrock"); casing mismatches; using a provider added in a newer BAML version than installed.

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/2cf717ca9fee4268. Report an issue: GitHub.