File size: 3,813 Bytes
8925905
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# app.py

import gradio as gr
from transformers import pipeline

# --- 1. Carga del Modelo de Lenguaje ---
# Utilizamos un pipeline de Hugging Face para simplificar la interacci贸n con el modelo.
# Intentamos cargar el modelo en GPU (device=0) si est谩 disponible para un rendimiento m谩s r谩pido,
# de lo contrario, se carga en CPU.
try:
    generator = pipeline("text-generation", model="google/gemma-2b-it", device=0)
except Exception:
    generator = pipeline("text-generation", model="google/gemma-2b-it")

# --- 2. Funci贸n para Generar Contenido Educativo ---
def generar_contenido_audiovisual(tema, idioma):
    """
    Genera un m贸dulo de aprendizaje interactivo sobre un tipo de audiovisual espec铆fico
    basado en el tema y el idioma.
    """
    # Definimos un prompt detallado para guiar al modelo.
    # El modelo actuar谩 como un experto en educaci贸n y audiovisual.
    prompt = f"Act煤a como un experto en educaci贸n y audiovisual. Genera un m贸dulo de aprendizaje interactivo sobre '{tema}'.\n" \
             f"Este m贸dulo debe incluir:\n" \
             f"1. Una introducci贸n concisa.\n" \
             f"2. Caracter铆sticas principales del tipo de audiovisual.\n" \
             f"3. Ejemplos relevantes.\n" \
             f"4. Una actividad pr谩ctica o pregunta de reflexi贸n para el estudiante.\n" \
             f"El contenido debe ser adecuado para estudiantes de tecnolog铆a e inform谩tica y estar redactado en '{idioma}'.\n" \
             f"Aseg煤rate de que la explicaci贸n sea clara, concisa y atractiva."

    # Usamos el generador para obtener una respuesta del modelo.
    # max_new_tokens: Controla la longitud m谩xima del texto generado. Un valor m谩s alto permite m谩s contenido.
    # num_return_sequences: Genera una 煤nica respuesta.
    # truncation=True: Para manejar prompts largos si es necesario.
    response = generator(
        prompt,
        max_new_tokens=1500, # Un valor de 1500 tokens deber铆a ser suficiente para un m贸dulo completo
        num_return_sequences=1,
        truncation=True,
        add_special_tokens=True
    )

    # El resultado del pipeline es una lista de diccionarios; extraemos el texto.
    # A veces, el prompt puede repetirse en la salida, as铆 que lo eliminamos si es el caso.
    generated_text = response[0]['generated_text']
    if generated_text.startswith(prompt):
        generated_text = generated_text[len(prompt):].strip()

    return generated_text

# --- 3. Definici贸n de la Interfaz de Usuario con Gradio ---
# Configuramos los componentes de entrada (inputs) y salida (outputs) para la aplicaci贸n.
interfaz = gr.Interface(
    fn=generar_contenido_audiovisual, # La funci贸n Python que se ejecutar谩
    inputs=[
        gr.Textbox(
            label="Tema del Audiovisual",
            lines=2,
            placeholder="Ej. Cine Documental, Animaci贸n 3D, Videoclip Musical"
        ),
        gr.Radio(
            ["Espa帽ol", "Ingl茅s"],
            label="Idioma del Contenido"
        )
    ],
    outputs=gr.Markdown(label="Contenido del M贸dulo de Aprendizaje"), # Usamos Markdown para un formato de texto enriquecido
    title="馃挕 Ambiente Virtual de Aprendizaje: Tipos de Audiovisual 馃帴",
    description="Explora diferentes tipos de audiovisuales. Ingresa un tema y el idioma para generar un m贸dulo de aprendizaje personalizado. Ideal para docentes y estudiantes de tecnolog铆a e inform谩tica.",
    theme="huggingface", # Un tema visual que se integra bien con Hugging Face Spaces
    examples=[ # Ejemplos predefinidos para facilitar la prueba y el uso
        ["Cortometraje de Ficci贸n", "Espa帽ol"],
        ["Realidad Virtual Inmersiva", "Ingl茅s"],
        ["Vlog de YouTube", "Espa帽ol"]
    ]
)

# --- 4. Lanzamiento de la Aplicaci贸n ---
if __name__ == "__main__":
    interfaz.launch()