Download core/tools.py from SupantBT/Beltbot: direct link, hf CLI and curl.
- Browser
- Download file 1.44 kB
-
https://huggingface.co/spaces/SupantBT/Beltbot/resolve/main/core/tools.py
- Command line
-
hf download hf://spaces/SupantBT/Beltbot/core/tools.py
-
curl -L -o tools.py https://huggingface.co/spaces/SupantBT/Beltbot/resolve/main/core/tools.py
1.44 kB
| """ | |
| core/tools.py — บันทึกการเรียก tool ของ LLM ในหนึ่งเทิร์น (ใช้ร่วมกันทุกแบรนด์) | |
| ย้ายมาจาก _tracked / _tool_call_log ของ chatbot_v5.py (ชั้น 5) · พฤติกรรมเท่าเดิม | |
| """ | |
| from __future__ import annotations | |
| import inspect | |
| from typing import Callable | |
| class ToolLog: | |
| def __init__(self): | |
| self.calls: list[dict] = [] | |
| def reset(self) -> None: | |
| self.calls = [] | |
| def track(self, fn: Callable) -> Callable: | |
| params = list(inspect.signature(fn).parameters.keys()) | |
| log = self | |
| def wrapper(*args, **kwargs): | |
| entry = {"tool_name": fn.__name__, "args": {}, "result": "", "success": True} | |
| try: | |
| entry["args"] = {**dict(zip(params, args)), **kwargs} | |
| result = fn(*args, **kwargs) | |
| entry["result"] = result | |
| # คืน dict เพื่อให้ Gemini SDK ทำงานได้ (ของเดิม) | |
| return {"result": result} | |
| except Exception as e: | |
| entry["success"] = False | |
| entry["result"] = str(e) | |
| raise | |
| finally: | |
| log.calls.append(entry) | |
| wrapper.__name__ = fn.__name__ | |
| wrapper.__doc__ = fn.__doc__ | |
| return wrapper | |