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

  1. Fix the enum name in the template/helper call to match an enum declared in your .baml files.
  2. Confirm the enum's .baml file is included and compiles (run baml-cli to list/validate schemas).
  3. Regenerate after renames so all references update together.
  4. 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

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


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