LM Warden

Окремий ключ для кожного застосунку й сторінка для кожного ключа.

Дайте кожному колезі, ноутбуку, завданню CI та агенту власний ключ. Сторінка ключа показує, скільки він витратив і скільки його запити чекали в черзі, медіану та p95, за будь-який проміжок, який ви виділите мишею чи введете. Замінюйте ключ із перехідним періодом і задавайте йому пріоритет від P0 до P9: запит P9, що чекає, завжди йде перед P8.

Призупиніть його, і нові запити відхилятимуться, а ті, що вже виконуються, завершаться:

$ 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"}

З локального екземпляра 23 вересня 2026 р. Хост і ключ замінено, інші заголовки обрізано.

Рис. 13Сторінка demo-agent — ключа, який створив навантаження на рис. 1: 37 запитів і 43 тис. згенерованих токенів за годину на екрані. Потім відкривається його панель God mode (необов’язковий перегляд промптів і відповідей одного ключа в реальному часі, за замовчуванням вимкнений), і відповіді з’являються просто під час написання. Промпти наші.
Графік Requests зі сторінки Stats за останні 7 днів, з 16 по 23 вересня: одна позначка на запит, колір за ключем API, розмір за кількістю згенерованих токенів, форма за причиною завершення, на тлі тривалості в логарифмічній шкалі від 100 мс до 10 000 с. Більшість позначок лежить між 3 і 100 секундами; в одного ключа два щільні стовпці від часток секунди до кількох сотень секунд.
Рис. 14Запити всіх ключів на одному графіку з тієї самої сторінки Stats: останні 7 днів, 28 906 запитів, намальовано кожен п’ятнадцятий. Позначка — один запит: колір за ключем, розмір за кількістю згенерованих токенів, форма за тим, як він завершився, висота — тривалість у логарифмічній шкалі. Рівний бурштиновий — це opencode-laptop, два щільні рожеві стовпці — research-notebook. Записано 23 вересня 2026 р.; назви ключів замінено. Прокрутіть зображення вбік, щоб побачити весь тиждень.

Щоб піти, достатньо змінити base_url.

LM Warden обслуговує /v1/chat/completions і /v1/models, а /v1/models повідомляє max_model_len кожної моделі. Він також приймає Anthropic Messages API на /v1/messages, тож для Claude Code достатньо вказати в ANTHROPIC_BASE_URL кореневу URL-адресу LM Warden (шлях /v1/messages Claude Code додає сам), і OpenAI Responses API на /v1/responses, тож Codex CLI може використовувати завантажену вами модель. Ваги лежать у звичайному кеші HuggingFace, який make export-hf-cache видає вам як tar-архів, а точні аргументи командного рядка (argv), з якими запущено кожен рушій, можна отримати одним GET-запитом, тож робочу конфігурацію можна відтворити без нас. Нижче наведено diff — зміни, потрібні, щоб перейти на LM Warden; щоб піти, достатньо скасувати ці самі зміни.

  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?"}],
  )