Документация API go2llm

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.

Что понадобится

  1. LiteLLM (SDK или прокси).
  2. Ключ go2llm с префиксом gk_sk_. При регистрации на баланс начисляется $1, минимальное пополнение — $1.
  3. Base URL — свой на каждый протокол: https://go2llm.tech/v1 для OpenAI-совместимого, https://go2llm.tech (без /v1) для Anthropic-совместимого.
  4. Точные 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.

Получить ключ и сделать первый запрос за 3 минуты →