- 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:
1 parent
f4cf649318
commit
08edeed8bb
2 files changed
+146
-3
No files matched your search
+6
-3
@@ -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
|
||||
|
||||
Reference in new issue
Block a user