import gradio as gr from transformers import pipeline import re # --- 1. Inicialización de Modelos --- # NOTA: Los modelos se cargan una sola vez al iniciar la aplicación para mayor eficiencia. try: # Modelo de Resumen summarizer = pipeline("summarization", model="facebook/bart-large-cnn") # Modelo de Generación de Texto (para Captions) caption_generator = pipeline("text-generation", model="PlanTL-GOB-ES/gpt2-base-bne") # Modelo de Generación de Imágenes (Placeholder) # Aquí iría el modelo real de Stable Diffusion cuando las dependencias estén listas. except Exception as e: print(f"Error al cargar un modelo: {e}") # Asigna None a los modelos que fallen para manejarlo después summarizer = None caption_generator = None # --- 2. Definición de Funciones para cada Herramienta --- def summarize_text(text): """Función para resumir texto.""" if not summarizer: return "Error: El modelo de resumen no está disponible." if not text or not isinstance(text, str) or text.strip() == "": return "Por favor, introduce un texto para resumir." try: summary = summarizer(text, min_length=50, max_length=200, do_sample=False) return summary[0]['summary_text'] except Exception as e: return f"Ha ocurrido un error al procesar el texto: {e}" def generate_captions(topic): """Función para generar captions virales.""" if not caption_generator: return ["Error: El modelo de captions no está disponible.", "", ""] if not topic or not isinstance(topic, str) or topic.strip() == "": return ["Por favor, introduce un tema.", "", ""] prompt = f"Escribe 3 ideas de captions virales para una publicación en redes sociales sobre '{topic}'. Incluye emojis y hashtags. No repitas el prompt en la respuesta." try: outputs = caption_generator(prompt, max_new_tokens=80, num_return_sequences=3, do_sample=True, temperature=0.9, top_k=50) captions = [re.sub(re.escape(prompt), '', out['generated_text']).strip() for out in outputs] # Asegurarnos de que siempre devolvemos 3 elementos while len(captions) < 3: captions.append("") return captions except Exception as e: return [f"Ha ocurrido un error: {e}", "", ""] def generate_image(prompt): """Función placeholder para generar imágenes.""" # Esta es una simulación. La implementación real requiere 'diffusers' y 'torch'. return f"Imagen generada para el prompt: '{prompt}' (esto es un placeholder)" # --- 3. Creación de la Interfaz con Gradio --- with gr.Blocks(theme=gr.themes.Default(primary_hue="purple", secondary_hue="indigo"), css=".gradio-container {background-color: #0A0A0A}") as demo: gr.Markdown("# GeniusTools Backend API") # --- Endpoints de la API --- # Usamos `api_name` para crear un endpoint que podamos llamar desde el frontend. # Endpoint para Resumen gr.Interface( fn=summarize_text, inputs=gr.Textbox(label="Texto a resumir"), outputs=gr.Textbox(label="Resumen"), api_name="summarize" ) # Endpoint para Captions gr.Interface( fn=generate_captions, inputs=gr.Textbox(label="Tema del post"), outputs=[gr.Textbox(label=f"Sugerencia {i+1}") for i in range(3)], api_name="generate_captions" ) # Endpoint para Imágenes gr.Interface( fn=generate_image, inputs=gr.Textbox(label="Descripción de la imagen"), outputs=gr.Textbox(label="Resultado (Placeholder)"), api_name="generate_image" ) # --- 4. Lanzamiento de la Aplicación --- if __name__ == "__main__": demo.launch()