SDK
Официальные SDK OpenAI и Anthropic, Python и Node: установка, клиент с base URL шлюза и ключом из окружения, один вызов. Ваш код остаётся вашим кодом.
Быстро
SDK менять не нужно. Ставится тот же официальный пакет, что и всегда; меняются два аргумента конструктора — base URL и ключ.
# OpenAI-совместимый диалект
pip install openai
npm install openai
# Нативный диалект Anthropic
pip install anthropic
npm install @anthropic-ai/sdkКлюч держите в переменной окружения. Ни один пример ниже не пишет секрет в исходник — все они читают KUMO_API_KEY, поэтому сначала экспортируйте её в той оболочке, из которой запускаете код.
export KUMO_API_KEY="kumo_sk_..."Кошелёк новой организации пуст: первый вызов без пополнения ответит 402 (оплата).
OpenAI SDK
Base URL — https://api.kumorouter.com/v1, вместе с /v1. SDK дописывает к нему путь операции сам.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.kumorouter.com/v1",
api_key=os.environ["KUMO_API_KEY"],
)
answer = client.chat.completions.create(
model="<model>",
max_tokens=128,
messages=[{"role": "user", "content": "Объясни токены одной строкой."}],
)
print(answer.choices[0].message.content)Потолок вывода обязателен: запрос без max_tokens (он же max_completion_tokens) отвергается, а не остаётся неограниченным.
Anthropic SDK
Base URL — https://api.kumorouter.com, голый origin, без `/v1`: SDK дописывает /v1/messages сам. Ключ едет в заголовке x-api-key, и SDK ставит его туда без вашего участия.
import os
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.kumorouter.com",
api_key=os.environ["KUMO_API_KEY"],
)
answer = client.messages.create(
model="<model>",
max_tokens=128,
messages=[{"role": "user", "content": "Объясни токены одной строкой."}],
)
print(answer.content[0].text)Не каждая модель отвечает на обоих диалектах. Какие протоколы поддерживает конкретная модель, написано на её карточке в каталоге — там же, где её возможности. Смотрите карточку до того, как выбирать SDK.
Как пишется заголовок с ключом → Что умеет модель →
Поток
Оба SDK умеют поток, и шлюз отвечает им в форме их собственного протокола: события в порядке прихода и завершающий кадр. Отличие от унарного вызова одно — сбой после начала потока обрывает его без завершающего кадра, и такой ответ считается неудачным вызовом, а не коротким.
Библиотеки поверх OpenAI
Фреймворки вроде LangChain или LlamaIndex обычно ходят к моделям через тот же клиент OpenAI. Если у библиотеки настраивается base URL клиента OpenAI — она работает со шлюзом так же, как прямой вызов: подставьте https://api.kumorouter.com/v1 и ключ, остальное не трогайте.
Точное имя параметра у каждой библиотеки своё, и здесь оно не называется намеренно: параметры переименовывают между выпусками, а неверное имя выглядит как молчаливо проигнорированная настройка. Смотрите документацию своей библиотеки — искать нужно то место, где задаётся base URL клиента OpenAI.
Проверить, что настройка применилась, проще всего по журналу консоли: вызов есть — значит библиотека пошла через шлюз.