v1.6.2
Страница управления плагинами, HTTP-плагины с CEL-фильтром, образы -dyn для in-process Go-плагинов, уточнённая оценка стоимости запросов для резервирования бюджета и примеры плагинов guardrail и маршрутизации.
Что добавлено
Страница управления плагинами
На странице Settings → Plugins in-process и HTTP-плагины собраны в одну таблицу. Добавлять, изменять, проверять, включать, выключать и удалять плагины может только глобальный администратор.
Подробнее — в разделе Плагины: начало работы.
HTTP-плагины
HTTP-плагин — отдельный процесс на любом языке, который реализует Meridian Plugin API. Он получает те же хуки, что и in-process плагин: транспортные, LLM, MCP и наблюдаемости. Требования бинарной совместимости с Meridian на него не распространяются, поэтому он работает со стандартными образами.
- HookStream. Meridian вызывает хуки по постоянному WebSocket-соединению. Соединения держатся в пуле. Если соединение из пула оказалось закрытым, Meridian один раз переподключается и повторяет вызов.
- Фильтр запросов на CEL. Условие вызова плагина задаётся CEL-выражением по атрибутам запроса: путь, заголовки, тип запроса, провайдер, модель, виртуальный ключ, команда, заказчик, пользователь. Запрос, не прошедший фильтр, не порождает ни одного сетевого вызова. В веб-интерфейсе выражение собирается конструктором правил, как для правил маршрутизации.
- Политика при сбое.
fail_closed(по умолчанию) отклоняет запрос с кодом 503,fail_openпропускает его дальше без плагина. После серии сбоев узел открывает circuit breaker и перестаёт вызывать плагин до успешной пробы. - Кластер. Плагин регистрируется один раз. Каждый узел подключается к нему сам и ведёт собственное состояние здоровья.
- Plugin Logs. В деталях запроса (LLM Logs → запрос) появляется строка под именем плагина для каждого вызова, в котором плагин что-то изменил:
PreLLMHook: request changed,PreLLMHook: short-circuit 400 guardrail_violation: …,PostLLMHook: response changed. Для потокового ответа пишется одна итоговая строка. Вызов, который ничего не изменил, строки не оставляет.
Спецификация протокола опубликована в формате OpenAPI 3.1: Meridian Plugin API. Подробнее — на странице Разработка HTTP-плагина.
Примеры плагинов guardrail и маршрутизации
В публичный репозиторий github.com/neria-cloud/meridian добавлены примеры на Go:
- http-guardrail-go — не пропускает телефонные номера к модели. В режиме
blockзапрос с номером отклоняется с кодом 400. В режимеmaskномера заменяются токенами, а в ответе, в том числе потоковом, плагин подставляет настоящие номера обратно. - http-router-go — в
PreRequestHookменяет провайдера и модель по содержимому сообщений пользователя. - dev-cluster — Docker Compose с тремя узлами Meridian за Traefik и PostgreSQL для экспериментов с кластером.
Разбор примеров — на страницах Как создать плагин guardrail и Как создать плагин маршрутизации.
Оценка стоимости запроса для резервирования бюджета
Режим резервирования worst_case точнее оценивает верхнюю границу стоимости запроса:
- учитываются пользовательские цены (pricing overrides), в том числе для моделей, которых нет в каталоге;
- учитываются уровни обслуживания провайдера:
priority,flex,fast, региональный множитель US; резервируется максимум из возможных; - к токенам добавляются надбавки: веб-поиск и цена за изображение в запросе;
- мультимодальные части запроса (изображения, аудио, файлы) переводятся в токены и входят в оценку;
- для распознавания речи длительность читается из заголовка аудиофайла без декодирования (WAV, FLAC, MP4/M4A/MOV, OGG, WebM, MP3);
- для генерации видео без явной длительности используется длительность по умолчанию для провайдера.
Параметры оценки задаются в новой секции governance.reservation.estimation. Все ключи необязательны; значения ниже — значения по умолчанию, кроме примера providers.openai.max_seconds.
{
"governance": {
"reservation": {
"default_mandatory": "worst_case",
"unknown_model_bounds": { "input_tokens": 4096, "output_tokens": 4096 },
"extend_in_flight": false,
"estimation": {
"sentinels": { "no_entry": 0.01, "non_text": 0.25 },
"transcription": { "default_seconds": 600, "providers": { "openai": { "max_seconds": 1500 } } },
"video": { "default_seconds": 8, "providers": { "openai": 4, "gemini": 8, "vertex": 8 } },
"multimodal": { "image_tokens": 1600, "audio_tokens_per_second": 32, "audio_default_seconds": 60,
"file_tokens_per_page": 1000, "file_default_pages": 10 }
}
}
}
}| Параметр | Назначение |
|---|---|
unknown_model_bounds | Границы входных и выходных токенов для модели с пользовательской ценой, у которой нет записи в каталоге |
extend_in_flight | Продление резерва для длинных потоковых ответов: после половины reservation_ttl резерв продлевается, а не списывается по MaxCost |
estimation.sentinels | Сумма резерва, когда цену запроса определить нельзя: no_entry — модели нет в каталоге, non_text — медиа-запрос без оценки |
estimation.transcription | Длительность аудио, если её не удалось прочитать из файла, и потолок длительности для провайдера |
estimation.video | Длительность видео, если она не указана в запросе |
estimation.multimodal | Перевод изображений, аудио и файлов в токены |
Резерв рассчитывает узел, принявший запрос, по своей конфигурации. Лидер шарда применяет готовую сумму и не пересчитывает её, поэтому при поэтапном перезапуске с изменёнными настройками узлы корректно работают друг с другом.
Подробнее — на странице Политики резервирования бюджета.
Профиль пользователя без аутентификации
Страница профиля открывается и при выключенной аутентификации. В интерфейс добавлен выход из учётной записи.
Обновление с 1.6.1
Обязательных шагов нет. Конфигурация 1.6.1 работает без изменений.
- Суммы резерва по умолчанию не изменились: flat $0.05 на запрос,
no_entry$0.01,non_text$0.25. - Если используется
default_mandatory: "worst_case"илиworst_caseвmodel_overrides, резерв для запросов с изображениями, аудио, файлами, веб-поиском или приоритетным уровнем обслуживания может вырасти: теперь эти составляющие входят в оценку. extend_in_flightпо умолчанию выключен. Без него потоковый ответ длиннееcluster_config.raft.reservation_ttl(1 час) списывается поMaxCost.- Базовые модули Meridian теперь загружаются из публичного репозитория
github.com/neria-cloud/meridian-base. На развёртывание это не влияет.
Установка
Основной реестр — GitHub (ghcr.io).
docker pull ghcr.io/neria-cloud/meridian:1.6.2
# или
docker pull cr.yandex/crpkr81t74cospldeta1/meridian:1.6.2docker pull ghcr.io/neria-cloud/meridian-ent:1.6.2
# или
docker pull cr.yandex/crpkr81t74cospldeta1/meridian-ent:1.6.2