Spaces:
Build error
Build error
| import re | |
| import yaml | |
| from dataclasses import dataclass, field | |
| from typing import Dict, List, Set, Optional | |
| from openai import OpenAI | |
| class PromptTemplate: | |
| """ | |
| A template class for managing and validating LLM prompts. | |
| This class handles: | |
| - Storing system and user prompts | |
| - Validating required template variables | |
| - Formatting prompts with provided variables | |
| Attributes: | |
| system_prompt (str): The system-level instructions for the LLM | |
| user_template (str): Template string with variables in {variable} format | |
| """ | |
| system_prompt: str | |
| user_template: str | |
| def __post_init__(self): | |
| """Initialize the set of required variables from the template.""" | |
| self.required_variables: Set[str] = self._get_required_variables() | |
| def _get_required_variables(self) -> set: | |
| """ | |
| Extract required variables from the template using regex. | |
| Returns: | |
| set: Set of variable names found in the template | |
| Example: | |
| Template "Write about {topic} in {style}" returns {'topic', 'style'} | |
| """ | |
| return set(re.findall(r'\{(\w+)\}', self.user_template)) | |
| def _validate_variables(self, provided_vars: Dict): | |
| """ | |
| Ensure all required template variables are provided. | |
| Args: | |
| provided_vars: Dictionary of variable names and values | |
| Raises: | |
| ValueError: If any required variables are missing | |
| """ | |
| provided_keys = set(provided_vars.keys()) | |
| missing_vars = self.required_variables - provided_keys | |
| if missing_vars: | |
| error_msg = ( | |
| f"\nPrompt Template Error:\n" | |
| f"Missing required variables: {', '.join(missing_vars)}\n" | |
| f"Template requires: {', '.join(self.required_variables)}\n" | |
| f"You provided: {', '.join(provided_keys)}\n" | |
| f"Template string: '{self.user_template}'" | |
| ) | |
| raise ValueError(error_msg) | |
| def format(self, **kwargs) -> List[Dict[str, str]]: | |
| """ | |
| Format the prompt template with provided variables. | |
| Args: | |
| **kwargs: Key-value pairs for template variables | |
| Returns: | |
| List[Dict[str, str]]: Formatted messages ready for LLM API | |
| Example: | |
| template.format(topic="AI", style="academic") | |
| """ | |
| self._validate_variables(kwargs) | |
| try: | |
| formatted_user_message = self.user_template.format(**kwargs) | |
| except Exception as e: | |
| raise ValueError(f"Error formatting template: {str(e)}") | |
| return [ | |
| {"role": "system", "content": self.system_prompt}, | |
| {"role": "user", "content": formatted_user_message} | |
| ] | |