AIRUS AdaptiveRoutingOps · Policy-Constrained Outcome Routing
AIRUS уже умеет замечать, что модель тихо портится. Следующий вопрос — как выбрать модель ДО запроса, учитывая качество, цену, задержку, безопасность, доступность, клиентскую политику и маржу. Самый дешёвый маршрут уничтожает доверие; самая сильная модель на каждый запрос уничтожает маржу.
Router не выбирает по одной формуле
request → hard policy gates (гео / provider / capability / capacity / degraded — fail-closed) → candidate routes (только допустимые; пусто → CANNOT_ROUTE) → client-utility (acceptance − cost − latency − reliability − uncertainty; БЕЗ маржи) → margin firewall (alert на negative contribution — НЕ двигает ранг) → safe exploration (C3/C4/ASSURED/legal → 0) → hysteresis + kill switch → sealed routing receipt (commercial_influence: none) маржа защищает экономику AIRUS, но не может продвинуть маршрут в ранге — иначе это не интеллект, а автоматизированный конфликт интересов
Детерминированные движки
Routing Contract (версионируемый)
Каждый workflow заранее задаёт границы: quality_floor, max_cost, max_latency, deadline, allowed_regions, allowed_providers, required_capabilities, minimum_contribution_margin, exploration_share, fallback, pinned_route. Router выбирает лучший маршрут ТОЛЬКО внутри контракта. Append-only версии; rollback = указать старую версию.
Hard Policy Gates (fail-closed)
Сначала УДАЛЯЕМ запрещённые кандидаты, потом оптимизируем: неверная география, provider вне allowlist, отсутствующая capability, degraded/retired lifecycle, capacity ≠ healthy. capacity — client-supplied → строго healthy (нет сигнала/unknown → выбывает, не «допустить по умолчанию»). Пусто допустимых → CANNOT_ROUTE (не дешёвый по умолчанию).
Routing Modes
FIXED (закреплён договором/клиентом), BALANCED (quality-cost-latency), QUALITY_FIRST (максимум качества при SLA), COST_CONTROLLED (минимум цены при жёстком quality floor), ASSURED (только сертифицированные маршруты, без exploration — сертификация declared в P0, server-verified eval = roadmap), BATCH (общий бюджет/capacity). Reuse RouteEconomics decideRoute + classifyComplexity.
Client Utility — БЕЗ маржи
Утилити оптимизирует результат ДЛЯ КЛИЕНТА: acceptance − cost − latency − reliability − uncertainty. Маржи AIRUS в ранжировании НЕТ — иначе выгодный AIRUS маршрут поднимался бы над лучшим для клиента (commercial influence). commercial_influence:none структурно доказуемо.
Margin Firewall (не двигает ранг)
Маржа — firewall, не член utility: считает contribution по выбранному клиентом маршруту, поднимает alert на отрицательную/ниже-floor контрибуцию, но НЕ переупорядочивает кандидатов. quality_floor приоритетнее margin: firewall не заставит выбрать маршрут ниже quality_floor. ₽ = Decimal (reuse marginops).
Safe Exploration Budget
Contextual bandit должен пробовать альтернативы, но НЕ на критичном: C3/C4-риск, ASSURED-режим, legal workflow, high-value операция, FIXED → exploration=0 (fail-closed). Иначе exploration_share с потолком. Нет бюджета / сомнение → 0 (не «исследуй по умолчанию»).
Hysteresis
Router не должен метаться: переключение маршрута только если преимущество превышает threshold И выдержано минимальное окно закрепления. Иначе hold. Защищает от осцилляции, cache miss, роста инцидентов при мелких колебаниях latency/score.
Router Kill Switch
State machine с явным рангом: ACTIVE / EXPLORATION_OFF (стоп обучение) / PINNED (закрепить маршрут) / FROZEN (заморозить) / ROLLED_BACK (откат версии policy). Exploration разрешён только в ACTIVE; adaptive-переключение — в ACTIVE/EXPLORATION_OFF.
Customer Override + delta
Клиент может закрепить любимую модель (бренд, прошлый опыт, регламент). AIRUS поддерживает pinning, но показывает quality/cost delta относительно рекомендованного маршрута — прозрачность выбора, а не молчаливое подчинение.
Routing Decision Receipt (sealed)
selected route, hard/soft rejected + reasons, predicted_acceptance (declared, authoritative:false), expected cost/latency, alternative delta, routing regret, exploration flag, kill-switch state, margin alert, commercial_influence:none → canonicalize+sha256, seal-once по (tenant, request_id), verify-from-sealed. DB-immutability триггер (mig 0079).
Честность провенанса
predicted_acceptance / quality / reliability = declared/computed → authoritative:false (из scorecard/body — НЕ verified; live_measured только из routing_outcomes В ОКНЕ) capacity_status = client-supplied → fail-closed (живой per-model TPM-сигнал = roadmap) маржа = firewall, НЕ член utility → commercial_influence: none (проверяемо) roadmap (plan_only, не фейкать): применение решения к живому hot-path gateway contextual-bandit online-обучение по verified outcomes acceptance predictor (ML), shadow exploration, batch-governor live capacity/TPM-сигнал, regret из реальных outcomes