BerriAI/litellm · error · HTTPException

Model is required in dotprompt metadata

Error message

Model is required in dotprompt metadata

What it means

Dotprompt ingestion guard: after parsing the frontmatter of the supplied dotprompt content, the template metadata contains no 'model' field. The model is mandatory because the resulting prompt spec must be routable to a provider; the request is rejected with 400 before any rendering/storage.

Source

Thrown at litellm/proxy/prompts/prompt_endpoints.py:1235

        user_api_base,
        user_max_tokens,
        user_model,
        user_request_timeout,
        user_temperature,
        version,
    )

    try:
        # Parse the dotprompt content and create PromptTemplate
        prompt_manager: Final = PromptManager()
        frontmatter, template_content = prompt_manager._parse_frontmatter(content=request.dotprompt_content)

        # Create PromptTemplate to leverage existing parameter extraction logic
        template: Final = PromptTemplate(content=template_content, metadata=frontmatter, template_id="test_prompt")

        # Extract model from template
        if not template.model:
            raise HTTPException(status_code=400, detail="Model is required in dotprompt metadata")

        # Always render the template to extract system messages and other metadata
        variables: Final = request.prompt_variables or {}
        rendered_content: Final = prompt_manager.jinja_env.from_string(template_content).render(**variables)

        # Convert rendered content to messages using DotpromptManager's method
        dotprompt_manager: Final = DotpromptManager()
        rendered_messages: Final = dotprompt_manager._convert_to_messages(rendered_content=rendered_content)

        if not rendered_messages:
            raise HTTPException(status_code=400, detail="No messages found in rendered prompt")

        # If conversation history is provided, use it but preserve system messages
        if request.conversation_history:
            # Extract system messages from rendered prompt
            system_messages: Final = [msg for msg in rendered_messages if msg.get("role") == "system"]
            # Use conversation history for user/assistant messages
            messages = system_messages + request.conversation_history

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Add a model field to the dotprompt frontmatter/metadata of the .prompt file.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at litellm/proxy/prompts/prompt_endpoints.py:1235 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18). Data as JSON: /api/errors/d071850110625da6. Report an issue: GitHub.