diff --git a/app/api/routes.py b/app/api/routes.py index 0780542..b84fd4a 100644 --- a/app/api/routes.py +++ b/app/api/routes.py @@ -1,9 +1,9 @@ from fastapi import APIRouter from app.api.schemas import ChatRequest, ChatResponse -from app.services.orchestrator_service import OrchestratorService +from app.services.orquestrador_service import OrquestradorService router = APIRouter() -service = OrchestratorService() +service = OrquestradorService() @router.post("/chat", response_model=ChatResponse) async def chat(request: ChatRequest): diff --git a/app/services/orchestrator_service.py b/app/services/orchestrator_service.py deleted file mode 100644 index 18b3e56..0000000 --- a/app/services/orchestrator_service.py +++ /dev/null @@ -1,10 +0,0 @@ -class OrchestratorService: - - async def handle_message(self, message: str, user_id: str) -> str: - # Aqui futuramente: - # - chamada ao Gemini - # - verificação de intenção - # - chamada de tools - # - integração com banco - - return f"Mensagem recebida do usuário {user_id}: {message}" diff --git a/app/services/orquestrador_service.py b/app/services/orquestrador_service.py new file mode 100644 index 0000000..1e66db2 --- /dev/null +++ b/app/services/orquestrador_service.py @@ -0,0 +1,46 @@ +from app.services.llm_service import LLMService +from app.services.tool_registry import ToolRegistry + + +class OrquestradorService: + + def __init__(self): + self.llm = LLMService() # Instancia o serviço que conversa com o Gemini + self.registry = ToolRegistry() # Instancia o registro de tools disponíveis no sistema + + + """ + Método principal chamado quando o usuário envia uma mensagem. + + Parâmetros: + - message: texto enviado pelo usuário + - user_id: identificador do usuário (ainda não está sendo usado aqui, + mas futuramente servirá para histórico) + """ + async def handle_message(self, message: str, user_id: str) -> str: + + 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"] # Nome da função que o Gemini quer executar + arguments = llm_result["tool_call"]["arguments"] # Argumentos extraídos da mensagem do usuário + + 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 função {tool_name}: {tool_result}", + tools=tools + ) + + return final_response["response"] + + # Se o modelo não chamou nenhuma tool, + # significa que ele respondeu diretamente em texto. + return llm_result["response"]