rohitg00/ai-engineering-from-scratch · error · ValueError

Missing variables for

Error message

Missing variables for {pattern_name}: {missing}

What it means

build_prompt validates that the variables dict contains every placeholder the selected pattern declares in pattern['variables']; absent keys are collected into 'missing' and reported. The input at fault is the variables dict passed by run_test_suite or run_single_prompt_demo, since .format() would otherwise KeyError later.

Solutions

  1. Supply every variable the pattern template requires
  2. Inspect PROMPT_PATTERNS[pattern_name]['variables'] to see the required keys
  3. Render with template.format_map(defaultdict(str)) if partial rendering is acceptable
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at phases/11-llm-engineering/01-prompt-engineering/code/prompt_engineering.py:177 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of rohitg00/ai-engineering-from-scratch@39ea8a1c6d (2026-08-26). Data as JSON: /api/errors/d0e6af713def6ee2. Report an issue: GitHub.

Appendix: source

Thrown at phases/11-llm-engineering/01-prompt-engineering/code/prompt_engineering.py:177

        "context_window": 1_000_000,
    },
    "gemini-1.5-pro": {
        "provider": "google",
        "model": "gemini-2.5-pro",
        "max_tokens": 2048,
        "context_window": 1_000_000,
    },
}


def build_prompt(pattern_name, variables, system_override=None):
    pattern = PROMPT_PATTERNS.get(pattern_name)
    if not pattern:
        raise ValueError(f"Unknown pattern: {pattern_name}. Available: {list(PROMPT_PATTERNS.keys())}")

    missing = [v for v in pattern["variables"] if v not in variables]
    if missing:
        raise ValueError(f"Missing variables for {pattern_name}: {missing}")

    rendered = pattern["template"].format(**variables)
    system = system_override or f"You are an AI assistant using the {pattern['name']}."

    return {
        "system": system,
        "user": rendered,
        "temperature": pattern["temperature"],
        "pattern": pattern_name,
        "metadata": {
            "description": pattern["description"],
            "variables_used": list(variables.keys()),
        },
    }


def build_multi_turn(pattern_name, turns, system_override=None):
    pattern = PROMPT_PATTERNS.get(pattern_name)

View on GitHub (pinned to 39ea8a1c6d)