Spaces:
Sleeping
Sleeping
| 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(), | |
| } | |