Hjgugugjhuhjggg commited on
Commit
d228ca8
·
verified ·
1 Parent(s): 5d051fb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -94
app.py CHANGED
@@ -14,10 +14,7 @@ import psutil
14
  import os
15
  import gc
16
  import logging
17
- from PIL import Image
18
- import uuid
19
  from tqdm import tqdm
20
- from transformers import eBart
21
 
22
  logging.basicConfig(level=logging.INFO)
23
 
@@ -31,51 +28,34 @@ if torch.cuda.is_available():
31
  else:
32
  device = torch.device("cpu")
33
 
34
- print("Dispositivo:", device)
35
-
36
  modelos = {
37
  "gpt2-medium": VLLM(model="gpt2-medium"),
38
- "qwen2.5-0.5b": VLLM(model="Qwen/Qwen2.5-0.5B-Instruct"),
39
- "llamaxd": VLLM(model="Hjgugugjhuhjggg/llama-3.2-1B-spinquant-hf")
 
 
 
 
 
40
  }
41
 
42
- print("Cargando modelos...")
43
  for nombre, modelo in tqdm(modelos.items()):
44
  modelos[nombre] = modelo(to=device)
45
- print(f"Modelo {nombre} cargado")
46
 
47
  caches = {
48
  nombre: GPTCache(modelo, max_size=1000) for nombre, modelo in modelos.items()
49
  }
50
 
51
- print("Creando instancias de caché...")
52
- for nombre, caché in tqdm(caches.items()):
53
- print(f"Caché para modelo {nombre} creada")
54
-
55
  cadenas = {
56
  nombre: LLMChain(modelo, caché) for nombre, modelo, caché in zip(modelos.keys(), modelos.values(), caches.values())
57
  }
58
 
59
- print("Creando instancias de cadenas de modelo...")
60
- for nombre, cadena in tqdm(cadenas.items()):
61
- print(f"Cadena de modelo {nombre} creada")
62
-
63
  summarizer = pipeline("summarization", device=device)
64
 
65
- print("Cargando modelo de resumen de texto...")
66
-
67
  vectorizer = TfidfVectorizer()
68
 
69
- print("Cargando modelo de vectorizador TF-IDF...")
70
-
71
- dalle_encoder = eBart.from_pretrained(model_id="dalle-mini/dalle-mini")
72
- dalle_decoder = eBart.from_pretrained(model_id="dalle-mini/dalle-mini")
73
-
74
- print("Cargando modelo DALL-E...")
75
-
76
  def keep_alive():
77
  while True:
78
- # Realizar una petición a cada modelo cada 5 minutos
79
  for cadena in cadenas.values():
80
  try:
81
  cadena.ask("¿Cuál es el sentido de la vida?")
@@ -86,39 +66,23 @@ def keep_alive():
86
 
87
  def liberar_recursos():
88
  while True:
89
- # Obtener memoria RAM disponible
90
  memoria_ram = psutil.virtual_memory().available / (1024.0 ** 3)
91
-
92
- # Obtener espacio en disco disponible
93
  espacio_disco = psutil.disk_usage('/').free / (1024.0 ** 3)
94
-
95
- # Verificar si la memoria RAM o espacio en disco es menor al 5%
96
  if memoria_ram < 5 or espacio_disco < 5:
97
- # Liberar memoria RAM
98
  gc.collect()
99
-
100
- # Cerrar procesos innecesarios
101
  for proc in psutil.process_iter(['pid', 'name']):
102
  if proc.info['name'] == 'python':
103
  os.kill(proc.info['pid'], 9)
104
-
105
  time.sleep(60)
106
 
107
  threading.Thread(target=keep_alive, daemon=True).start()
108
  threading.Thread(target=liberar_recursos, daemon=True).start()
109
 
110
- print("Iniciando hilos...")
111
  @app.post("/pregunta")
112
  async def pregunta(pregunta: str, modelo: str):
113
- print(f"Pregunta recibida: {pregunta}, Modelo: {modelo}")
114
  try:
115
- # Obtener respuesta del modelo seleccionado
116
  respuesta = cadenas[modelo].ask(pregunta)
117
- print(f"Respuesta obtenida: {respuesta}")
118
-
119
- # Verificar si la respuesta excede el límite de tokens máximos
120
- if len(respuesta.split()) > 2048:
121
- # Dividir la respuesta en varios mensajes
122
  mensajes = []
123
  palabras = respuesta.split()
124
  mensaje_actual = ""
@@ -129,20 +93,12 @@ async def pregunta(pregunta: str, modelo: str):
129
  else:
130
  mensaje_actual += " " + palabra
131
  mensajes.append(mensaje_actual)
132
-
133
- # Retornar los mensajes divididos
134
  return {"respuestas": mensajes}
135
  else:
136
- # Obtener resumen de respuesta
137
  resumen = summarizer(respuesta, max_length=50, min_length=5, do_sample=False)
138
- print(f"Resumen obtenido: {resumen[0]['summary_text']}")
139
-
140
- # Calcular similitud entre pregunta y respuesta
141
  pregunta_vec = vectorizer.fit_transform([pregunta])
142
  respuesta_vec = vectorizer.transform([respuesta])
143
  similitud = cosine_similarity(pregunta_vec, respuesta_vec)
144
- print(f"Similitud calculada: {similitud[0][0]}")
145
-
146
  return {
147
  "respuesta": respuesta,
148
  "resumen": resumen[0]["summary_text"],
@@ -154,12 +110,8 @@ async def pregunta(pregunta: str, modelo: str):
154
 
155
  @app.post("/resumen")
156
  async def resumen(texto: str):
157
- print(f"Texto recibido: {texto}")
158
  try:
159
- # Obtener resumen de texto
160
  resumen = summarizer(texto, max_length=50, min_length=5, do_sample=False)
161
- print(f"Resumen obtenido: {resumen[0]['summary_text']}")
162
-
163
  return {"resumen": resumen[0]["summary_text"]}
164
  except Exception as e:
165
  logging.error(f"Error en resumen: {e}")
@@ -167,50 +119,22 @@ async def resumen(texto: str):
167
 
168
  @app.post("/similitud")
169
  async def similitud(texto1: str, texto2: str):
170
- print(f"Textos recibidos: {texto1}, {texto2}")
171
- try:
172
- # Calcular similitud entre dos textos
173
- texto1_vec = vectorizer.fit_transform([texto1])
174
- texto2_vec = vectorizer.transform([texto2])
175
- similitud = cosine_similarity(texto1_vec, texto2_vec)
176
- print(f"Similitud calculada: {similitud[0][0]}")
177
-
178
- return {"similitud": similitud[0][0]}
179
- except Exception as e:
180
- logging.error(f"Error en similitud: {e}")
181
- return {"error": "Error en similitud"}
182
-
183
- @app.post("/imagen")
184
- async def imagen(texto: str):
185
- print(f"Texto recibido: {texto}")
186
- try:
187
- # Obtener imagen a partir del texto
188
- imagen = dalle_decoder.generate_images(texto, num_images=1)
189
- print(f"Imagen generada")
190
-
191
- # Generar nombre aleatorio para el archivo
192
- nombre_archivo = f"{uuid.uuid4()}.png"
193
- print(f"Nombre de archivo: {nombre_archivo}")
194
-
195
- # Guardar imagen en archivo
196
- imagen.save(nombre_archivo)
197
- print(f"Imagen guardada en {nombre_archivo}")
198
-
199
- return {"imagen": nombre_archivo}
200
- except Exception as e:
201
- logging.error(f"Error en imagen: {e}")
202
- return {"error": "Error en imagen"}
203
 
204
  @app.get("/modelos")
205
  async def modelos():
206
- print("Modelos solicitados")
207
- return {"modelos": list(cadenas.keys())}
208
 
209
  @app.get("/estado")
210
  async def estado():
211
- print("Estado solicitado")
212
- return {"estado": "activo"}
213
 
214
  if __name__ == "__main__":
215
- print("Iniciando API...")
216
  uvicorn.run(app, host="0.0.0.0", port=8000)
 
14
  import os
15
  import gc
16
  import logging
 
 
17
  from tqdm import tqdm
 
18
 
19
  logging.basicConfig(level=logging.INFO)
20
 
 
28
  else:
29
  device = torch.device("cpu")
30
 
 
 
31
  modelos = {
32
  "gpt2-medium": VLLM(model="gpt2-medium"),
33
+ "qwen2.5-0.5b": VLLM(model="qwen2.5-0.5b"),
34
+ "t5-base": VLLM(model="t5-base"),
35
+ "bert-base-uncased": VLLM(model="bert-base-uncased"),
36
+ "xlnet-base-uncased": VLLM(model="xlnet-base-uncased"),
37
+ "distilbert-base-uncased": VLLM(model="distilbert-base-uncased"),
38
+ "albert-base-v2": VLLM(model="albert-base-v2"),
39
+ "roberta-base": VLLM(model="roberta-base"),
40
  }
41
 
 
42
  for nombre, modelo in tqdm(modelos.items()):
43
  modelos[nombre] = modelo(to=device)
 
44
 
45
  caches = {
46
  nombre: GPTCache(modelo, max_size=1000) for nombre, modelo in modelos.items()
47
  }
48
 
 
 
 
 
49
  cadenas = {
50
  nombre: LLMChain(modelo, caché) for nombre, modelo, caché in zip(modelos.keys(), modelos.values(), caches.values())
51
  }
52
 
 
 
 
 
53
  summarizer = pipeline("summarization", device=device)
54
 
 
 
55
  vectorizer = TfidfVectorizer()
56
 
 
 
 
 
 
 
 
57
  def keep_alive():
58
  while True:
 
59
  for cadena in cadenas.values():
60
  try:
61
  cadena.ask("¿Cuál es el sentido de la vida?")
 
66
 
67
  def liberar_recursos():
68
  while True:
 
69
  memoria_ram = psutil.virtual_memory().available / (1024.0 ** 3)
 
 
70
  espacio_disco = psutil.disk_usage('/').free / (1024.0 ** 3)
 
 
71
  if memoria_ram < 5 or espacio_disco < 5:
 
72
  gc.collect()
 
 
73
  for proc in psutil.process_iter(['pid', 'name']):
74
  if proc.info['name'] == 'python':
75
  os.kill(proc.info['pid'], 9)
 
76
  time.sleep(60)
77
 
78
  threading.Thread(target=keep_alive, daemon=True).start()
79
  threading.Thread(target=liberar_recursos, daemon=True).start()
80
 
 
81
  @app.post("/pregunta")
82
  async def pregunta(pregunta: str, modelo: str):
 
83
  try:
 
84
  respuesta = cadenas[modelo].ask(pregunta)
85
+ if len(respuesta.split()) > 2048:
 
 
 
 
86
  mensajes = []
87
  palabras = respuesta.split()
88
  mensaje_actual = ""
 
93
  else:
94
  mensaje_actual += " " + palabra
95
  mensajes.append(mensaje_actual)
 
 
96
  return {"respuestas": mensajes}
97
  else:
 
98
  resumen = summarizer(respuesta, max_length=50, min_length=5, do_sample=False)
 
 
 
99
  pregunta_vec = vectorizer.fit_transform([pregunta])
100
  respuesta_vec = vectorizer.transform([respuesta])
101
  similitud = cosine_similarity(pregunta_vec, respuesta_vec)
 
 
102
  return {
103
  "respuesta": respuesta,
104
  "resumen": resumen[0]["summary_text"],
 
110
 
111
  @app.post("/resumen")
112
  async def resumen(texto: str):
 
113
  try:
 
114
  resumen = summarizer(texto, max_length=50, min_length=5, do_sample=False)
 
 
115
  return {"resumen": resumen[0]["summary_text"]}
116
  except Exception as e:
117
  logging.error(f"Error en resumen: {e}")
 
119
 
120
  @app.post("/similitud")
121
  async def similitud(texto1: str, texto2: str):
122
+ try:
123
+ texto1_vec = vectorizer.fit_transform([texto1])
124
+ texto2_vec = vectorizer.transform([texto2])
125
+ similitud = cosine_similarity(texto1_vec, texto2_vec)
126
+ return {"similitud": similitud[0][0]}
127
+ except Exception as e:
128
+ logging.error(f"Error en similitud: {e}")
129
+ return {"error": "Error en similitud"}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
 
131
  @app.get("/modelos")
132
  async def modelos():
133
+ return {"modelos": list(cadenas.keys())}
 
134
 
135
  @app.get("/estado")
136
  async def estado():
137
+ return {"estado": "activo"}
 
138
 
139
  if __name__ == "__main__":
 
140
  uvicorn.run(app, host="0.0.0.0", port=8000)