import gradio as gr from gpt4all import GPT4All # Ruta del modelo (asegúrate de subir un archivo .gguf dentro de la carpeta "models/") MODEL_PATH = "models/mistral-7b-openorca.Q4_0.gguf" # Inicializa el modelo (se carga una sola vez) try: model = GPT4All(MODEL_PATH) except Exception as e: model = None print("⚠️ No se encontró el modelo:", e) # Función de respuesta en formato chat def chat_responder(history, message, modo): if not model: return history + [[message, "⚠️ No se encontró el modelo en la carpeta 'models/'."]] if modo == "Didáctico": prompt = f"Explica de manera sencilla para un estudiante: {message}" elif modo == "Paso a paso": prompt = f"Resuelve paso a paso: {message}" elif modo == "Examen": prompt = f"Responde de forma breve, como si fuera un examen: {message}" else: prompt = f"Responde con referencias de científicos famosos: {message}" with model.chat_session() as session: respuesta = session.generate(prompt, max_tokens=300) history = history + [[message, respuesta]] return history # Interfaz tipo chat en Gradio with gr.Blocks() as demo: gr.Markdown("# 🔬 ExploraLab — Chat de Química y Física") gr.Markdown("Elige un modo y conversa con tu tutor IA.") modo = gr.Radio( ["Didáctico", "Paso a paso", "Examen", "Referencias"], label="Modo de explicación", value="Didáctico" ) chatbot = gr.Chatbot(height=400) msg = gr.Textbox(label="Escribe tu pregunta aquí") clear = gr.Button("🧹 Limpiar chat") def respond(history, message, modo): return chat_responder(history, message, modo) msg.submit(respond, [chatbot, msg, modo], chatbot) clear.click(lambda: [], None, chatbot) if __name__ == "__main__": demo.launch()