| | import torch
|
| | from transformers import pipeline
|
| | from huggingface_hub import login
|
| | import re
|
| | from runware import Runware, IPromptEnhance, IImageInference
|
| | import asyncio
|
| | import gradio as gr
|
| | import os
|
| | from dotenv import load_dotenv
|
| |
|
| |
|
| | load_dotenv()
|
| |
|
| |
|
| | hf_token = os.getenv("HF_TOKEN")
|
| | RUNWARE_API_KEY = os.getenv("RUNWARE_API_KEY")
|
| |
|
| |
|
| | model_id = "meta-llama/Llama-3.2-1B-Instruct"
|
| |
|
| |
|
| | login(hf_token)
|
| |
|
| |
|
| | pipe = pipeline(
|
| | "text-generation",
|
| | model=model_id,
|
| | torch_dtype=torch.bfloat16,
|
| | device_map="auto",
|
| | temperature=0.2,
|
| | top_p=0.8,
|
| | )
|
| |
|
| |
|
| | def generar_texto_mejorado(contenido_usuario, max_new_tokens=256):
|
| | messages = [
|
| | {"role": "system", "content": "Eres un editor profesional y experimentado que ayuda a escritores a mejorar su estilo de escritura. Tu objetivo es revisar el texto proporcionado por el usuario, mejorando su claridad, fluidez, gram谩tica y precisi贸n. Haz sugerencias que mantengan el tono y el estilo general del autor, pero que hagan el texto m谩s atractivo y f谩cil de leer. Recuerda no agregar mas texto del que ya existe. Y al final del texto, introduce una lista con las mejoras que has realizado en el texto empezando con <mejoras>"},
|
| | {"role": "user", "content": contenido_usuario},
|
| | ]
|
| |
|
| |
|
| | outputs = pipe(
|
| | messages,
|
| | max_new_tokens=max_new_tokens
|
| | )
|
| |
|
| |
|
| | texto_generado = outputs[0]["generated_text"]
|
| |
|
| |
|
| |
|
| | if isinstance(texto_generado, list) and "content" in texto_generado[-1]:
|
| | texto_generado = texto_generado[-1]["content"]
|
| |
|
| |
|
| | match = re.search(r"<mejoras>", texto_generado, re.IGNORECASE)
|
| |
|
| | if match:
|
| |
|
| | contenido_principal = texto_generado[:match.start()].strip()
|
| | mejoras = texto_generado[match.end():].strip()
|
| | return contenido_principal, mejoras
|
| | else:
|
| | mejoras="No se encontraron mejoras en el texto."
|
| | return texto_generado, mejoras
|
| |
|
| |
|
| | def generar_prompt_imagen(texto_generado, max_new_tokens=256):
|
| | messages = [
|
| | {"role": "system", "content": "Utilizando el siguiente texto de un art铆culo de noticia, crea un prompt visual detallado para generar una imagen que represente de manera precisa el tema y tono del art铆culo. Aseg煤rate de capturar los aspectos clave mencionados en el art铆culo, como el entorno, las personas, el contexto o los eventos, y expresar visualmente los sentimientos o conceptos que se mencionan. Mant茅n en cuenta la est茅tica y los detalles descriptivos de lo que se discute"},
|
| | {"role": "user", "content": texto_generado},
|
| | ]
|
| |
|
| |
|
| | outputs = pipe(
|
| | messages,
|
| | max_new_tokens=max_new_tokens
|
| | )
|
| |
|
| |
|
| | prompt_generado = outputs[0]["generated_text"]
|
| |
|
| |
|
| |
|
| | if isinstance(prompt_generado, list) and "content" in prompt_generado[-1]:
|
| | prompt_generado = prompt_generado[-1]["content"]
|
| | return prompt_generado
|
| |
|
| |
|
| | async def generar_imagen(prompt_generado):
|
| | if not (3 <= len(prompt_generado) <= 2000):
|
| | return "Error: El texto debe tener entre 3 y 2000 caracteres."
|
| |
|
| | runware = Runware(api_key=RUNWARE_API_KEY)
|
| | await runware.connect()
|
| |
|
| | request_image = IImageInference(
|
| | positivePrompt=prompt_generado,
|
| | model="civitai:36520@76907",
|
| | numberResults=1,
|
| | negativePrompt="cloudy, rainy",
|
| | height=512,
|
| | width=512,
|
| | )
|
| |
|
| | images = await runware.imageInference(requestImage=request_image)
|
| | if images:
|
| | return images[0].imageURL
|
| | else:
|
| | return "No se gener贸 ninguna imagen."
|
| |
|
| |
|
| |
|
| | def interfaz_gradio(text):
|
| |
|
| | texto_mejorado, mejoras= generar_texto_mejorado(text)
|
| | prompt_generado = generar_prompt_imagen(texto_mejorado)
|
| | imagen_url = asyncio.run(generar_imagen(prompt_generado))
|
| |
|
| |
|
| | return texto_mejorado, mejoras, imagen_url
|
| |
|
| |
|
| | iface = gr.Interface(
|
| | fn=interfaz_gradio,
|
| | inputs=gr.Textbox(label="Texto para mejorar"),
|
| | outputs=[
|
| | gr.Textbox(label="Texto Mejorado"),
|
| | gr.Textbox(label="Mejoras realizadas"),
|
| | gr.Image(label="Imagen Generada")
|
| | ],
|
| | live=False,
|
| | allow_flagging="never",
|
| | )
|
| |
|
| |
|
| |
|
| | iface.launch() |