| from typing import Any |
| from abc import ABC, abstractmethod |
| from pydantic import BaseModel, ConfigDict |
| from openai import OpenAI |
| import os |
| class Tool(ABC, BaseModel): |
| name: str |
| description: str |
| arg: str |
| def model_post_init(self, __context: Any) -> None: |
| self.name = self.name.lower().replace(' ', '_') |
| self.description = self.description.lower() |
| self.arg = self.arg.lower() |
| @abstractmethod |
| def run(self, prompt: str) -> str: |
| pass |
| def get_tool_description(self): |
| return f"Tool: {self.name}\nDescription: {self.description}\nArg: {self.arg}\n" |
| class LLMTool(Tool): |
| client: Any = None |
| def __init__(self, **data): |
| super().__init__(**data) |
| if self.client is None: |
| api_key = os.environ.get("OPENAI_API_KEY") |
| if not api_key: |
| raise ValueError("OPENAI_API_KEY environment variable not set") |
| self.client = OpenAI(api_key=api_key) |
|
|