Дмитрий Ильин arcaneflow Сбер ID
Рейтинг
73
№ 43 133 в каталоге
Отзывы
0
Профессионализм
-/10
Коммуникация
- /10
Город
Нижний Новгород
Опыт работы
11 лет
На сайте с
2026 года
Юридический статус
Самозанятый

Python-библиотека llm-rotator: отказоустойчивая ротация LLM-провайдеров (circuit breaker, квоты, model-first routing)

Используемые навыки AI Development API LangChain Python

Описание

Задача — собрать инфраструктурный слой между приложением и LLM-провайдерами, чтобы AI-фичи не падали и не переплачивали. Любой продукт с LLM внутри (бот, ассистент, контент-конвейер) упирается в одно и то же: провайдер отвечает 429 (лимит) или 5xx (лёг) — и фича встаёт; на бесплатных тирах это происходит постоянно; легко жечь бюджет, гоняя простые задачи на дорогих flagship-моделях; привязка к одному API — это вендор-лок.

Мне это мешало сразу в нескольких своих проектах, где LLM — часть продукта, а не эксперимент. Нужен был не разовый костыль в каждом проекте, а протестированная переиспользуемая библиотека: чтобы запрос всё равно доходил до ответа (перебирая ключи, модели, провайдеров), не превышал квоты и не тратил flagship-бюджет на ерунду.

Решение

llm-rotator — Python-библиотека, async-first (asyncio + httpx, без SDK провайдеров — REST напрямую), конфигурация на Pydantic v2, MIT.

Model-First Chain of Responsibility: провайдеры перебираются по приоритету, внутри — группы моделей по tier, и для каждой модели пробуются все ключи пула прежде чем даунгрейдить на модель послабее.

Circuit Breaker с классификатором ошибок: 429 → ключ+модель блокируются по TTL из Retry-After (для других моделей ключ жив); 401/402 → ключ мёртв глобально; 5xx → один быстрый retry, затем переключение. Заблокированная комбинация пропускается без HTTP-запроса.

Превентивные квоты: счётчики токенов и запросов с гранулярностью модель/группа/ключ и сбросом daily_utc или скользящим окном; исчерпанный кандидат пропускается без обращения к API.

Потолок качества: клиент передаёт RoutingContext(tier=N) — ротация идёт от указанного уровня вниз, никогда вверх. Простые задачи (tier=3) используют только экономные модели, даже если flagship-ключи свободны.

Низкая связность: библиотека не знает про деньги и тарифы — только инфраструктура (ключи, лимиты, провайдеры). Влиять на маршрутизацию можно через RoutingContext и async-хуки (before_request / after_response / on_fallback), куда клиент вешает свой бюджет-контроль.

Единый интерфейс: tool calling и structured output в одном формате с трансляцией в нативный вид каждого провайдера (Strategy); LangChain drop-in RotatorChatModel; streaming с восстановлением; embeddings через ту же ротацию; структурированный лог всей цепочки в одну строку. Два бэкенда состояния (InMemory + Redis) за одним контрактом, с контрактными тестами.

Результат

Библиотека собрана по TDD: 2578 строк кода на 6459 строк тестов (≈2.5:1), 24 тест-файла — юнит, интеграционные, контрактные (InMemory + Redis), e2e к реальным API. 3 семейства провайдеров (OpenAI-совместимые вкл. OpenRouter/Groq, Gemini, Anthropic), 2 бэкенда состояния. 3 релиза за 3 дня (0.1→0.3), semver, Keep-a-Changelog, CI на GitHub Actions, MIT.

Проверена в бою: держит AI-фичи в матчинге резюме (текст + vision-OCR + эмбеддинги, tier-маршрутизация), в контент-системе мерчанта и в Дзен-боте. Это инфраслой под уже работающими проектами, а не библиотека «в вакууме».

Оценили проект:

Другие проекты

Все проекты →
Веб-разработка и IT Конвейер карточек для Wildberries: из PSD-шаблона и таблицы моделей — пачка готовых каруселей без Photoshop
Конвейер карточек для Wildberries: из PSD-шаблона и таблицы моделей — пачка готовых каруселей без Photoshop
7
Искусственный интеллект Контент-фабрика для Дзена: ежедневная статья от новости до черновика
Контент-фабрика для Дзена: ежедневная статья от новости до черновика
47
Веб-разработка и IT Оптимизация интернет-магазина на CS-Cart: страница каталога грузилась 16 секунд, стала 1 секунда
Оптимизация интернет-магазина на CS-Cart: страница каталога грузилась 16 секунд, стала 1 секунда
46
Веб-разработка и IT Кастомный модуль рекомендаций для CS-Cart: блок «С этим товаром покупают» с массовой загрузкой связей из CSV
Кастомный модуль рекомендаций для CS-Cart: блок «С этим товаром покупают» с массовой загрузкой связей из CSV
16