File size: 3,949 Bytes
6c92216
 
acceed5
6c92216
 
 
 
 
 
 
 
 
 
 
acceed5
6c92216
 
 
 
 
 
 
 
 
 
 
 
 
acceed5
6c92216
 
 
 
 
 
 
acceed5
6c92216
 
acceed5
6c92216
 
acceed5
6c92216
 
 
 
 
 
 
 
 
acceed5
6c92216
 
 
acceed5
6c92216
acceed5
6c92216
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
acceed5
6c92216
 
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
from transformers import AutoTokenizer, AutoModelForCausalLM
import gradio as gr

# --- Cargar el tokenizador y el modelo ---
# Se cargan una sola vez al inicio de la aplicación para mayor eficiencia.
# 'device_map="auto"' es crucial para que Hugging Face Spaces lo asigne correctamente
# a la GPU (si está disponible) o a la CPU.
# 'torch_dtype=torch.bfloat16' optimiza el uso de memoria en GPUs modernas.
tokenizer = AutoTokenizer.from_pretrained("tiiuae/Falcon-H1-1.5B-Deep-Instruct")
model = AutoModelForCausalLM.from_pretrained(
    "tiiuae/Falcon-H1-1.5B-Deep-Instruct",
    torch_dtype=torch.bfloat16, # Puedes probar con torch.float16 si da problemas
    device_map="auto"
)

# --- Definir la función de generación de texto ---
def generate_text(user_input, history):
    # Personalidad de Amside AI
    # Este es un "system prompt" que ayuda al modelo a mantener el personaje.
    # Se añade al inicio de cada conversación o antes de cada turno.
    # Ajusta esta parte para afinar la personalidad de Amside.
    system_message = (
        "Eres Amside AI, una inteligencia artificial creada por Hodelygil. "
        "Tu propósito principal es asistir en el estudio y el aprendizaje, "
        "proporcionando información y explicaciones detalladas. "
        "Sin embargo, también eres amigable y puedes mantener conversaciones informales y agradables. "
        "Responde de manera informativa y útil, pero con un tono conversacional."
    )

    # Formatear los mensajes para el modelo, incluyendo el historial de chat
    # El formato del "chat_template" es crucial para que el modelo entienda el diálogo.
    messages = [{"role": "system", "content": system_message}] # El system message va primero
    for human, bot in history:
        messages.append({"role": "user", "content": human})
        messages.append({"role": "assistant", "content": bot})
    messages.append({"role": "user", "content": user_input})

    # Codificar los mensajes en IDs de tokens
    input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt")

    # Mover los IDs de tokens al mismo dispositivo donde se cargó el modelo (GPU/CPU)
    input_ids = input_ids.to(model.device)

    # Generar la respuesta del modelo
    outputs = model.generate(
        input_ids,
        max_new_tokens=500,  # Máximo de tokens para la respuesta del modelo
        do_sample=True,      # Activa el muestreo para respuestas más creativas
        temperature=0.7,     # Controla la aleatoriedad (menor = más predecible)
        top_p=0.9,           # Controla la diversidad de las palabras elegidas
        repetition_penalty=1.1 # Penaliza la repetición de frases
    )

    # Decodificar la respuesta y eliminar el prompt original para solo mostrar la respuesta de Amside
    # outputs[0] es la secuencia completa, input_ids.shape[1] es la longitud del prompt
    response = tokenizer.decode(outputs[0][input_ids.shape[1]:], skip_special_tokens=True)

    return response

# --- Configurar la interfaz de Gradio ---
# gr.ChatInterface es una forma sencilla de crear una interfaz de chatbot.
iface = gr.ChatInterface(
    fn=generate_text,
    chatbot=gr.Chatbot(height=400), # Altura de la ventana de chat
    textbox=gr.Textbox(placeholder="Escribe tu mensaje para Amside AI...", container=False, scale=7),
    title="Amside AI - Tu Compañero de Estudio y Conversación",
    description="Soy Amside AI, una inteligencia artificial creada por Hodelygil. Estoy aquí para ayudarte a estudiar y conversar.",
    examples=[
        "¿Qué es la fotosíntesis?",
        "Cuéntame un dato interesante.",
        "¿Cómo funciona la gravedad?",
        "Hola Amside, ¿cómo estás?",
        "Dame un resumen de la historia de España."
    ],
    theme="soft", # Un tema visual más suave para la interfaz
    retry_btn="Reintentar",
    undo_btn="Deshacer",
    clear_btn="Limpiar Historial"
)

# Lanzar la aplicación Gradio
iface.launch()