Spaces:
Runtime error
Runtime error
| # Standard library imports | |
| import os | |
| from typing import Annotated, Dict, Any | |
| # Related third-party imports | |
| import yaml | |
| class PromptManager: | |
| """ | |
| A class to manage prompts loaded from a YAML configuration file. | |
| This class provides methods to load prompts from a YAML file and retrieve | |
| them with optional formatting. | |
| Parameters | |
| ---------- | |
| config_path : str, optional | |
| Path to the YAML configuration file. If not provided, the default | |
| path is set to `../../config/prompts.yaml` relative to the script's | |
| directory. | |
| Attributes | |
| ---------- | |
| config_path : str | |
| Path to the YAML configuration file. | |
| prompts : dict | |
| Dictionary of prompts loaded from the YAML file. | |
| """ | |
| def __init__(self, config_path: Annotated[str, "Path to the YAML configuration file"] = None): | |
| """ | |
| Initializes the PromptManager with a specified or default configuration path. | |
| Parameters | |
| ---------- | |
| config_path : str, optional | |
| Path to the YAML configuration file. Defaults to None. | |
| """ | |
| self.config_path = config_path or os.path.join( | |
| os.path.dirname(os.path.abspath(__file__)), "../../config/prompts.yaml" | |
| ) | |
| self.prompts = self._load_prompts() | |
| def _load_prompts(self) -> Annotated[Dict[str, Any], "Loaded prompts from YAML file"]: | |
| """ | |
| Load prompts from the YAML file. | |
| This method reads the YAML file specified by `self.config_path` and parses its contents. | |
| Returns | |
| ------- | |
| dict | |
| Dictionary containing the prompts. | |
| Raises | |
| ------ | |
| FileNotFoundError | |
| If the specified YAML file does not exist. | |
| Examples | |
| -------- | |
| >>> manager = PromptManager("config/prompts.yaml") | |
| >>> prompts = manager._load_prompts() | |
| """ | |
| if not os.path.exists(self.config_path): | |
| raise FileNotFoundError(f"YAML file not found: {self.config_path}") | |
| with open(self.config_path) as file: | |
| loaded_prompts = yaml.safe_load(file) | |
| if not isinstance(loaded_prompts, dict): | |
| raise TypeError(f"Expected dictionary from YAML, got {type(loaded_prompts).__name__}.") | |
| return loaded_prompts | |
| def get_prompt( | |
| self, | |
| prompt_name: Annotated[str, "Name of the prompt to retrieve"], | |
| **kwargs: Annotated[dict, "Keyword arguments for formatting the prompt"] | |
| ) -> Annotated[Any, "Formatted prompt (str or dict)"]: | |
| """ | |
| Retrieve and format a prompt by its name. | |
| This method fetches the prompt template identified by `prompt_name` from the loaded prompts | |
| and formats any placeholders within the prompt using the provided keyword arguments. | |
| Parameters | |
| ---------- | |
| prompt_name : str | |
| Name of the prompt to retrieve. | |
| **kwargs : Any | |
| Keyword arguments to format the prompt strings. | |
| Raises | |
| ------ | |
| ValueError | |
| If the specified prompt name does not exist in the loaded prompts. | |
| Returns | |
| ------- | |
| dict | |
| Dictionary containing the formatted prompt with all placeholders replaced by provided values. | |
| """ | |
| if not isinstance(self.prompts, dict): | |
| raise TypeError(f"Internal error: self.prompts is not a dictionary but {type(self.prompts).__name__}.") | |
| if prompt_name not in self.prompts: | |
| raise ValueError(f"Prompt '{prompt_name}' not found.") | |
| prompt = self.prompts[prompt_name] | |
| if isinstance(prompt, dict): | |
| formatted_prompt = {} | |
| for key, value in prompt.items(): | |
| if isinstance(value, str): | |
| formatted_prompt[key] = value.format(**kwargs) | |
| else: | |
| formatted_prompt[key] = value | |
| return formatted_prompt | |
| if isinstance(prompt, str): | |
| return prompt.format(**kwargs) | |
| raise TypeError(f"Unexpected prompt type: {type(prompt).__name__}") | |
| if __name__ == "__main__": | |
| try: | |
| prompt_manager = PromptManager() | |
| formatted_prompt_ = prompt_manager.get_prompt( | |
| "greeting", | |
| name="Ahmet", | |
| day="Pazartesi" | |
| ) | |
| print("Formatted Prompt:", formatted_prompt_) | |
| except Exception as e: | |
| print(f"Error: {e}") |