{"record":{"id":"0ed0ae21ae300d9b","repo":"deepset-ai/haystack","slug":"missing-required-input-variables-in-promptbuilder","errorCode":null,"errorMessage":"Missing required input variables in PromptBuilder: {missing_vars_str}. Required variables: {required_variables}. Provided variables: {provided_variables}.","messagePattern":"Missing required input variables in PromptBuilder: (.+?)\\. Required variables: (.+?)\\. Provided variables: (.+?)\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"haystack/components/builders/prompt_builder.py","lineNumber":267,"sourceCode":"        return {\"prompt\": result}\n\n    def _validate_variables(self, provided_variables: set[str]) -> None:\n        \"\"\"\n        Checks if all the required template variables are provided.\n\n        :param provided_variables:\n            A set of provided template variables.\n        :raises ValueError:\n            If any of the required template variables is not provided.\n        \"\"\"\n        if self.required_variables == \"*\":\n            required_variables = sorted(self.variables)\n        else:\n            required_variables = self.required_variables\n        missing_variables = [var for var in required_variables if var not in provided_variables]\n        if missing_variables:\n            missing_vars_str = \", \".join(missing_variables)\n            raise ValueError(\n                f\"Missing required input variables in PromptBuilder: {missing_vars_str}. \"\n                f\"Required variables: {required_variables}. Provided variables: {provided_variables}.\"\n            )\n","sourceCodeStart":249,"sourceCodeEnd":271,"githubUrl":"https://github.com/deepset-ai/haystack/blob/e318778c9bf60a1963e3b5f451359655dd696c30/haystack/components/builders/prompt_builder.py#L249-L271","documentation":"PromptBuilder._validate_variables (called from run) verifies that all required template variables were provided before rendering the Jinja string template. Missing variables raise ValueError with the missing/required/provided lists.","triggerScenarios":"Calling PromptBuilder.run(question=q) on a builder whose template contains more placeholders (e.g. {{ context }}) than were supplied.","commonSituations":"Template edited to add a variable without updating run() callsites; pipeline input not connected; variables= list on the builder enumerating names the caller never passes.","solutions":["Supply the missing variables in the run() kwargs as listed in the error.","Align the builder's variables/required_variables with what callers actually provide.","Remove stale placeholders from the template string."],"exampleFix":"// before\nprompt_builder.run(question=q)\n// after\nprompt_builder.run(question=q, context=docs)","handlingStrategy":"validation","validationCode":"required = set(builder.required_variables or builder.variables or [])\nmissing = required - set(kwargs)\nassert not missing, f'missing template vars: {missing}'","typeGuard":"def has_required_vars(builder, kwargs: dict) -> bool:\n    required = set(builder.required_variables or builder.variables or [])\n    return required.issubset(kwargs.keys())","tryCatchPattern":"try:\n    res = builder.run(**kwargs)\nexcept ValueError as e:\n    if 'Missing required input variables in PromptBuilder' in str(e):\n        kwargs.update(default_variables)\n        res = builder.run(**kwargs)\n    else:\n        raise","preventionTips":["Keep variables list in sync with the template string.","Use a central factory so templates and their inputs change together.","Log required vs provided variables in pipeline debug output."],"tags":["validation","prompt-builder","missing-variable"],"backgroundTag":"missing-required-input","analyzedSha":"e318778c9bf60a1963e3b5f451359655dd696c30","analyzedAt":"2026-08-30T11:45:20.711Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}