Upload proyecto1.py

#1
by manumc - opened
Files changed (1) hide show
  1. proyecto1.py +138 -0
proyecto1.py ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from transformers import pipeline
3
+ from huggingface_hub import login
4
+ import re
5
+ from runware import Runware, IPromptEnhance, IImageInference
6
+ import asyncio
7
+ import gradio as gr
8
+ import os
9
+ from dotenv import load_dotenv
10
+
11
+ # Cargar las variables del archivo .env
12
+ load_dotenv()
13
+
14
+ # Obtener las claves desde las variables de entorno
15
+ hf_token = os.getenv("HF_TOKEN")
16
+ RUNWARE_API_KEY = os.getenv("RUNWARE_API_KEY")
17
+
18
+ # Variables de configuración del modelo
19
+ model_id = "meta-llama/Llama-3.2-1B-Instruct"
20
+
21
+ # Autenticación en Hugging Face
22
+ login(hf_token)
23
+
24
+ # Configuración del pipeline
25
+ pipe = pipeline(
26
+ "text-generation",
27
+ model=model_id,
28
+ torch_dtype=torch.bfloat16,
29
+ device_map="auto",
30
+ temperature=0.2, # Reducir creatividad
31
+ top_p=0.8,
32
+ )
33
+
34
+ # Definir la función para generar texto mejorado
35
+ def generar_texto_mejorado(contenido_usuario, max_new_tokens=256):
36
+ messages = [
37
+ {"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>"},
38
+ {"role": "user", "content": contenido_usuario},
39
+ ]
40
+
41
+ # Generar la respuesta con el modelo
42
+ outputs = pipe(
43
+ messages,
44
+ max_new_tokens=max_new_tokens
45
+ )
46
+
47
+ # Extraer y retornar solo el contenido generado por el asistente
48
+ texto_generado = outputs[0]["generated_text"]
49
+
50
+ # Buscar y extraer únicamente el contenido después del primer ':', omitiendo información redundante
51
+ # Ajustamos el contenido generado al esquema esperado
52
+ if isinstance(texto_generado, list) and "content" in texto_generado[-1]:
53
+ texto_generado = texto_generado[-1]["content"]
54
+
55
+ # Buscar el contenido dentro de las etiquetas <mejoras> y extraerlo
56
+ match = re.search(r"<mejoras>", texto_generado, re.IGNORECASE)
57
+
58
+ if match:
59
+ # Separar el contenido principal y las mejoras
60
+ contenido_principal = texto_generado[:match.start()].strip()
61
+ mejoras = texto_generado[match.end():].strip() # Tomar desde el final de <mejoras> hasta el final del texto
62
+ return contenido_principal, mejoras
63
+ else:
64
+ mejoras="No se encontraron mejoras en el texto."
65
+ return texto_generado, mejoras
66
+
67
+ # Definir la función para generar texto mejorado
68
+ def generar_prompt_imagen(texto_generado, max_new_tokens=256):
69
+ messages = [
70
+ {"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"},
71
+ {"role": "user", "content": texto_generado},
72
+ ]
73
+
74
+ # Generar la respuesta con el modelo
75
+ outputs = pipe(
76
+ messages,
77
+ max_new_tokens=max_new_tokens
78
+ )
79
+
80
+ # Extraer y retornar solo el contenido generado por el asistente
81
+ prompt_generado = outputs[0]["generated_text"]
82
+
83
+ # Buscar y extraer únicamente el contenido después del primer ':', omitiendo información redundante
84
+ # Ajustamos el contenido generado al esquema esperado
85
+ if isinstance(prompt_generado, list) and "content" in prompt_generado[-1]:
86
+ prompt_generado = prompt_generado[-1]["content"]
87
+ return prompt_generado
88
+
89
+ # Función para generar imagen desde texto usando la API de Runware
90
+ async def generar_imagen(prompt_generado):
91
+ if not (3 <= len(prompt_generado) <= 2000):
92
+ return "Error: El texto debe tener entre 3 y 2000 caracteres."
93
+
94
+ runware = Runware(api_key=RUNWARE_API_KEY)
95
+ await runware.connect()
96
+
97
+ request_image = IImageInference(
98
+ positivePrompt=prompt_generado,
99
+ model="civitai:36520@76907",
100
+ numberResults=1,
101
+ negativePrompt="cloudy, rainy",
102
+ height=512,
103
+ width=512,
104
+ )
105
+
106
+ images = await runware.imageInference(requestImage=request_image)
107
+ if images:
108
+ return images[0].imageURL
109
+ else:
110
+ return "No se generó ninguna imagen."
111
+
112
+
113
+ # Función principal que se pasará a Gradio
114
+ def interfaz_gradio(text):
115
+ # Ejecutar la tarea asincrónica de procesar el texto y generar la imagen
116
+ texto_mejorado, mejoras= generar_texto_mejorado(text)
117
+ prompt_generado = generar_prompt_imagen(texto_mejorado)
118
+ imagen_url = asyncio.run(generar_imagen(prompt_generado))
119
+
120
+ # Retornar los resultados para mostrarlos en la interfaz
121
+ return texto_mejorado, mejoras, imagen_url
122
+
123
+
124
+ iface = gr.Interface(
125
+ fn=interfaz_gradio, # Función que será llamada al interactuar con la interfaz
126
+ inputs=gr.Textbox(label="Texto para mejorar"), # Campo de texto para el usuario
127
+ outputs=[
128
+ gr.Textbox(label="Texto Mejorado"), # Mostrar el texto mejorado
129
+ gr.Textbox(label="Mejoras realizadas"), # Mostrar las mejoras
130
+ gr.Image(label="Imagen Generada") # Mostrar la imagen generada
131
+ ],
132
+ live=False, # Desactivar la actualización en tiempo real
133
+ allow_flagging="never", # Opcional: desactivar las banderas de los usuarios
134
+ )
135
+
136
+
137
+ # Iniciar la interfaz
138
+ iface.launch()