Перейти к содержимому

В активной разработке · уже можно self-host

Один адрес для всех AI-провайдеров.

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

Схема маршрутизации запросов LLM Запрос клиента поступает в шлюз, который проверяет состояние провайдеров и доступность бесплатного тарифа, а затем направляет запрос одному из настроенных аккаунтов провайдеров — например, локальной модели Ollama, Groq или Gemini, — циклически чередуя их между запросами, и одновременно предоставляет эндпоинты состояния, статуса, метрик и списка моделей. КЛИЕНТ POST /v1/* РОУТЕР бесплатно + статус Ollama Groq Gemini ОБСЕРВАБИЛИТИ GET /health GET /v1/providers/status GET /metrics GET /v1/models

Иллюстративная схема запроса; проверенные эндпоинты — в разделе документации ниже.

// обзор

AI Bakery Gateway

Самостоятельно разворачиваемый LLM-шлюз: один OpenAI/Anthropic-совместимый эндпоинт, приоритет бесплатных моделей и автоматический failover.

Проблема Что делает шлюз
У каждого вендора свой формат API, особенности SDK и формат ошибок. Один OpenAI- и Anthropic-совместимый API. Существующие клиенты работают — достаточно сменить base URL.
Бесплатные лимиты заканчиваются посреди задачи. Нагрузка распределяется по всем вашим аккаунтам с учётом остатка квоты, с переключением на следующий при исчерпании.
У провайдера случился сбой. Неработающая модель исключается из ротации, а запрос переходит к следующему кандидату.
Страх случайного счёта. FreeOnly включён по умолчанию. Запрос никогда не уйдёт к модели, бесплатность которой шлюз не может подтвердить прямо сейчас.
«Почему ответ пришёл именно от этой модели?» Каждый ответ указывает провайдера, аккаунт и модель, а команда CLI объясняет решение маршрутизации постфактум.
Несколько человек используют одни и те же ключи. Отдельные ключи, бюджеты и профили маршрутизации на команду, плюс просмотр использования по каждой команде.

Унифицированный

Один OpenAI-совместимый API, плюс OpenAI Responses и Anthropic Messages, для 14 типов провайдеров: облачные вендоры, ваш собственный Ollama или любой OpenAI-совместимый сервер.

С приоритетом бесплатного и безопасный

По умолчанию работает в режиме FreeOnly, с проверками на основе фактических данных и защитой от случайных списаний: если вендор всё же спишет деньги за «бесплатный» вызов, срабатывает алерт.

Управляемый

Панель управления в реальном времени, объяснимая маршрутизация, алерты в webhook/Slack/Telegram, Prometheus и Grafana, CLI и MCP-сервер — всё в вашем собственном стеке Docker Compose.

01 · #how-it-works

Как это работает

Поток запроса, умная маршрутизация, защита бесплатных лимитов, отказоустойчивость и обсервабилити.

AI Bakery Gateway стоит между вашими клиентами и подключёнными аккаунтами провайдеров. Ваше приложение, агент или инструмент для кода отправляет запрос в формате OpenAI Chat Completions, OpenAI Responses или Anthropic Messages на один адрес; шлюз определяет подходящий аккаунт и модель, вызывает их и переключается на другой вариант, если вызов не удался.

Поток запроса

  1. Определение модели: конкретное имя модели, логическая модель, auto или именованный профиль маршрутизации вроде free-code.
  2. Применение жёстких правил: соответствие возможностей, доказательство бесплатности (в режиме FreeOnly) и бюджет.
  3. Ранжирование кандидатов: запас квоты, доступность и измеренное качество.
  4. Резервирование квоты и вызов лучшего по рангу аккаунта.
  5. Переключение при сбое с записью деталей, достаточных, чтобы объяснить каждое решение постфактум.

Умная маршрутизация, а не round-robin

  • auto: шлюз оценивает кандидатов по соответствию возможностей, измеренному качеству, доступности, остатку квоты и свежести данных и выбирает один вариант. Вы не называете конкретную модель.
  • Профили маршрутизации описывают характер задачи, а не имя модели — см. 8 профилей ниже.
  • Балансировка с учётом квоты: при нескольких аккаунтах для одной модели трафик идёт туда, где больше свободной квоты, поэтому один аккаунт не исчерпывается, пока другой простаивает.
  • Ограниченный failover: запрос проходит по ранжированному списку кандидатов до настроенного лимита попыток и дедлайна на первый токен, поэтому один медленный или недоступный вендор не может заблокировать запрос бесконечно.
  • Никаких тихих подмен: запросив конкретную модель, вы получаете именно её или явную ошибку — но никогда незаметную замену на что-то другое.
  • Сопоставление эквивалентных моделей: одна и та же модель, предлагаемая двумя вендорами, распознаётся как одна логическая модель и используется как резерв для другой.

Защита бесплатных лимитов

FreeOnly включён по умолчанию: запрос никогда не уйдёт к модели, бесплатность которой шлюз не может подтвердить прямо сейчас. Шлюз постоянно перепроверяет эту картину — перечитывает списки моделей вендоров и пересчитывает «бесплатна ли эта модель для меня», а не полагается на прошлый ответ. Защита от случайных списаний отслеживает то, что одними доказательствами не поймать: если вендор всё же сообщит о списании за модель, которую шлюз считал бесплатной, шлюз прекращает использовать это назначение и поднимает критический алерт. Истекающий пробный кредит (например, у Cerebras) отслеживается, и аккаунт без остатка кредита исключается до того, как получит отказ.

Отказоустойчивость

  • Circuit breaker на уровне аккаунта и модели: неработающий узел исключается из ротации на время восстановления, которое зависит от причины сбоя — лимит запросов, таймаут, ошибка авторизации или отзыв модели.
  • Собственный Retry-After вендора учитывается.
  • Безопасность стриминга: запрос может переключиться на другой вариант до первого токена. После первого токена шлюз никогда не меняет модель посреди ответа незаметно.
  • Отмена запроса клиентом никогда не засчитывается как сбой провайдера.
  • Понятные ошибки: 402 означает, что для этого запроса по политике нет подходящей бесплатной модели; 503 — что прямо сейчас никто не смог обработать запрос; 429 — что тенант исчерпал собственный бюджет.

Объяснимость и эксплуатация

Каждый ответ содержит заголовки X-Scheduler-Provider, X-Scheduler-Account и X-Scheduler-Model, а также идентификатор запроса. Команда why <id-запроса> утилиты командной строки bakery показывает всех рассмотренных кандидатов, причину их ранжирования и что с ними произошло. Та же CLI покрывает настройку, прямой запрос к модели, список моделей, использование и проверку аккаунта (bakery setup, ask, models, usage, probe, tenants, accounts).

Панель управления в реальном времени (Blazor, на английском и русском) показывает использование, состояние флота и маршрутизацию, страницу Try для тестовых запросов, страницу Connect с готовой к копированию конфигурацией клиентов и мастер настройки. Алерты уходят в webhook, Slack или Telegram, когда бесплатная модель теряется или появляется, модель отзывается или вендор неожиданно выставляет счёт. Включены метрики Prometheus, трассировка OpenTelemetry и готовый дашборд Grafana с правилами алертов. MCP-сервер (bakery-mcp) позволяет MCP-совместимому клиенту — Claude Code, OpenCode, Claude Desktop — напрямую исследовать и диагностировать работающий шлюз.

Посмотреть список провайдеров

Профили маршрутизации

  • free-best

    Сбалансированный вариант

  • free-fast

    Низкая задержка

  • free-smart

    Качество ответа

  • free-code

    Код

  • free-tools

    Надёжный вызов инструментов

  • free-long

    Длинный контекст

  • free-vision

    Изображения на входе

  • free-safe

    Доступность, без preview

02 · #providers

Провайдеры

14 поддерживаемых типов провайдеров, несколько аккаунтов на провайдера и настройка флота.

  • Ollama Cloud

    Облачные модели Ollama

  • Ollama (локально)

    На машине самого шлюза

  • Ollama (локальная сеть)

    На другой машине в вашей локальной сети

  • Groq

  • Cerebras

    Баланс и срок пробного кредита отслеживаются

  • Gemini

  • OpenRouter

  • NVIDIA NIM

  • Mistral AI

  • Cohere

  • SambaNova Cloud

  • Z.ai (Zhipu GLM)

  • Cloudflare Workers AI

  • Кастомный (OpenAI-совместимый)

    Ваш собственный сервер — LM Studio, vLLM, llama.cpp или любой OpenAI-совместимый эндпоинт

Интересно, у кого из них сейчас есть бесплатный тариф? Смотреть актуальный обзор →

AI Bakery Gateway управляет флотом аккаунтов провайдеров, позволяя сочетать локальные модели и облачные API за одним адресом.

Несколько аккаунтов на провайдера

Добавьте столько ключей API, сколько у вас есть, для одного провайдера. У каждого аккаунта свой квотный бюджет и свой circuit breaker — кроме случаев, когда вендор учитывает один общий лимит на аккаунт: тогда шлюз делит один бюджет между всеми моделями этого аккаунта. При нескольких аккаунтах для одной модели трафик идёт туда, где больше свободной квоты, поэтому один аккаунт не исчерпывается, пока другой простаивает.

Локальные модели — полноправные участники

Запускайте Ollama или любой OpenAI-совместимый сервер рядом с облачными провайдерами. Локальный инференс ничего не стоит за вызов, и как только вы подтвердите аккаунт как бесплатный в панели управления, он участвует в маршрутизации FreeOnly наравне с облачным.

Сопоставление эквивалентных моделей

Одна и та же модель, доступная у двух вендоров — например, напрямую и через OpenRouter, — распознаётся как одна логическая модель, поэтому шлюз может использовать второй вариант как резервный для первого.

Провайдеры эмбеддингов

Отдельные провайдеры эмбеддингов обрабатывают задачи векторизации для RAG и похожих сценариев.

Конфигурация флота

Ключи вводятся в панели управления или через CLI, но никогда — в конфигурационном файле. Для каждого аккаунта можно задать приоритет, лимиты запросов и таймауты. Для обработки запроса чата, responses, messages или эмбеддингов шлюзу требуется хотя бы один включённый аккаунт.

Доступность бесплатных лимитов, их размер и цены устанавливает каждый вендор, и они меняются со временем — уточняйте актуальные условия у вендора. Шлюз применяет лимиты, которые вы настроили, а остальное узнаёт из ответов самого вендора.

Читать быстрый старт

03 · #quick-start

Быстрый старт

Запустите шлюз через Docker Compose и отправьте первый запрос примерно за 5 минут.

Запуск примерно за 5 минут

Запустите через Docker Compose и подключите первый аккаунт провайдера.

1

Сгенерируйте секреты

Создаёт файл `.env` с новым ключом шифрования, паролем базы данных и клиентским ключом. Существующий `.env` не перезаписывается. В Windows вместо этого запустите `scripts/init-env.ps1` в PowerShell.

./scripts/init-env.sh
2

Запустите стек

Запускает шлюз вместе с PostgreSQL и Redis.

docker compose up -d
3

Откройте панель и подключите провайдера

Откройте http://localhost:18080, выберите провайдера и вставьте его ключ API. Ключ проверяется, затем шифруется при хранении, а его модели определяются автоматически. Мастер настройки на /setup проведёт вас через процесс.

4

Проверьте готовность

Проверка готовности проходит, как только хотя бы одна модель становится доступной для маршрутизации. При первом запуске флот пуст, поэтому проверка закономерно не проходит, пока вы не добавите аккаунт.

curl http://localhost:18080/health/ready
5

Отправьте первый запрос

Направьте любой OpenAI-совместимый клиент на шлюз или отправьте curl-запрос напрямую.

Вам понадобится Docker с Compose v2. Устанавливать .NET SDK и локальный PostgreSQL не нужно.

Использование curl

curl http://localhost:18080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"auto","messages":[{"role":"user","content":"Hello"}]}'

Заголовки ответа X-Scheduler-Provider, X-Scheduler-Account и X-Scheduler-Model показывают, кто ответил. "model":"auto" просит шлюз выбрать модель самостоятельно; укажите конкретную модель или профиль маршрутизации вроде "free-code", когда узнаете, что публикует ваш флот через GET /v1/models.

Использование OpenAI SDK (Python)

from openai import OpenAI

client = OpenAI(base_url="http://localhost:18080/v1", api_key="local")  # любое значение подходит, пока аутентификация data plane не включена
reply = client.chat.completions.create(
    model="auto",
    messages=[{"role": "user", "content": "Hi"}],
)
print(reply.choices[0].message.content)

Open WebUI, Continue и Cline: добавьте OpenAI-совместимого провайдера с base URL http://localhost:18080/v1. Из другого контейнера используйте http://host.docker.internal:18080/v1 вместо localhost.

Выход за пределы localhost

Установите SCHEDULER_ADMIN_TOKEN в .env, прежде чем давать коллегам удалённый доступ к панели, и SCHEDULER_AUTH_ENABLED=true, прежде чем к шлюзу сможет обратиться любой клиент за пределами этой машины — клиенты тогда отправляют сгенерированный BAKERY_API_KEY как Authorization: Bearer <key>. Включите оба параметра, прежде чем открывать порт за пределы этой машины.

Сохраните то, что важно

Храните .env вместе с дампом базы данных — в нём ключ шифрования для сохранённых ключей провайдеров, и без него их не расшифровать.

04 · #self-hosting

Селф-хостинг

Варианты развёртывания через Docker, защита по умолчанию и командный режим для самостоятельного хостинга AI Bakery Gateway.

AI Bakery Gateway работает в вашей собственной инфраструктуре через Docker. Готового образа контейнера для скачивания пока нет — см. журнал изменений, — поэтому документированный путь собирает образ из репозитория через Docker Compose.

Командный режим

Один шлюз может обслуживать несколько людей или сервисов. У каждого тенанта свой ключ API, бюджеты запросов и токенов (в минуту, день и месяц), свой профиль маршрутизации и политика стоимости, а также своя строка в просмотре использования — команды CLI tenants и usage показывают это по каждому тенанту. Один тенант никогда не может потратить бюджет другого.

Лицензия

AI Bakery Gateway распространяется по лицензии AIProvidersScheduler Free Use License 1.0. Её можно свободно скачивать, запускать и использовать — включая коммерческое использование — в вашей собственной инфраструктуре. Обращение к ней через документированные API из ваших приложений не накладывает дополнительных лицензионных обязательств. Это проприетарное ПО: без доступа к исходному коду, без распространения или повторной публикации образа, без перепродажи самого шлюза, и его нельзя использовать как движок конкурирующего хостингового шлюз-сервиса. Для прав OEM, хостинга как услуги или распространения обращайтесь напрямую к правообладателям.

Что важно сохранить при резервном копировании

Варианты развёртывания

Полный стек

Шлюз вместе с PostgreSQL и Redis через `docker compose up -d`. Redis нужен только для общих лимитов запросов и бюджетов между несколькими экземплярами шлюза.

Lite

Один контейнер со встроенным PostgreSQL и без Redis — самый быстрый способ попробовать, с тем же кодом, миграциями и базой данных, что и в полном стеке, если позже захотите вырасти из него.

Демо-профиль

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

Защита по умолчанию

  • Порт привязан только к 127.0.0.1

    PostgreSQL и Redis вообще не публикуются.

  • Административная плоскость закрыта, пока не открыта

    Панель и административный API отвечают только этой машине, пока не задан `SCHEDULER_ADMIN_TOKEN`; коллеги затем входят на `/_bakery/login`. Неверные попытки входа замедляются.

  • Аутентификация data plane опциональна

    По умолчанию выключена, анонимные вызовы принимаются только с этой машины. `SCHEDULER_AUTH_ENABLED=true` требует от каждого клиента присылать `BAKERY_API_KEY` как Bearer-токен.

  • Ключи провайдеров шифруются при хранении

    AES-256-GCM envelope-шифрование; ключи никогда не возвращаются через API.

  • Безопасная обработка запросов

    До вендора доходят только поля из разрешённого списка, поэтому вызывающая сторона не может подтолкнуть его к платной модели или неожиданному списанию.

  • Учитывает обратный прокси

    Отправляйте `X-Forwarded-For`; проксированные запросы считаются удалёнными, и для них, как и для любого удалённого клиента, нужен административный токен.

05 · #docs

Документация

Маршруты, конфигурация и то, что не освещает этот сайт, для AI Bakery Gateway.

Конфигурация для развёртывания в Docker хранится в файле .env, который генерируют scripts/init-env.sh/.ps1 в репозитории шлюза. На этой странице перечислены настройки и маршруты, к которым обращаются чаще всего. Это не полный справочник по всем опциям.

Маршруты

  • POST /v1/chat/completions возвращает ответ чата в формате OpenAI.
  • POST /v1/responses возвращает ответ в формате OpenAI Responses.
  • POST /v1/messages и POST /v1/messages/count_tokens принимают запрос в формате Anthropic Messages.
  • POST /v1/embeddings возвращает эмбеддинги.
  • GET /v1/models перечисляет опубликованных провайдеров в порядке приоритета, с алиасами и классами из каталога.
  • GET /health/live и GET /health/ready сообщают о живости и готовности; готовность зависит от доступности базы данных и непустого, маршрутизируемого пула провайдеров.
  • GET /v1/providers/status и GET /v1/providers/embeddings/status показывают состояние провайдеров и circuit breaker.
  • GET /metrics отдаёт метрики Prometheus.
  • GET /swagger открывает Swagger UI, и только когда шлюз запущен в окружении Development.

Конфигурация

  • Секреты и порты: генерируются в .env скриптами scripts/init-env.sh/.ps1 — ключ шифрования, пароль базы данных и клиентский ключ (BAKERY_API_KEY). Порт меняется через BAKERY_PORT.
  • Административный доступ: закрыт для всех, кроме этой машины, пока не задан SCHEDULER_ADMIN_TOKEN.
  • Аутентификация data plane: по умолчанию выключена; включается через SCHEDULER_AUTH_ENABLED=true.
  • Аккаунты провайдеров: вводятся в панели управления или через CLI, но никогда — в конфигурационном файле, см. Провайдеры.
  • Тенанты: бюджеты запросов и токенов, профиль маршрутизации и политика стоимости на тенанта, см. Селф-хостинг.
  • Маршрутизация и стоимость: выберите профиль маршрутизации или положитесь на auto; FreeOnly включён по умолчанию, см. Как это работает.
  • Алерты: webhook, Slack или Telegram для событий флота, биллинга и доступности моделей.

Формат запросов

POST /v1/chat/completions принимает запрос в формате OpenAI Chat Completions, POST /v1/responses — в формате OpenAI Responses, а POST /v1/messages — в формате Anthropic Messages, поэтому справочник API соответствующего вендора описывает большинство полей, которые вы отправляете. Перед запросом проверьте по GET /v1/models, какие модели публикует ваша установка.

Чего на этом сайте нет

Этот сайт не публикует полный справочник по конфигурации, справочник API или руководство по развёртыванию за рамками быстрого старта. Документация в самом репозитории шлюза и вывод --help у CLI — источник истины для всего, что не названо выше.

06 · #changelog

Журнал изменений

Что AI Bakery Gateway умеет сегодня. Без номеров версий и дат релизов — почему, см. ниже.

Эта страница перечисляет, что шлюз умеет сегодня. Она не отслеживает релизы: здесь нет номеров версий и дат релизов, потому что ни один релиз самого шлюза пока не имеет подтверждённого публичного тега версии — независимо версионируется только его MCP-сервер.

Что шлюз умеет сегодня

  • Три протокола, один конвейер: POST /v1/chat/completions, POST /v1/responses и POST /v1/messages (плюс /count_tokens) используют одну и ту же маршрутизацию, failover и обработку квот.
  • 14 типов провайдеров: Ollama (облако, локально, локальная сеть), Groq, Cerebras, Gemini, OpenRouter, NVIDIA NIM, Mistral, Cohere, SambaNova, Z.ai, Cloudflare Workers AI и кастомный OpenAI-совместимый провайдер.
  • auto и 8 именованных профилей маршрутизации: free-best, free-fast, free-smart, free-code, free-tools, free-long, free-vision, free-safe.
  • FreeOnly включён по умолчанию, с перепроверками на основе фактических данных и защитой от случайных списаний.
  • Командный режим: ключи, бюджеты, профиль маршрутизации и просмотр использования на тенанта.
  • CLI (bakery): setup, ask, models, usage, probe, why, tenants, accounts.
  • MCP-сервер (bakery-mcp) для изучения работающего шлюза из MCP-совместимого клиента.
  • Алерты в webhook, Slack или Telegram; метрики Prometheus, трассировка OpenTelemetry и дашборд Grafana с правилами алертов.
  • Развёртывание через Docker Compose, с вариантами «полный стек», «lite» и демо без аккаунта провайдера.

Первый запрос описан в разделе быстрый старт.

Хотите узнавать о новых релизах? Напишите нам, чтобы получать уведомления →

07 · #about

О проекте

Что такое AI Bakery Gateway, для кого он создан, и его лицензия.

AI Bakery Gateway — это самостоятельно разворачиваемый LLM-шлюз и умный роутер. Он даёт вашим приложениям, агентам и инструментам для кода один стабильный, OpenAI- и Anthropic-совместимый адрес, затем распределяет запросы между вашими аккаунтами провайдеров, следит за лимитами и автоматически переключается, если вендор медлит, упирается в лимит или недоступен.

Цели проекта

  • Совместимость: один адрес для OpenAI Chat Completions, OpenAI Responses и Anthropic Messages, так что существующие клиентские библиотеки работают, если сменить только base URL.
  • Безопасность бесплатных лимитов: по умолчанию работать в режиме FreeOnly, с проверками на основе фактических данных и защитой от случайных списаний, а не доверять однократному предположению о том, что бесплатно.
  • Контроль: сделать маршрутизацию, стоимость и командные бюджеты явными и настраиваемыми, а не спрятанными за хостинговым сервисом.
  • Управляемость: объяснимая маршрутизация, CLI, панель управления, алерты и Grafana — чтобы эксплуатация оставалась понятной, а не чёрным ящиком.

Лицензия

AI Bakery Gateway распространяется по лицензии AIProvidersScheduler Free Use License 1.0: её можно свободно скачивать, запускать и использовать — включая коммерческое использование — в вашей собственной инфраструктуре. Это проприетарное ПО: без доступа к исходному коду, без распространения и без использования как движка конкурирующего хостингового шлюз-сервиса. Полную сводку см. в разделе Селф-хостинг или в самом файле лицензии как источнике истины.

Исходный код

Публичный URL репозитория исходного кода шлюза не подтверждён, поэтому этот сайт на него не ссылается.

Сотрудничество

Открыты к партнёрствам по интеграции, enterprise-внедрениям, обратной связи и вкладу от сообщества, а также другим формам сотрудничества — напишите нам.