Справочник
HTTP-клиенты
API Caicaini — это обычный HTTP и JSON. Никакого проприетарного клиента ставить не надо. Бери любую HTTP-библиотеку, которой доверяешь, или напиши маленькую обёртку по шаблонам ниже.
Почему нет first-party SDK
Поверхность HTTP небольшая (шесть эндпойнтов), а формы запросов и ответов — индустриальные конвенции Messages API и chat-completions. Завернуть это в вендорный SDK — добавить зависимость и собственный API, не сэкономив много работы. Тонкого фирменного клиента мы выпустим, когда он реально окупится.
А пока: любая сторонняя библиотека, нацеленная на одну из реализуемых Caicaini конвенций, заработает, если умеет переопределять base URL.
Переменные окружения
Ключ и base URL читай из переменных окружения, а не из литералов.
# Set once, reuse everywhere.
export CAICAINI_API_KEY="cai_api_..."
export CAICAINI_BASE="https://caicaini.com/v1"
curl "$CAICAINI_BASE/messages" \
-H "Authorization: Bearer $CAICAINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"caicaini/auto","max_tokens":256,"messages":[{"role":"user","content":"Hello!"}]}'Тонкий клиент на каждый язык
Ниже примерно по 30 строк кода на язык: конструктор, вспомогательная функция без стрима и итератор стрима. Скопируй, вставь, поправь. Никакой магии.
# Set once, reuse everywhere.
export CAICAINI_API_KEY="cai_api_..."
export CAICAINI_BASE="https://caicaini.com/v1"
curl "$CAICAINI_BASE/messages" \
-H "Authorization: Bearer $CAICAINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"caicaini/auto","max_tokens":256,"messages":[{"role":"user","content":"Hello!"}]}'Рекомендации
- Используй встроенный
fetchна Node 20+, в браузерах, Cloudflare Workers, Deno, Bun. Встроен, поддерживает стриминг, минимальный след. - В Python бери
httpx. Поддерживает sync и async, есть стриминговые контекст-менеджеры, хорошо живёт с пулом соединений на высокой конкурентности. - Переиспользуй пул соединений. На холодных соединениях задержку доминирует TLS-handshake — держи один экземпляр клиента на процесс.
- Ставь щедрые таймауты: 120 с для не-стримов, 300 с+ для длинных стримов. Модели нужно время, особенно с расширенным размышлением.
- Логируй
idответа на каждом вызове. Это самый быстрый идентификатор, чтобы мы трассировали запрос при обращении в поддержку.
Браузеры
Не вызывай API из браузера с настоящим ключом пользователя. Каждый API-ключ аутентифицирует твой аккаунт. Ходи через сервер, который ты контролируешь: простой Next.js Route Handler, Cloudflare Worker, Express-эндпойнт — что угодно, что оставит ключ на сервере.