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
- Use one of the exact variant strings: openai, azure-openai, ollama, openai-responses, openai-transcriptions, openai-generic, openrouter.
- Fix casing/typos (variants are lowercase-hyphenated).
- 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
- Use exact variant spellings ("azure-openai", not "azure").
- Keep a lookup table of valid variants in tooling that generates configs.
- Check the from_str match arms in clientspec.rs when in doubt.
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
- Invalid client provider: {}
- 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/2c21d234220ce190.
Report an issue: GitHub.