from abc import ABC, abstractmethod
from typing import Any, Dict


class Tool(ABC):
    """Base class for all tools available to agents"""

    def __init__(self, name: str):
        self.name = name

    @abstractmethod
    def run(self, **kwargs) -> Any:
        """Execute the tool with given parameters"""
        pass

    def reset(self):
        """Reset tool state (optional)"""
        pass

    def get_description(self) -> str:
        """Get human-readable description of the tool"""
        return f"Tool: {self.name}"
