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
- Use an exact valid provider string: openai, azure-openai, aws-bedrock, google-ai, vertex-ai, fallback, round-robin (or baml- prefixed aliases).
- Check BAML docs for the exact provider name for your target model.
- 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
- Copy provider strings from BAML docs, never from memory.
- Providers are lowercase-hyphenated — beware casing and underscores.
- Pin and upgrade BAML runtime together with generator version to avoid name drift.
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
- Invalid OpenAI client provider variant: {}
- Invalid strategy client provider variant: {}
- undefined variant: {enum_name_str}.{variant_str}
- undefined enum: {enum_name}
- undefined variant: {enum_name}.{variant}
AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12).
Data as JSON: /api/errors/2cf717ca9fee4268.
Report an issue: GitHub.