{"record":{"id":"2c21d234220ce190","repo":"BoundaryML/baml","slug":"invalid-openai-client-provider-variant","errorCode":null,"errorMessage":"Invalid OpenAI client provider variant: {}","messagePattern":"Invalid OpenAI client provider variant: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/baml-lib/llm-client/src/clientspec.rs","lineNumber":166,"sourceCode":"            \"baml-round-robin\" => Ok(ClientProvider::Strategy(StrategyClientProvider::RoundRobin)),\n            _ => Err(anyhow::anyhow!(\"Invalid client provider: {}\", s)),\n        }\n    }\n}\n\nimpl std::str::FromStr for OpenAIClientProviderVariant {\n    type Err = anyhow::Error;\n\n    fn from_str(s: &str) -> Result<Self, Self::Err> {\n        match s {\n            \"openai\" => Ok(OpenAIClientProviderVariant::Base),\n            \"ollama\" => Ok(OpenAIClientProviderVariant::Ollama),\n            \"azure-openai\" => Ok(OpenAIClientProviderVariant::Azure),\n            \"openai-responses\" => Ok(OpenAIClientProviderVariant::Responses),\n            \"openai-transcriptions\" => Ok(OpenAIClientProviderVariant::Transcriptions),\n            \"openai-generic\" => Ok(OpenAIClientProviderVariant::Generic),\n            \"openrouter\" => Ok(OpenAIClientProviderVariant::OpenRouter),\n            _ => Err(anyhow::anyhow!(\n                \"Invalid OpenAI client provider variant: {}\",\n                s\n            )),\n        }\n    }\n}\n\nimpl std::str::FromStr for StrategyClientProvider {\n    type Err = anyhow::Error;\n\n    fn from_str(s: &str) -> Result<Self, Self::Err> {\n        match s {\n            \"round-robin\" => Ok(StrategyClientProvider::RoundRobin),\n            \"fallback\" => Ok(StrategyClientProvider::Fallback),\n            _ => Err(anyhow::anyhow!(\n                \"Invalid strategy client provider variant: {}\",\n                s\n            )),","sourceCodeStart":148,"sourceCodeEnd":184,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/baml-lib/llm-client/src/clientspec.rs#L148-L184","documentation":"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}\".","triggerScenarios":"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\".","commonSituations":"Typos like \"azure\" (must be \"azure-openai\"); inventing variant names like \"openai-chat\"; misconfiguring strategy sub-clients with non-OpenAI provider strings.","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."],"exampleFix":"// before\nprovider \"azure\"\n// after\nprovider \"azure-openai\"","handlingStrategy":"try-catch","validationCode":"const VARIANTS = [\"openai\",\"azure-openai\",\"ollama\",\"openai-responses\",\"openai-transcriptions\",\"openai-generic\",\"openrouter\"];\nif (!VARIANTS.includes(v)) throw new Error(`unknown OpenAI variant: ${v}`);","typeGuard":null,"tryCatchPattern":"s.parse::<OpenAIClientProviderVariant>().map_err(|e| { eprintln!(\"{e}\"); e })?","preventionTips":["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."],"tags":["openai","enum","parsing"],"backgroundTag":"invalid-enum-value","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}