|
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 |
|
) |
|
|