Files changed (3) hide show
  1. README.md +37 -15
  2. app.py +47 -62
  3. requirements.txt +2 -0
README.md CHANGED
@@ -1,16 +1,38 @@
1
- ---
2
- title: Mindexplore
3
- emoji: 💬
4
- colorFrom: yellow
5
- colorTo: purple
6
- sdk: gradio
7
- sdk_version: 5.42.0
8
- app_file: app.py
9
- pinned: false
10
- hf_oauth: true
11
- hf_oauth_scopes:
12
- - inference-api
13
- license: mit
14
- ---
15
 
16
- An example chatbot using [Gradio](https://gradio.app), [`huggingface_hub`](https://huggingface.co/docs/huggingface_hub/v0.22.2/en/index), and the [Hugging Face Inference API](https://huggingface.co/docs/api-inference/index).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ExploraLab — Chat de Química y Física
2
+
3
+ ExploraLab es un tutor IA gratuito diseñado para responder preguntas de **Química y Física** de forma interactiva.
4
+
5
+ ## 🚀 Características
6
+ - 🧪 **Didáctico** → explicaciones claras y sencillas.
7
+ - 📚 **Paso a paso** → resolución detallada de problemas.
8
+ - ✍️ **Examen** → respuestas concisas, estilo evaluación.
9
+ - 🔬 **Referencias** → explicaciones inspiradas en grandes científicos.
 
 
 
 
 
10
 
11
+ ## 📂 Estructura
12
+ ```
13
+ ExploraLab/
14
+ │── app.py
15
+ │── requirements.txt
16
+ │── README.md
17
+ │── models/
18
+ └── mistral-7b-openorca.Q4_0.gguf
19
+ ```
20
+
21
+ ## 🖥️ Uso en Hugging Face Spaces
22
+ 1. Crea un [nuevo Space](https://huggingface.co/new-space) con SDK = **Gradio**.
23
+ 2. Sube los archivos `app.py`, `requirements.txt` y `README.md`.
24
+ 3. Crea la carpeta `models/` y sube el modelo `.gguf` (ejemplo: [Mistral-7B OpenOrca GGUF](https://huggingface.co/TheBloke/Mistral-7B-OpenOrca-GGUF)).
25
+ 4. Hugging Face generará tu link:
26
+ ```
27
+ https://huggingface.co/spaces/TU_USUARIO/ExploraLab
28
+ ```
29
+
30
+ ## 🖥️ Uso local
31
+ ```bash
32
+ pip install -r requirements.txt
33
+ python app.py
34
+ ```
35
+ Abre en tu navegador `http://localhost:7860`.
36
+
37
+ ---
38
+ ⚠️ Nota: sin el modelo `.gguf` en la carpeta `models/`, la app no podrá responder.
app.py CHANGED
@@ -1,70 +1,55 @@
1
  import gradio as gr
2
- from huggingface_hub import InferenceClient
3
-
4
-
5
- def respond(
6
- message,
7
- history: list[dict[str, str]],
8
- system_message,
9
- max_tokens,
10
- temperature,
11
- top_p,
12
- hf_token: gr.OAuthToken,
13
- ):
14
- """
15
- For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
16
- """
17
- client = InferenceClient(token=hf_token.token, model="openai/gpt-oss-20b")
18
-
19
- messages = [{"role": "system", "content": system_message}]
20
-
21
- messages.extend(history)
22
-
23
- messages.append({"role": "user", "content": message})
24
-
25
- response = ""
26
-
27
- for message in client.chat_completion(
28
- messages,
29
- max_tokens=max_tokens,
30
- stream=True,
31
- temperature=temperature,
32
- top_p=top_p,
33
- ):
34
- choices = message.choices
35
- token = ""
36
- if len(choices) and choices[0].delta.content:
37
- token = choices[0].delta.content
38
-
39
- response += token
40
- yield response
41
 
 
 
 
 
 
42
 
43
- """
44
- For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
45
- """
46
- chatbot = gr.ChatInterface(
47
- respond,
48
- type="messages",
49
- additional_inputs=[
50
- gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
51
- gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
52
- gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
53
- gr.Slider(
54
- minimum=0.1,
55
- maximum=1.0,
56
- value=0.95,
57
- step=0.05,
58
- label="Top-p (nucleus sampling)",
59
- ),
60
- ],
61
- )
62
 
63
- with gr.Blocks() as demo:
64
- with gr.Sidebar():
65
- gr.LoginButton()
66
- chatbot.render()
67
 
 
 
68
 
69
  if __name__ == "__main__":
70
  demo.launch()
 
1
  import gradio as gr
2
+ from gpt4all import GPT4All
3
+
4
+ # Ruta del modelo (asegúrate de subir un archivo .gguf dentro de la carpeta "models/")
5
+ MODEL_PATH = "models/mistral-7b-openorca.Q4_0.gguf"
6
+
7
+ # Inicializa el modelo (se carga una sola vez)
8
+ try:
9
+ model = GPT4All(MODEL_PATH)
10
+ except Exception as e:
11
+ model = None
12
+ print("⚠️ No se encontró el modelo:", e)
13
+
14
+ # Función de respuesta en formato chat
15
+ def chat_responder(history, message, modo):
16
+ if not model:
17
+ return history + [[message, "⚠️ No se encontró el modelo en la carpeta 'models/'."]]
18
+
19
+ if modo == "Didáctico":
20
+ prompt = f"Explica de manera sencilla para un estudiante: {message}"
21
+ elif modo == "Paso a paso":
22
+ prompt = f"Resuelve paso a paso: {message}"
23
+ elif modo == "Examen":
24
+ prompt = f"Responde de forma breve, como si fuera un examen: {message}"
25
+ else:
26
+ prompt = f"Responde con referencias de científicos famosos: {message}"
27
+
28
+ with model.chat_session() as session:
29
+ respuesta = session.generate(prompt, max_tokens=300)
30
+ history = history + [[message, respuesta]]
31
+ return history
32
+
33
+ # Interfaz tipo chat en Gradio
34
+ with gr.Blocks() as demo:
35
+ gr.Markdown("# 🔬 ExploraLab — Chat de Química y Física")
36
+ gr.Markdown("Elige un modo y conversa con tu tutor IA.")
 
 
 
 
37
 
38
+ modo = gr.Radio(
39
+ ["Didáctico", "Paso a paso", "Examen", "Referencias"],
40
+ label="Modo de explicación",
41
+ value="Didáctico"
42
+ )
43
 
44
+ chatbot = gr.Chatbot(height=400)
45
+ msg = gr.Textbox(label="Escribe tu pregunta aquí")
46
+ clear = gr.Button("🧹 Limpiar chat")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
48
+ def respond(history, message, modo):
49
+ return chat_responder(history, message, modo)
 
 
50
 
51
+ msg.submit(respond, [chatbot, msg, modo], chatbot)
52
+ clear.click(lambda: [], None, chatbot)
53
 
54
  if __name__ == "__main__":
55
  demo.launch()
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ gradio
2
+ gpt4all