RandomZ / scripts /audit_prompts.py
StormShadow308's picture
feat: async pipeline, job queue, generation hardening, and docs
732b14f
Raw
History Blame Contribute Delete
1.65 kB
"""Find LLM prompt-like strings under app/ not referenced in PROMPTS_INVENTORY.md."""
from __future__ import annotations
import re
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
INV = (ROOT / "PROMPTS_INVENTORY.md").read_text(encoding="utf-8")
MARKERS = (
"chat.completions",
"SystemMessage",
"HumanMessage",
"ChatPromptTemplate",
'role": "system"',
"messages=[",
)
def main() -> None:
missing: list[tuple[str, str]] = []
for py in (ROOT / "app").rglob("*.py"):
if "tests" in py.parts:
continue
text = py.read_text(encoding="utf-8", errors="ignore")
if not any(m in text for m in MARKERS):
continue
for m in re.finditer(r'"""(.*?)"""', text, re.DOTALL):
s = m.group(1).strip()
if len(s) < 60:
continue
if not any(
tok in s
for tok in (
"You are",
"STRICT",
"RICS",
"Return ONLY",
"MANDATORY",
"Validate",
"Expand",
"merge",
"MRICS",
"JSON",
)
):
continue
probe = s[:50].replace("\n", " ")
if probe in INV or s[:80] in INV:
continue
missing.append((str(py.relative_to(ROOT)), probe))
print(f"Potentially missing blocks: {len(missing)}")
for path, probe in missing[:40]:
print(f" {path}: {probe}...")
if __name__ == "__main__":
main()