Commit 1eca869
committed
fix(json_parser): tolerate dict/list input in validate_and_repair_json
Some providers return chat.completions message.content as an already-parsed
object rather than a JSON-encoded string — observed with Cloudflare Workers
AI on the /compat route for @cf/meta/llama-4-scout-17b-16e-instruct under
response_format=json_schema. The OpenAI Python SDK raises a Pydantic
ValidationError ("JSON input should be string, bytes or bytearray"), and
honcho's repair fallback _parse_or_repair_structured_content then routes to
validate_and_repair_json — which crashed at json_str.strip() with
"'dict' object has no attribute 'strip'".
Encode non-string input via json.dumps() at the function boundary so the
rest of the repair pipeline keeps assuming string input. Loosen the
parameter type to Any to reflect the new contract.
Adds tests/utils/test_json_parser.py with regression coverage for dict,
list, and nested-dict inputs (plus existing string + whitespace cases).1 parent 9b74886 commit 1eca869
2 files changed
Lines changed: 61 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
352 | 352 | | |
353 | 353 | | |
354 | 354 | | |
355 | | - | |
356 | | - | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
357 | 367 | | |
358 | 368 | | |
359 | 369 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
0 commit comments