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

Модуль X — управление моделями и провайдерами

Модуль X управляет всем стеком AI-моделей и провайдеров — Claude, OpenAI, Gemini и локальным инференсом, а не только одним вендором. Это модуль слоя Core, который находится поверх коннекторов моделей/провайдеров: он не реализует заново ни одну интеграцию провайдера, ни шлюз инференса. Чем он владеет — это слой governance: версионированный каталог, кросс-вендорная матрица возможностей и именованная политика маршрутизации.

Модуль превращает голые сущности Provider/Model, которые обнаруживает inventory (модуль I), в управляемый каталог. Две половины:

  • Декларированный справочный каталог — версионированная в репозитории, переопределяемая оператором таблица семейств моделей с их декларированными возможностями API-функций и значениями списочных цен по умолчанию (list-price defaults). Цены помечаются датой, на которую они были декларированы (pricing_as_of), явно являются значениями по умолчанию для сверки со страницей цен каждого провайдера и никогда не являются сфабрикованной телеметрией. Семейство без совпадающей записи остаётся без цены вместо того, чтобы получить выдуманную цену.
  • Обогащение живого estate — модуль слушает поток cost.sampled и обогащает обнаруженные сущности Model/Provider семейством, контекстным окном, модальностью, ценой за токен и набором возможностей (поля цен inventory делегирует ему).

Словарь возможностей — это одна кросс-вендорная матрица: полный стек Claude (prompt caching, batch, Files, citations, extended thinking, computer use, инструмент памяти, управление контекстом, vision/PDF, structured outputs) плюс аналоги, которые каждый другой вендор реально предоставляет — так что UI рисует одну матрицу, и политика маршрутизации может требовать возможность поверх вендоров. Семейства Claude каталогизированы по семейству (claude-opus, claude-sonnet, claude-haiku, claude-fable, claude-mythos), при этом устаревшие/legacy-версии удерживаются под более длинными префиксами, так что текущие id разрешаются в текущий ценовой уровень.

Маршрутизация — это поверхность исполнения, и она только маршрутизирует:

  • Политика маршрутизации хранится на ядровой сущности Policy (Kind="routing"): именованные политики выбора / fallback / закрепления версии (cheapest-first, lowest-latency, capability-ordered или закреплённая модель). POST …/routing-policies/{id}/resolve разрешает политику против управляемого estate и возвращает цепочку primary + fallback с причиной выбора. Это read-only: он вычисляет выбор, который затем выполняет коннектор/шлюз — модуль не выполняет инференс.
  • Governance API-ключей / workspace — это только метаданные с минимальными данными: какой агент или команда использует какие учётные данные, передаётся как маскированная подсказка, никогда не значение секрета.
  • Read-only инвентарь rate-limit Anthropic (потолки, которые шлюз или прокси должны держать в синхронизации) предоставляется как консультируемый инвентарь; это никогда не контроль, который модуль мутирует, и он деградирует к честному ответу unavailable-with-reason, когда read-only Admin-коннектор не предоставлен.

Чтение каталога и функций не является чувствительным и шлюзуется на уровне viewer; мутации маршрутизации и governance ключей — это аудируемое изменение уровня editor; путь управляемого исполнения (governed-execution) — это действие уровня admin, отличное от resolve уровня чтения. Маршруты опубликованы в отдельном beta справочнике маршрутов модулей, а не в стабильном контракте ядра; их формы на уровне полей живут в типизированных интерфейсах продукта.

Модуль потребляет cost.sampled из шины событий, чтобы обогатить каталог реальной ценой за токен и использованием; он не вводит новый тип наблюдения. На пути управляемого исполнения успешный вызов произвёл бы CostSample с удалёнными чувствительными данными в FinOps — вывод модели уходит вызывающей стороне, но нигде здесь не сохраняется. Деньги никогда не появляются на этой поверхности: не возвращается ни одна сумма в USD, только счётчики токенов и цель, которая обслужила.