♻️ refactor: Reogranizando e ajustando o orquestrador do sistema. Também suas funcionalidades foram comentadas para futuras manutenções.

main
parent 1f4c4e0462
commit 43ce4a6093

@ -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):

@ -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}"

@ -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"]
Loading…
Cancel
Save