Повторные попытки и резервные варианты
Автоматический failover между LLM-провайдерами и моделями. Когда основной провайдер недоступен, Meridian прозрачно переключается на резервных без перебоев в работе приложения.
Автоматический failover
Резервный вариант обеспечивает автоматическое аварийное перключение (failover), когда основной LLM-провайдер недоступен. Будь то rate limit, падение или недоступность модели — Meridian последовательно перебирает резервных провайдеров в указанном вами порядке, пока кто-то из них не ответит.
Когда срабатывает fallback, Meridian рассматривает попытку как полностью новый запрос: все настроенные плагины (кэш, governance, логирование и т. д.) выполняются повторно для нового провайдера. Это обеспечивает единообразное поведение по всем провайдерам.
Как работает резервный вариант
При настроенных резервный вариант Meridian действует так:
- Первичная попытка. Запрос отправляется основному provider/model.
- Автоопределение сбоя. При сетевой ошибке, rate limit или недоступности модели Meridian фиксирует сбой.
- Последовательные fallback'и. Резервные провайдеры пробуются по очереди, пока один из них не ответит успешно.
- Ответ при успехе. Возвращается ответ первого успешного провайдера.
- Полный отказ. Если все провайдеры упали, возвращается исходная ошибка от основного.
Каждая fallback-попытка — это новый запрос, поэтому все настроенные плагины (семантический кэш, governance, мониторинг) применяются к тому провайдеру, который в итоге обработал запрос.
Пример запроса
Резервные провайдеры передаются массивом fallbacks прямо в теле запроса. Каждый элемент имеет вид provider/model и пробуется по порядку, пока один из них не ответит успешно.
# Chat completion с несколькими резервными вариантами
curl -X POST http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o-mini",
"messages": [
{
"role": "user",
"content": "Explain quantum computing in simple terms"
}
],
"fallbacks": [
"anthropic/claude-3-5-sonnet-20241022",
"bedrock/anthropic.claude-3-sonnet-20240229-v1:0"
],
"max_tokens": 1000,
"temperature": 0.7
}'Ответ (от того провайдера, который сработал):
{
"id": "chatcmpl-123",
"object": "chat.completion",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Quantum computing is like having a super-powered calculator..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 12,
"completion_tokens": 150,
"total_tokens": 162
},
"extra_fields": {
"provider": "anthropic",
"latency": 1.2
}
}Сценарии из реальной жизни
Сценарий 1: rate limit.
- Основной: OpenAI упёрся в rate limit → fallback: Anthropic отвечает.
- Приложение продолжает работать без перебоев.
Сценарий 2: модель недоступна.
- Основной: конкретная модель временно недоступна → fallback: другой провайдер с эквивалентной моделью.
- Бесшовный переход на сопоставимую модель.
Сценарий 3: падение провайдера.
- Основной: провайдер испытывает downtime → fallback: альтернативный провайдер.
- Непрерывность бизнес-процесса.
Сценарий 4: оптимизация стоимости.
- Основной: премиум-модель для качества → fallback: экономичная альтернатива при превышении бюджета.
- Governance-правила могут запускать fallback'и по факту использования.
Подробности поведения
Что запускает fallback:
- сетевые ошибки;
- ошибки API провайдера (500, 502, 503, 504);
- rate limit (429);
- недоступность модели;
- таймауты запроса;
- ошибки аутентификации.
Что сохраняет исходную ошибку (fallback не запускается):
- ошибки валидации запроса (неправильный формат);
- блокировка плагином (нарушение governance);
- определённые provider-specific ошибки, помеченные как non-retryable.
Выполнение плагинов. Когда срабатывает fallback, новый запрос проходит весь pipeline заново:
- проверяется семантический кэш (у другого провайдера может быть кэш);
- governance-правила применяются к новому провайдеру;
- логирование фиксирует факт fallback;
- все настроенные плагины выполняются для fallback-провайдера с нуля.
Контроль fallback'ов из плагинов. Плагины могут влиять на то, запускать ли fallback. Например:
- кастомный плагин может запретить fallback для определённых типов ошибок;
- security-плагин может отключать fallback из соображений compliance.
Когда плагин решает, что fallback недопустим, механизм пропускается, и наверх возвращается исходная ошибка.
Это даёт единообразное поведение независимо от того, какой провайдер в итоге обработал запрос, при этом плагины полностью контролируют решение о fallback. Какой именно провайдер ответил — всегда видно в extra_fields.
Балансировка ключей
Управление API-ключами с взвешенной балансировкой, фильтрацией по моделям и автоматическим failover. Распределяйте трафик между несколькими ключами для оптимальной производительности и надёжности.
Асинхронный inference
Отправка inference-запросов асинхронно с последующим получением результата по job_id.