BoundaryML/baml · error
Enum not found: {}
Error message
Enum not found: {} What it means
Thrown by EnumBuilder::enm(), the resolver used by add_value, set_description, set_alias, alias, description and type_. If the enum is not in the runtime IR, the builder looks in the type-builder graph via maybe_get_enum; when it's absent from both, it bails with 'Enum not found'. You are operating on an enum that exists nowhere.
Source
Thrown at engine/language_client_cffi/src/raw_ptr_wrapper/type_builder/objects.rs:563
mode: NodeRW::ReadOnly,
}
}
fn mode(self, mode: NodeRW) -> Self {
Self { mode, ..self }
}
fn enm(
&self,
rt: &BamlRuntime,
) -> anyhow::Result<std::sync::Arc<std::sync::Mutex<type_builder::EnumBuilder>>> {
// if the IR defines the enum, then its always valid
if rt.ir.find_enum(self.enum_name.as_str()).is_ok() {
return Ok(self.type_builder.upsert_enum(self.enum_name.as_str()));
}
let Some(enm) = self.type_builder.maybe_get_enum(self.enum_name.as_str()) else {
anyhow::bail!("Enum not found: {}", self.enum_name);
};
Ok(enm)
}
fn create_value(&self, name: &str, rt: &BamlRuntime) -> EnumValueBuilder {
let target_mode = match self.mode {
NodeRW::ReadOnly => NodeRW::ReadOnly,
NodeRW::LLMOnly => NodeRW::LLMOnly,
NodeRW::ReadWrite => {
if let Ok(enm) = rt.ir.find_enum(self.enum_name.as_str()) {
if enm.find_value(name).is_some() {
NodeRW::LLMOnly
} else {
NodeRW::ReadWrite
}
} else {
NodeRW::ReadWrite
}View on GitHub (pinned to bd85ce9dee)
Solutions
- Define the enum in the .baml schema, or upsert it first with tb.enum_("Color") and add at least one value.
- Correct the enum name spelling to match the schema.
- Verify the enum wasn't renamed/removed in recent .baml changes.
- Ensure you're using the same TypeBuilder/BamlRuntime the enum was registered on.
Example fix
// before
tb.enum("Collar").add_value(rt, "red")?; // enum 'Collar' doesn't exist
// after
tb.enum("Color").add_value(rt, "red")?; Defensive patterns
Strategy: validation
Validate before calling
if rt.ir.find_enum("Color").is_err() {
// upsert the enum and add values before calling add_value/description/alias
tb.enum_("Color");
} Try / catch
match enum_builder.add_value(rt, "red") {
Err(e) if e.to_string().starts_with("Enum not found") => define_enum_first()?,
other => other,
} Prevention
- Define enums in .baml or upsert them in the type builder before value operations.
- Keep enum names as constants shared between schema and patch code.
- Run a startup check that every enum referenced by runtime patches exists in the IR.
When it happens
Trigger: Calling tb.enum_("Color").add_value(...)/description(...)/alias(...) where enum Color is neither defined in any .baml file nor upserted via tb.enum_(...) with add_value in the current type builder.
Common situations: typos in the enum name; referencing an enum removed or renamed in the schema; building an enum dynamically but calling value-level methods before any registration; wrong TypeBuilder instance.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- Type not found for property {} in class {}
- Enum value already exists: {} in enum {}
- Enum value not found: {} in enum {}
- {0}
- interned member `{name}` cannot be another member's child
AI-assisted analysis of BoundaryML/baml@bd85ce9dee (2026-09-12).
Data as JSON: /api/errors/dbda9d7ee5f14d33.
Report an issue: GitHub.