ASAI по API
OpenAI-совместимый эндпоинт. Направьте на него любой OpenAI SDK, поменяйте базовый адрес и имя модели — и всё работает, включая стриминг и вызовы инструментов.
Базовый адрес https://asai.aperturesyndicate.com/api/v1| Метод | Эндпоинт | |
|---|---|---|
POST | /chat/completions | Ответ модели, потоком или целиком |
GET | /models | Три имени моделей |
Ключи
Каждый запрос несёт Authorization: Bearer asai_…. Ключи asai_ бывают двух видов, и разница только в том, кто платит:
| Ключ | Где взять | Кто платит |
|---|---|---|
| Ключ Dev Studio | Dev Studio → ASAI keys | Папка кошелька, к которой привязан ключ, по двойной цене модели. Тариф ASAI не нужен |
| Личный ключ | ASAI → Настройки → API | Ваша энергия ASAI, тот же запас, что и в чате. Нужен ASAI Pro или Etherane |
Ключ показывается один раз, при создании, — мы храним только его хэш. Утёкший ключ отзовите и выпустите новый. Ключи из старого списка портала разработчика, которые начинаются не с asai_, этот API не открывают.
Модели
| Модель | Для чего |
|---|---|
asai-mini | Быстрые повседневные ответы |
asai-arc | Трудные рассуждения, длинные ответы |
asai-code | Код — она же отвечает, если имя ни с чем не совпало |
Имя сверяется нестрого: всё, где есть arc, уходит в asai-arc, где есть mini или chat — в asai-mini, остальное — в asai-code. Поле model в ответе всегда несёт одно из трёх публичных имён.
Запрос
from openai import OpenAI
client = OpenAI(
api_key="asai_…",
base_url="https://asai.aperturesyndicate.com/api/v1",
)
stream = client.chat.completions.create(
model="asai-code",
messages=[{"role": "user", "content": "Объясни этот стектрейс"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")| Поле | |
|---|---|
model | Одно из имён выше |
messages | Не пустой; роли system, user, assistant, tool. content — строка или список частей text и image_url |
stream | true — server-sent events в формате чанков OpenAI |
temperature | Необязательно |
max_tokens / max_completion_tokens | Необязательно, потолок 32 768. Без него у каждой модели своё значение по умолчанию |
tools | Инструменты-функции; parameters — JSON-схема с type: "object" |
tool_choice | auto, none, required или конкретная функция |
Остальные поля OpenAI пропускаются. Ответы — в формате OpenAI, включая usage.
Кто платит за запрос
Запрос стоит столько, сколько стоят его токены у ответившей модели: свежий ввод, кэшированный ввод и вывод считаются отдельно.
- Ключ Dev Studio — двойная цена списывается с папки кошелька после ответа, в том числе за стрим, оборванный на середине. Когда в папке ноль, запросы получают
402, пока вы не пополните её в Wallet. - Личный ключ — цена списывается с вашей энергии ASAI, с тем же недельным запасом и дневным тормозом, что и в чате.
asai-arcоткрыт на тарифах, где он есть.
Ошибки
Ошибки приходят в формате OpenAI, поэтому SDK бросают свои обычные исключения:
{ "error": { "message": "Invalid API key.", "type": "invalid_request_error", "code": "invalid_api_key" } }| Статус | code | Значит |
|---|---|---|
400 | invalid_request | Тело не JSON, или messages пуст или собран неверно |
401 | invalid_api_key | Ключа нет, он неверный или отозван |
402 | budget_exhausted | Папка кошелька за ключом Dev Studio пуста |
403 | model_not_available | Личный ключ: в тарифе нет API или нет asai-arc |
429 | invalid_request | Больше 60 запросов в минуту на ключ, или у личного ключа кончилась дневная или недельная энергия — что именно, сказано в тексте |
503 | billing_unavailable | Не удалось проверить папку кошелька — повторите |
5xx | Сервис моделей недоступен — повторите с паузой |
Правила
- Не перепродавайте доступ к API.
- Держите ключи на сервере. Ключ в браузерном бандле или сборке приложения найдут.
- Правила содержания те же, что в чате: Допустимое использование ASAI.
- Полные условия: Условия для разработчиков и API.