Пользовательские цены

Собственные тарифы для любой модели глобально или на уровне виртуального ключа с уточнением до провайдера и ключа провайдера.

Обзор

Meridian рассчитывает стоимость запросов по каталогу цен, который автоматически синхронизируется с датасетом цен. Пользовательские цены переопределяют цены каталога во время работы, без перезапуска: вы задаёте собственные тарифы для любой модели в нужной области действия.

Ключевые возможности:

  • Области действия — цена применяется глобально или только для провайдера, ключа провайдера или виртуального ключа.
  • Сопоставление по шаблону — точное имя модели или префикс, например gpt-4*.
  • Фильтр по типу запроса — переопределение действует только для выбранных операций: chat, embedding, генерация изображений и других.
  • Иерархическое разрешение — применяется наиболее специфичное переопределение, более широкие области служат резервным вариантом.

Источник данных о ценах

Переопределения применяются поверх каталога цен. По умолчанию Meridian загружает датасет цен Meridian и синхронизирует его каждые 24 часа. Если вы ведёте собственный датасет, укажите его адрес.

  1. В боковом меню откройте Models → Model Settings.
  2. Заполните поля:
    • Pricing Datasheet URL — адрес датасета цен. Пустое значение — датасет по умолчанию.
    • Model Parameters URL — адрес датасета параметров моделей. Пустое значение — датасет по умолчанию.
    • Pricing Sync Interval (hours) — интервал синхронизации в часах, от 1 до 8760.
  3. Нажмите Save Changes.

Кнопка Force Sync Now запускает синхронизацию немедленно.

{
  "framework": {
    "pricing": {
      "pricing_url": "https://your-host/pricing.json",
      "model_parameters_url": "https://your-host/model-parameters.json",
      "pricing_sync_interval": 86400
    }
  }
}
ПолеТипОбязательноеПо умолчаниюОписание
pricing_urlstringНетдатасет MeridianАдрес датасета цен. Поддерживаются http://, https://, file:// и префикс env..
model_parameters_urlstringНетдатасет MeridianАдрес датасета параметров моделей. Поддерживаются http://, https:// и file://.
pricing_sync_intervalintegerНет86400Интервал синхронизации в секундах. Значение меньше 3600 поднимается до 3600 с предупреждением в логе.

Датасет можно загружать из локальной файловой системы:

"pricing_url": "file:///opt/meridian/pricing.json"

Области действия

Каждое переопределение относится к одной области — scope_kind. Для запроса Meridian находит все подходящие переопределения и применяет то, у которого область наиболее специфична.

virtual_key_provider_key  (наиболее специфичная)
virtual_key_provider
virtual_key
provider_key
provider
global                    (наименее специфичная)
ОбластьОбязательные идентификаторыКогда применяется
global—Ко всем запросам.
providerprovider_idКо всем запросам к провайдеру. В provider_id указывается имя провайдера, например openai.
provider_keyprovider_key_idК запросам через конкретный ключ провайдера.
virtual_keyvirtual_key_idКо всем запросам с виртуальным ключом.
virtual_key_providervirtual_key_id, provider_idК запросам с виртуальным ключом к конкретному провайдеру.
virtual_key_provider_keyvirtual_key_id, provider_id, provider_key_idК запросам с виртуальным ключом через конкретный ключ провайдера.

Указывайте только идентификаторы своей области. Лишний идентификатор — ошибка: например, provider scope_kind only supports provider_id.


Сопоставление по шаблону

Поле pattern задаёт имя модели, match_type — способ сопоставления.

match_typeПоведениеПример
exactТочное совпадение имени. Символ * недопустим.gpt-4o — только gpt-4o
wildcardСовпадение по префиксу. Шаблон содержит ровно один символ * — в конце.gpt-4* — gpt-4o, gpt-4-turbo, gpt-4o-mini

В одной области точное совпадение проверяется раньше шаблона. Из нескольких подходящих шаблонов выбирается шаблон с самым длинным префиксом.


Порядок поиска цены

Цена из каталога ищется по первому найденному имени модели в таком порядке:

  1. Модель серверного резервного варианта, если запрос обслужен им.
  2. Каноническое имя алиаса ключа — routing_info.resolved_key_alias.model_name.
  3. Идентификатор модели алиаса — routing_info.resolved_key_alias.model_id.
  4. Модель из запроса — routing_info.model.

Такой порядок решает задачу непрозрачных идентификаторов. Если алиас ключа сопоставляет deployment Azure 12345-azure-prod с именем claude-sonnet-4-5, цена находится в каталоге по имени модели, хотя идентификатора deployment в каталоге нет.

Переопределения сопоставляются с именем модели, отправленным провайдеру: моделью резервного варианта, model_id алиаса или моделью из запроса — по первому найденному. Поэтому переопределение можно задать для конкретного deployment. Если модели нет в каталоге, переопределение применяется к пустой базовой цене.


Типы запросов

Поле request_types обязательно и содержит хотя бы одно значение. Указывайте базовый тип: chat_completion покрывает и потоковые, и непотоковые запросы. Потоковые варианты (chat_completion_stream и другие) отклоняются.

ТипОперация
chat_completionChat-запросы
text_completionText completions
responsesResponses API
realtimeRealtime API. Тарифицируется как responses.
compactionСжатие контекста. Тарифицируется как responses.
embeddingГенерация embedding
rerankРеранжирование
speechСинтез речи
transcriptionРаспознавание речи
image_generationГенерация изображений
image_variationВариации изображений. Тарифицируются как image_generation.
image_editРедактирование изображений
video_generationГенерация видео
video_remixРемикс видео. Тарифицируется как video_generation.
ocrРаспознавание документов
container_createСоздание контейнеров

Типы realtime, compaction и container_create задаются только через API и config.json.


Создание переопределения

  1. В боковом меню откройте Models → Pricing Overrides. В таблице — название, область, провайдер, ключ и шаблон модели каждого переопределения. Список можно искать по названию и фильтровать по виртуальному ключу.
Таблица переопределений цен
  1. Нажмите New Override.
  2. Заполните форму Create Pricing Override:
    • Name — название переопределения.
    • Scope root — Global или Virtual key. Для Virtual key выберите виртуальный ключ.
    • Provider — провайдер или All providers. После выбора провайдера появляется поле Provider key.
    • Match type — Exact или Wildcard.
    • Pattern — имя модели или префикс со * в конце.
    • Request types — один или несколько типов запросов.
    • Pricing fields — поля цен в долларах США за единицу. Найдите поле поиском или в группе и введите значение. Поля без значения не переопределяются.
  3. Нажмите Save Override.
Форма создания переопределения цены

Изменить или удалить переопределение можно в меню строки таблицы — Edit и Delete.

Создание:

curl -X POST http://localhost:8080/api/governance/pricing-overrides \
  -H "Content-Type: application/json" \
  -d '{
    "name": "GPT-4o negotiated rate",
    "scope_kind": "global",
    "match_type": "exact",
    "pattern": "gpt-4o",
    "request_types": ["chat_completion"],
    "patch": {
      "input_cost_per_token": 0.0000025,
      "output_cost_per_token": 0.00001
    }
  }'

Поле patch — JSON-объект с переопределяемыми полями цен. Ответ 201:

{
  "message": "Pricing override created successfully",
  "pricing_override": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "GPT-4o negotiated rate",
    "scope_kind": "global",
    "match_type": "exact",
    "pattern": "gpt-4o",
    "request_types": ["chat_completion"],
    "pricing_patch": "{\"input_cost_per_token\":0.0000025,\"output_cost_per_token\":0.00001}",
    "created_at": "2026-09-14T10:00:00Z",
    "updated_at": "2026-09-14T10:00:00Z"
  }
}

Изменение:

curl -X PUT http://localhost:8080/api/governance/pricing-overrides/{id} \
  -H "Content-Type: application/json" \
  -d '{
    "patch": {
      "input_cost_per_token": 0.000002,
      "output_cost_per_token": 0.000008
    }
  }'

Неуказанные поля сохраняют прежние значения. Переданный patch заменяет сохранённый целиком. При смене scope_kind идентификаторы области сбрасываются: сохраняются только переданные в том же запросе.

Удаление:

curl -X DELETE http://localhost:8080/api/governance/pricing-overrides/{id}

Список:

# Все переопределения
curl http://localhost:8080/api/governance/pricing-overrides

# Фильтр по области и поиск по названию с пагинацией
curl "http://localhost:8080/api/governance/pricing-overrides?scope_kind=virtual_key&virtual_key_id=vk-abc123&search=gpt&limit=25&offset=0"
ПараметрОписание
scope_kind, virtual_key_id, provider_id, provider_key_idФильтры по области.
searchПоиск по названию без учёта регистра.
limit, offsetПагинация. По умолчанию limit — 25, максимум — 100.

Пагинация включается, если передан limit, offset или search. Ответ содержит pricing_overrides, count, total_count, limit и offset.

Переопределения задаются в governance.pricing_overrides. В отличие от API, поля цен передаются в pricing_patch строкой с JSON.

{
  "governance": {
    "pricing_overrides": [
      {
        "id": "550e8400-e29b-41d4-a716-446655440000",
        "name": "Global GPT-4o rate",
        "scope_kind": "global",
        "match_type": "exact",
        "pattern": "gpt-4o",
        "request_types": ["chat_completion"],
        "pricing_patch": "{\"input_cost_per_token\":0.0000025,\"output_cost_per_token\":0.00001}"
      },
      {
        "id": "660e8400-e29b-41d4-a716-446655440001",
        "name": "All Claude models for prod VK",
        "scope_kind": "virtual_key",
        "virtual_key_id": "vk-abc123",
        "match_type": "wildcard",
        "pattern": "claude*",
        "request_types": ["chat_completion"],
        "pricing_patch": "{\"input_cost_per_token\":0.000003,\"output_cost_per_token\":0.000015}"
      }
    ]
  }
}
ПолеТипОбязательноеОписание
idstringДаУникальный идентификатор. Рекомендуется UUID.
namestringДаНазвание переопределения.
scope_kindstringДаОбласть действия: global, provider, provider_key, virtual_key, virtual_key_provider, virtual_key_provider_key.
virtual_key_idstringДля областей virtual_key*Идентификатор виртуального ключа.
provider_idstringДля областей provider, virtual_key_provider, virtual_key_provider_keyИмя провайдера.
provider_key_idstringДля областей provider_key, virtual_key_provider_keyИдентификатор ключа провайдера.
provider_key_namestringНетИмя ключа провайдера вместо provider_key_id. Преобразуется в идентификатор при загрузке. Нельзя указывать вместе с provider_key_id.
match_typestringДаexact или wildcard.
patternstringДаИмя модели или префикс со * в конце.
request_typesarrayДаТипы запросов, хотя бы одно значение.
pricing_patchstringНетJSON-строка с переопределяемыми полями цен.

Для записей из config.json правила областей, шаблонов и типов запросов при загрузке не проверяются. Некорректная запись не вызовет ошибку, а просто не будет применяться. Проверяйте значения по таблицам на этой странице.

Применяется каждое переданное поле цены, в том числе со значением 0: так можно сделать операцию бесплатной. Неизвестные поля через API и config.json отбрасываются без ошибки. Форма в веб-интерфейсе неизвестные поля отклоняет.


Справочник полей цен

Все значения — стоимость за единицу в долларах США.

Токены

ПолеОписание
input_cost_per_tokenВходной токен
output_cost_per_tokenВыходной токен
input_cost_per_token_batchesВходной токен, batch-запросы
output_cost_per_token_batchesВыходной токен, batch-запросы
input_cost_per_token_priorityВходной токен, приоритетные запросы
output_cost_per_token_priorityВыходной токен, приоритетные запросы
input_cost_per_token_flexВходной токен, flex-запросы
output_cost_per_token_flexВыходной токен, flex-запросы
input_cost_per_token_fastВходной токен, fast-режим
output_cost_per_token_fastВыходной токен, fast-режим
input_cost_per_characterВходной символ (модели с тарификацией по символам)

Тарифы по размеру контекста

ПолеОписание
input_cost_per_token_above_128k_tokensВходной токен, контекст больше 128 тыс. токенов
output_cost_per_token_above_128k_tokensВыходной токен, контекст больше 128 тыс. токенов
input_cost_per_image_above_128k_tokensВходное изображение, контекст больше 128 тыс. токенов
input_cost_per_video_per_second_above_128k_tokensСекунда входного видео, контекст больше 128 тыс. токенов
input_cost_per_audio_per_second_above_128k_tokensСекунда входного аудио, контекст больше 128 тыс. токенов
input_cost_per_token_above_200k_tokensВходной токен, контекст больше 200 тыс. токенов
input_cost_per_token_above_200k_tokens_priorityТо же, приоритетные запросы
output_cost_per_token_above_200k_tokensВыходной токен, контекст больше 200 тыс. токенов
output_cost_per_token_above_200k_tokens_priorityТо же, приоритетные запросы
input_cost_per_token_above_272k_tokensВходной токен, контекст больше 272 тыс. токенов
input_cost_per_token_above_272k_tokens_priorityТо же, приоритетные запросы
input_cost_per_token_flex_above_272k_tokensТо же, flex-запросы
output_cost_per_token_above_272k_tokensВыходной токен, контекст больше 272 тыс. токенов
output_cost_per_token_above_272k_tokens_priorityТо же, приоритетные запросы
output_cost_per_token_flex_above_272k_tokensТо же, flex-запросы

Кэширование

ПолеОписание
cache_creation_input_token_costЗапись токена в кэш промпта
cache_read_input_token_costЧтение токена из кэша
cache_creation_input_token_cost_priorityЗапись в кэш, приоритетные запросы
cache_read_input_token_cost_priorityЧтение из кэша, приоритетные запросы
cache_creation_input_token_cost_flexЗапись в кэш, flex-запросы
cache_read_input_token_cost_flexЧтение из кэша, flex-запросы
cache_creation_input_token_cost_fastЗапись в кэш, fast-режим
cache_read_input_token_cost_fastЧтение из кэша, fast-режим
cache_creation_input_token_cost_above_1hrЗапись в кэш со сроком хранения больше часа
cache_creation_input_token_cost_above_1hr_fastТо же, fast-режим
cache_creation_input_token_cost_above_1hr_above_200k_tokensТо же, контекст больше 200 тыс. токенов
cache_creation_input_token_cost_above_200k_tokensЗапись в кэш, контекст больше 200 тыс. токенов
cache_read_input_token_cost_above_200k_tokensЧтение из кэша, контекст больше 200 тыс. токенов
cache_read_input_token_cost_above_200k_tokens_priorityТо же, приоритетные запросы
cache_creation_input_token_cost_above_272k_tokensЗапись в кэш, контекст больше 272 тыс. токенов
cache_creation_input_token_cost_flex_above_272k_tokensТо же, flex-запросы
cache_read_input_token_cost_above_272k_tokensЧтение из кэша, контекст больше 272 тыс. токенов
cache_read_input_token_cost_above_272k_tokens_priorityТо же, приоритетные запросы
cache_read_input_token_cost_flex_above_272k_tokensТо же, flex-запросы
cache_read_input_image_token_costЧтение image-токена из кэша
cache_creation_input_audio_token_costЗапись audio-токена в кэш

Изображения

ПолеОписание
input_cost_per_imageВходное изображение
output_cost_per_imageСгенерированное изображение
input_cost_per_pixelВходной пиксель
output_cost_per_pixelВыходной пиксель
input_cost_per_image_tokenВходной image-токен
output_cost_per_image_tokenВыходной image-токен
output_cost_per_image_premium_imageИзображение premium-модели
output_cost_per_image_low_qualityИзображение низкого качества
output_cost_per_image_medium_qualityИзображение среднего качества
output_cost_per_image_high_qualityИзображение высокого качества
output_cost_per_image_auto_qualityИзображение с автоматическим выбором качества
output_cost_per_image_above_512_and_512_pixelsИзображение больше 512×512
output_cost_per_image_above_512_and_512_pixels_and_premium_imagePremium-изображение больше 512×512
output_cost_per_image_above_1024_and_1024_pixelsИзображение больше 1024×1024
output_cost_per_image_above_1024_and_1024_pixels_and_premium_imagePremium-изображение больше 1024×1024
output_cost_per_image_above_2048_and_2048_pixelsИзображение больше 2048×2048
output_cost_per_image_above_4096_and_4096_pixelsИзображение больше 4096×4096

Аудио и видео

ПолеОписание
input_cost_per_audio_tokenВходной audio-токен
output_cost_per_audio_tokenВыходной audio-токен
input_cost_per_audio_per_secondСекунда входного аудио
input_cost_per_video_per_secondСекунда входного видео
output_cost_per_video_per_secondСекунда выходного видео
input_cost_per_secondСекунда входных данных
output_cost_per_secondСекунда выходных данных

Прочее

ПолеОписание
search_context_cost_per_queryЗапрос с контекстом веб-поиска
code_interpreter_cost_per_sessionСессия code interpreter
ocr_cost_per_pageСтраница распознавания документа
annotation_cost_per_pageСтраница аннотирования документа
inference_geo_us_multiplierМножитель стоимости для обработки запроса в США

Примеры

Единый тариф для всех моделей Anthropic

{
  "id": "anthropic-flat-rate",
  "name": "Anthropic flat rate",
  "scope_kind": "provider",
  "provider_id": "anthropic",
  "match_type": "wildcard",
  "pattern": "claude*",
  "request_types": ["chat_completion", "text_completion", "responses"],
  "pricing_patch": "{\"input_cost_per_token\":0.000003,\"output_cost_per_token\":0.000015}"
}

Согласованный тариф для виртуального ключа

{
  "id": "vk-prod-gpt4o-rate",
  "name": "Prod VK — GPT-4o negotiated rate",
  "scope_kind": "virtual_key",
  "virtual_key_id": "vk-abc123",
  "match_type": "exact",
  "pattern": "gpt-4o",
  "request_types": ["chat_completion"],
  "pricing_patch": "{\"input_cost_per_token\":0.000002,\"output_cost_per_token\":0.000008}"
}

Цена генерации изображений

{
  "id": "dall-e-3-rate",
  "name": "DALL-E 3 custom rate",
  "scope_kind": "global",
  "match_type": "exact",
  "pattern": "dall-e-3",
  "request_types": ["image_generation"],
  "pricing_patch": "{\"output_cost_per_image_high_quality\":0.04,\"output_cost_per_image_medium_quality\":0.02}"
}

Цена для модели, которой нет в каталоге

{
  "id": "my-new-model-rate",
  "name": "my-new-model pricing",
  "scope_kind": "global",
  "match_type": "exact",
  "pattern": "my-new-model-v1",
  "request_types": ["chat_completion"],
  "pricing_patch": "{\"input_cost_per_token\":0.000001,\"output_cost_per_token\":0.000005}"
}

Применение изменений

Созданное или изменённое переопределение сразу действует на узле, который обработал запрос. В кластере изменение передаётся на остальные узлы, а каждые 300 секунд узлы дополнительно выполняют полную сверку переопределений.


Дальше

Содержание