pokesupport / controller.py
Jiahe Qiu
Add pokesupport scripts
373f549
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(),
}