import json from agents import AgentJoy, ProfessorOak, RotomDex from llm_client import LLMClient from memory import SimpleMemory class PokeSupportTown: """Controlador principal de la simulación.""" def __init__(self, use_llm=False): self.memory = SimpleMemory() self.llm_client = LLMClient(use_llm=use_llm) self.agent_joy = AgentJoy() self.professor_oak = ProfessorOak() self.rotom_dex = RotomDex(self.memory) def reset(self): self.memory.reset() def build_fallback_response(self, joy_decision, oak_response, rotom_response): lines = [ f"**Entrenador:** {joy_decision['trainer']}", f"**Categoría:** {joy_decision['category']}", f"**Prioridad:** {joy_decision['priority']}", "", f"{oak_response['description']}", "", "**Recomendación:**", ] for step in oak_response["solution"][:2]: lines.append(f"- {step}") if oak_response["detail"]: lines.append(f"- {oak_response['detail']}") if rotom_response["pattern"]: lines.append(f"- Aviso de Rotom Dex: {rotom_response['pattern']['message']}") if rotom_response["ticket"]: ticket = rotom_response["ticket"] lines.append(f"- Se crea el ticket {ticket['id']} con estado {ticket['status']}.") else: lines.append("- No se crea ticket en esta iteración.") return "\n".join(lines) def build_llm_prompt(self, query, joy_decision, oak_response, rotom_response): context = { "consulta_usuario": query, "decision_agente_joy": joy_decision, "respuesta_profesor_oak": oak_response, "respuesta_rotom_dex": rotom_response, "eventos_recientes": self.memory.recent_events(), "conversacion_reciente": self.memory.recent_conversation(), "resumen_memoria": self.memory.summary(), } return ( "Redacta la respuesta final para el entrenador usando solo esta información. " "Mantén un tono académico, claro y breve. No inventes datos externos.\n\n" + json.dumps(context, ensure_ascii=False, indent=2) ) def process_query(self, query): joy_decision = self.agent_joy.run(query) oak_response = self.professor_oak.run(query, joy_decision, self.memory) rotom_response = self.rotom_dex.run(query, joy_decision, oak_response) fallback_response = self.build_fallback_response(joy_decision, oak_response, rotom_response) llm_prompt = self.build_llm_prompt(query, joy_decision, oak_response, rotom_response) final_response = self.llm_client.generate(llm_prompt, fallback_response) self.memory.add_conversation_turn(query, final_response) return { "query": query, "joy": joy_decision, "oak": oak_response, "rotom": rotom_response, "final_response": final_response, "memory_summary": self.memory.summary(), }