Skip to content

TokenMeter

Cuánta ventana de contexto está usando una conversación.

Úsalo cuando estés construyendo una interfaz de chat contra un modelo con límite de contexto. Un cliente que no muestra esto funciona bien al principio y luego falla: cada turno reenvía todo el historial, la petición solo crece y en algún momento el proveedor la rechaza por superar el límite. Este componente enseña ese crecimiento antes del rechazo.

Inicio rápido

Uso básico

html
<r-token-meter limit="65536" used="12800"></r-token-meter>
js
const meter = document.createElement('r-token-meter');
meter.limit = 65536;
meter.used = 41200; // el contexto que llevará la próxima petición
meter.spent = 128431; // tokens facturados en toda la conversación, opcional
composer.append(meter);

La barra se llena hasta used / limit y escala por tres niveles: ok, warn (desde el 80% del límite) y over. level se refleja en el host, así que la página puede reaccionar a la misma escalada que muestra la barra:

css
r-token-meter[level='warn'] ~ .composer-hint {
  display: block;
}

used y spent son números distintos

  • used: lo que llevará la próxima petición, es decir el historial, no toda la conversación. Es el número al que se aplica el límite y el que dibuja la barra.
  • spent: lo que se ha facturado a lo largo de la conversación. Solo crece y no está acotado por la ventana.

Truncar una transcripción baja used y deja spent intacto. Mostrar solo uno de los dos responde solo a una de las dos preguntas que tiene un usuario («¿cabrá el próximo mensaje?» y «¿cuánto me ha costado esto?»).

Sin límite

Con limit sin definir o a cero la barra desaparece y solo quedan los recuentos, útil mientras no se conoce el tamaño de la ventana.

Cambiar la etiqueta

html
<r-token-meter label="Contexto" limit="65536" used="41200"></r-token-meter>
<!-- label="" deja solo los recuentos -->

Referencia de la API

Propiedades

PropiedadAtributoTipoPor defectoDescripción
limitlimitnumber0Tamaño de la ventana de contexto en tokens. Cero o ausente oculta la barra.
usedusednumber0Tokens que llevará la próxima petición.
spentspentnumber0Tokens facturados en la conversación hasta ahora.
labellabelstring'Context'Prefijo del texto; '' deja solo los recuentos.
levellevel'ok' | 'warn' | 'over'derivadoCuán llena está la ventana. Lo fija el elemento: escribirlo se sobrescribe.
sheetsheetstring''CSS inyectado en el shadow root.

Los recuentos se formatean para leerse de un vistazo: exactos por debajo de mil (847 es lo bastante corto para leerse exacto) y abreviados por encima (41.2k, 128k); el tercer dígito de 128.431 no cambia lo que el lector hace con él.

Partes

ParteElemento
meterEl elemento entero
trackEl fondo de la barra
fillLa porción llena
textLa etiqueta y los recuentos

Accesibilidad

El elemento siempre lleva un title que enuncia los números, así que el color nunca es el único portador del aviso: que la barra se vuelva ámbar es una segunda señal, no la única. Mantenlo así si cambias el estilo de los niveles.

Estilos

<r-token-meter> expone 9 propiedades personalizadas de CSS propias, además de los tokens semánticos que lee del tema. Define una allí donde se herede: :root, un contenedor o el propio elemento:

css
r-token-meter {
  --ran-token-meter-fill-background: var(--ran-color-bg-subtle);
}

Partes: fill · meter · text · track

La lista completa está en tokens de estilo; cuál elegir lo explica el sistema de diseño.

Buenas prácticas

  • Actualiza used desde el mismo sitio donde construyes la petición, no desde una pasada de renderizado: el número en el que la gente confía es el que la próxima petición enviará de verdad.
  • Escala alrededor del medidor, no dentro de él. En level="over" la interfaz útil es una sugerencia (resumir, empezar un hilo nuevo), y eso pertenece a la aplicación.
  • No animes el relleno al cambiar de tema: consulta la guía de diseño.

Publicado bajo la licencia MIT.