LM Warden

Uma chave por app, e uma página para cada chave.

Dê a cada colega, notebook, job de CI e agente a sua própria chave. A página de uma chave mostra quanto ela gastou e quanto tempo as solicitações dela esperaram na fila, mediana e p95, em qualquer janela que você arrastar ou digitar. Rotacione uma chave com um período de carência e defina a prioridade dela de P0 a P9: uma solicitação P9 em espera sempre passa à frente de uma P8.

Pause a chave, e novas solicitações são recusadas enquanto as que já estão em execução terminam:

$ curl -i http://gpu-box:8080/v1/chat/completions \
    -H "Authorization: Bearer vw_…" -d '{…}'
HTTP/1.1 403 Forbidden
content-type: application/json

{"detail":"token paused"}

De uma instância local em 23 de setembro de 2026. Host e chave substituídos, outros cabeçalhos cortados.

Fig. 13A página de demo-agent, a chave que gerou a carga da fig. 1: 37 solicitações e 43 mil tokens gerados na hora mostrada na tela. Depois o painel God mode dela se abre (uma visão ao vivo, opcional, dos prompts e respostas de uma chave, desligada por padrão) e as respostas chegam em streaming à medida que são escritas. Os prompts são nossos.
O gráfico Requests da página Stats nos últimos 7 dias, de 16 a 23 de setembro: uma marca por solicitação, colorida pela chave de API, dimensionada pelos tokens gerados e com formato conforme o motivo de término, em função da duração em escala logarítmica de 100 ms a 10.000 s. A maioria das marcas fica entre 3 e 100 segundos; uma chave mostra duas colunas densas que vão de menos de um segundo a várias centenas de segundos.
Fig. 14As solicitações de todas as chaves em um só gráfico, da mesma página Stats: os últimos 7 dias, 28.906 solicitações, uma em cada quinze desenhada. Cada marca é uma solicitação, colorida pela chave, dimensionada pelos tokens que gerou e com formato conforme o modo como terminou, na altura da sua duração em escala logarítmica. O âmbar constante é opencode-laptop, as duas colunas densas cor-de-rosa são research-notebook. Registrado em 23 de setembro de 2026; os nomes das chaves foram substituídos. Role a imagem para o lado para ver a semana inteira.

Para sair, basta mudar o base_url.

O LM Warden implementa /v1/chat/completions e /v1/models, e /v1/models informa o max_model_len de cada modelo. Também implementa a Anthropic Messages API em /v1/messages, então basta definir o ANTHROPIC_BASE_URL do Claude Code como a URL raiz de um warden (o próprio Claude Code acrescenta o caminho /v1/messages), e a OpenAI Responses API em /v1/responses, para que o Codex CLI possa usar um modelo que você carregou. Os pesos ficam em um cache comum do HuggingFace, que make export-hf-cache entrega como tarball, e o argv exato com que cada mecanismo foi iniciado pode ser obtido com um único GET; assim, uma configuração funcional pode ser recriada sem nós. O diff abaixo mostra o que muda para começar a usar o LM Warden; para sair, basta desfazer essas mesmas alterações.

  import os
  from openai import OpenAI

  client = OpenAI(
-     base_url="https://api.openai.com/v1",
-     api_key=os.environ["OPENAI_API_KEY"],
+     base_url="http://gpu-box:8080/v1",
+     api_key=os.environ["LM_WARDEN_KEY"],   # a vw_ key from API tokens
  )

  reply = client.chat.completions.create(
-     model="gpt-4o-mini",
+     model="gpt-oss-20b",   # the served name of a model you loaded
      messages=[{"role": "user", "content": "What is a KV cache?"}],
  )