syntaxhacker/developer-portfolio-rag
0
1"""Patch preciz SDK's _parse_tool_calls to handle malformed XML gracefully."""2 3import site4import re5 6P = f"{site.getsitepackages()[0]}/summarizer/llm_client.py"7 8with open(P) as f:9 src = f.read()10 11marker_old = (12 ' raw_text = re.sub(r"\\s+handle$", "", raw_text).strip()\n'13 ' return [(fallback.group(1), raw_text)]\n'14 ' return []'15)16 17marker_new = (18 ' raw_text = re.sub(r"\\s+handle$", "", raw_text).strip()\n'19 ' return [(fallback.group(1), raw_text)]\n'20 ' # Ultra-fallback: strip all tags, extract key-value pairs\n'21 ' # from even badly malformed XML\n'22 ' stripped = re.sub(r"<[^>]+>", "\\n", content)\n'23 ' lines = [l.strip() for l in stripped.split("\\n") if l.strip()]\n'24 ' known_keys = {"name", "question", "dataset"}\n'25 ' tool = "rag_qa"\n'26 ' question = ""\n'27 ' dataset = "developer-portfolio"\n'28 ' for i, line in enumerate(lines):\n'29 ' if line not in known_keys:\n'30 ' continue\n'31 ' if i + 1 < len(lines) and lines[i + 1] not in known_keys:\n'32 ' val = lines[i + 1]\n'33 ' if line == "name":\n'34 ' tool = LONGCAT_NAME_MAP.get(val, val)\n'35 ' elif line == "question":\n'36 ' question = val\n'37 ' elif line == "dataset":\n'38 ' dataset = val\n'39 ' if not question:\n'40 ' vals = [l for l in lines if l not in known_keys]\n'41 ' if vals:\n'42 ' question = " ".join(vals)\n'43 ' if question:\n'44 ' return [_normalize_tool_args(tool, {"question": question, "dataset": dataset})]\n'45 ' return []'46)47 48assert marker_old in src, "Marker not found"49src = src.replace(marker_old, marker_new, 1)50 51with open(P, "w") as f:52 f.write(src)53 54print("Patched _parse_tool_calls with robust XML fallback")55 