Límites de peticiones y reintentos
Límites de la cuenta y de cada clave, qué recibes cuando todas las líneas están ocupadas, y cómo reintentar y fijar los tiempos de espera.
Sin límite de peticiones por defecto
NezhaGate no fija por defecto ningún límite de peticiones por cuenta, y la capacidad crece con tu uso. Para acotar el uso, ponle a cada clave sus propios límites.
Límites por clave
Se configuran para cada clave en la página API Keys de la consola; vacío o 0 significa sin límite:
| Ajuste | Qué hace | Al superarlo |
|---|---|---|
| Peticiones por minuto | El máximo de peticiones que esta clave puede enviar en un minuto. | 429 rate_limit_exceeded |
| Presupuesto diario | Lo máximo que esta clave puede gastar al día (UTC), en dólares estadounidenses. | 402 insufficient_quota |
| Límite total | Lo máximo que esta clave puede gastar en total, en dólares estadounidenses; útil para automatizaciones que no deben descontrolarse. | 402 insufficient_quota |
| Lista de modelos permitidos | Esta clave solo puede llamar a los modelos de la lista. | 403 permission_denied |
| Lista de IP permitidas | Solo se aceptan peticiones desde las IP o rangos de la lista. | 403 permission_denied |
Cuando todas las líneas están ocupadas
- Cada modelo se sirve por varias líneas y la pasarela reparte las peticiones entre ellas. Si todas las líneas de un modelo están al límite de su capacidad a la vez, recibes un 429; los endpoints compatibles con OpenAI añaden la cabecera
Retry-Aftercon los segundos que hay que esperar. - Los trabajos de imagen y vídeo no se rechazan por falta de capacidad: esperan en una cola (
statusesqueued, con la posición y la espera estimada) y empiezan solos. - Los modelos gratuitos por promoción también tienen una cuota diaria de llamadas; al superarla recibes 429 hasta que se reinicia a las 00:00 UTC.
Cuándo reintentar
| HTTP | Qué hacer |
|---|---|
| 429 | Espera los segundos que indica la cabecera Retry-After y reintenta; si no viene, espera 1, 2 y luego 4 segundos. |
| 500 / 502 / 503 / 504 | Reintenta con espera exponencial (1, 2, 4, 8 segundos, más un margen aleatorio); suelen bastar 3–5 intentos. Estos fallos no se cobran. |
| Otros 4xx | Reintentar sin cambios no sirve: primero corrige la petición según error.code (parámetros, modelo, clave, saldo). |
| Error de red / tiempo de espera agotado | El chat se puede reintentar sin más. Para imágenes y vídeo, busca primero el trabajo en el registro de llamadas y luego decide si vuelves a enviarlo. |
import random
import time
import requests
def post_with_retry(url, headers, payload, tries=5):
for attempt in range(tries):
r = requests.post(url, headers=headers, json=payload, timeout=600)
if r.status_code == 429:
time.sleep(float(r.headers.get("Retry-After", 2 ** attempt)))
continue
if r.status_code >= 500:
time.sleep(2 ** attempt + random.random()) # 1, 2, 4, 8 s ... plus jitter
continue
return r # 2xx, or a 4xx to fix in the request
return rTiempos de espera
- Una petición sin streaming puede durar unos 10 minutos antes de que la pasarela de borde la corte (HTTP 524). Para respuestas largas y modelos de razonamiento, usa
stream: true. - Configura en tu cliente un tiempo de espera de al menos 10 minutos; si no, tu lado dejará de esperar antes de que llegue una respuesta larga.
- La imagen y el vídeo son trabajos asíncronos: la llamada de envío responde rápido, así que este límite no les afecta.
¿Necesitas más capacidad?
Si necesitas alta concurrencia de forma sostenida, cuéntanos tu volumen con antelación en el grupo de Telegram o a través del soporte, y ampliaremos la capacidad para ese volumen.