| # app/tools/http.py | |
| import httpx, asyncio | |
| from .base import Tool, ToolSpec | |
| class HttpGet(Tool): | |
| spec = ToolSpec( | |
| name="http_get", | |
| description="Fetch JSON/HTML from a URL.", | |
| schema={ | |
| "type":"object","properties":{"url":{"type":"string","format":"uri"}}, "required":["url"] | |
| } | |
| ) | |
| async def run(self, url:str) -> dict: | |
| async with httpx.AsyncClient(timeout=10) as s: | |
| r = await s.get(url) | |
| r.raise_for_status() | |
| ctype = r.headers.get("content-type","") | |
| return {"status": r.status_code, "content_type": ctype, "text": r.text[:200000]} |