Coverage for src / mcp_server_langgraph / core / prompts / __init__.py: 100%
28 statements
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-03 00:43 +0000
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-03 00:43 +0000
1"""
2Centralized Prompt Management with XML Structure
4Implements Anthropic's prompt engineering best practices:
5- XML tags for structural clarity
6- Right altitude principle (balanced specificity/flexibility)
7- Minimalism with sufficiency
8- Clear sectioning (<role>, <task>, <instructions>, <output_format>)
10References:
11- https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
12"""
14from mcp_server_langgraph.core.prompts.response_prompt import RESPONSE_SYSTEM_PROMPT
15from mcp_server_langgraph.core.prompts.router_prompt import ROUTER_SYSTEM_PROMPT
16from mcp_server_langgraph.core.prompts.verification_prompt import VERIFICATION_SYSTEM_PROMPT
18__all__ = [
19 "RESPONSE_SYSTEM_PROMPT",
20 "ROUTER_SYSTEM_PROMPT",
21 "VERIFICATION_SYSTEM_PROMPT",
22 "get_prompt",
23 "get_prompt_version",
24 "list_prompt_versions",
25]
27# Prompt version registry
28# Format: {prompt_name: {version: prompt_string}}
29_PROMPT_VERSIONS: dict[str, dict[str, str]] = {
30 "router": {
31 "v1": ROUTER_SYSTEM_PROMPT,
32 "latest": ROUTER_SYSTEM_PROMPT,
33 },
34 "response": {
35 "v1": RESPONSE_SYSTEM_PROMPT,
36 "latest": RESPONSE_SYSTEM_PROMPT,
37 },
38 "verification": {
39 "v1": VERIFICATION_SYSTEM_PROMPT,
40 "latest": VERIFICATION_SYSTEM_PROMPT,
41 },
42}
44# Current version metadata
45_PROMPT_METADATA: dict[str, dict[str, str]] = {
46 "router": {"current_version": "v1", "created": "2025-01-15", "last_updated": "2025-01-15"},
47 "response": {"current_version": "v1", "created": "2025-01-15", "last_updated": "2025-01-15"},
48 "verification": {"current_version": "v1", "created": "2025-01-15", "last_updated": "2025-01-15"},
49}
52def get_prompt(prompt_name: str, version: str | None = None) -> str:
53 """
54 Get a prompt by name with optional versioning.
56 Args:
57 prompt_name: Name of the prompt ("router", "response", "verification")
58 version: Optional version string (default: "latest")
60 Returns:
61 Prompt string
63 Raises:
64 ValueError: If prompt name or version is unknown
66 Examples:
67 >>> get_prompt("router") # Gets latest version
68 >>> get_prompt("router", "v1") # Gets specific version
69 >>> get_prompt("verification", "latest") # Explicitly latest
70 """
71 if prompt_name not in _PROMPT_VERSIONS:
72 available = list(_PROMPT_VERSIONS.keys())
73 msg = f"Unknown prompt: {prompt_name}. Available: {available}"
74 raise ValueError(msg)
76 version = version or "latest"
77 prompt_versions = _PROMPT_VERSIONS[prompt_name]
79 if version not in prompt_versions:
80 available_versions = list(prompt_versions.keys())
81 msg = f"Unknown version '{version}' for prompt '{prompt_name}'. Available: {available_versions}"
82 raise ValueError(msg)
84 return prompt_versions[version]
87def get_prompt_version(prompt_name: str) -> str:
88 """
89 Get current version number for a prompt.
91 Args:
92 prompt_name: Name of the prompt
94 Returns:
95 Version string (e.g., "v1")
97 Raises:
98 ValueError: If prompt name is unknown
99 """
100 if prompt_name not in _PROMPT_METADATA:
101 msg = f"Unknown prompt: {prompt_name}"
102 raise ValueError(msg)
104 return _PROMPT_METADATA[prompt_name]["current_version"]
107def list_prompt_versions(prompt_name: str) -> list[str]:
108 """
109 List all available versions for a prompt.
111 Args:
112 prompt_name: Name of the prompt
114 Returns:
115 List of version strings
117 Raises:
118 ValueError: If prompt name is unknown
119 """
120 if prompt_name not in _PROMPT_VERSIONS:
121 msg = f"Unknown prompt: {prompt_name}"
122 raise ValueError(msg)
124 return list(_PROMPT_VERSIONS[prompt_name].keys())