diff --git a/app/main.py b/app/main.py index ed47418..64d3c3a 100644 --- a/app/main.py +++ b/app/main.py @@ -633,6 +633,33 @@ async def list_bundeslaender(): # === Quellen / Programme === +@app.get("/methodik", response_class=HTMLResponse) +async def methodik_page(request: Request): + """Transparenz-/Methodik-Seite (#96).""" + from .bundeslaender import aktive_bundeslaender, BUNDESLAENDER + from .embeddings import get_indexing_status + + bl_list = [] + for bl in aktive_bundeslaender(): + bl_list.append({ + "code": bl.code, + "name": bl.name, + "doku_system": bl.doku_system, + }) + + status = get_indexing_status() + + return templates.TemplateResponse("methodik.html", { + "request": request, + "app_name": settings.app_name, + "adapter_count": len(ADAPTERS), + "model_name": settings.llm_model_default, + "programme_count": status.get("total", 0), + "chunk_count": sum(p.get("chunks", 0) for p in status.get("programmes", [])), + "bundeslaender": sorted(bl_list, key=lambda x: x["name"]), + }) + + @app.get("/quellen", response_class=HTMLResponse) async def quellen_page(request: Request): """Quellen-Seite mit allen Wahl- und Parteiprogrammen.""" diff --git a/app/templates/index.html b/app/templates/index.html index 13d733d..1d55a1d 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -700,6 +700,7 @@ 📚 Quellen + 🔍 Methodik 📈 Auswertungen diff --git a/app/templates/methodik.html b/app/templates/methodik.html new file mode 100644 index 0000000..c9d60f2 --- /dev/null +++ b/app/templates/methodik.html @@ -0,0 +1,363 @@ + + +
+ + ++ Der GWÖ-Antragsprüfer bewertet Parlamentsanträge automatisch nach der + Gemeinwohl-Ökonomie Matrix 2.0 für Gemeinden. Jede Bewertung + analysiert drei Dimensionen: GWÖ-Treue, Übereinstimmung mit Wahlprogrammen + und Übereinstimmung mit Grundsatzprogrammen der Parteien. +
++ Alle Bewertungen werden durch ein KI-Sprachmodell erzeugt und anschließend + automatisch verifiziert — Zitate werden gegen die Originaltexte + der Wahlprogramme geprüft, nicht-verifizierbare Zitate werden verworfen. +
+Die Matrix besteht aus 5 Berührungsgruppen (Zeilen) und + 5 Werten (Spalten) = 25 Themenfelder:
+ +Jedes Feld wird auf einer Skala von -5 (fundamental widersprechend) + bis +5 (stark fördernd) bewertet. Der Gesamtscore (0-10) gewichtet + die Matrix-Bewertungen und berücksichtigt Ausschlusskriterien:
+ +| Symbol | Rating | Bedeutung |
|---|---|---|
| ++ | +4 bis +5 | Stark fördernd, vorbildlich |
| + | +1 bis +3 | Fördernd |
| ○ | 0 | Neutral / nicht berührt |
| − | -1 bis -3 | Widersprechend |
| −− | -4 bis -5 | Stark widersprechend |
+ Die Matrix basiert auf dem + Arbeitsbuch der Gemeinwohl-Ökonomie. + Die Adaption für Gemeinden fokussiert auf kommunale Handlungsfelder: + Beschaffung, Haushalt, Verwaltung, Daseinsvorsorge und überregionale Wirkung. +
+Jede Bewertung durchläuft fünf Schritte:
+ +| Eigenschaft | Wert |
|---|---|
| Modell | {{ model_name }} |
| Anbieter | DashScope (Alibaba Cloud) |
| Retry bei Parse-Fehlern | 3 Versuche mit steigender Temperatur |
| Embedding-Modell | text-embedding-v3 (1024 Dimensionen) |
| Chunk-Größe | 400 Wörter, 50 Wörter Overlap |
+ Für jede Fraktion der aktuellen Wahlperiode wird die Passung + des Antrags zu zwei Programmen bewertet: +
++ Aktuell sind {{ programme_count }} Programme indexiert + ({{ chunk_count }} Textabschnitte). Die vollständige Liste ist auf der + Quellen-Seite einsehbar. +
+ ++ Ein automatisierter Property-Test prüft für jedes in der Datenbank gespeicherte + Zitat, ob der zitierte Text tatsächlich auf der angegebenen Seite des + Wahlprogramm-PDFs vorkommt (Substring- oder 5-Wort-Anker-Match). Dieses + Verfahren hat im April 2026 drei halluzinierte Zitate aufgedeckt und zur + Implementierung der server-seitigen Verifikation geführt. +
+ ++ Das Sprachmodell darf keine Quellenangaben (Programmname, Seitenzahl) frei + erfinden. Nach jeder Analyse wird jedes Zitat gegen die tatsächlich vorgelegten + Textabschnitte abgeglichen. Quellenangabe und URL werden aus dem gefundenen + Treffer server-seitig konstruiert — die Modell-Ausgabe für + diese Felder wird verworfen. +
+ ++ Wenn ein Nutzer auf ein Zitat klickt und die Textstelle im PDF nicht auffindbar + ist (z.B. bei älteren Bewertungen vor der Verifikations-Einführung), wird der + Antrag automatisch mit der aktuellen Pipeline neu analysiert. +
+{{ adapter_count }} Parlamente sind angebunden:
+| Parlament | Doku-System |
|---|---|
| {{ bl.name }} ({{ bl.code }}) | +{{ bl.doku_system }} | +
+ Vollständige Programm-Liste · + Technische Adapter-Vergleichsmatrix · + Architektur-Entscheidungen (ADRs) +
+