from sqlalchemy.orm import Session from app.services.llm_service import LLMService from app.services.tool_registry import ToolRegistry class OrquestradorService: def __init__(self, db: Session): """Inicializa servicos de LLM e registro de tools para a sessao atual.""" self.llm = LLMService() self.registry = ToolRegistry(db) async def handle_message(self, message: str) -> str: """Processa mensagem, executa tool quando necessario e retorna resposta final.""" tools = self.registry.get_tools() llm_result = await self.llm.generate_response( message=message, tools=tools, ) if llm_result["tool_call"]: tool_name = llm_result["tool_call"]["name"] arguments = llm_result["tool_call"]["arguments"] tool_result = await self.registry.execute(tool_name, arguments) # Segunda rodada para formatar resposta final_response = await self.llm.generate_response( message=f"Resultado da funcao {tool_name}: {tool_result}", tools=tools, ) return final_response["response"] # Se o modelo nao chamou nenhuma tool, # significa que ele respondeu diretamente em texto. return llm_result["response"]