Spaces:
Build error
Build error
File size: 2,253 Bytes
8a682b5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
"""
Base tool class for all AI Agent tools
"""
from abc import ABC, abstractmethod
from typing import Any, Dict, Optional
from dataclasses import dataclass
@dataclass
class ToolResult:
"""Result from tool execution"""
success: bool
data: Any
error: Optional[str] = None
metadata: Optional[Dict[str, Any]] = None
class BaseTool(ABC):
"""Base class for all tools"""
def __init__(self, name: str, description: str, version: str = "1.0.0"):
self.name = name
self.description = description
self.version = version
self.metadata = {}
@abstractmethod
async def arun(self, **kwargs) -> Any:
"""Async execution method"""
pass
def run(self, **kwargs) -> Any:
"""Sync execution method (default implementation)"""
import asyncio
return asyncio.run(self.arun(**kwargs))
def get_schema(self) -> Dict[str, Any]:
"""Get tool schema for documentation"""
return {
"name": self.name,
"description": self.description,
"version": self.version,
"parameters": self._get_parameters_schema(),
"metadata": self.metadata
}
def _get_parameters_schema(self) -> Dict[str, Any]:
"""Get parameters schema - override in subclasses"""
return {}
def validate_parameters(self, **kwargs) -> bool:
"""Validate input parameters - override in subclasses"""
return True
def __str__(self):
return f"{self.name} (v{self.version})"
def __repr__(self):
return f"<{self.__class__.__name__}: {self.name}>"
def tool(func):
"""Decorator to create a tool from a function"""
class FunctionTool(BaseTool):
def __init__(self):
super().__init__(
name=func.__name__,
description=func.__doc__ or "No description available"
)
self._func = func
async def arun(self, **kwargs):
import inspect
if inspect.iscoroutinefunction(self._func):
return await self._func(**kwargs)
else:
return self._func(**kwargs)
return FunctionTool() |