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

Cost & Spend Tracking (Русский)

OmniRoute рассчитывает стоимость каждого запроса в долларах США, умножая количество токенов на тарифы модели. Эти значения используются на панели Затраты, в командах CLI omniroute cost / omniroute usage, при экспорте в CSV/JSON и для бюджетов отдельных API-ключей.

«Стоимость» на панели мониторинга — это счётчик экономии, а не счёт. OmniRoute никогда не взимает с вас плату — он направляет ваши запросы провайдерам, которых вы уже подключили (ваши собственные подписки, бесплатные тарифы и API-ключи). Если «общая стоимость $290» полностью набрана на бесплатных моделях, это означает, что вы не заплатили примерно $290 платному API. Эта сумма — оценка того, сколько стоил бы тот же трафик по стандартным публичным тарифам, позволяющая увидеть, где сосредоточено использование и сколько вы экономите благодаря маршрутизации к более дешёвым или бесплатным провайдерам.

Такое объяснение приведено непосредственно в файле README проекта («„стоимость“ на панели мониторинга — это счётчик экономии, а не счёт»).

Поскольку это оценочное значение:

  • Оно зависит от таблицы цен OmniRoute для каждой модели. Модель без записи о цене добавляет 0 к стоимости (в обозревателе она отображается как строка «Устаревшая / Бесплатная»).
  • Трафик бесплатных тарифов и подписок всё равно учитывается в расчётной стоимости — это сумма, которую вы экономите, а не задолженность.

Стоимость берётся из таблицы цен, определяемой в следующем порядке приоритета (src/lib/pricingSync.ts):

  1. Пользовательские переопределения — цены, заданные вами на панели мониторинга или через PATCH /api/pricing.
  2. Синхронизированные внешние цены — загружаются из общедоступного файла LiteLLM model_prices_and_context_window.json, когда синхронизация включена (хранятся в отдельном пространстве имён pricing_synced, поэтому никогда не перезаписывают ваши переопределения).
  3. Жёстко заданные значения по умолчанию — поставляются вместе с OmniRoute.

Синхронизация с внешними ценами выполняется только по явному согласию и по умолчанию отключена. Соответствующие переменные окружения (см. .env.example):

Переменная окружения По умолчанию Назначение
PRICING_SYNC_ENABLED false Включить фоновую синхронизацию цен LiteLLM при запуске.
PRICING_SYNC_INTERVAL 86400 Интервал синхронизации в секундах (по умолчанию — ежедневно).
PRICING_SYNC_SOURCES litellm Разделённый запятыми список источников (сейчас поддерживается только litellm).

Стоимость каждого запроса рассчитывается на основе количества токенов и тарифов за миллион токенов в src/lib/usage/costCalculator.ts (computeCostFromPricing / calculateCost):

  • Входные токены (за вычетом чтений из кэша и токенов создания кэша) × тариф input.
  • Токены чтения из кэша × тариф cached (если он отсутствует, используется тариф входных токенов).
  • Токены создания кэша × тариф cache_creation (если он отсутствует, используется тариф входных токенов).
  • Выходные токены × тариф output.
  • Токены рассуждений × тариф reasoning (если он отсутствует, используется тариф выходных токенов).

Все тарифы интерпретируются как доллары США за 1 000 000 токенов. Уровень обслуживания Codex «fast»/«priority» или «flex» применяет множитель стоимости (getCodexFastCostMultiplier) — например, при использовании flex предоставляется скидка 50% на токены, отображаемая на панели мониторинга как экономия flex.

Сначала имена моделей нормализуются (префиксы путей провайдера, такие как openai/ или accounts/fireworks/models/, удаляются), поэтому исторические записи по-прежнему сопоставляются с ценой.

  • Стоимость каждого запроса рассчитывается после получения ответа и записывается асинхронно без ожидания результата, чтобы не увеличивать задержку для клиента. Расход общей квоты планируется на следующую итерацию цикла событий через src/lib/quota/spendRecorder.ts.

  • Расходы API-ключей буферизуются и записываются пакетами с помощью SpendBatchWriter (по умолчанию интервал записи — 60 секунд, размер буфера — 1 000 записей). Настраивается с помощью:

    Переменная окружения По умолчанию Назначение
    OMNIROUTE_SPEND_FLUSH_INTERVAL_MS 60000 Интервал записи в миллисекундах.
    OMNIROUTE_SPEND_MAX_BUFFER_SIZE 1000 Максимальное число записей в буфере перед записью.

Значения стоимости на панели мониторинга не считываются из сохранённой для каждой строки суммы в долларах — они пересчитываются на лету из количества токенов и текущей таблицы цен при каждом запуске конечной точки аналитики. Это означает, что исправление неверной цены (и повторная синхронизация) задним числом обновляет оценки стоимости за прошлые периоды.


Страница Расходы находится по адресу /dashboard/costs (src/app/(dashboard)/dashboard/costs/). Её основное представление — вкладка Обзор расходов (src/app/(dashboard)/dashboard/costs/CostOverviewTab.tsx), которая загружает все данные через GET /api/usage/analytics.

Что на ней отображается:

  • Карточки расходов — оценочные расходы за сегодня (1d), 7d, 30d и выбранный период. Выбор диапазона: 7d, 30d, 90d, all.
  • Основные показатели — количество запросов за период, активные провайдеры, активные модели, средняя стоимость запроса.
  • Анализ расходов — сортируемая и фильтруемая таблица с группировкой по провайдеру, модели, API-ключу, учётной записи или уровню обслуживания, содержащая стоимость, количество запросов, токенов, среднюю стоимость запроса и долю от общей суммы в процентах.
  • Использование токенов — общее количество, входные и выходные токены, а также соотношение входных и выходных токенов.
  • Эффективность маршрутизации — количество резервных переключений, частота резервных переключений и охват запрошенных моделей.
  • Месячный прогноз — прогноз расходов к концу месяца на основе недавнего среднесуточного значения.
  • Сравнение периодов — изменение в процентах между первой и второй половинами периода.
  • Графики — динамика расходов по дням, доля провайдеров (круговая диаграмма), ведущие провайдеры, ведущие модели, расходы по API-ключам, расходы по учётным записям, недельная структура использования и тепловая карта активности.
  • Экспорт — загрузка данных за текущий период в формате CSV или JSON (кнопки появляются, когда имеются данные с ненулевой стоимостью).

При отсутствии тарифицируемого трафика вместо $0 в строках отображается метка «Устаревшее / Бесплатное», что соответствует модели отслеживания экономии.

Раздел «Расходы» также содержит следующие страницы (все находятся в /dashboard/costs/):

  • Ценообразование (/dashboard/costs/pricing) — просмотр и переопределение цен для отдельных моделей (отображает общую вкладку «Ценообразование»).
  • Бюджет (/dashboard/costs/budget) — настройка лимитов расходов для отдельных областей (отображает общую вкладку «Бюджет»).
  • Совместное использование квоты (/dashboard/costs/quota-share) — пулы общих квот и представления скорости их расходования.

Все они требуют аутентификации управления (loopback/JWT через requireManagementAuth), если не указано иное.

Метод Конечная точка Назначение
GET /api/usage/analytics Полная аналитика расходов и использования: сводка, динамика по дням, данные по провайдеру/модели/API-ключу/учётной записи/уровню. Параметры запроса: range, startDate, endDate, apiKeyIds, presets.
GET /api/usage/utilization Использование квоты по каждому провайдеру с течением времени. Параметры запроса: range (1h/24h/7d/30d), provider.
GET /api/usage/history Необработанные строки истории использования.
GET /api/usage/call-logs Журналы отдельных запросов (модель, токены, стоимость, задержка, статус).
GET /api/usage/quota Состояние квоты провайдера.
GET /api/usage/proxy-logs Журналы запросов прокси-сервера.
Метод Конечная точка Назначение
GET /api/usage/budget Сводка расходов и проверка бюджета для одного API-ключа (обязательный параметр запроса apiKeyId).
POST /api/usage/budget Настройка дневных/недельных/месячных лимитов в USD и порога предупреждения для API-ключа.
GET /api/usage/budget/bulk Сводки бюджетов по нескольким API-ключам.

API бюджета ограничен областью отдельного API-ключа (apiKeyId). Лимиты, возвращаемые GET /api/usage/budget, включают dailyLimitUsd, weeklyLimitUsd, monthlyLimitUsd, warningThreshold и текущие итоговые значения (totalCostToday, totalCostMonth, …).

Метод Конечная точка Назначение
GET /api/pricing Текущие объединённые цены (пользовательские + синхронизированные + значения по умолчанию). ?includeSources=1 позволяет увидеть источник каждой записи.
PATCH /api/pricing Переопределение цен для { provider: { model: { input, output, cached, … } } }.
DELETE /api/pricing Сброс цен до значений по умолчанию (область можно ограничить с помощью ?provider=&model=).
GET /api/pricing/defaults Просмотр резервных тарифов по умолчанию за 1 млн единиц.
GET /api/pricing/models Цены, сгруппированные по моделям.
POST /api/pricing/sync Запуск ручной синхронизации с внешними источниками (LiteLLM).
GET /api/pricing/sync Текущее состояние синхронизации.
DELETE /api/pricing/sync Удаление всех синхронизированных данных о ценах.

Другие конечные точки, связанные с расходами

Заголовок раздела «Другие конечные точки, связанные с расходами»
Метод Конечная точка Назначение
GET /api/free-tier/summary Общее количество токенов бесплатной модели, использовано в этом месяце и оставшийся бесплатный лимит.
GET /api/quota/pools/[id]/usage Использование пула с общей квотой.

CLI OmniRoute предоставляет команды для работы с расходами, использованием и ценами (зарегистрированы в bin/cli/commands/registry.mjs).

Отчёт о расходах, агрегированный на основе /api/usage/analytics.

Окно терминала
omniroute cost # последние 30 дней, группировка по провайдеру
omniroute cost --period 7d # последние 7 дней
omniroute cost --group-by model # группировка: provider | model | combo | api-key | day
omniroute cost --since 2026-06-01 --until 2026-06-13
omniroute cost --api-key <key> --limit 50

Столбцы: группа, запросы, входящие/исходящие токены, стоимость (USD) и доля от общей суммы в процентах. В конце выводится строка с общей суммой (не выводится при использовании --quiet или --output json).

Окно терминала
omniroute usage analytics --period 30d [--provider <id>] # сводка расходов по каждому провайдеру
omniroute usage logs [--limit 100] [--follow] [--api-key <k>] [--search <q>]
omniroute usage quota [--provider <id>] [--check]
omniroute usage utilization [--api-key <k>]
omniroute usage history [--limit 100]
omniroute usage proxy-logs [--limit 100]
# Бюджеты
omniroute usage budget list
omniroute usage budget get [scope]
omniroute usage budget set <amount> [--scope global] [--period monthly]
omniroute usage budget reset [scope]
Окно терминала
omniroute pricing list [--provider <p>] [--model &lt;m&gt;] [--limit 200]
omniroute pricing get &lt;model&gt;
omniroute pricing sync [--provider <p>] [--force] # POST /api/pricing/sync
omniroute pricing diff [--model &lt;m&gt;]
omniroute pricing defaults show
omniroute pricing defaults set [--input <p>] [--output <p>] [--cache-read <p>] [--cache-write <p>]

pricing defaults show считывает данные из GET /api/pricing/defaults. Чтобы изменить цены отдельных моделей, используйте страницу Pricing на панели управления или PATCH /api/pricing.


  • Все расходы отображаются как $0 / «Legacy / Free». Для используемых моделей отсутствуют записи о ценах. Включите внешнюю синхронизацию (PRICING_SYNC_ENABLED=true) и выполните omniroute pricing sync либо задайте цены вручную на странице Pricing или через PATCH /api/pricing.
  • Цена ранее использованной модели указана неверно. Исправьте цену (переопределите её или выполните повторную синхронизацию) — расходы пересчитываются на основе количества токенов при каждом чтении аналитики, поэтому оценки обновляются ретроспективно.
  • Данные о расходах отстают от реального времени. Расходы по ключам обрабатываются пакетно; уменьшите OMNIROUTE_SPEND_FLUSH_INTERVAL_MS, если вам нужны более актуальные данные.

Чтобы узнать, как это вписывается в общую панель управления, см. Руководство пользователя и Галерею возможностей.


Исходный код OmniRoute (a58000c7685f)

HagiCode

HagiCode — агентная среда разработки со структурированными процессами, параллельным выполнением несколькими агентами и интерфейсами Hero Dungeon.

Превращайте идеи в полезное ПО с более умным, быстрым и увлекательным агентным рабочим процессом.

Главный экран HagiCode в светлой теме
  • SmartСтруктурированные процессы превращают намерение в исполнимый путь от идеи до готового изменения.
  • EfficientМультиагентные процессы параллельно продвигают исследование, реализацию и проверку.
  • FunHero Dungeon делает длительную совместную разработку наглядной и увлекательной.
Перейти на HagiCode