Files
ai-rpg/app/prompts/registry.py

50 lines
1.6 KiB
Python
Raw Permalink Normal View History

2026-06-20 19:13:05 +03:00
"""Prompt registry — single entry point: `get_prompt(stage, language)`.
Per §10.1 of the TDD, all LLM prompts are stored in English (the "ru" key is
legacy and not used for new development). The narrative output language is
controlled by passing `{language}` into the prompt at format time.
"""
from __future__ import annotations
from app.prompts.stages import (
intro_scene,
orchestrator_phase1,
orchestrator_phase2,
orchestrator_phase3_suggest,
orchestrator_phase3_summary,
subagent,
summary,
world_builder_entities,
world_builder_env,
world_builder_schema,
world_editor,
)
# Map stage name -> module
_STAGE_MODULES = {
"world_builder_schema": world_builder_schema,
"world_builder_env": world_builder_env,
"world_builder_entities": world_builder_entities,
"world_editor": world_editor,
"orchestrator_phase1": orchestrator_phase1,
"orchestrator_phase2": orchestrator_phase2,
"orchestrator_phase3_summary": orchestrator_phase3_summary,
"orchestrator_phase3_suggest": orchestrator_phase3_suggest,
"intro_scene": intro_scene,
"subagent": subagent,
"summary": summary,
}
def get_prompt(stage: str, language: str = "en") -> str:
"""Return the prompt template string for the given stage and language.
Falls back to English if the requested language is not available.
"""
mod = _STAGE_MODULES.get(stage)
if mod is None:
raise KeyError(f"Unknown prompt stage: {stage!r}")
prompts: dict[str, str] = getattr(mod, "PROMPTS", {})
return prompts.get(language, prompts.get("en", ""))