| 1234567891011121314151617181920212223242526272829303132333435363738 |
- """工具调用日志的通用封装。"""
- from __future__ import annotations
- import json
- from typing import Any, Dict
- from .log_capture import log, log_fold
- def format_tool_result_for_log(result: Any) -> str:
- """将 ToolResult 或普通字符串格式化为可写入日志的文本(避免过长 metadata 刷屏)。"""
- if result is None:
- return ""
- if isinstance(result, str):
- s = result
- return s if len(s) <= 8000 else s[:8000] + "\n...(truncated)"
- title = getattr(result, "title", "") or ""
- output = getattr(result, "output", None) or ""
- err = getattr(result, "error", None)
- truncated = output if len(output) <= 6000 else output[:6000] + "\n...(truncated)"
- payload: Dict[str, Any] = {"title": title, "output": truncated}
- if err:
- payload["error"] = err
- md = getattr(result, "metadata", None)
- if isinstance(md, dict) and md:
- payload["metadata_keys"] = list(md.keys())
- return json.dumps(payload, ensure_ascii=False)
- def log_tool_call(tool_name: str, params: Dict[str, Any], result: str) -> None:
- """以折叠块结构化输出工具调用参数与返回内容。"""
- with log_fold(f"🔧 {tool_name}"):
- with log_fold("📥 调用参数"):
- log(json.dumps(params, ensure_ascii=False, indent=2))
- with log_fold("📤 返回内容"):
- log(result)
|