{"record":{"id":"c47e617113be9fe6","repo":"BoundaryML/baml","slug":"failed-to-render-template","errorCode":null,"errorMessage":"Failed to render template '{}': {}","messagePattern":"Failed to render template '(.+?)': (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"engine/baml-lib/baml-core/src/ir/ir_helpers/mod.rs","lineNumber":2091,"sourceCode":"            })\n            .chain(std::iter::once(template_content.to_string()))\n            .collect::<Vec<_>>()\n            .join(\"\\n\");\n\n        // Use the shared environment (trim_blocks, lstrip_blocks, debug,\n        // null formatter, regex_match/sum filters) to match the prompt renderer.\n        let mut env = get_env();\n        env.add_template(\"__template__\", &full_template)\n            .map_err(|e| anyhow::anyhow!(\"Failed to parse template '{}': {}\", name, e))?;\n\n        let tmpl = env\n            .get_template(\"__template__\")\n            .map_err(|e| anyhow::anyhow!(\"Failed to get template '{}': {}\", name, e))?;\n\n        let context = minijinja::Value::from_serialize(&args_map);\n        let rendered = tmpl\n            .render(context)\n            .map_err(|e| anyhow::anyhow!(\"Failed to render template '{}': {}\", name, e))?;\n\n        Ok(rendered)\n    }\n}\n\n#[cfg(test)]\nmod render_template_tests {\n    use baml_types::TemplateStringRenderer;\n    use repr::make_test_ir;\n\n    use super::*;\n\n    #[test]\n    fn render_basic_template() {\n        let ir = make_test_ir(\n            r##\"\n            template_string Greet(name: string) #\"\n                Hello, {{ name }}!","sourceCodeStart":2073,"sourceCodeEnd":2109,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/baml-lib/baml-core/src/ir/ir_helpers/mod.rs#L2073-L2109","documentation":"BAML renders Jinja templates for prompt parts via minijinja. When tmpl.render(context) fails, the minijinja error is wrapped in this message with the template name. It means the template syntax parsed fine but execution failed — e.g. an undefined variable, a bad filter, or a runtime type error during rendering.","triggerScenarios":"Rendering a BAML prompt/partial template whose body references missing variables not present in args_map, applies an unknown filter, or performs an invalid operation (e.g. iterating a non-iterable) at render time.","commonSituations":"Typo in a variable name inside {{ }} blocks; using a Jinja filter not supported by minijinja; passing args whose shape doesn't match what the template expects; templates copied from Jinja2 docs using unsupported features.","solutions":["Read the inner minijinja error after ': {}' — it names the exact variable/filter that failed.","Verify every {{ var }} in the template exists in the args passed to the function.","Replace unsupported Jinja2 filters/syntax with minijinja-compatible equivalents.","Print or log args_map before rendering to confirm keys match template references."],"exampleFix":"// before\n{{ user.nmae | upper }}\n// after\n{{ user.name | upper }}","handlingStrategy":"validation","validationCode":"fn template_vars_ok(template: &str, args: &serde_json::Map<String, serde_json::Value>) -> bool {\n    // crude check: every {{ var }} referenced has a matching arg key\n    template.match_indices(\"{{\").all(|(i, _)| {\n        let rest = &template[i + 2..];\n        let name: String = rest.chars().take_while(|c| !c.is_whitespace() && *c != '|' && *c != '}').collect();\n        name.is_empty() || args.contains_key(&name)\n    })\n}","typeGuard":null,"tryCatchPattern":"match render_template(&name, &args) {\n    Ok(r) => r,\n    Err(e) if e.to_string().contains(\"Failed to render template\") => {\n        eprintln!(\"render failed: {e:#}\"); // inner error names the bad var/filter\n        fallback_template()\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Cross-check every {{ var }} against the args you pass.","Stick to minijinja-supported filters and syntax.","Unit-test prompt templates with representative args."],"tags":["jinja","template","render","baml"],"backgroundTag":"template-render-failed","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}