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

  1. Add the missing value to the enum declaration in the .baml file.
  2. Fix the member name spelling to match the declared enum values exactly (names are case-sensitive).
  3. If overriding at runtime, include the value in the RuntimeEnumOverride.values map.
  4. 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

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


AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12). Data as JSON: /api/errors/676ee8429c4f8a7e. Report an issue: GitHub.