LiteLLM и go2llm: свой провайдер в model_list
LiteLLM — прокси и SDK, который приводит десятки провайдеров к одному вызову. go2llm подключается к нему как обычный провайдер: строкой в model_list с api_base и api_key. Протокол можно выбрать любой из двух — OpenAI Chat Completions или Anthropic Messages, — go2llm говорит обоими.
Проверено живым запросом: нет. Конфигурация ниже составлена по документации LiteLLM. go2llm относится к классу «провайдер со своим base URL», и оба протокола у шлюза проверены напрямую; связку именно с LiteLLM мы отдельным прогоном не гоняли. Если что-то не сходится — напишите в @go2llm_support, поправим.
Источники: LiteLLM — OpenAI-Compatible Endpoints, LiteLLM — Anthropic, LiteLLM — Proxy config.
Дата публикации: 14 сентября 2026.
Что понадобится
- LiteLLM (SDK или прокси).
- Ключ go2llm с префиксом
gk_sk_. При регистрации на баланс начисляется $1, минимальное пополнение — $1. - Base URL — свой на каждый протокол:
https://go2llm.tech/v1для OpenAI-совместимого,https://go2llm.tech(без/v1) для Anthropic-совместимого. - Точные public ID моделей:
curl https://go2llm.tech/v1/models— эндпоинт открыт без ключа.
Вариант 1. OpenAI-совместимый режим
Основной путь. LiteLLM требует префикс openai/ перед именем модели — он переключает маршрутизацию на OpenAI-совместимый клиент, а не означает, что модель от OpenAI.
model_list:
- model_name: go2llm-sonnet
litellm_params:
model: openai/claude-sonnet-4-5
api_base: https://go2llm.tech/v1
api_key: os.environ/GO2LLM_API_KEY
- model_name: go2llm-luna
litellm_params:
model: openai/gpt-5.6-luna
api_base: https://go2llm.tech/v1
api_key: os.environ/GO2LLM_API_KEY
Три вещи здесь критичны:
api_baseобязан заканчиваться на/v1. Документация LiteLLM прямо предупреждает: приNot Found Errorпроверьте суффикс/v1. Дописывать/chat/completionsне надо — клиент добавит путь сам.- После
openai/идёт точный ID из каталога go2llm, а не маркетинговое имя. Алиасы шлюз резолвит (claude-sonnet-5→claude-sonnet-4-5), но в конфиге лучше держать канонический ID — тот, который вернул каталог. - Ключ — через
os.environ/…, чтобыgk_sk_не уехал в репозиторий вместе с конфигом.
Тот же вызов из SDK, без прокси:
import os
import litellm
response = litellm.completion(
model="openai/claude-sonnet-4-5",
api_base="https://go2llm.tech/v1",
api_key=os.environ["GO2LLM_API_KEY"],
messages=[{"role": "user", "content": "Ответь одним словом: работает"}],
)
print(response.choices[0].message.content)
Вариант 2. Anthropic-совместимый режим
У go2llm есть нативный /v1/messages без прослойки-конвертера. В LiteLLM он включается провайдером anthropic:
model_list:
- model_name: go2llm-haiku
litellm_params:
model: anthropic/claude-haiku-4-5
api_base: https://go2llm.tech
api_key: os.environ/GO2LLM_API_KEY
Здесь api_base указывается без /v1 — по документации LiteLLM, для кастомного Anthropic-эндпоинта он сам дописывает /v1/messages. Если поставить https://go2llm.tech/v1, получится /v1/v1/messages и 404 endpoint_not_found.
Тот же адрес можно задать переменной окружения ANTHROPIC_API_BASE. Если версия LiteLLM в вашей установке дописывает суффикс иначе, у неё есть переключатель LITELLM_ANTHROPIC_DISABLE_URL_SUFFIX=true — тогда путь придётся собрать в api_base самостоятельно.
Какой режим выбрать: если у вас уже всё на OpenAI-формате — первый, менять нечего. Anthropic-режим имеет смысл, когда клиент за прокси говорит Messages-формой и конвертация только мешает. Модель обязана поддерживать соответствующий endpoint — смотрите поле endpoints в каталоге.
Метаданные модели: GET /v1/models/{id} теперь отвечает
Прокси-слои спрашивают у провайдера карточку конкретной модели, а не только список. Раньше на такой запрос шлюз отдавал 404 плейн-текстом; теперь у него есть отдельный маршрут:
curl -s https://go2llm.tech/v1/models/claude-sonnet-5
{
"id": "claude-sonnet-4-5",
"object": "model",
"owned_by": "go2llm",
"modalities": ["text"],
"endpoints": ["chat.completions", "messages"]
}
Обратите внимание: спросили по алиасу — в ответе канонический id. Это тот же ID, который стоит писать в конфиг, чтобы подстановка не удивила вас позже в тексте ошибки. Авторизация на этом маршруте не нужна, как и на списке.
Если модели нет в опубликованном каталоге, ответ — 404 model_not_found тем же текстом, каким шлюз отказывает в самом запросе к модели: одна формулировка, где бы отказ ни случился.
Лимиты, которые важны прокси-слою
LiteLLM обычно ставят перед пулом пользователей, и лимиты одного ключа становятся общими:
- 20 RPM на ключ по умолчанию, считается суммарно по всем моделям и endpoint'ам, не на модель.
- 2 параллельных запроса на аккаунт по умолчанию.
- Квота в долларах, список разрешённых моделей, IP allow-list и срок — настраиваются на каждый ключ отдельно.
Отсюда практический вывод: заводите под LiteLLM отдельный ключ с собственной квотой, а в litellm_params выставляйте rpm, чтобы прокси сам не разгонялся выше лимита:
model_list:
- model_name: go2llm-sonnet
litellm_params:
model: openai/claude-sonnet-4-5
api_base: https://go2llm.tech/v1
api_key: os.environ/GO2LLM_API_KEY
rpm: 20
Текущий остаток и лимиты ключ может прочитать сам:
curl https://go2llm.tech/v1/me -H "Authorization: Bearer $GO2LLM_API_KEY"
В ответе — balance.spendable_usd, balance.reserved_usd, key.quota_usd, key.rpm_limit, limits.account_max_concurrency. Ответ отдаётся с cache-control: no-store, отдельный лимит на эту ручку — 60 запросов в минуту.
Откуда брать фактическую стоимость
LiteLLM считает стоимость по собственной таблице цен. Цены go2llm в ней не заложены, поэтому её цифра по этим моделям будет чужой.
Источник правды — поле usage.cost_usd, которое шлюз кладёт в каждый ответ, включая финальный usage-блок SSE-стрима, и списание в кабинете. Доходит ли usage.cost_usd до вызывающего кода через нормализацию usage в LiteLLM, своей проверкой мы не подтверждали. Пока не проверите на своей версии, сверяйте расход по кабинету и по GET /v1/me, а не по отчёту прокси.
Проверка, что заработало
Сначала шлюз напрямую — так вы отделите проблему LiteLLM от проблемы ключа:
curl https://go2llm.tech/v1/chat/completions \
-H "Authorization: Bearer $GO2LLM_API_KEY" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-4-5","max_tokens":120,"messages":[{"role":"user","content":"Ответь одним словом: работает"}]}'
Ожидаемый результат: HTTP 200, «работает» в choices[0].message.content, поле cost_usd в usage.
Затем — через прокси, уже под именем из model_name:
curl http://localhost:4000/v1/chat/completions \
-H "Authorization: Bearer $LITELLM_MASTER_KEY" \
-H "content-type: application/json" \
-d '{"model":"go2llm-sonnet","max_tokens":120,"messages":[{"role":"user","content":"Ответь одним словом: работает"}]}'
Какие модели заводить
Актуальные ставки по каждой модели — на странице цен и в GET /api/pricing.
| Модель | Зачем в пуле LiteLLM |
|---|---|
claude-sonnet-4-5 | Основная рабочая модель для кода и чата |
claude-opus-4-5 | Тяжёлые задачи, разбор больших кодовых баз |
claude-haiku-4-5 | Дешёвый маршрут для коротких ходов |
gpt-5.6-luna | Черновики и мелкие задачи: $0.04 за 1M входа |
deepseek-v4-pro | Массовые операции на большом контексте |
glm-5.2 | Альтернативный стек: дешевле официального тарифа вендора в 9.9× |
Полный прайс — go2llm.tech/pricing.
Если не работает
- 401
no-key. ПеременнаяGO2LLM_API_KEYне дошла до процесса LiteLLM, либо ключ записан без префиксаgk_sk_. Проверьте, что в конфиге стоитos.environ/GO2LLM_API_KEY, а переменная экспортирована в окружении прокси. - 404
endpoint_not_found. Перепутаны базы:/v1в Anthropic-режиме или его отсутствие в OpenAI-режиме. Тело ошибки перечисляет все опубликованные маршруты. - 404
model_not_found. Послеopenai/илиanthropic/стоит ID, которого нет в каталоге. Скопируйте точное значение изcurl https://go2llm.tech/v1/models. - 400
model_protocol_mismatch. Модель не обслуживается на выбранном endpoint. Сверьте полеendpointsв карточке модели. - 402
insufficient_balance. Пополните баланс (минимум $1) или уменьшитеmax_tokens. Шлюз резервирует оценочную стоимость до вызова, баланс не уходит ниже нуля. - 429
api key RPM exceeded. Прокси разогнался выше 20 RPM на ключ. Выставьтеrpmвlitellm_paramsили заведите второй ключ. - 415 / 400
unsupported_content_type. В текстовый запрос попало изображение или PDF — такие вложения текстовые endpoint'ы не принимают. - 502
upstream_unavailable.Retry-Afterна этом коде шлюз не ставит; ретраи настраивайте средствами LiteLLM.
Разбор кодов целиком — go2llm.tech/docs/errors.
FAQ
Можно ли завести go2llm как fallback-маршрут в роутере LiteLLM? Механика роутера — на стороне LiteLLM, и её мы не проверяли. Со стороны шлюза важно одно: у go2llm есть собственный fallback до начала ответа, а после первого валидного SSE-события переключение не выполняется. Поток, у которого уже пришёл первый фрагмент, автоматически повторять нельзя — ни нам, ни вам.
Какая политика по логам? Промпты и ответы не сохраняются в продуктовых логах go2llm; технический лог содержит метаданные, usage, стоимость, маршрут, статус и очищенную ошибку. Подробные request logs хранятся до 90 дней.
Настроите за меня? Нет — интеграции за клиента мы не настраиваем. Вопросы по шлюзу: support@go2llm.tech, @go2llm_support.
Что дальше
Другие клиенты и агенты — в хабе инструментов. Эндпоинты, лимиты и форматы ответа — go2llm.tech/docs. Цены по каждой модели — go2llm.tech/pricing.