File size: 1,845 Bytes
8c1fb11
e43eaf8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c1fb11
e43eaf8
 
 
 
 
8c1fb11
e43eaf8
 
 
8c1fb11
e43eaf8
 
8c1fb11
e43eaf8
 
8c1fb11
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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()