BoundaryML/baml · error

{ctx}

Error message

{ctx}

What it means

bail_on_error_diagnostics is the shared path for reporting compile-time diagnostics: it renders the project's error diagnostics via check_command::render_project_diagnostics, prints them to stderr after abandoning the reporter, then bails with the supplied `ctx` context string (e.g. "cannot pack: compilation errors found"). The actual error details live in the rendered diagnostics printed above the bail, not in the bail message itself.

Solutions

  1. Read the rendered diagnostics printed above the bail message and fix each reported error in the `.baml` source.
  2. Run `baml check` first for a fast feedback loop, then re-run `baml pack` once clean.
  3. If errors come from generated/checked-in code, regenerate or restore it before packing.

Example fix

// before (broken.baml has a type error)
baml pack --file broken.baml

// after
baml check --file broken.baml
// fix reported diagnostics, then:
baml pack --file broken.baml
Defensive patterns

Strategy: try-catch

Validate before calling

# pre-flight: only pack when check is clean
baml check || { echo "fix compile errors before packing" >&2; exit 2; }

Try / catch

// capture stderr: diagnostics print above the bail message
let out = Command::new("baml")
    .args(["pack", "-f", func])
    .stderr(Stdio::piped())
    .output()?;
if !out.status.success() {
    eprintln!("pack failed:\n{}", String::from_utf8_lossy(&out.stderr));
}

Prevention

When it happens

Trigger: Running `baml pack` (project or standalone mode) when the BAML sources contain compile errors — check_diagnostics or load_and_compile_project detects error-level diagnostics and calls bail_on_error_diagnostics.

Common situations: Syntax errors, type errors, or invalid expressions in `.baml` files; partially edited sources; referencing undefined functions/types; generated code drift after schema changes.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


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

Appendix: source

Thrown at baml_language/crates/baml_cli/src/pack_command.rs:524

    db: &ProjectDatabase,
    diagnostics: &[baml_db::baml_compiler_diagnostics::Diagnostic],
    ctx: &str,
    reporter: &Reporter,
) -> Result<()> {
    let errors: Vec<_> = diagnostics
        .iter()
        .filter(|d| d.severity == Severity::Error)
        .collect();
    if errors.is_empty() {
        return Ok(());
    }
    let rendered = crate::check_command::render_project_diagnostics(
        db,
        &errors.iter().copied().cloned().collect::<Vec<_>>(),
    );
    reporter.abandon();
    eprintln!("{rendered}");
    anyhow::bail!("{ctx}");
}

/// Return the qualified name the engine prefers when both `foo` and
/// `user.foo` resolve to the same function.
/// Suggest user functions whose name is similar to `query`. Ranked by
/// substring containment first, then jaro-winkler similarity. Returns up
/// to 5 display names, sorted.
fn function_suggestions(engine: &BexEngine, query: &str) -> Vec<String> {
    let mut hits: Vec<String> = engine
        .user_functions()
        .into_iter()
        .map(|f| f.display_name)
        .filter(|name| {
            name.contains(query)
                || query.contains(name.as_str())
                || strsim::jaro_winkler(name, query) > 0.7
        })
        .collect();

View on GitHub (pinned to bd85ce9dee)