| from crewai.tools import BaseTool |
| from typing import Literal |
|
|
| import requests |
|
|
| class URLValidatorTool(BaseTool): |
| name: Literal["url_validator"] |
| description : str = "Validate whether a given URL is reachable and returns a valid HTTP status." |
|
|
| def _run(self, url: str) -> dict: |
| """Synchronous tool execution""" |
| try: |
| response = requests.head(url, allow_redirects=True, timeout=15) |
| return { |
| "url": url, |
| "status_code": response.status_code, |
| "ok": response.status_code < 400 |
| } |
| except Exception as e: |
| return { |
| "url": url, |
| "status_code": None, |
| "ok": False, |
| "error": str(e) |
| } |
|
|
| async def _arun(self, url: str) -> dict: |
| """Asynchronous tool execution (not used but required)""" |
| return self._run(url) |
|
|