AI Gateway на Rust
Rust-шлюз для приложений, которые работают с несколькими AI-провайдерами через один API. Приложение отправляет запрос в формате OpenAI или Anthropic, а шлюз переводит его для нужного провайдера и выбирает аккаунт с доступной квотой.
Приложение сохраняет один интерфейс в формате OpenAI или Anthropic вместо отдельной интеграции с каждым провайдером.
Запрошенная модель, права аккаунта, живая квота и назначенный сетевой путь проверяются вместе. Недоступная модель обозначается явно, а не подменяется.
Исчерпание квоты, сбой сетевого маршрута и смена версии сервиса обрабатываются отдельно. Сессия сохраняет контекст, а открытый поток завершается на начавшей его версии.
Как запрос проходит через шлюз
Без текстов запросов, аккаунтов, ключей, приватного трафика и закрытого исходного кода.
- API приложенияПриложение отправляет запрос в формате OpenAI или Anthropic вместо отдельной интеграции с каждым провайдером.
- Адаптер провайдераМодель, сообщения, инструменты и потоковые события переводятся в протокол выбранного провайдера.
- Где выполнить запросПоддержка модели, доступ аккаунта, квота и закреплённый сетевой путь проверяются вместе.
- Продолжение сессииКонтекст сессии сохраняется, а сбои квоты, сети и версии сервиса восстанавливаются разными способами.
Один API вместо нескольких интеграций
Приложение работает с ним как с обычным API: отправляет знакомый запрос и получает ответ тем же способом. Внутри шлюз подбирает провайдера и аккаунт, переводит формат запроса и сохраняет контекст, если условия меняются.
Форматы провайдеров, доступ аккаунтов и живая квота остаются внутри Rust-шлюза, а не расползаются по каждой интеграции приложения.
Путь одного запроса
- Один вход для приложения: Приложение отправляет привычный запрос OpenAI или Anthropic, не перестраивая интеграцию под каждого провайдера.
- Перевод запроса: Сообщения, инструменты, параметры рассуждения и потоковые события преобразуются в реальный протокол провайдера, а не считаются одинаковыми для всех API.
- Где выполнить запрос: До запуска проверяются запрошенная модель, права аккаунта, живая квота и назначенный сетевой путь. Недоступная модель обозначается явно, а не подменяется молча.
- Сессия продолжается: Контекст сессии сохраняется между запросами и после рестарта. История инструментов продолжает ту же работу, а не становится новым диалогом.
- Долгий ответ и смена версии: Одно только время не обрывает активную генерацию. Новая версия должна завершить реальный ответ модели до перехода нового трафика, а открытые соединения заканчивают работу там, где начались.