BoundaryML/baml · error
Enum {} does not exist
Error message
Enum {} does not exist What it means
find_enum_value bails with 'Enum {} does not exist' when the provided EnumWalker Result is an Err, meaning the enum could not be resolved from the BAML sources. It is used to resolve enum values (and their aliases/descriptions) referenced from templates or helpers.
Source
Thrown at engine/baml-lib/jsonish/src/helpers/mod.rs:97
let Some(field_walker) = class_walker.find_field(field_name) else {
anyhow::bail!("Class {} does not have a field: {}", class_name, field_name);
};
let name = Name::new_with_alias(field_name.to_string(), field_walker.alias(env_values)?);
let desc = field_walker.description(env_values)?;
let r#type = field_walker.r#type();
let streaming_needed = field_walker.item.attributes.streaming_behavior().needed;
Ok((name, r#type.clone(), desc, streaming_needed))
}
fn find_enum_value(
enum_name: &str,
value_name: &str,
enum_walker: &Result<EnumWalker<'_>>,
env_values: &EvaluationContext<'_>,
) -> Result<Option<(Name, Option<String>)>> {
if enum_walker.is_err() {
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_walker = match value_walker {
Some(v) => v,
None => return Ok(None),
};
if value_walker.skip(env_values)? {
return Ok(None);
}
let name = Name::new_with_alias(value_name.to_string(), value_walker.alias(env_values)?);
let desc = value_walker.description(env_values)?;View on GitHub (pinned to bd85ce9dee)
Solutions
- Fix the enum name in the template/helper call to match an enum declared in your .baml files.
- Confirm the enum's .baml file is included and compiles (run baml-cli to list/validate schemas).
- Regenerate after renames so all references update together.
- Validate referenced enum names in CI to catch drift early.
Example fix
// before
{{ enum_descriptions["Sentiemnt"] }}
// after
{{ enum_descriptions["Sentiment"] }} Defensive patterns
Strategy: validation
Validate before calling
// before resolving enum values in templates
let enum_walker = env.find_enum(enum_name);
if enum_walker.is_err() {
return Err(anyhow::anyhow!("template references unknown enum '{}' — check .baml files", enum_name));
} Type guard
fn enum_resolves(env: &FunctionCfg, name: &str) -> bool { env.find_enum(name).is_ok() } Try / catch
match find_enum_value(enum_name, value_name, &enum_walker, &env) {
Ok(v) => use_value(v),
Err(err) => return Err(err.context("template references an enum not defined in .baml")),
} Prevention
- Only reference enums declared in loaded .baml files
- Validate templates with baml-cli in CI
- Regenerate all references together after enum renames
When it happens
Trigger: relevant_data_models calls find_enum_value with enum_walker = env.find_enum(enum_name) returning Err — the enum name passed from a template/helper has no matching enum declaration.
Common situations: Typos in enum names in jinja templates; enum deleted or renamed while references remain; BAML file containing the enum not included in the project/loaded context.
Related errors
- Enum {name} not found
- Class {} does not exist
- Class {} does not have a field: {}
- value metadata omitted codec
- value metadata omitted availability
AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12).
Data as JSON: /api/errors/a5903b20cf58ecb0.
Report an issue: GitHub.