33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
"""Wächter für Leitprinzip 2: Modell-IDs stehen NUR in der .env, nie im Code.
|
|
|
|
Greppt den gesamten backend-Quellcode (ohne tests/) nach Modell-ID-Mustern.
|
|
Schlägt dieser Test an, hat jemand ein Modell hart verdrahtet.
|
|
"""
|
|
import re
|
|
from pathlib import Path
|
|
|
|
BACKEND = Path(__file__).resolve().parent.parent
|
|
MUSTER = re.compile(r"claude-\w+-\d|MiniMax-M\d|\bopus\b|\bsonnet\b|\bhaiku\b|gpt-\d",
|
|
re.IGNORECASE)
|
|
|
|
|
|
def test_keine_modell_ids_im_code():
|
|
treffer = []
|
|
for pfad in BACKEND.rglob("*.py"):
|
|
if "tests" in pfad.parts:
|
|
continue
|
|
for nr, zeile in enumerate(pfad.read_text(encoding="utf-8").splitlines(), 1):
|
|
if MUSTER.search(zeile):
|
|
treffer.append(f"{pfad.relative_to(BACKEND)}:{nr}: {zeile.strip()}")
|
|
assert not treffer, "Modell-IDs im Code gefunden (gehören in die .env):\n" + "\n".join(treffer)
|
|
|
|
|
|
def test_keine_modell_ids_in_templates():
|
|
templates = BACKEND / "templates"
|
|
if not templates.is_dir():
|
|
return
|
|
treffer = [f"{p.name}:{nr}" for p in templates.rglob("*.md")
|
|
for nr, zeile in enumerate(p.read_text(encoding="utf-8").splitlines(), 1)
|
|
if MUSTER.search(zeile)]
|
|
assert not treffer, f"Modell-IDs in Templates: {treffer}"
|