Skip to content

Commit 8ceb7cc

Browse files
fix(jsonl-parser): safe web_search result_count + slug Optional typing (#29)
1 parent ce95de9 commit 8ceb7cc

2 files changed

Lines changed: 13 additions & 2 deletions

File tree

tests/test_jsonl_parser.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,13 @@ def test_web_search_result(self):
171171
assert r["query"] == "q"
172172
assert r["result_count"] == 1
173173

174+
def test_web_search_results_none_or_non_sized_yields_zero_count(self):
175+
r = _parse_tool_result({"query": "q", "results": None})
176+
assert r["result_type"] == "web_search"
177+
assert r["result_count"] == 0
178+
r2 = _parse_tool_result({"query": "q", "results": "not-a-list"})
179+
assert r2["result_count"] == 0
180+
174181
def test_web_fetch_result(self):
175182
r = _parse_tool_result({"url": "https://x", "code": 200, "durationMs": 40})
176183
assert r["result_type"] == "web_fetch"

utils/jsonl_parser.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,11 @@ def _tool_result_build_web_search(tr: dict, base: dict) -> dict:
426426
result = dict(base)
427427
result["result_type"] = "web_search"
428428
result["query"] = tr.get("query", "")
429-
result["result_count"] = len(tr.get("results", []))
429+
raw_results = tr.get("results")
430+
if isinstance(raw_results, (list, tuple, set, dict)):
431+
result["result_count"] = len(raw_results)
432+
else:
433+
result["result_count"] = 0
430434
result["duration_seconds"] = tr.get("durationSeconds")
431435
return result
432436

@@ -553,7 +557,7 @@ def _tool_result_build_plan(tr: dict, base: dict) -> dict:
553557
)
554558

555559

556-
def _parse_tool_result(tool_result, slug: str = None) -> dict | None:
560+
def _parse_tool_result(tool_result, slug: str | None = None) -> dict | None:
557561
"""Figure out what kind of tool result this is (bash, file edit, glob, etc.)
558562
by looking at which keys are present, since the JSONL doesn't always tag them.
559563

0 commit comments

Comments
 (0)