test: parser LLM + fix repair JSON
test / test (push) Has been cancelled

- test_llm_parser.py: 18 test per parse_tool_call, repair, strip
- Fix: repair raddoppiava i due punti nelle chiavi
- Fix: aggiunto passaggio per valori con apici singoli
- Copertura: JSON valido, apici singoli, misti, codeblock,
  virgole trailing, = invece di :, testo senza JSON
- 72 test totali, tutti passano
This commit is contained in:
truetype committed 2026-07-01 09:44:49 +02:00
1 parent f4cf649318
commit 08edeed8bb
2 files changed
+146 -3

No files matched your search

+6 -3
View File
@@ -34,16 +34,19 @@ def _try_repair_json(text: str) -> str | None:
return None
blob = m.group(1)
# Fix 1: chiavi con apici singoli → doppi ("params' " → "params": ")
# Fix 1: chiavi con apici singoli → doppi ("params' " → "params")
blob = re.sub(r"(?<!\\)'(params|narration|tool|command|text|character_id|dc|modifier|die|count)"
r"'(?=\s*[:=])", r'"\1":', blob)
r"'(?=\s*[:=])", r'"\1"', blob)
# Fix 2: qualsiasi altra chiave con apici singoli
blob = re.sub(r"(?<!\\)'(\w+)'(?=\s*[:=])", r'"\1":', blob)
blob = re.sub(r"(?<!\\)'(\w+)'(?=\s*[:=])", r'"\1"', blob)
# Fix 3: trailing comma prima di } o ]
blob = re.sub(r',\s*}', '}', blob)
blob = re.sub(r',\s*\]', ']', blob)
# Fix 4: = al posto di : nelle chiavi
blob = re.sub(r'"(\w+)"\s*=', r'"\1":', blob)
# Fix 5: valori con apici singoli → doppi (dopo aver riparato le chiavi)
# 'valore' → "valore"
blob = re.sub(r"'([^']*?)'(?=\s*[,}\]])", r'"\1"', blob)
try:
json.loads(blob)
return blob