Repository navigation
Description
Pre-flight checks
- I searched existing issues and found no duplicate.
- I understand that this proposal requires product review before implementation.
Problem to solve
Desde el 10 de noviembre de 2026, NaN Builders mide la inferencia en créditos y no en una asignación de tokens por modelo. La tira y el detalle de Quorb siguen mostrando un medidor por modelo con tope en tokens, así que en las cuentas que pasaron a créditos el medidor ya no representa lo que limita a la persona.
Según los términos de servicio y la documentación (Choose your model, Getting started, Models):
- «Since November 10, 2026, inference on NaN is measured in credits, except on the Gentle plan. One credit equals 0.02 US dollars of model cost.»
- Un único fondo por cuenta: Inference (nan_member, 70 €/mes) incluye 7.000 créditos por periodo de facturación y Premium (200 €/mes) 20.000. «Every model marked credits draws from that same pool, by its price per token (input, cached input and output), so there is no separate allowance per model.»
- Reinicio: el fondo vuelve a llenarse al empezar el periodo de facturación de Stripe («almost never the 1st»). Los créditos incluidos no se acumulan y se prorratean al empezar o subir de plan a mitad de periodo.
- Packs de créditos: se consumen después de los créditos incluidos, caducan a los 6 meses de la última compra y pueden recargarse automáticamente. Sin créditos, la API responde
402 insufficient_balance. - Modelos sin contador:
gemma4,qwen3.6,qwen3-embedding,rerank,kokoroywhisperno consumen créditos. Las imágenes (flux-2-klein,qwen-image-2.1) tienen su propio límite de 100 solicitudes al mes por mes natural. - Ventana de
glm5.3: 400M tokens por ventana móvil de 4 h, independiente de los créditos; al llenarse responde429. - Plan Gentle: no usa créditos y conserva una asignación de tokens por modelo (
402 monthly_cap_reachedal agotarla). - API: según Getting started,
GET /v1/usagedevuelve el uso por día y modelo con los créditos facturados y, además, «your current billing period, whatever window you ask for: your allowance, the credits used and remaining, and your pack credits». La documentación no publica los nombres exactos de esos campos.
Proposed solution
Adaptar el proveedor nan para que la tira refleje el modelo de créditos, sin perder el caso del plan Gentle:
- Cuentas con créditos (Inference/Premium): un medidor principal de créditos usados frente a la asignación del periodo, con consumo, asignación, restantes y fechas tomados del mismo payload del periodo actual. El ritmo de consumo y la fecha de agotamiento se calculan con ese mismo valor.
- Packs de créditos: mostrarlos en el detalle como saldo aparte, sin sumarlos al denominador del periodo, salvo que se decida otra cosa en la revisión.
- Plan Gentle: fuera de esta issue; lo cubre fix(nan): los medidores usan la cuota y el periodo de la cuenta (#252) #261 con los medidores por modelo.
- Detección del modelo: decidir a partir del payload si la cuenta usa créditos o asignación por modelo, sin suponerlo por el nombre del plan. Si no se puede determinar, mostrarlo en lugar de inventar un tope.
- Texto de plan y ayudas: retirar las cifras fijas de tokens por modelo para las cuentas con créditos.
Affected area
Application behavior
Scope and non-goals
Requisito previo: capturar con una API key real (censurada, sin claves ni datos personales) la respuesta actual de GET /v1/usage y de GET https://cloud-api.nan.builders/api/usage/quota de una cuenta Inference o Premium. El payload de #252 es del 8 de noviembre, anterior al cambio, y todavía traía cap por modelo. Hay que confirmar:
- Los nombres de los campos del periodo actual (asignación, créditos usados y restantes, packs).
- Si
/api/usage/quotasigue devolviendocappor modelo en las cuentas con créditos o ha cambiado de forma. - Si alguno de los dos endpoints expone la ventana de 4 h de
glm5.3.
Criterios de aceptación (pendientes de confirmar con el payload real):
- En una cuenta con créditos, la tira muestra el porcentaje de créditos del periodo, que coincide con el portal de NaN.
- El ritmo de consumo y la fecha de agotamiento usan la asignación de créditos del periodo.
- Los packs de créditos se distinguen de los créditos incluidos.
- Las cuentas del plan Gentle conservan los medidores por modelo de bug(nan): los medidores dividen por la cuota publicada del modelo y no por la asignación del plan de la cuenta #252.
- Los modelos sin contador y las imágenes no aparecen como consumo de créditos.
- Tests con los payloads reales como fixtures: cuenta con créditos, plan Gentle, primer periodo prorrateado, packs sin créditos incluidos y endpoint caído con fallback señalado.
Fuera de alcance:
- La ventana móvil de 4 h de
glm5.3como medidor propio, salvo que el payload la exponga y se decida incluirla. - El límite mensual de imágenes.
- Calcular créditos a partir de tokens y precios por modelo: el consumo de créditos debe salir de la API, no de una tabla local.
- Compra o recarga de packs desde Quorb.
Decisión de alcance (cada suscripción con su artefacto):
- fix(nan): los medidores usan la cuota y el periodo de la cuenta (#252) #261 cubre los planes con asignación por modelo (Gentle): medidores por modelo con
capde la cuenta. En cuentas con créditos no muestra medidores por modelo ni el fallback a la cuota publicada. - Esta issue cubre los planes con créditos (Inference/Premium): el medidor de créditos del periodo. Parte de la detección del tipo de cuenta que introduce fix(nan): los medidores usan la cuota y el periodo de la cuenta (#252) #261.
Alternatives considered
| Alternativa | Ventaja | Límite |
|---|---|---|
| Medidor de créditos del periodo (propuesta) | Refleja el único límite que se agota en Inference/Premium y coincide con el portal. | Depende de campos todavía no documentados con nombre exacto. |
| Mantener medidores por modelo en tokens | Sin cambios en la tira. | Ya no existe asignación por modelo fuera del plan Gentle: el porcentaje no significa nada. |
| Estimar créditos con tokens × precio local | No depende de nuevos campos. | Duplica la tabla de precios, se desfasa con cada cambio de precio y contradice el contador oficial. |
Activity
docs(odd): registrar la captura, el alcance de egdev6#268 y la maqueta
DonatoSilva commentedon Nov 12, 2026
Gracias por abrirla @egdev6 . Explorando un poco y esto es lo que vemos y lo que proponemos.
Lo que trae la API está en el OpenAPI público de NaN (https://nan.builders/openapi.json), que es lo único que publica los nombres exactos de los campos:
GET /v1/usagedevuelve un bloquecreditsen la raíz con el periodo, la asignación, lo usado y lo que queda, más unpack_creditsaparte, y ese bloque vienenullcuando la cuenta no se factura en créditos. Es lo que nos permitió distinguir un tipo de cuenta del otro sin adivinar por el nombre del plan. Lo que no tenemos es un ejemplo real del otro tipo de cuenta: la nuestra es la del plan Gentle. Si tenés una a mano, una captura censurada nos sirve un montón; mientras tanto, trabajaríamos contra ese contrato y dejaríamos marcado lo que falta validar.Hay dos formas de mostrarlo. La más simple es la primera, pero la segunda es la que más información da, y decidilo vos:
A) Un solo anillo de créditos
24,3 / 7.000 créditos), cuándo se renueva y el ritmo de consumo, igual que hoy.B) A, y además el detalle por modelo
deepseek 12,4 créditos · glm5.3 11,9 créditos), sin porcentaje porque en créditos no hay tope por modelo.(maqueta de la propuesta B, realizada en gentle desing)

En los dos casos: el saldo de los packs va aparte, el gráfico diario queda como hoy (aparece sólo si el proveedor declara una serie diaria) y si la suscripción está inactiva lo avisamos.
¿Con cuál hacemos la PR de
#268? Si nos habilitás a trabajar con la B, nos vendría bien que nos tires alguna idea de por dónde encararla: dónde podría vivir ese bloque del detalle y qué convenciones mirar, para no meter algo que después haya que rehacer.egdev6 commentedon Nov 12, 2026
Me parece correcto @DonatoSilva. Incluiría el desglose por modelo tal y como está en la imagen. Con esto también abrimos precedente de cómo aplicarlo si cualquier otra subscripción o proveedor tiene una casuística igual.
Adelante con el desarrollo!
docs(design): la maqueta de egdev6#268 va en su propia rama
refactor(nan): sacar de egdev6#261 los medidores de creditos y el des…