File size: 4,748 Bytes
44b6564
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import torch
from transformers import pipeline
import gradio as gr
import time

# Cargar el modelo al iniciar
def load_model():
    print("🚀 Cargando Mistral-7B-Grok...")
    model = pipeline(
        "text-generation",
        model="HuggingFaceH4/mistral-7b-grok",
        torch_dtype=torch.float16,
        device_map="auto",
        max_new_tokens=256,
        temperature=0.7,
        do_sample=True
    )
    print("✅ Modelo cargado exitosamente!")
    return model

# Cargar modelo
model = load_model()

# Función para generar respuestas educativas
def cosmobot_response(message, history):
    """Genera respuesta usando Mistral-7B con contexto educativo"""
    
    # Crear prompt educativo
    system_prompt = """Eres CosmoBot, un asistente educativo especializado en exploración espacial, astronomía y cosmología. 



Tu misión es proporcionar explicaciones claras, precisas y accesibles para estudiantes de todos los niveles. Mantén un tono amigable y entusiasta sobre el cosmos.



Áreas de expertise:

- Planetas y sistema solar

- Estrellas y astrofísica  

- Galaxias y cosmología

- Exploración espacial y misiones

- Agujeros negros y fenómenos cósmicos

- Historia de la astronomía



Responde de manera educativa e inspiradora:"""

    # Construir conversación
    conversation = system_prompt + "\n\n"
    
    # Agregar historial de conversación
    for user_msg, bot_msg in history:
        conversation += f"Usuario: {user_msg}\nCosmoBot: {bot_msg}\n"
    
    # Agregar mensaje actual
    conversation += f"Usuario: {message}\nCosmoBot:"
    
    try:
        # Generar respuesta
        start_time = time.time()
        response = model(
            conversation,
            max_new_tokens=300,
            temperature=0.7,
            do_sample=True,
            top_p=0.9
        )[0]['generated_text']
        
        # Extraer solo la última respuesta
        bot_response = response.split("CosmoBot:")[-1].strip()
        
        # Limpiar respuesta
        if "Usuario:" in bot_response:
            bot_response = bot_response.split("Usuario:")[0].strip()
        
        response_time = time.time() - start_time
        print(f"⏱️ Tiempo de respuesta: {response_time:.2f}s")
        
        return bot_response
        
    except Exception as e:
        print(f"❌ Error: {e}")
        return "🔧 Error temporal. Por favor, intenta nuevamente."

# Crear interfaz Gradio
with gr.Blocks(
    theme=gr.themes.Soft(),
    title="🚀 CosmoBot - Asistente Espacial con Mistral-7B"
) as demo:
    
    gr.Markdown(
        """

        # 🚀 CosmoBot 

        ### Asistente Educativo Espacial con Mistral-7B-Grok

        

        ¡Hola! Soy **CosmoBot**, tu guía personal para explorar el universo. 

        Puedo explicarte sobre planetas, estrellas, galaxias, exploración espacial y más.

        

        **Ejemplos de preguntas:**

        - "Explícame qué son los agujeros negros"

        - "Háblame sobre la exploración de Marte" 

        - "Qué es la materia oscura?"

        - "Cuéntame sobre las misiones de la NASA"

        """
    )
    
    # Chatbot interactivo
    chatbot = gr.Chatbot(
        label="Conversación con CosmoBot",
        height=500,
        show_copy_button=True
    )
    
    with gr.Row():
        msg = gr.Textbox(
            label="Escribe tu pregunta sobre el espacio",
            placeholder="Pregunta sobre astronomía, planetas, estrellas...",
            scale=4
        )
        submit = gr.Button("🚀 Enviar", scale=1)
    
    # Ejemplos rápidos
    gr.Examples(
        examples=[
            "Explícame qué son los agujeros negros",
            "Háblame sobre la misión Artemis de la NASA", 
            "Cómo se forman las estrellas?",
            "Qué sabemos sobre el planeta Marte?",
            "Explica la teoría del Big Bang"
        ],
        inputs=msg
    )
    
    # Funcionalidad de limpiar
    clear = gr.Button("🧹 Limpiar conversación")
    
    # Manejar envío de mensajes
    def respond(message, chat_history):
        if not message.strip():
            return "", chat_history
        
        bot_message = cosmobot_response(message, chat_history)
        chat_history.append((message, bot_message))
        return "", chat_history
    
    # Conectar eventos
    msg.submit(respond, [msg, chatbot], [msg, chatbot])
    submit.click(respond, [msg, chatbot], [msg, chatbot])
    clear.click(lambda: None, None, chatbot, queue=False)

# Lanzar aplicación
if __name__ == "__main__":
    demo.launch(
        server_name="0.0.0.0",
        share=False
    )