IA.chati / main.py
ander19's picture
Upload 9 files
da41d5f verified
# main.py
import requests
import os
from memoria import cargar_historial, guardar_historial
# Historial persistente
historial = cargar_historial()
url = "http://localhost:11434/api/generate" # URL de tu modelo Phi
# Configuraci贸n para res煤menes autom谩ticos
MAX_MENSAJES = 30 # n煤mero m谩ximo de mensajes antes de resumir
# ----------------------------
# Funci贸n para cargar personalidad
# ----------------------------
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) # ejecuta el c贸digo para obtener la variable 'sistema'
return contexto["sistema"]
# ----------------------------
# Funci贸n para resumir historial
# ----------------------------
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}]
# ----------------------------
# Funci贸n principal de la IA
# ----------------------------
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})
# Resumir si hay demasiados mensajes
if len(historial) > MAX_MENSAJES:
historial = resumir_historial(historial)
# Construir prompt completo para la IA
conversacion = sistema + "\n"
for item in historial:
conversacion += f'{item["rol"]}: {item["mensaje"]}\n'
conversacion += "IA:"
# Llamar al modelo Phi
r = requests.post(url, json={"model": "phi", "prompt": conversacion, "stream": False})
respuesta = r.json()["response"]
historial.append({"rol": "IA", "mensaje": respuesta})
guardar_historial(historial) # guardar en disco
return respuesta
# ----------------------------
# Prueba en consola (opcional)
# ----------------------------
if __name__ == "__main__":
personalidad = input("Elige personalidad (chistosa/matematicas/coach): ")
sistema = cargar_personalidad(personalidad)
while True:
pregunta = input("Tu: ")
print("IA:", preguntar(pregunta, sistema))