from typing import Union from pydantic import BaseModel class Prompt(BaseModel): file_path: str cached: Union[str, None] = None hot_reload: bool = True def render(self, **kwargs) -> str: if (self.cached is None) or (self.hot_reload): with open(self.file_path, "r") as f: self.cached = f.read() return self.cached.format(**kwargs) class PromptMgr: def __init__(self, hot_reload: bool = True, src_dir: str = "resources/prompts"): """Creates a prompt manager. Args: hot_reload: If true, reloads the prompt every time it is called. src_dir: The directory where the prompts are stored. """ self.hot_reload = hot_reload self.src_dir = src_dir def bind(self, prompt_id: str) -> Prompt: return Prompt( file_path=f"{self.src_dir}/{prompt_id}.txt", hot_reload=self.hot_reload )