Coverage for src/dataknobs_llm/prompts/base/types.py: 88%
59 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-31 16:04 -0600
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-31 16:04 -0600
1"""Core type definitions for the prompt library system.
3This module defines:
4- Validation levels and configuration
5- Prompt template structures
6- RAG configuration types
7- Message index types
8- Render result types
9"""
11from enum import Enum
12from typing import Any, Dict, List, Optional, TypedDict, Union
13from dataclasses import dataclass, field
16class ValidationLevel(Enum):
17 """Validation strictness levels for template rendering.
19 Attributes:
20 ERROR: Raise exception for missing required parameters
21 WARN: Log warning for missing required parameters (default)
22 IGNORE: Silently ignore missing required parameters
23 """
24 ERROR = "error"
25 WARN = "warn"
26 IGNORE = "ignore"
29class TemplateMode(Enum):
30 """Template rendering mode.
32 Attributes:
33 MIXED: Pre-process (( )) conditionals then render with Jinja2 (default)
34 JINJA2: Pure Jinja2 rendering, skip (( )) preprocessing
35 """
36 MIXED = "mixed"
37 JINJA2 = "jinja2"
39 @classmethod
40 def from_string(cls, value: str) -> "TemplateMode":
41 """Parse mode from string.
43 Args:
44 value: Mode string ("mixed" or "jinja2")
46 Returns:
47 TemplateMode enum value
49 Raises:
50 ValueError: If value is not a valid mode
51 """
52 try:
53 return cls(value.lower())
54 except ValueError:
55 raise ValueError(
56 f"Invalid template mode: {value}. "
57 f"Valid modes: {', '.join(m.value for m in cls)}"
58 )
61@dataclass
62class ValidationConfig:
63 """Configuration for template parameter validation.
65 Attributes:
66 level: Validation strictness level (None to inherit from context)
67 required_params: Set of parameter names that must be provided
68 optional_params: Set of parameter names that are optional
69 """
70 level: Optional[ValidationLevel] = None
71 required_params: set[str] = field(default_factory=set)
72 optional_params: set[str] = field(default_factory=set)
74 def __init__(
75 self,
76 level: Optional[ValidationLevel] = None,
77 required_params: Optional[List[str]] = None,
78 optional_params: Optional[List[str]] = None
79 ):
80 """Initialize validation configuration.
82 Args:
83 level: Validation strictness level (None to inherit from context)
84 required_params: List of required parameter names
85 optional_params: List of optional parameter names
86 """
87 self.level = level
88 self.required_params = set(required_params or [])
89 self.optional_params = set(optional_params or [])
92class PromptTemplate(TypedDict, total=False):
93 """Structure for a prompt template definition.
95 Attributes:
96 template: The template string with {{variables}} and ((conditionals))
97 defaults: Default values for template parameters
98 validation: Validation configuration for this template
99 metadata: Additional metadata (author, version, etc.)
100 sections: Section definitions for template composition
101 extends: Name of base template to inherit from
102 rag_config_refs: References to standalone RAG configurations
103 rag_configs: Inline RAG configurations
104 template_mode: Template rendering mode ("mixed" or "jinja2")
105 """
106 template: str
107 defaults: Dict[str, Any]
108 validation: ValidationConfig
109 metadata: Dict[str, Any]
110 sections: Dict[str, str]
111 extends: str
112 rag_config_refs: List[str]
113 rag_configs: List['RAGConfig']
114 template_mode: str
117class RAGConfig(TypedDict, total=False):
118 """Configuration for RAG (Retrieval-Augmented Generation) searches.
120 Attributes:
121 adapter_name: Name of the adapter to use for RAG search
122 query: RAG search query (may contain {{variables}})
123 k: Number of results to retrieve
124 filters: Additional filters for the search
125 placeholder: Placeholder name in template (e.g., "RAG_CONTENT")
126 header: Header text to prepend to RAG results
127 item_template: Template for formatting individual RAG items
128 """
129 adapter_name: str
130 query: str
131 k: int
132 filters: Dict[str, Any]
133 placeholder: str
134 header: str
135 item_template: str
138class MessageIndex(TypedDict, total=False):
139 """Structure for a message index definition.
141 Message indexes define sequences of messages with roles and content,
142 including support for RAG content injection.
144 Attributes:
145 messages: List of message dictionaries with 'role' and 'content'
146 rag_configs: RAG configurations for this message sequence
147 metadata: Additional metadata for this message index
148 """
149 messages: List[Dict[str, str]]
150 rag_configs: List[RAGConfig]
151 metadata: Dict[str, Any]
154@dataclass
155class RenderResult:
156 """Result of rendering a prompt template.
158 Attributes:
159 content: The final rendered content
160 params_used: Parameters that were actually used in rendering
161 params_missing: Required parameters that were missing
162 validation_warnings: List of validation warnings (if level=WARN)
163 metadata: Additional metadata about the rendering
164 rag_metadata: Optional RAG metadata (if return_rag_metadata=True)
165 Contains details about RAG searches executed during rendering
166 """
167 content: str
168 params_used: Dict[str, Any] = field(default_factory=dict)
169 params_missing: List[str] = field(default_factory=list)
170 validation_warnings: List[str] = field(default_factory=list)
171 metadata: Dict[str, Any] = field(default_factory=dict)
172 rag_metadata: Optional[Dict[str, Any]] = None
175# Type aliases for convenience
176TemplateDict = Dict[str, PromptTemplate]
177MessageIndexDict = Dict[str, MessageIndex]
178ParameterDict = Dict[str, Any]
179AdapterDict = Dict[str, Any] # Will be refined in adapter modules