30 lines
868 B
Python
30 lines
868 B
Python
"""Template-Lader: templates/<Name>.md, Platzhalter {name}, Datei-Hash je Call
|
|
(Ledger — uncommittete Prompt-Änderungen bleiben nachvollziehbar)."""
|
|
|
|
import hashlib
|
|
from functools import lru_cache
|
|
|
|
from config import TEMPLATES_DIR
|
|
|
|
|
|
@lru_cache(maxsize=None)
|
|
def _lade(name: str) -> tuple[str, str]:
|
|
text = (TEMPLATES_DIR / f"{name}.md").read_text(encoding="utf-8")
|
|
return text, hashlib.sha256(text.encode()).hexdigest()[:12]
|
|
|
|
|
|
def render(name: str, **werte) -> tuple[str, str]:
|
|
"""→ (prompt, template_hash). format_map, damit geschweifte Klammern in
|
|
JSON-Beispielen doppelt geschrieben werden ({{ }})."""
|
|
text, h = _lade(name)
|
|
return text.format_map(_Sicher(werte)), h
|
|
|
|
|
|
class _Sicher(dict):
|
|
def __missing__(self, key):
|
|
raise KeyError(f"Template-Platzhalter fehlt: {key}")
|
|
|
|
|
|
def cache_leeren() -> None:
|
|
_lade.cache_clear()
|