SPB Git forge
28commits 1branches 0releases
7.7 MBsize
maindefault branch
10 days agolast push
Python 66.3% TypeScript 22.7% JavaScript 8.6% HTML 1.4% CSS 0.7%
2.0 KB · 59 lines python
Raw Blame History
1"""Versioned prompt files: `prompts/<task>/v<N>.md` (spec §125 — prompts live in code, versions are recorded on every event/job).23A prompt file is Markdown; everything after the optional front-matter comment is the *system* prompt. The user message is always a4compact JSON context built by the caller, so prompts never interpolate untrusted text into instructions.5"""6from __future__ import annotations78import re9from dataclasses import dataclass10from functools import lru_cache11from pathlib import Path1213from companyatlas.config import settings1415_REPO_ROOT = Path(__file__).resolve().parents[4]16_VERSION_RE = re.compile(r"^v(\d+)\.md$")171819def prompts_dir() -> Path:20    return Path(settings.prompts_dir) if settings.prompts_dir else _REPO_ROOT / "prompts"212223@dataclass(frozen=True, slots=True)24class Prompt:25    task: str26    version: str27    system: str2829    @property30    def ref(self) -> str:31        return f"{self.task}/{self.version}"323334@lru_cache(maxsize=64)35def load_prompt(task: str, version: str | None = None) -> Prompt:36    """Load `prompts/<task>/<version>.md` (latest `vN` when version is None). Raises FileNotFoundError when missing."""37    folder = prompts_dir() / task38    if version is None:39        candidates = sorted(((int(m.group(1)), p) for p in folder.glob("v*.md") if (m := _VERSION_RE.match(p.name))), reverse=True)40        if not candidates:41            raise FileNotFoundError(f"no prompt versions in {folder}")42        path = candidates[0][1]43        version = path.stem44    else:45        path = folder / f"{version}.md"46    text = path.read_text(encoding="utf-8")47    text = re.sub(r"\A<!--.*?-->\s*", "", text, flags=re.DOTALL)          # optional front-matter comment48    return Prompt(task=task, version=version, system=text.strip())495051def available_prompts() -> dict[str, list[str]]:52    root = prompts_dir()53    if not root.exists():54        return {}55    return {d.name: sorted(p.stem for p in d.glob("v*.md")) for d in root.iterdir() if d.is_dir()}565758__all__ = ["Prompt", "available_prompts", "load_prompt", "prompts_dir"]59