BoundaryML/baml · error
Enum {} does not have a value: {}
Error message
Enum {} does not have a value: {} What it means
Thrown by find_enum_value when the enum itself resolves (or is overridden) but the specific value_name being looked up exists neither in the enum's IR values nor in the override's values map. The renderer cannot render a symbol/value that the schema never declared.
Source
Thrown at engine/baml-runtime/src/internal/prompt_renderer/render_output_format.rs:191
enum_name: &str,
value_name: &str,
enum_walker: &Result<EnumWalker<'_>>,
overrides: &Option<&RuntimeEnumOverride>,
ctx: &RuntimeContext,
) -> Result<Option<(Name, Option<String>)>> {
if enum_walker.is_err() && overrides.is_none() {
anyhow::bail!("Enum {} does not exist", enum_name);
}
let value_walker = match enum_walker {
Ok(e) => e.find_value(value_name),
Err(_) => None,
};
let value_overrides = overrides.map(|o| o.values.get(value_name)).flatten();
if value_overrides.is_none() && value_walker.is_none() {
anyhow::bail!("Enum {} does not have a value: {}", enum_name, value_name);
}
let mut skip = OverridableValue::Unset;
let mut alias = OverridableValue::Unset;
let mut desc = OverridableValue::Unset;
if let Some(attrs) = value_overrides {
match attrs.skip {
Some(true) => return Ok(None),
Some(false) => skip = OverridableValue::Set(false),
None => {}
}
alias = OverridableValue::<String>::from(attrs.alias.as_ref());
desc = OverridableValue::<String>::from(attrs.meta.get("description"));
}
let eval_ctx = ctx.eval_ctx(false);
if let Some(value) = value_walker {View on GitHub (pinned to bd85ce9dee)
Solutions
- Add the missing value to the enum declaration in the .baml file.
- Fix the member name spelling to match the declared enum values exactly (names are case-sensitive).
- If overriding at runtime, include the value in the RuntimeEnumOverride.values map.
- Search the codebase for stale references to a removed enum member.
Example fix
// before (baml)
enum Category { A B }
// field uses Category.Sale
// after
enum Category { A B Sale } Defensive patterns
Strategy: validation
Validate before calling
// verify the enum value exists before referencing it
let values = enum_walker.values().iter().map(|v| v.name()).collect::<Vec<_>>();
assert!(values.contains(&value_name), "{} not in {:?}", value_name, values); Prevention
- Use editor LSP/baml-cli check for schema-time validation of enum members.
- Search-and-verify renamed enum members across .baml files and tests.
- Keep runtime override value sets in sync with the declared enum.
When it happens
Trigger: A class field, enum alias, or test override references an enum member name like Category.Sale that is not one of the declared values and not present in RuntimeEnumOverride.values.
Common situations: Misspelled enum member (e.g. SALE vs Sale); a member was removed in a schema refactor while prompts/tests still reference it; providing an override enum without all needed values.
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
- Enum {} does not exist
- Schema inconsistency: {message}
- Non-regular recursive generic class '{class}' expands from '
- Output definitions '{first}' and '{second}' both render as '
- Type alias definitions for '{rendered_name}' have non-equiva
AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12).
Data as JSON: /api/errors/676ee8429c4f8a7e.
Report an issue: GitHub.