|
|
| import requests
|
| import os
|
| from memoria import cargar_historial, guardar_historial
|
|
|
|
|
| historial = cargar_historial()
|
| url = "http://localhost:11434/api/generate"
|
|
|
|
|
| MAX_MENSAJES = 30
|
|
|
|
|
|
|
|
|
| def cargar_personalidad(nombre):
|
| """
|
| Carga el prompt base desde un archivo en la carpeta prompts.
|
| nombre: 'chistosa', 'matematicas', 'coach', etc.
|
| """
|
| ruta = os.path.join("prompts", f"{nombre}.py")
|
| with open(ruta, "r", encoding="utf-8") as f:
|
| codigo = f.read()
|
| contexto = {}
|
| exec(codigo, contexto)
|
| return contexto["sistema"]
|
|
|
|
|
|
|
|
|
| def resumir_historial(historial, modelo_url=url):
|
| """
|
| Usa Phi para resumir el historial cuando sea muy largo.
|
| Devuelve un historial resumido como lista de un solo mensaje 'Sistema'.
|
| """
|
| conversacion = ""
|
| for item in historial:
|
| conversacion += f'{item["rol"]}: {item["mensaje"]}\n'
|
|
|
| prompt_resumen = f"""
|
| Resume la siguiente conversaci贸n de manera breve y clara,
|
| conservando solo la informaci贸n importante sobre el usuario y el contexto de la conversaci贸n.
|
| Conversaci贸n:
|
| {conversacion}
|
| Resumen:
|
| """
|
|
|
| r = requests.post(modelo_url, json={"model": "phi", "prompt": prompt_resumen, "stream": False})
|
| resumen = r.json()["response"]
|
|
|
| return [{"rol": "Sistema", "mensaje": resumen}]
|
|
|
|
|
|
|
|
|
| def preguntar(prompt, sistema):
|
| """
|
| Env铆a el mensaje del usuario a Phi y devuelve la respuesta de la IA.
|
| Incluye memoria persistente y resumen autom谩tico.
|
| """
|
| global historial
|
| historial.append({"rol": "Usuario", "mensaje": prompt})
|
|
|
|
|
| if len(historial) > MAX_MENSAJES:
|
| historial = resumir_historial(historial)
|
|
|
|
|
| conversacion = sistema + "\n"
|
| for item in historial:
|
| conversacion += f'{item["rol"]}: {item["mensaje"]}\n'
|
| conversacion += "IA:"
|
|
|
|
|
| r = requests.post(url, json={"model": "phi", "prompt": conversacion, "stream": False})
|
| respuesta = r.json()["response"]
|
|
|
| historial.append({"rol": "IA", "mensaje": respuesta})
|
| guardar_historial(historial)
|
| return respuesta
|
|
|
|
|
|
|
|
|
| if __name__ == "__main__":
|
| personalidad = input("Elige personalidad (chistosa/matematicas/coach): ")
|
| sistema = cargar_personalidad(personalidad)
|
| while True:
|
| pregunta = input("Tu: ")
|
| print("IA:", preguntar(pregunta, sistema)) |