Один ключ на всех
Аккаунт и биллинг у каждого провайдера моделей заменяются одним ключом.
AIR для разработчиков
OpenRouter из России работает наполовину: сайт открывается, а баланс не пополнить — нужна зарубежная карта или криптокошелек. AIR API повторяет тот же паттерн и принимает рубли.
Chat Completions API
Запрос к моделям для кода через OpenAI-совместимый API
Нужно разобрать 200 тысяч отзывов и вытащить причины отказов. Какую модель каталога взять и почему
На таком объеме берите дешевую модель на извлечение и сильную на сводку: DeepSeek размечает причины построчно, Claude собирает итог. Схему промпта и оценку по токенам дал ниже.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.air.fail/v1",
apiKey: process.env.AIR_API_KEY,
});
const reply = await client.chat.completions.create({
model: "claude",
messages: [{ role: "user", content: "Нужно разобрать 200 тысяч отзывов и вытащить причины отказов. Какую модель каталога взять и почему" }],
});
Прогони один и тот же промпт про идемпотентность вебхуков через две модели и покажи, где ответы расходятся
Расхождение одно: первая модель хранит ключ идемпотентности в Redis с TTL, вторая — в таблице с уникальным индексом. Обе схемы рабочие, второй вариант переживает рестарт кэша.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.air.fail/v1",
apiKey: process.env.AIR_API_KEY,
});
const reply = await client.chat.completions.create({
model: "gpt",
messages: [{ role: "user", content: "Прогони один и тот же промпт про идемпотентность вебхуков через две модели и покажи, где ответы расходятся" }],
});
Напиши обертку: если первая модель ответила ошибкой или таймаутом, запрос уходит на вторую, а исход пишется в лог
Готово: список id моделей, один цикл, ретрай только на 5xx и таймаут, ошибки клиента пробрасываются сразу. В лог уходят id модели, попытка и время ответа.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.air.fail/v1",
apiKey: process.env.AIR_API_KEY,
});
const reply = await client.chat.completions.create({
model: "deepseek",
messages: [{ role: "user", content: "Напиши обертку: если первая модель ответила ошибкой или таймаутом, запрос уходит на вторую, а исход пишется в лог" }],
});
Вот спецификация на 300 страниц. Собери список требований к платежному модулю и отметь противоречия
Собрал 47 требований по разделам платежей и возвратов. Три противоречия: срок возврата в двух главах разный, статус частичной оплаты не описан, лимит попыток списания задан дважды.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.air.fail/v1",
apiKey: process.env.AIR_API_KEY,
});
const reply = await client.chat.completions.create({
model: "gemini",
messages: [{ role: "user", content: "Вот спецификация на 300 страниц. Собери список требований к платежному модулю и отметь противоречия" }],
});
OpenRouter и более 80 моделей в одном сервисе
ОткрытьOpenRouter — маршрутизатор запросов к языковым моделям: прослойка между кодом и провайдерами с одним ключом, одним форматом и одним счетом.
Аккаунт и биллинг у каждого провайдера моделей заменяются одним ключом.
Формат chat/completions привычный, клиентский код почти не переписывается.
Запрос уходит провайдеру, который дешевле или отвечает прямо сейчас.
Провайдер отвалился — запрос уходит на резервный без правок в коде.
Сотни позиций в одном списке: флагманы, открытые веса, нишевые файнтюны.
Предоплаченный баланс списывается за токены, месячной подписки нет.
Практически работа останавливается на первом шаге — пополнении баланса.
биллинг рассчитан на зарубежные карты и криптовалюту.
часть из них не обслуживает запросы из России, и настройками маршрутизации это не лечится. VPN меняет адрес, но не способ оплаты.
Для команды — операционный риск: серую оплату не провести через бухгалтерию, а ключ на чьей-то личной карте становится единой точкой отказа.
AIR — российский агрегатор нейросетей с OpenAI-совместимым API: ключ из кабинета, оплата рублями, эндпоинт меняется одной строкой.
Диалог, системный промпт, стриминг — как в chat/completions, меняются только baseURL и ключ.
Разбор стектрейсов, ревью диффов, генерация тестов на моделях, которые сильны в коде.
Классификация, суммаризация, извлечение полей — цикл по строкам с тем же клиентом.
Генерация изображений живет на том же ключе: второй аккаунт и второй биллинг не нужны.
Мост нужен не для демо, а для сервиса, который работает каждый день. Проверять стоит три вещи: оплату, встраивание и поведение в момент сбоя.
Оплата как расход
Рубли и карта российского банка: модели становятся обычной статьей бюджета.
Встраивание в код
Совместимый эндпоинт — ретраи, таймауты и обвязка ошибок остаются вашими.
Отказ под контролем
Фолбэк на другой id модели пишется на вашей стороне и виден в ваших логах.
Один ключ
Ключ из кабинета открывает весь каталог: чат, картинки, видео и звук через один эндпоинт.
Рубли и «Мир»
Оплата картой российского банка, включая «Мир», без посредников и чужого курса.
Без VPN
Кабинет и API открываются из России напрямую, в том числе с CI-серверов без туннеля.
Старт без карты
После регистрации есть стартовые лимиты: модели проверяются до первого платежа.
Минимальный запрос — curl и Python. Код под OpenAI SDK или другой совместимый шлюз переносится заменой baseURL и ключа.
curl — без SDK, из любого окружения
curl https://api.air.fail/v1/chat/completions \
-H "Authorization: Bearer $AIR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude",
"messages": [
{"role": "user", "content": "Сравни два подхода к идемпотентности вебхуков"}
]
}'
openai — меняется только base_url и ключ
from openai import OpenAI
client = OpenAI(
base_url="https://api.air.fail/v1",
api_key="AIR_API_KEY",
)
reply = client.chat.completions.create(
model="gpt", # id модели — из каталога в кабинете
messages=[
{"role": "user", "content": "Разбери стектрейс и предложи патч"}
],
)
print(reply.choices[0].message.content)
OpenAI-совместимый эндпоинт
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.air.fail/v1",
apiKey: process.env.AIR_API_KEY,
});
// свой фолбэк: первая модель не ответила — спрашиваем следующую
async function ask(prompt, models = ["claude", "gpt"]) {
for (const model of models) {
try {
const res = await client.chat.completions.create({
model,
messages: [{ role: "user", content: prompt }],
});
return res.choices[0].message.content;
} catch (err) {
if (model === models[models.length - 1]) throw err;
}
}
}
Выбор идет по задаче, а не по строчке в бенчмарке: одна модель держит контекст, другая дешевле на потоке.
| Модель | Сильная сторона | Когда выбирать |
|---|---|---|
| Claude | Длинный контекст, аккуратность в коде | Ревью, рефакторинг, работа с большим репозиторием |
| GPT-5 | Универсальность, следование инструкции | Повседневные задачи и структурированные ответы |
| Gemini | Очень длинный контекст, мультимодальность | Разбор документации, таблиц и скриншотов |
| DeepSeek | Экономичная генерация на потоке | Массовые правки, черновики, батч-обработка |
| Qwen | Открытая модель, сильная многоязычность | Тексты на разных языках, эксперименты с промптом |
Сравниваем по пунктам, которые видит разработчик в первый день.
Email или Яндекс ID; иностранный номер и зарубежная карта не нужны.
В кабинете это одна кнопка; ключ открывает весь каталог, отдельных ключей на модель нет.
Укажите в клиенте https://api.air.fail/v1 и новый ключ — остальной код не трогайте.
Стартовых лимитов хватает, чтобы сравнить кандидатов и зафиксировать id модели.
Регистрация бесплатна, стартовых лимитов хватает, чтобы проверить модели на своих задачах. Дальше — подписка или оплата по токенам, смотря как часто модели в работе.
Нет. AIR — российский сервис, кабинет и API открываются из России напрямую. Серверы приложения и CI-раннеры ходят в API без туннеля — там, где VPN запрещен политикой безопасности, это решает.
Картой российского банка, включая «Мир», прямо в кабинете и в рублях. Посредники и криптокошельки не нужны, а для ИП и юрлиц расход проводится обычным платежом.
Нет, если код уже ходит в OpenAI-совместимый эндпоинт. Меняются две вещи: baseURL на https://api.air.fail/v1 и ключ. Клиентские библиотеки, ретраи и стриминг остаются вашими.
По задачам — да: один ключ, совместимый формат, выбор модели идентификатором в запросе. По витрине — нет: каталог собран из лидеров и открытых моделей, а не из сотен файнтюнов. Критерий простой: если задача решается запросом к сильной модели, AIR ее закрывает.
Повторить запрос с другим id модели: фолбэк пишется на вашей стороне, как в примере на JavaScript выше. Таймауты, лимиты попыток и алерты остаются в вашем коде.