OpenAI показывает сумму расхода, но не разрез по фичам и диалогам: как автор собрал свой дашборд

Интерфейс провайдера LLM даёт дневной total spend и токены по моделям — этого мало, чтобы понять, какая часть приложения «ест» бюджет. На DEV автор описывает самописную связку: обёртку над клиентом OpenAI, таблицу в Supabase и админский UI с агрегатами по вызовам. https://dev.to/alimafana/openai-tells-you-what-you-spent-not-where-so-i-built-a-dashboard-b6
Речь идёт о продукте Provia — AI sales chatbot для арабоязычного e-commerce; в нём несколько типов вызовов к API OpenAI и мультитенантность, из‑за чего детализация затрат по фиче и разговору особенно заметна.
Интерфейс usage OpenAI: что видно и где пробелы
По тексту публикации на странице usage видны total spend per day, разбивка по модели (в примере перечислены в том числе gpt-4o и gpt-4o-mini) и token totals. Там же перечислено, чего, по мнению автора, не хватает: привязка к фиче приложения, тенанту или пользователю, конкретному разговору, учёт неуспешных вызовов, корреляция латентности с стоимостью.
В качестве иллюстрации «сырой» суммы без контекста приводится пример $4.27 «за вчера» — как показатель того, что одного агрегата недостаточно для инженерных решений.
Это изложение автора в статье, а не независимая проверка интерфейса провайдера отдельным скриншотом.
Три опорных артефакта: обёртка, схема логов, дашборд
Связка из трёх частей выглядит так.
- Обёртка — файл
openai-logger.ts: TypeScript, клиентOpenAIиз пакетаopenai, логирование черезcreateAdminClientиз@/lib/supabase/admin; стоимость считается по таблицеPRICINGв коде; строки пишутся в Supabase (from("api_logs").insert(...)) без ожидания (fire-and-forget), у промиса пустые.then/.catch. - Таблица —
api_logs: приведён SQLCREATE TABLEс полями вродеstore_id,conversation_id,endpoint,model, токены,cost DECIMAL(10,8),duration_ms, метаданные вызова,status,error, индексы поstore_id,created_at,endpoint. - Дашборд — API-маршрут вида
/api/admin/logs/route.tsс агрегатами, фильтрами, карточками метрик, графиками и развёрнутыми строками логов.
Указано порядка 400 строк кода и один afternoon на сборку первой версии.
PRICING → расчёт cost на вызов → insert в api_logs (fire-and-forget)
Первый production day: стократный разрыв и доля по endpoint
По таблицам и разделу «What It Found» в том же материале сопоставляются анализ изображений (endpoint Image analysis, модель gpt-4o, в таблице 1 вызов) и чат (Chat, gpt-4o-mini, 42 вызова): анализ изображения с gpt-4o обходится примерно в 100 раз дороже за вызов, чем чат с gpt-4o-mini; при этом доля вызовов по изображениям мала, а доля бюджета — заметная — в таблице «Cost split by feature» для описанного «одного production day» указано порядка ~1% вызовов и ~10% доли стоимости.
Сводка за тот же день: 42 сообщения клиентов, ~85 вызовов API, ~31 000 токенов, ~$0.005 суммарно, ~$0.00013 средняя стоимость на сообщение. В разбивке по endpoint фигурируют Chat, Embeddings, Profile extraction, Image analysis — с моделью, числом вызовов и долями стоимости в процентах.
Тарифы, точность и граница «биллинг — не observability»
В комментарии к коду указано «Last checked: 2026-04-15» и ссылка на https://openai.com/pricing; таблица ставок для gpt-4o и gpt-4o-mini в долларах за 1M input/output токенов приведена в соответствующем блоке. Отдельного pricing API у OpenAI для автоматического обновления нет; предлагается хардкод с ручным обновлением.
Аргумент за тип cost DECIMAL(10,8) — малые величины на вызов; в примере указана порядка $0.00013 за один чат на gpt-4o-mini. В том же тексте проводится граница: дашборд OpenAI — инструмент для биллинга, а не полноценная observability для инженерии.
Оценка задержек в материале: вставка лога — 15–40 ms, completion — 800–2500 ms; при выбранном подходе к логированию фигурируют 2–3 потерянные записи из thousands.
Источники
- Alimafana. OpenAI Tells You What You Spent. Not Where. So I Built a Dashboard. DEV — URL: Dev.to — дата публикации на платформе: 2026-04-30T12:14:54Z; дата доступа к странице при подготовке материала: 2026-04-30 (UTC).