You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
orquestrador/app/services/tool_registry.py

50 lines
1.5 KiB
Python

from typing import List
from app.models.tool_model import ToolDefinition
from app.integrations.estoque_service import consultar_estoque
class ToolRegistry:
def __init__(self):
self._tools = []
self.register_tool(
name="consultar_estoque",
description="Consulta veículos disponíveis até determinado preço", # Descrição que ajuda o modelo Gemini a entender quado selecionar essa Tool.
parameters={
"type": "object",
"properties": {
"preco_max": {
"type": "number",
"description": "Preço máximo do veículo"
}
},
"required": ["preco_max"]
},
handler=consultar_estoque
)
def register_tool(self, name, description, parameters, handler):
self._tools.append(
ToolDefinition(
name=name,
description=description,
parameters=parameters,
handler=handler
)
)
def get_tools(self) -> List[ToolDefinition]:
return self._tools
async def execute(self, name: str, arguments: dict):
tool = next((t for t in self._tools if t.name == name), None) # Procura dentro da lista de tools aquela que tem o mesmo nome
if not tool:
raise Exception(f"Tool {name} não encontrada.")
return await tool.handler(**arguments)