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/orquestrador_service.py

47 lines
1.4 KiB
Python

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):
self.llm = LLMService()
self.registry = ToolRegistry(db)
"""
Metodo principal chamado quando o usuario envia uma mensagem.
Parametros:
- message: texto enviado pelo usuario
- user_id: identificador do usuario (ainda nao esta sendo usado aqui,
mas futuramente servira para historico)
"""
async def handle_message(self, message: 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"]
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"]