| |
| |
| """Load pipeline prompts from pipeline/prompt.jsonl.""" |
|
|
| from __future__ import annotations |
|
|
| import json |
| import os |
| from functools import lru_cache |
| from pathlib import Path |
| from typing import Any, Dict, Mapping |
|
|
|
|
| def default_prompt_path() -> Path: |
| return Path(__file__).resolve().parent / "pipeline" / "prompt.jsonl" |
|
|
|
|
| @lru_cache(maxsize=4) |
| def load_prompts(path: str = "") -> Dict[str, str]: |
| prompt_path = Path(path or os.environ.get("PIPELINE_PROMPT_JSONL", "") or default_prompt_path()) |
| prompts: Dict[str, str] = {} |
| if not prompt_path.exists(): |
| return prompts |
| with prompt_path.open("r", encoding="utf-8") as handle: |
| for line_no, line in enumerate(handle, 1): |
| line = line.strip() |
| if not line: |
| continue |
| row = json.loads(line) |
| key = str(row.get("key", "")).strip() |
| text = row.get("text") |
| if not key or not isinstance(text, str): |
| raise ValueError(f"Invalid prompt row {prompt_path}:{line_no}") |
| prompts[key] = text |
| return prompts |
|
|
|
|
| def get_prompt(key: str, default: str = "") -> str: |
| return load_prompts().get(key, default) |
|
|
|
|
| def render_prompt(key: str, default: str = "", replacements: Mapping[str, Any] | None = None) -> str: |
| text = get_prompt(key, default) |
| for name, value in (replacements or {}).items(): |
| text = text.replace(f"__{name}__", str(value)) |
| return text |
|
|