LM Warden

Anthropic SDK на ваших собственных GPU.

Ваш ключ API Anthropic остается в api_key, а ключ LM Warden передается в отдельном заголовке.

Куда идет запрос от Anthropic SDK Anthropic SDK отправляет запросы в LM Warden: в base_url указан адрес сервера LM Warden, а в X-LMWarden-Key — ключ LM Warden. LM Warden проверяет ключ, принимает запросы в формате Anthropic Messages, ставит их в очередь по приоритету ключа и передает маршрутизатору реплик. Маршрутизатор закрепляет каждую сессию за репликой, на которой уже лежит ее кэш; на каждом GPU работает своя копия модели. Отдельный путь ведет к api.anthropic.com: туда правила направляют запросы к остальным моделям Claude, с вашим собственным ключом API. Anthropic SDK base_url points at the warden X-LMWarden-Key vw_…, in default headers POST /v1/messages LM Warden checks the key: one per app speaks Anthropic Messages scheduler, key priority usage, latency and live stats per key Replica router a session goes back to the replica that holds its cache one model copy per GPU your GPUs: vLLM or llama.cpp replica 0, GPU 0 replica 1, GPU 1 replica 2, GPU 2 a conversation stays on its replica api.anthropic.com rules send other Claude models here, on your own API key
Куда идет запрос от Anthropic SDK Anthropic SDK отправляет запросы в LM Warden: в base_url указан адрес сервера LM Warden, а в X-LMWarden-Key — ключ LM Warden. LM Warden проверяет ключ, принимает запросы в формате Anthropic Messages, ставит их в очередь по приоритету ключа и передает маршрутизатору реплик. Маршрутизатор закрепляет каждую сессию за репликой, на которой уже лежит ее кэш; на каждом GPU работает своя копия модели. Отдельный путь ведет к api.anthropic.com: туда правила направляют запросы к остальным моделям Claude, с вашим собственным ключом API. Anthropic SDK base_url points at the warden X-LMWarden-Key vw_…, in default headers POST /v1/messages LM Warden checks the key: one per app speaks Anthropic Messages scheduler, key priority usage, latency, live stats per key Replica router a session goes back to the replica that holds its cache replica 0 GPU 0 replica 1 GPU 1 replica 2 GPU 2 your GPUs: vLLM or llama.cpp a conversation stays on its replica api.anthropic.com rules send other Claude models here, on your own API key
Путь запроса от Anthropic SDK: две настройки, которые создает Connect, затем сервер LM Warden и по копии модели на каждом GPU.

Иначе говоря: Anthropic SDK отправляет запросы в LM Warden: в base_url указан адрес сервера LM Warden, а в X-LMWarden-Key — ключ LM Warden. LM Warden проверяет ключ, принимает запросы в формате Anthropic Messages, ставит их в очередь по приоритету ключа и передает маршрутизатору реплик. Маршрутизатор закрепляет каждую сессию за репликой, на которой уже лежит ее кэш; на каждом GPU работает своя копия модели. Отдельный путь ведет к api.anthropic.com: туда правила направляют запросы к остальным моделям Claude, с вашим собственным ключом API.

Протокол
Anthropic Messages
Поддержка
Полная поддержка

Модели Claude, указанные в ваших правилах, работают здесь; все остальные модели и пути /v1 уходят в Anthropic с вашими собственными учетными данными. Для режима «Только локально» учетная запись Anthropic не нужна: ключ LM Warden указывается как api_key, а в качестве модели — имя, под которым она обслуживается.

Требования

  • Маршрутизация должна быть включена, и хотя бы одно правило должно быть активно.
  • Ключу должно быть разрешено пересылать запросы в Anthropic (May relay).

Настройка

В консоли раздел Connect создает эти файлы с адресом вашего сервера LM Warden, вашим ключом и выбранной моделью. Здесь они показаны с заполнителями.

Router: ваш ключ Anthropic сохраняется

base_url указывает на этот сервер LM Warden; ваш ключ API Anthropic остается в api_key, а ключ LM Warden передается в заголовках по умолчанию.

Python
import anthropic

# api_key is your own Anthropic key (ANTHROPIC_API_KEY), used for pass-through.
client = anthropic.Anthropic(
    base_url="https://your-warden",
    default_headers={"X-LMWarden-Key": "vw_YOUR_KEY"},
)
message = client.messages.create(
    model="claude-haiku-4-5",  # a model your rules serve here; others go to Anthropic
    max_tokens=256,
    messages=[{"role": "user", "content": "Reply with the single word OK."}],
)
print(message.content[0].text)
TypeScript
import Anthropic from "@anthropic-ai/sdk";

// apiKey is your own Anthropic key (ANTHROPIC_API_KEY), used for pass-through.
const client = new Anthropic({
  baseURL: "https://your-warden",
  defaultHeaders: { "X-LMWarden-Key": "vw_YOUR_KEY" },
});
const message = await client.messages.create({
  model: "claude-haiku-4-5", // a model your rules serve here; others go to Anthropic
  max_tokens: 256,
  messages: [{ role: "user", content: "Reply with the single word OK." }],
});
console.log(message.content);
curl
curl https://your-warden/v1/messages \
  -H "X-LMWarden-Key: vw_YOUR_KEY" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model": "claude-haiku-4-5", "max_tokens": 256, "messages": [{"role": "user", "content": "Reply with the single word OK."}]}'

Только локально

Ключ LM Warden указывается как api_key, а в качестве модели — имя, под которым она обслуживается.

Python
import anthropic

client = anthropic.Anthropic(base_url="https://your-warden", api_key="vw_YOUR_KEY")
message = client.messages.create(
    model="your-served-model-name",
    max_tokens=256,
    messages=[{"role": "user", "content": "Reply with the single word OK."}],
)
print(message.content[0].text)
TypeScript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({ baseURL: "https://your-warden", apiKey: "vw_YOUR_KEY" });
const message = await client.messages.create({
  model: "your-served-model-name",
  max_tokens: 256,
  messages: [{ role: "user", content: "Reply with the single word OK." }],
});
console.log(message.content);
curl
curl https://your-warden/v1/messages \
  -H "x-api-key: vw_YOUR_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model": "your-served-model-name", "max_tokens": 256, "messages": [{"role": "user", "content": "Reply with the single word OK."}]}'

Официальная документация: https://platform.claude.com/docs/en/api/sdks/python (дата обращения: 2026-10-04).