Source code for prompt_risk.prompts

# -*- coding: utf-8 -*-

import dataclasses
from pathlib import Path
from functools import cached_property

import jinja2

from .constants import PromptIdEnum


[docs] @dataclasses.dataclass class Prompt: """A versioned prompt resolved from ``{use_case_id}/{short_name}/v{NN}.md``.""" id: str version: str @classmethod def from_use_case( cls, use_case_id: str, short_name: str, version: str, ): return cls( id=f"{use_case_id}:{short_name}", version=version, ) @cached_property def enum_obj(self) -> PromptIdEnum: return PromptIdEnum(self.id) @property def short_name(self) -> str: return self.id.split(":", 1)[1] @cached_property def path(self) -> Path: return self.enum_obj.dir_root.joinpath("versions", self.version) @cached_property def path_system_prompt(self) -> Path: return self.path.joinpath("system-prompt.jinja") @cached_property def path_user_prompt(self) -> Path: return self.path.joinpath("user-prompt.jinja") @cached_property def system_prompt_content(self) -> str: return self.path_system_prompt.read_text(encoding="utf-8") @cached_property def user_prompt_content(self) -> str: return self.path_user_prompt.read_text(encoding="utf-8") @cached_property def system_prompt_template(self) -> jinja2.Template: return jinja2.Template(self.system_prompt_content) @cached_property def user_prompt_template(self) -> jinja2.Template: return jinja2.Template(self.user_prompt_content)