{"record":{"id":"6ae8a4471b38b197","repo":"BoundaryML/baml","slug":"env-get-expects-exactly-one-argument","errorCode":null,"errorMessage":"env.get expects exactly one argument","messagePattern":"env\\.get expects exactly one argument","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"engine/baml-compiler/src/thir/interpret.rs","lineNumber":1768,"sourceCode":"                } else {\n                    let cell = lookup_cell(scopes, name)\n                        .with_context(|| format!(\"unbound variable `{}` at {:?}\", name, meta.0))?;\n                    EvalValue::Reference(cell)\n                }\n            }\n            Expr::Function(arity, body, meta) => {\n                EvalValue::Function(*arity, body.clone(), meta.clone())\n            }\n            Expr::Call {\n                func,\n                type_args,\n                args,\n                meta: _,\n            } => {\n                if let Expr::Var(func_name, _) = func.as_ref() {\n                    if func_name == \"env.get\" {\n                        if args.len() != 1 {\n                            bail!(\"env.get expects exactly one argument\");\n                        }\n\n                        let key_val = expect_value(\n                            evaluate_expr(\n                                &args[0],\n                                scopes,\n                                thir,\n                                run_llm_function,\n                                watch_handler,\n                                function_name,\n                            )\n                            .await?,\n                        )?;\n\n                        let key = match key_val {\n                            BamlValueWithMeta::String(value, _) => value,\n                            _ => bail!(\"env.get argument must be a string\"),\n                        };","sourceCodeStart":1750,"sourceCodeEnd":1786,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/baml-compiler/src/thir/interpret.rs#L1750-L1786","documentation":"The built-in `env.get(name)` function in the BAML interpreter requires exactly one argument. Calling it with zero or multiple arguments bails with `env.get expects exactly one argument` before any evaluation of the arguments occurs.","triggerScenarios":"`env.get()` with no arguments, or `env.get(\"A\", \"B\")` with two or more, inside interpreted BAML code reached via `evaluate_expr_with_context`.","commonSituations":"Refactoring code that reads several env vars and merging the calls incorrectly; templating that splices in an empty argument list; copy-paste from languages where extra args are ignored.","solutions":["Call `env.get` with exactly one string argument","Split multiple lookups into separate `env.get` calls, one per variable","Check generated/templated BAML for empty or duplicated arguments","Ensure the argument is not accidentally spread from a list"],"exampleFix":"// before\nlet v = env.get(\"A\", \"B\");\n// after\nlet a = env.get(\"A\");\nlet b = env.get(\"B\");","handlingStrategy":"validation","validationCode":"// BAML: pass exactly one string argument\nlet v = env.get(\"MY_VAR\");","typeGuard":null,"tryCatchPattern":"// host-side\nmatch result {\n    Err(e) if e.to_string().contains(\"env.get expects exactly one argument\") => {\n        // fix call arity in the BAML source\n    }\n    other => other?,\n}","preventionTips":["One env.get call per variable","Review templated/generated BAML argument lists","Quote variable names as string literals"],"tags":["baml","env","arity","builtin"],"backgroundTag":"missing-required-argument","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}