Build systems to version, store, and manage prompts at scale.
## Why Prompt Management?
Problems without management: - Prompts scattered in code - No history of changes - Can't rollback bad prompts - No visibility into what's in production - Team collaboration chaos
## Prompt Registry Design
### Schema Design ```python @dataclass class PromptVersion: id: str prompt_name: str version: int template: str variables: List[str] model: str temperature: float created_by: str created_at: datetime status: str # draft, testing, production, deprecated metadata: Dict[str, Any]
class PromptRegistry: def get_prompt(self, name: str, version: str = "production"): if version == "production": return self.get_production_version(name) return self.get_specific_version(name, version) def create_version(self, name: str, template: str, **kwargs): current = self.get_latest_version(name) new_version = current.version + 1 if current else 1 prompt = PromptVersion( id=generate_id(), prompt_name=name, version=new_version, template=template, status="draft", **kwargs ) self.store.save(prompt) return prompt ```
### Environment-Based Promotion ``` Workflow: Draft → Testing → Staging → Production
Each environment can have different versions: ├── Development: v15 (latest) ├── Staging: v14 (testing) └── Production: v12 (stable) ```
## Template Systems ```python from jinja2 import Template
prompt_template = """ You are a {{ role }} assistant.
Context: {{ context }}
User Query: {{ query }}
{% if examples %} Examples: {% for example in examples %} - Input: {{ example.input }} Output: {{ example.output }} {% endfor %} {% endif %}
Respond in {{ format }} format. """
def render_prompt(template, **variables): return Template(template).render(**variables) ```