| from smolagents import Tool |
| from openai import OpenAI |
|
|
|
|
| class ClassifierTool(Tool): |
| name = "open_classifier" |
| description = """Classifies given items into given categories from perspective of specific knowledge area.""" |
| inputs = { |
| "knowledge_area": { |
| "type": "string", |
| "description": "The knowledge area that should be used for classification.", |
| }, |
| "environment": { |
| "type": "string", |
| "description": "Couple words that describe environment or location in which items should be classified in case of plural meaning or if only part of item relevant for classification.", |
| }, |
| "categories": { |
| "type": "string", |
| "description": "Comma separated list of categories to distribute objects.", |
| }, |
| "items": { |
| "type": "string", |
| "description": "Comma separated list of items to be classified. Please include adjectives if available.", |
| }, |
| } |
| output_type = "string" |
|
|
| def __init__( |
| self, |
| client: OpenAI | None = None, |
| model_id: str = "gpt-4.1-mini", |
| **kwargs, |
| ): |
| self.client = client or OpenAI() |
| self.model_id = model_id |
|
|
| super().__init__(**kwargs) |
|
|
| def forward( |
| self, knowledge_area: str, environment: str, categories: str, items: str |
| ) -> str: |
| response = self.client.responses.create( |
| model=self.model_id, |
| input=[ |
| { |
| "role": "user", |
| "content": [ |
| { |
| "type": "input_text", |
| "text": self._prompt( |
| knowledge_area=knowledge_area, |
| context=environment, |
| categories=categories, |
| items=items, |
| ), |
| }, |
| ], |
| } |
| ], |
| ) |
| answer = response.output_text |
| return answer |
|
|
| def _prompt( |
| self, knowledge_area: str, context: str, categories: str, items: str |
| ) -> str: |
| return f"""\ |
| You are {knowledge_area} classifier located in {context} context. |
| I will provide you a list of items and a list of categories and context in which items should be considered. |
| |
| Your task is to classify the items into the categories. |
| Use context to determine the meaning of the items and decide if you need to classify entire item or only part of it. |
| |
| Do not miss any item and do not add any item to the list of categories. |
| Use highest probability category for each item. |
| You can add category "Other" if you are not sure about the classification. |
| |
| Use only considerations from from the {knowledge_area} perspective. |
| Explain your reasoning from {knowledge_area} perspective in {context} context and then provide final answer. |
| Important: Do not allow {context} influence your judgment for classification. |
| |
| ITEMS: {items} |
| CATEGORIES: {categories} |
| |
| Now provide your reasoning and finalize it with the classification in the following format: |
| Category 1: items list |
| Category 2: items list |
| Other (if needed): items list |
| """ |