v0.15.5: Corrected FK mappings, objektkunde junction table, multi-hop query test

Schema corrections:
- kunden PK = ID (not Kundennummer)
- objekte PK = ID (not ObjektID)
- kunden↔objekte linked via objektkunde junction table (many-to-many)
- Removed guessed column names, only verified PKs/FKs in SCHEMA
- Added explicit JOIN patterns for the hierarchy

Domain context test: 25/25 (added multi-hop Jaeger query through 4 tables)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nico 2026-03-29 18:54:52 +02:00
parent e19520db74
commit b9320693ed
2 changed files with 37 additions and 14 deletions

View File

@ -48,10 +48,14 @@ DOMAIN MODEL (how the data relates):
- Auftraege (work orders) = tasks for Monteure (technicians)
Device installation, reading collection, maintenance.
HIERARCHY: Kunde Objekte Nutzeinheiten Geraete Verbraeuche
Nutzer
Kunde Abrechnungen
Kunde Auftraege
HIERARCHY (via JOINs):
Kunde objektkunde Objekt (many-to-many via junction table!)
Objekt Nutzeinheiten Geraete Verbraeuche
Nutzeinheit Nutzer
Kunde Abrechnungen
Kunde Auftraege
CRITICAL: kunden and objekte are linked through the objektkunde junction table, NOT directly.
IMPORTANT NOTES:
- All table/column names are German, lowercase
@ -75,18 +79,31 @@ IMPORTANT NOTES:
- heizbetriebskosten heating operation costs
- nebenkosten additional costs (Nebenkosten)
KNOWN PRIMARY KEYS AND FOREIGN KEYS:
- kunden: PK = Kundennummer (int), name columns: Name1, Name2, Name3
- objekte: PK = ObjektID, FK = KundenID kunden.Kundennummer
- nutzeinheit: FK = ObjektID objekte.ObjektID
- geraete: FK = NutzeinheitID nutzeinheit.NutzeinheitID (verify with DESCRIBE)
KNOWN SCHEMA (verified ONLY use these column names without DESCRIBE):
All tables use ID (int, auto_increment) as primary key.
IMPORTANT: Always DESCRIBE tables you haven't seen before to verify column names.
Use the FK mappings above for JOINs. Do NOT guess use exact column names.
- kunden: PK=ID. Known columns: Name1, Name2, Name3, Kundennummer
- objekte: PK=ID. Known columns: Objektnummer
- objektkunde: JUNCTION TABLE for kundenobjekte (many-to-many!)
PK=ID, FK: KundeIDkunden.ID, ObjektIDobjekte.ID
- nutzeinheit: PK=ID, FK: ObjektIDobjekte.ID
- geraete: PK=ID, FK: NutzeinheitIDnutzeinheit.ID
- geraeteverbraeuche: linked to geraete
- nutzer: linked to nutzeinheit (DESCRIBE to find FK column name)
For ANY column not listed above, you MUST DESCRIBE the table first.
JOIN PATTERNS (use these exactly):
- Kunde Objekte: JOIN objektkunde ok ON ok.KundeID = k.ID JOIN objekte o ON o.ID = ok.ObjektID
- Objekt Nutzeinheiten: JOIN nutzeinheit n ON n.ObjektID = o.ID
- Nutzeinheit Geraete: JOIN geraete g ON g.NutzeinheitID = n.ID
IMPORTANT: For tables not listed above, always DESCRIBE first.
The junction table objektkunde is REQUIRED to link kunden and objekte.
Example for "how many Objekte per Kunde":
[
{{"tool": "query_db", "args": {{"query": "SELECT k.Kundennummer, k.Name1, COUNT(o.ObjektID) as AnzahlObjekte FROM kunden k LEFT JOIN objekte o ON o.KundenID = k.Kundennummer GROUP BY k.Kundennummer, k.Name1 ORDER BY AnzahlObjekte DESC LIMIT 20", "database": "eras2_production"}}}}
{{"tool": "query_db", "args": {{"query": "SELECT k.ID, k.Name1, COUNT(DISTINCT o.ID) as AnzahlObjekte FROM kunden k JOIN objektkunde ok ON ok.KundeID = k.ID JOIN objekte o ON o.ID = ok.ObjektID GROUP BY k.ID, k.Name1 ORDER BY AnzahlObjekte DESC LIMIT 20", "database": "eras2_production"}}}}
]"""
def __init__(self, send_hud, process_manager=None):

View File

@ -12,7 +12,7 @@ and can formulate correct JOINs without guessing column names.
### 1. Expert knows the hierarchy
- send: wie viele Objekte haben Kunden im Durchschnitt?
- expect_trace: has tool_call
- expect_response: not contains "Error" or "error" or "Unknown column"
- expect_response: not contains "Unknown column" or "1054" or "doesn't exist"
- expect_response: length > 20
### 2. Expert can JOIN kunden and objekte
@ -33,7 +33,13 @@ and can formulate correct JOINs without guessing column names.
- expect_response: not contains "Error" or "error" or "Unknown column"
- expect_response: length > 20
### 5. PA formulates good job descriptions
### 5. Multi-hop query through hierarchy
- send: zeig alle Nutzer in Objekten von Kunde mit Jaeger im Namen
- expect_trace: has tool_call
- expect_response: not contains "Unknown column" or "1054" or "doesn't exist"
- expect_response: contains "Jaeger" or "jaeger"
### 6. PA formulates good job descriptions
- send: gib mir eine Uebersicht ueber Kunde 2
- expect_trace: has routed
- expect_response: length > 20