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