| """Patch preciz SDK's _parse_tool_calls to handle malformed XML gracefully.""" |
|
|
| import site |
| import re |
|
|
| P = f"{site.getsitepackages()[0]}/summarizer/llm_client.py" |
|
|
| with open(P) as f: |
| src = f.read() |
|
|
| marker_old = ( |
| ' raw_text = re.sub(r"\\s+handle$", "", raw_text).strip()\n' |
| ' return [(fallback.group(1), raw_text)]\n' |
| ' return []' |
| ) |
|
|
| marker_new = ( |
| ' raw_text = re.sub(r"\\s+handle$", "", raw_text).strip()\n' |
| ' return [(fallback.group(1), raw_text)]\n' |
| ' # Ultra-fallback: strip all tags, extract key-value pairs\n' |
| ' # from even badly malformed XML\n' |
| ' stripped = re.sub(r"<[^>]+>", "\\n", content)\n' |
| ' lines = [l.strip() for l in stripped.split("\\n") if l.strip()]\n' |
| ' known_keys = {"name", "question", "dataset"}\n' |
| ' tool = "rag_qa"\n' |
| ' question = ""\n' |
| ' dataset = "developer-portfolio"\n' |
| ' for i, line in enumerate(lines):\n' |
| ' if line not in known_keys:\n' |
| ' continue\n' |
| ' if i + 1 < len(lines) and lines[i + 1] not in known_keys:\n' |
| ' val = lines[i + 1]\n' |
| ' if line == "name":\n' |
| ' tool = LONGCAT_NAME_MAP.get(val, val)\n' |
| ' elif line == "question":\n' |
| ' question = val\n' |
| ' elif line == "dataset":\n' |
| ' dataset = val\n' |
| ' if not question:\n' |
| ' vals = [l for l in lines if l not in known_keys]\n' |
| ' if vals:\n' |
| ' question = " ".join(vals)\n' |
| ' if question:\n' |
| ' return [_normalize_tool_args(tool, {"question": question, "dataset": dataset})]\n' |
| ' return []' |
| ) |
|
|
| assert marker_old in src, "Marker not found" |
| src = src.replace(marker_old, marker_new, 1) |
|
|
| with open(P, "w") as f: |
| f.write(src) |
|
|
| print("Patched _parse_tool_calls with robust XML fallback") |
|
|