App-Mariangel / app.py
juanbenitez's picture
Create app.py
8925905 verified
# 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()