# 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()