jsonio.py 758 B

12345678910111213141516171819202122
  1. """从 LLM 文本输出里稳健地取出 JSON。各 integration / stage 共用,避免重复。"""
  2. from __future__ import annotations
  3. import json
  4. from typing import Any
  5. def extract_json_object(text: str) -> dict:
  6. """取第一个 { 到最后一个 } 的切片解析为 dict。
  7. 天然容忍 ```json fences、前后多余说明文字(它们都在大括号之外)。
  8. """
  9. start, end = text.find("{"), text.rfind("}")
  10. if start == -1 or end == -1 or end < start:
  11. raise ValueError(f"no json object in output: {text[:120]!r}")
  12. return json.loads(text[start : end + 1])
  13. def to_bool(value: Any) -> bool:
  14. if isinstance(value, bool):
  15. return value
  16. return str(value).strip().lower() in ("1", "true", "yes", "是")