Spaces:
Running on Zero
Running on Zero
Update app.py
Browse files
app.py
CHANGED
|
@@ -44,7 +44,7 @@ class ControlDeTraficoIA:
|
|
| 44 |
self.peticiones = deque()
|
| 45 |
self.tokens_procesados = deque()
|
| 46 |
|
| 47 |
-
# Límites de cuota
|
| 48 |
self.MAX_RPM = 5 # Máximo 5 peticiones por minuto
|
| 49 |
self.MAX_TPM = 30000 # Máximo 30,000 tokens por minuto
|
| 50 |
|
|
@@ -81,11 +81,11 @@ class ControlDeTraficoIA:
|
|
| 81 |
with self.lock:
|
| 82 |
now = time.time()
|
| 83 |
self.peticiones.append(now)
|
| 84 |
-
self.
|
| 85 |
|
| 86 |
control_trafico = ControlDeTraficoIA()
|
| 87 |
|
| 88 |
-
# 4. PROCESAMIENTO DE HISTORIALES
|
| 89 |
def parse_telegram_text(text_obj):
|
| 90 |
if isinstance(text_obj, str):
|
| 91 |
return text_obj
|
|
@@ -136,8 +136,10 @@ for file_path in sorted(json_files):
|
|
| 136 |
|
| 137 |
del seen_messages
|
| 138 |
|
| 139 |
-
|
| 140 |
-
|
|
|
|
|
|
|
| 141 |
documents = []
|
| 142 |
for i in range(0, len(valid_messages), CHUNK_SIZE - OVERLAP):
|
| 143 |
chunk_msgs = valid_messages[i : i + CHUNK_SIZE]
|
|
@@ -156,7 +158,9 @@ embeddings = HuggingFaceEmbeddings(
|
|
| 156 |
if documents:
|
| 157 |
print("🧠 Creando base de datos unificada...")
|
| 158 |
vectorstore = FAISS.from_documents(documents, embeddings)
|
| 159 |
-
|
|
|
|
|
|
|
| 160 |
print("✅ Base de datos lista.")
|
| 161 |
else:
|
| 162 |
print("⚠️ No hay documentos para indexar.")
|
|
@@ -217,7 +221,7 @@ def handle_query(message):
|
|
| 217 |
)
|
| 218 |
return
|
| 219 |
|
| 220 |
-
# 1. Recuperar contexto de FAISS
|
| 221 |
docs = retriever.invoke(message.text)
|
| 222 |
context_text = "\n\n---\n\n".join([doc.page_content for doc in docs])
|
| 223 |
|
|
@@ -241,7 +245,7 @@ def handle_query(message):
|
|
| 241 |
# Dormir el hilo secundario para esperar la vacante de cuota de forma segura
|
| 242 |
time.sleep(espera_necesaria)
|
| 243 |
|
| 244 |
-
# Registrar el consumo forzado ya que se cumplió el tiempo de espera
|
| 245 |
control_trafico.registrar_consumo_forzado(estimacion_tokens)
|
| 246 |
|
| 247 |
# Volver a activar la animación de escribiendo en el chat de Telegram
|
|
|
|
| 44 |
self.peticiones = deque()
|
| 45 |
self.tokens_procesados = deque()
|
| 46 |
|
| 47 |
+
# Límites de cuota oficiales para gemma-4-31b
|
| 48 |
self.MAX_RPM = 5 # Máximo 5 peticiones por minuto
|
| 49 |
self.MAX_TPM = 30000 # Máximo 30,000 tokens por minuto
|
| 50 |
|
|
|
|
| 81 |
with self.lock:
|
| 82 |
now = time.time()
|
| 83 |
self.peticiones.append(now)
|
| 84 |
+
self.tokens_procesados.append((now, estimado_tokens))
|
| 85 |
|
| 86 |
control_trafico = ControlDeTraficoIA()
|
| 87 |
|
| 88 |
+
# 4. PROCESAMIENTO MULTI-ARCHIVO DE HISTORIALES
|
| 89 |
def parse_telegram_text(text_obj):
|
| 90 |
if isinstance(text_obj, str):
|
| 91 |
return text_obj
|
|
|
|
| 136 |
|
| 137 |
del seen_messages
|
| 138 |
|
| 139 |
+
# OPTIMIZACIÓN 1: Chunks más grandes (30 mensajes) y mayor solapamiento (10 mensajes)
|
| 140 |
+
# Esto garantiza que las conversaciones y reseñas largas no se corten a la mitad
|
| 141 |
+
CHUNK_SIZE = 30
|
| 142 |
+
OVERLAP = 10
|
| 143 |
documents = []
|
| 144 |
for i in range(0, len(valid_messages), CHUNK_SIZE - OVERLAP):
|
| 145 |
chunk_msgs = valid_messages[i : i + CHUNK_SIZE]
|
|
|
|
| 158 |
if documents:
|
| 159 |
print("🧠 Creando base de datos unificada...")
|
| 160 |
vectorstore = FAISS.from_documents(documents, embeddings)
|
| 161 |
+
|
| 162 |
+
# OPTIMIZACIÓN 2: k=15 (Recupera el doble de contexto de memoria para el modelo)
|
| 163 |
+
retriever = vectorstore.as_retriever(search_kwargs={"k": 15})
|
| 164 |
print("✅ Base de datos lista.")
|
| 165 |
else:
|
| 166 |
print("⚠️ No hay documentos para indexar.")
|
|
|
|
| 221 |
)
|
| 222 |
return
|
| 223 |
|
| 224 |
+
# 1. Recuperar contexto de FAISS (Ahora trae 15 bloques para un contexto ultra robusto)
|
| 225 |
docs = retriever.invoke(message.text)
|
| 226 |
context_text = "\n\n---\n\n".join([doc.page_content for doc in docs])
|
| 227 |
|
|
|
|
| 245 |
# Dormir el hilo secundario para esperar la vacante de cuota de forma segura
|
| 246 |
time.sleep(espera_necesaria)
|
| 247 |
|
| 248 |
+
# Registrar el consumo forzado ya que se cumplió el tiempo de espera de la ventana de 1 minuto
|
| 249 |
control_trafico.registrar_consumo_forzado(estimacion_tokens)
|
| 250 |
|
| 251 |
# Volver a activar la animación de escribiendo en el chat de Telegram
|