← Все проекты

AI Gateway на Rust

Rust-шлюз для приложений, которые работают с несколькими AI-провайдерами через один API. Приложение отправляет запрос в формате OpenAI или Anthropic, а шлюз переводит его для нужного провайдера и выбирает аккаунт с доступной квотой.

Что отправляет приложение

Приложение сохраняет один интерфейс в формате OpenAI или Anthropic вместо отдельной интеграции с каждым провайдером.

Где шлюз выполнит запрос

Запрошенная модель, права аккаунта, живая квота и назначенный сетевой путь проверяются вместе. Недоступная модель обозначается явно, а не подменяется.

Что происходит при изменениях

Исчерпание квоты, сбой сетевого маршрута и смена версии сервиса обрабатываются отдельно. Сессия сохраняет контекст, а открытый поток завершается на начавшей его версии.

Как запрос проходит через шлюз

Без текстов запросов, аккаунтов, ключей, приватного трафика и закрытого исходного кода.

  1. API приложенияПриложение отправляет запрос в формате OpenAI или Anthropic вместо отдельной интеграции с каждым провайдером.
  2. Адаптер провайдераМодель, сообщения, инструменты и потоковые события переводятся в протокол выбранного провайдера.
  3. Где выполнить запросПоддержка модели, доступ аккаунта, квота и закреплённый сетевой путь проверяются вместе.
  4. Продолжение сессииКонтекст сессии сохраняется, а сбои квоты, сети и версии сервиса восстанавливаются разными способами.
01

Один API вместо нескольких интеграций

Приложение работает с ним как с обычным API: отправляет знакомый запрос и получает ответ тем же способом. Внутри шлюз подбирает провайдера и аккаунт, переводит формат запроса и сохраняет контекст, если условия меняются.

Форматы провайдеров, доступ аккаунтов и живая квота остаются внутри Rust-шлюза, а не расползаются по каждой интеграции приложения.

02

Путь одного запроса

  • Один вход для приложения: Приложение отправляет привычный запрос OpenAI или Anthropic, не перестраивая интеграцию под каждого провайдера.
  • Перевод запроса: Сообщения, инструменты, параметры рассуждения и потоковые события преобразуются в реальный протокол провайдера, а не считаются одинаковыми для всех API.
  • Где выполнить запрос: До запуска проверяются запрошенная модель, права аккаунта, живая квота и назначенный сетевой путь. Недоступная модель обозначается явно, а не подменяется молча.
  • Сессия продолжается: Контекст сессии сохраняется между запросами и после рестарта. История инструментов продолжает ту же работу, а не становится новым диалогом.
  • Долгий ответ и смена версии: Одно только время не обрывает активную генерацию. Новая версия должна завершить реальный ответ модели до перехода нового трафика, а открытые соединения заканчивают работу там, где начались.
03

Что получает приложение

API OpenAI и Anthropic
Один вход
модель, доступ и живая квота
Выбор места выполнения
сохранённая привязка сессии
Продолжение
04

Почему обычного прокси для этой задачи недостаточно

Проблема
Слепая пересылка или выбор аккаунта по кругу могут отправить запрос туда, где модель недоступна, потерять связанную сессию и скрыть, что именно отказало: квота, аккаунт, протокол провайдера или сеть.
Решение
Шлюз проверяет, где можно выполнить запрос, переводит его для этого провайдера и отделяет контекст сессии от конкретного сбоя. Восстановление меняет только отказавший участок, а не ломает всю интеграцию.
Почему не этот вариант
Отдельный тонкий прокси для каждого провайдера сначала проще, но дублирует интеграцию клиента и разносит состояние аккаунтов, квот и продолжений по разным сервисам.
05

Что видно по каждому запросу

Выбранный маршрут
Запрошенная и фактическая модель, адаптер провайдера, доступная ёмкость аккаунта и причина, по которой маршрут сейчас недоступен.
История запроса
Первый результат, длительность, финальное завершение и причина восстановления в обезличенном представлении, без публикации приватного текста.
Класс сбоя
Квота, аккаунт, сеть, отказ провайдера и долгое ожидание остаются разными событиями с разными действиями.
Рабочая версия
Кандидат должен завершить реальный ответ на запрошенной модели до перехода новых задач; старые потоки продолжают работу.
06

Реализация

Шлюз и адаптеры
Rust, Axum, Tokio, OpenAI API, Anthropic API
Состояние и диагностика
PostgreSQL, SQLx, Prometheus, Grafana
Интерфейс и запуск
Leptos, NixOS, systemd, nginx