Перейти до вмісту
21/30Розділ 21 з 30

Мультимодальне ціноутворення: за що насправді рахують зображення, аудіо та відео

Три моделі для тих самих 500 фото дають різницю в 5,5 раза, а найдешевша змінюється після зміни розміру.

На цій сторінці

Ось одне завдання, оцінене трьома способами: описати п’ятсот фотографій товарів, по одному короткому підпису для кожної. Ті самі фотографії, та сама інструкція, та сама довжина відповіді. Змінюється лише модель, яка їх читає.

фотографіяgpt-5.6-lunagemini-3.1-flash-liteclaude-haiku-4.5
800 × 600$0.0848$0.1638$0.4380
1024 × 768$0.1200$0.1638$0.6370
1280 × 960$0.1718$0.1638$0.9010
1600 × 1200$0.2558$0.1638$0.9010
4000 × 3000$0.3220$0.1638$0.9010

У цій таблиці варто зупинитися на трьох речах.

Найдешевша модель змінюється між третім і четвертим рядком для того самого завдання, бо хтось змінив розмір фотографій. Попросіть абзац замість підпису — і точка перетину знову зсунеться: при 1280 × 960 перемагає Gemini для підпису на сорок tokens і OpenAI для абзацу на чотириста tokens.

Стовпець Gemini не рухається взагалі в жодному рядку: фотографія 4000 × 3000 коштує для нього рівно стільки ж, скільки 640 × 480. Фотографія 4000 × 3000 коштує рівно стільки ж, скільки фотографія 640 × 480. Це не ліміт. Це наслідок того, як вона рахує, і це означає, що найпоширеніша оптимізація витрат у цьому бізнесі — зменшити зображення перед завантаженням — працює так:

image tokens, 4000 × 3000 → 800 × 600вартість запускуекономія
gpt-5.6-luna2,942 → 570$0.3220 → $0.084873.7 %
claude-haiku-4.51,564 → 638$0.9010 → $0.438051.4 %
gemini-3.1-flash-lite1,032 → 1,032$0.1638 → $0.16380.0 %

Жодне з цих чисел не є ціною, яку публікує постачальник. Усі три довелося обчислити з трьох різних правил, бо фотографія ніде не є оплачуваною одиницею: спершу її перетворюють на tokens за арифметикою, записаною у трьох несумісних місцях.

Розділ 16 склав рахунок для тексту й зупинився там, де текст закінчується. Цей розділ — решта інвойсу: зображення, мовлення, транскрипція, відео й сирий compute, які разом тарифікуються у восьми різних одиницях, і метод порівняння речей, що продаються не в одній мірі.

Показати подробиці

Що цьому розділу потрібно з попередніх.

  • Розділ 7 побудував tokenizer і одиницю. Усе тут — спроба перетворити щось нетекстове на цю одиницю.
  • Розділ 8 встановив, що споживає модель: не символи, а вектори в embedding-просторі. Саме тому зображення взагалі можна оцінювати в tokens.
  • Розділ 16 побудував computeCost, його цінові рівні й п’ять token-кошиків. Цей розділ розширює цю функцію, а не замінює її.
  • Розділ 11 ввів LoRA як техніку fine-tuning, а Розділ 20 оцінив її як бюджетне рішення. Тут вона з’являється на моделі, яка не є мовною.

Без тензорів, за правилом із Розділу 14: це тарифи, конверсії й облік, тож це TypeScript.

transformer приймає послідовність векторів. Йому байдуже, звідки вони взялися. У Розділі 8 ми подавали йому embeddings, знайдені за token id; в архітектурі немає вимоги, щоб це був саме lookup.

Отже: розріжте картинку на фіксовані квадрати, розгорніть кожен квадрат у список чисел і пропустіть кожен список через один навчений лінійний шар, щоб отримати вектор ширини моделі. Патч кольорових пікселів 32 × 32 — це 32×32×3=307232 \times 32 \times 3 = 3072 чисел; проєкція ERd×3072E \in \mathbb{R}^{d \times 3072} перетворює його на один dd-вимірний вектор, точно такої форми, у якій приходить текстовий token. Ось і все, і це саме та стаття, назва якої каже: зображення варте 16 × 16 слів.1 Додайте positional encoding, щоб модель знала, який квадрат де був, перемішайте результати з текстовими embeddings — і послідовність, яку читає модель, стає частково картинкою, частково реченням.

Три статті зробили це продуктом. CLIP навчила image encoder і text encoder узгоджуватися на чотирьохстах мільйонах зібраних пар, і саме там ідея, що пікселі та слова можуть мати спільний простір, перестала бути гіпотезою.2 Flamingo прикрутив заморожений vision encoder до замороженої мовної моделі кількома навченими містками.3 LLaVA показала, що містком може бути одна лінійна проєкція, а instruction-following можна навчити на згенерованих даних, тому всі відкриті vision-language моделі відтоді виглядають приблизно однаково.4

Наслідок для вашого інвойсу негайний і непривабливий: патчі — це позиції в послідовності, отже вони є input tokens, отже ви платите за них за вхідною ставкою. Скільки саме — арифметика, і кожен постачальник робить її по-своєму.

Три правила, усі опубліковані, жодне не однакове

Посилання на розділ: Три правила, усі опубліковані, жодне не однакове

Кожне правило нижче реалізоване з власної документації постачальника й перевірене на прикладах із тієї самої документації.

OpenAI покриває зображення патчами 32 × 32 і множить кількість на коефіцієнт конкретної моделі. Якщо кількість патчів перевищує бюджет для цієї моделі й рівня деталізації, зображення зменшують, доки воно не вміститься:

patches=w32×h32,shrink=322budgetwh\text{patches} = \left\lceil \frac{w}{32} \right\rceil \times \left\lceil \frac{h}{32} \right\rceil, \qquad \text{shrink} = \sqrt{\frac{32^2 \cdot \text{budget}}{w \cdot h}}

Anthropic покриває його патчами 28 × 28, по одному visual token кожен, і обмежує як довгий бік, так і кількість tokens — 1,568 пікселів і 1,568 tokens на моделях standard-tier, 2,576 і 4,784 на high-resolution tier. Надто великі зображення масштабуються до найбільшого розміру, який відповідає обом обмеженням.5

Google узагалі не рахує пікселі. Зображення, у якого обидві сторони не перевищують 384 пікселі, коштує фіксовані 258 tokens. Усе більше ріжеться на tiles по 258 tokens кожен, а сітка tiles походить із crop unit min(w,h)/1.5\lfloor \min(w,h) / 1.5 \rfloor.6

imagetokens.tsTS
export function openaiImageTokens(
  w: number, h: number,
  { maxDim, patchBudget, multiplier }: { maxDim: number; patchBudget: number; multiplier: number },
) {
  const fit = Math.min(1, maxDim / Math.max(w, h));      // never enlarges
  w = Math.floor(w * fit); h = Math.floor(h * fit);
  let patches = Math.ceil(w / 32) * Math.ceil(h / 32);   
  if (patches > patchBudget) {
    const s = Math.sqrt((32 * 32 * patchBudget) / (w * h));
    const adj = s * Math.min(
      Math.floor((w * s) / 32) / ((w * s) / 32),
      Math.floor((h * s) / 32) / ((h * s) / 32));
    patches = Math.ceil(Math.floor(w * adj) / 32) * Math.ceil(Math.floor(h * adj) / 32);
  }
  return Math.ceil(patches * multiplier);                
}

export function anthropicVisualTokens(
  w: number, h: number,
  { maxLongEdge, maxTokens }: { maxLongEdge: number; maxTokens: number },
) {
  const tok = (a: number, b: number) => Math.ceil(a / 28) * Math.ceil(b / 28);
  const long = Math.max(w, h), short = Math.min(w, h);
  for (let L = Math.min(long, maxLongEdge); L >= 1; L--) {     
    const t = tok(L, Math.round((short * L) / long));
    if (t <= maxTokens) return t;                              
  }
  return 0;
}

export function geminiImageTokens(w: number, h: number) {
  if (w <= 384 && h <= 384) return 258;
  const crop = Math.floor(Math.min(w, h) / 1.5);               
  return Math.ceil(w / crop) * Math.ceil(h / crop) * 258;      
}

Запустіть кожне правило на числах, які друкує його власний постачальник:

three implementations against three documentationsTEXT
OpenAI, gpt-5.4 at detail:high (2048 px, 2,500 patches, 1.2x)
  1024x1024 -> 1024 patches -> 1229 tokens   doc says 1229   MATCH
  2048x2048 -> 2500 patches -> 3000 tokens   doc says 3000   MATCH

Anthropic, the published table (one tier per row shown)
  200x200    std   64 @ 200x200     doc   64, not resized    OK
  1000x1000  std 1296 @ 1000x1000   doc 1296, not resized    OK
  1092x1092  std 1521 @ 1092x1092   doc 1521, not resized    OK
  1920x1080  std 1560 @ 1456x819    doc 1560, 1456x819       OK
  2000x1500  std 1564 @ 1269x952    doc 1564, 1269x952       OK
  3840x2160  hi  4784 @ 2576x1449   doc 4784, 2576x1449      OK

Google, the worked example
  960x540 -> crop 360 -> 3 x 2 = 6 tiles     doc says 6      MATCH

Друкується дев’ять збігів; повний запуск перевіряє п’ятнадцять, бо таблиця Anthropic дає обидва рівні для всіх шести розмірів. Тепер ці правила ваші, і ви можете запускати їх на будь-якій фотографії. У цьому й сенс: це єдині три функції в цьому розділі, яких ви не отримаєте зі сторінки цін.

Пропустіть ту саму фотографію 4:3 через усі три правила у шести розмірах:

розмірOpenAI, highAnthropic, standardAnthropic, high-resGemini
384 × 288130154154258
640 × 4803604144141,032
800 × 6005706386381,032
1600 × 12002,2801,5642,4941,032
3200 × 24002,9421,5644,7401,032
4000 × 30002,9421,5644,7401,032

Прочитайте останній стовпець зверху вниз. Щойно картинка більша за 384 пікселі, число більше ніколи не змінюється, і це не збіг і не cap. Підставте crop unit назад у формулу tile для зображення, яке принаймні таке широке, як високе:

tiles=wh/1.5×hh/1.51.5wh×2\text{tiles} = \left\lceil \frac{w}{\lfloor h/1.5 \rfloor} \right\rceil \times \left\lceil \frac{h}{\lfloor h/1.5 \rfloor} \right\rceil \approx \left\lceil \frac{1.5\,w}{h} \right\rceil \times 2

Розмір скорочується. Google image tokens залежать від aspect ratio і більше ні від чого. Фотографія 4:3 — це чотири tiles, чи вона мініатюра, чи постер. Один цей алгебраїчний факт повністю пояснює нуль у таблиці економії вище, і жодна сторінка цін ніде цього не формулює.

Два інші стовпці натомість обмежуються, на різних висотах і з різних причин — Anthropic на оголошеній стелі tokens, OpenAI на patch budget після pixel limit — тому три криві перетинаються на різних розмірах.

Тепер зламайте це. Очевидний спосіб витратити менше на vision model — попросити менше деталей, тож надішліть detail: "low":

gpt-5.4, the same photograph, two detail levelsTEXT
1600x1200   low = 2280   high = 2280   ratio 1.00
3200x2400   low = 3687   high = 2942   ratio 1.25

Попросити менше деталей коштувало на 25 % більше. Це не баг, і OpenAI каже про це одним рядком у таблиці розмірів: у цій сім’ї моделей low використовує 2048-піксельний ліміт із 6,144-patch budget, тоді як high використовує той самий pixel limit із 2,500-patch budget, «so it can use more tokens than high».7 Слово low означає налаштування fidelity, а не ціну: у двох із п’яти задокументованих сімейств моделей воно взагалі не дає економії, а в одному з цих двох коштує дорожче.

Усе досі стосувалося моделі, яка читає зображення. Створення зображення працює на механізмі, у якому взагалі немає tokens, і саме тому воно продається за картинку, а не за слово.

Створення зображення: ціна за картинку є ціною за token

Посилання на розділ: Створення зображення: ціна за картинку є ціною за token

Постачальники публікують генерацію зображень як ціну за картинку. Це не так. GPT Image models випускають спеціалізовані image tokens, кількість яких залежить від потрібного розміру та якості; помножте опубліковані кількості на опубліковану ставку GPT Image 1 для image output — $40 за мільйон — і порівняйте з per-image цінами на тій самій сторінці:

якість1024 × 10241024 × 15361536 × 1024
low272 tok → $0.0109 ($0.011)408 tok → $0.0163 ($0.016)400 tok → $0.0160 ($0.016)
medium1,056 tok → $0.0422 ($0.042)1,584 tok → $0.0634 ($0.063)1,568 tok → $0.0627 ($0.063)
high4,160 tok → $0.1664 ($0.167)6,240 tok → $0.2496 ($0.25)6,208 tok → $0.2483 ($0.25)

Дев’ять виведених чисел проти дев’яти опублікованих, кожна пара збігається в межах $0.002.11 Google ще явніший і сам робить конверсію на сторінці цін: image output по $60 за мільйон tokens, «output images at 1K (1024x1024px) consume 1120 tokens and are equivalent to $0.067 per image».12

Тож per-image price — це per-token price із уже вкладеною кількістю. Це нормально, але дещо приховує. Візьміть таблицю поточного покоління й поділіть у зворотному напрямку:

gpt-image-2, published price -> implied output tokens at $30/MTEXT
quality   1024x1024            1024x1536
low       $0.006 -> 200 tok    $0.005 -> 167 tok
medium    $0.053 -> 1767 tok   $0.041 -> 1367 tok
high      $0.211 -> 7033 tok   $0.165 -> 5500 tok

Більше зображення є дешевшим за кожного рівня якості. Полотно 1024 × 1536 має на 50 % більше пікселів, ніж 1024 × 1024, і коштує на 23 % менше tokens на medium. OpenAI позначає це реченням, яке ви пропустили б: «a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting» — а в попередньому поколінні моделей усе було навпаки, портрет коштував на 50 % більше, ніж квадрат.11 Кожний default 1024x1024, написаний до цієї зміни, тепер є дорогим варіантом.

Попросіть три продукти озвучити ті самі 519 символів — близько 38 секунд аудіо — і отримаєте три системи одиниць від двох постачальників:

модельодиницяціна
tts-1за символ$15.00 за мільйон символів → $0.007785
tts-1-hdза символ$30.00 за мільйон символів → $0.015570
gemini-3.1-flash-ttsза audio token, 25 за секунду$20.00 за мільйон → $0.019319

Той самий постачальник продає обидві одиниці: tts-1 від OpenAI оцінюється за мільйон символів, тоді як gpt-4o-mini-tts — за мільйон tokens, $0.60 in і $12.00 out.13 Тож «найдешевший text-to-speech» — це не питання з відповіддю, доки ви не скажете, що саме озвучуєте.

І ці дві одиниці сліпі до протилежних речей. Ціна за символ не бачить тривалість: оберіть повільний, виразний голос або додайте паузи — рахунок не зміниться, хоча аудіо стане довшим. Ціна за секунду не бачить зміст: тридцять секунд коштують однаково, чи це щільний технічний абзац, чи хтось рахує до десяти. Змініть голос — і рівно один із двох постачальників перераховує ціну.

Транскрипція працює навпаки й є найпростішим рядком у всьому інвойсі — за хвилину аудіо, фіксовано:

transcribing 59.6 secondsTEXT
whisper                  $0.005960     ($0.006 / min)
gpt-transcribe           $0.004470     ($0.0045 / min)
gpt-4o-mini-transcribe   $0.002980     ($0.003 / min)
gpt-live-transcribe      $0.016887     ($0.017 / min)

Зверніть увагу на останній рядок проти третього: робити це наживо, коли слова надходять, коштує в 5.7 раза більше, ніж робити це на готовому файлі. Ця різниця — ціна неможливості batch, і саме вона робить наступний розділ дорогим.

Тепер число, яке вирішує, чи голос — це функція, чи продукт.

Дзвінок: десятираундова розмова підтримки, 149 слів, що за оголошених 150 слів на хвилину становить 59.6 секунди мовлення — 21.2 сказано абонентом, 38.4 сказано у відповідь. Конверсії tokens — власні конверсії постачальників. OpenAI: «audio tokens in user messages are 1 token per 100 ms of audio, while audio tokens in assistant messages are 1 token per 50 ms».14 Google: 25 tokens за секунду в обох напрямках, що підтверджує її сторінка цін, публікуючи $12.00 за мільйон і $0.018 за хвилину в одному рядку.12

Розмова накопичується саме так, як казав Розділ 16, бо механізм той самий: «the entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive».14 Тільки тепер історія вимірюється в audio tokens.

turnuserassistantfresh audio incached audio inaudio outcost
14.4 s9.2 s440184$0.013224
25.6 s9.6 s56228192$0.014211
35.2 s9.2 s52476184$0.013670
44.0 s4.8 s4071296$0.007749
52.0 s5.6 s20848112$0.008187

Тепер порівняння, яке вирішує продукт, усі чотири нормалізовані до хвилини:

за хвилинупроти тексту
gpt-realtime-2.1, без caching$0.13125937.9×
gpt-realtime-2.1, history cached$0.05742516.6×
gemini-3.1-flash-live, без caching$0.0239656.9×
ті самі слова набрані, gpt-5.6-terra$0.003461

Тридцять вісім разів. Не тридцять вісім відсотків. Ідентичний обмін, проведений звуком замість тексту, майже на два порядки дорожчий, і жодна частина цього розриву не є маржею, яку хтось вирішив нарахувати, — це conversion rate. Одна секунда assistant audio — це двадцять tokens. Та сама секунда несе 2.5 слова за оголошеною швидкістю, а виміряний transcript має 1.26 tokens на слово, тож як текст це 3.15 tokens. Звук — у 6.3 раза громіздкіший пакет для того самого змісту, і кожен його token тарифікується у 5.3 раза дорожче за text output rate і в 16 разів дорожче за text input rate. Помножте bulk ratio на price ratio — і порядок величини вже є ще до будь-якого обліку.

Два операційні наслідки прямо випливають із таблиці.

Audio caching — не оптимізація, а бізнес-модель. Cached audio input коштує $0.40 за мільйон проти $32.00 fresh — знижка 98.75 %, яка вдвічі здешевлює дзвінок. Правило з Розділу 16 незмінне: cache збігається з prefix, тож будь-що, вставлене на початок розмови посеред дзвінка, руйнує його, а природне місце для «caller is now verified» — саме там.

І ніщо, що ви робите в клієнті, не скасовує оплату звуку. Користувач перебиває assistant, ваш код зупиняє відтворення, динамік стихає. Усе, що вже було згенеровано, уже було нараховано, бо billing accrues when the response is created; і за правилом Розділу 16 усе, що лишається в розмові, повторно надсилається як input audio на кожному наступному turn. Розділ 14 казав це про aborting text stream. У голосі це коштує у тридцять разів більше.

Відео одні постачальники продають за секунду, інші — за clip, з рівнями для роздільності й іноді тривалості. Ці дві форми відрізняються не лише зручністю; вони перетинаються.

модель1 s2 s5 s10 s20 s
veo-3.1, за секунду, 1080p$0.400$0.800$2.000$4.000$8.000
veo-3.1-fast, за секунду, 1080p$0.120$0.240$0.600$1.200$2.400
sora-2, за секунду, 720p$0.100$0.200$0.500$1.000$2.000
hailuo-02, за clip, 1080p$0.480$0.480$0.480$0.480$0.480
mochi, за GPU-second$0.018$0.037$0.092$0.183$0.366

Постачальник із per-clip дорожчий за per-second нижче 1.2 секунди й у 16.7 раза дешевший на двадцяти. Жодне ранжування цих двох моделей не переживає зміни довжини clip, тож «яка video model найдешевша» — не питання про моделі.

Останній рядок гірший, і це чесне серце розділу. mochi тарифікується за реальні GPU seconds — виміряний prediction time завдання — по $0.001400 за секунду на A100 і $0.001525 на H100, тобто це ставки орендованої машини й нічого більше.15 Це абсолютно точний тариф, але це не ціна, бо величина, на яку він множиться, невідома, доки ви вже не погодилися платити. Рядок вище припускає дванадцять GPU-seconds на секунду output; збільште це припущення вчетверо — і він виходить із найдешевшої смуги, а лише при шестикратному множнику опиняється в середині таблиці. Це єдиний тариф на цій сторінці, який не можна поставити в quote.

Отже: tokens, image tokens, characters, minutes, video seconds, whole clips, GPU seconds, flat units. Вісім величин, і єдиний спосіб поставити їх на одну вісь — оголосити workload і порахувати його.

Це розширення computeCost з Розділу 16 — той самий tier-механізм, тепер із критеріями, які не є довжиною prompt:

normalise.tsTS
export interface MediaCriteria {
  resolution?: string[]; quality?: string[];
  hasAudio?: boolean; maxDurationSeconds?: number;
}
export interface MediaTier { when?: MediaCriteria; price: number }
export type MediaRate = number | MediaTier[];

const matches = (when: MediaCriteria, u: Usage) => {
  const inList = (l?: string[], v?: string) => !l || (v !== undefined && l.includes(v));
  if (!inList(when.resolution, u.resolution)) return false;
  if (!inList(when.quality, u.quality)) return false;
  if (when.hasAudio !== undefined && when.hasAudio !== (u.hasAudio ?? false)) return false;
  if (when.maxDurationSeconds !== undefined
      && (u.videoSeconds ?? 0) > when.maxDurationSeconds) return false;   
  return true;
};

const mediaPrice = (rate: MediaRate | undefined, u: Usage): number => {
  if (rate === undefined) return 0;
  if (typeof rate === "number") return rate;
  for (const t of rate.filter((t) => t.when)) if (matches(t.when!, u)) return t.price;
  return rate.find((t) => !t.when)?.price ?? 0;      // the tier with no criteria is the default
};

export function computeCost(p: Pricing, u: Usage): number {
  let c = textCost(p, u);                             // Chapter 16, unchanged
  if (p.imageInputToken || p.imageOutputToken) {
    c += (u.imageInputTokens ?? 0) * (p.imageInputToken ?? 0)
       + (u.imageOutputTokens ?? 0) * (p.imageOutputToken ?? 0);
  } else if (p.imageUnit !== undefined) c += (u.images ?? 1) * mediaPrice(p.imageUnit, u);  
  if (p.videoSecond !== undefined) c += (u.videoSeconds ?? 0) * mediaPrice(p.videoSecond, u);
  if (p.videoUnit   !== undefined) c += (u.videoCount ?? 1)   * mediaPrice(p.videoUnit, u);
  c += (u.audioInputTokens ?? 0)       * (p.audioInputToken ?? 0)
     + (u.cachedAudioInputTokens ?? 0) * (p.cachedAudioInputToken ?? p.audioInputToken ?? 0)
     + (u.audioOutputTokens ?? 0)      * (p.audioOutputToken ?? 0)
     + (u.computeSeconds ?? 0)         * (p.computeSecond ?? 0)
     + (u.chars ?? 0)                  * (p.perChar ?? 0)
     + (u.minutes ?? 0)                * (p.perMinute ?? 0);
  return c;
}

Два позначені рядки — місце, де все ламається. Тариф, заданий за unit, множить u.images ?? 1; тариф, заданий за token, множить щось, що за замовчуванням дорівнює нулю. Подайте обом порожнє usage — форму, яку отримуєте, коли measurement failed, — і подивіться:

the same missing measurement, priced by unitTEXT
per image (nano-banana-pro)     empty usage => $0.1500
per clip  (hailuo-02)           empty usage => $0.1500
per unit  (a cloned voice)      empty usage => $3.0000
per token (gpt-image-2)         empty usage => $0.0000
per second (veo-3.1)            empty usage => $0.0000
per GPU-second (mochi)          empty usage => $0.0000

Нічого не сталося, шість разів, і один раз це коштувало три долари, а п’ять разів нічого. Це не різниця округлення; це рішення про те, що означає відсутнє число, прийняте окремо для кожної одиниці й ніде не записане. Слушне правило таке: поле, яке ніхто не вимірював, лишається absent, бо «not measured» і «measured and came out zero» — різні речі. Ця функція тихо не погоджується.

Другий збій — duration. Clip-priced tariff обирає свій tier через maxDurationSeconds проти u.videoSeconds ?? 0, тож usage, який не записав duration, збігається з найкоротшим tier:

hailuo-02, 768pTEXT
duration recorded    ->  $0.45
duration missing     ->  $0.27

Сорок відсотків знижки за те, що ви не знаєте, якої довжини було відео. Обидва баги мають той самий корінь: default, обраний для зручності всередині функції, вся робота якої — бути точною.

Коли costs можна обчислити, порівнянню потрібна друга половина — оголошений representative workload, по одному на engine, сформульований публічно, щоб читач міг із ним не погодитися:

workloads.tsTS
export const representative = {
  text:   { blend: [[{ promptTokens: 1e6 }, 0.25], [{ completionTokens: 1e6 }, 0.75]] },
  image:  { images: 1, imageInputTokens: 50, imageOutputTokens: 1500 },
  video:  { videoSeconds: 5, videoCount: 1, resolution: "1080p", hasAudio: true, computeSeconds: 60 },
  voice:  { chars: 1000, computeSeconds: 10 },
  stt:    { minutes: 1 },
};

Кожен із цих рядків — аргумент. Text змішує чверть input і три чверті output, бо реальне використання схиляється до output; fifty-fifty blend ранжує моделі інакше. Image workload припускає 1,500 output tokens, між 1,056 OpenAI для medium square і 1,584 для medium portrait. Video припускає п’ять секунд у 1080p, і ми щойно бачили, як два постачальники міняються місцями на 1.2 секунди. Compute entry припускає шістдесят GPU-seconds, бо припустити більше нічого.

Ось метод, і це єдиний чесний метод: ви не можете порівнювати ціни в різних одиницях; ви можете порівнювати лише вартість workload, який ви записали. Будь-яка таблиця, що ранжує multimodal models без надрукованого workload, ранжує власні припущення.

Тепер ви можете оцінити все, що модель може створити, у будь-якій одиниці, у якій це продається, і вголос сказати, який workload припускає ваше порівняння. Це закриває інвойс, який відкрив Розділ 16, і закриває Частину III: усе від Розділу 14 до цього місця було про один call — як його зробити, що в нього покласти, як його sample, що він повертає, скільки коштує.

Розділ 22 змінює одиницю аналізу, і ця зміна дорога. agent — це не один call; це loop, який сам вирішує, скільки calls зробити, а арифметика останніх двох розділів перетворює це з architecture diagram на бюджет. Він починається з того, що ставить тій самій моделі те саме питання двічі, вдруге додаючи до каталогу один tool, і вимірює, що зробив цей один tool: один call став двома, тридцять дев’ять input tokens стали 420.

Чи робить це його agent, залежить від того, яке з двох опублікованих визначень ви відкриєте, і вони не погоджуються. Одне з них не погоджується саме із собою.


Кожну ціну, формулу й conversion rate у цьому розділі було прочитано зі сторінки самого постачальника 7 вересня 2026 року і процитовано з цією датою, бо всі вони зміняться. Token counts, costs і comparisons були обчислені на цих даних кодом, надрукованим вище, на одній машині, без жодного платного API call — і це також чесна причина, чому в цьому розділі немає жодної latency claim.

Image-token functions, cost tables, voice-call breakdown і empty-usage results були створені TypeScript, надрукованим у цьому розділі, запущеним на Node 22. Dialogue для voice comparison має 149 слів і був tokenized with tiktoken under the o200k_base encoding at 188 tokens; його duration випливає з оголошеної швидкості 150 слів за хвилину, яка є parameter of the comparison, а не measurement. Кожна provider figure має footnote, що називає сторінку, з якої її взято.

  1. Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). Patches, linear projection into the embedding dimension і position embeddings, які роблять grid читабельною для sequence model.

  2. Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). Contrastive training image encoder і text encoder на 400 мільйонах пар і shared space, який припускає все downstream.

  3. Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). Frozen vision encoder, frozen language model, trained bridging layers — architecture, яка перетворила image understanding на chat capability.

  4. Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). Single linear projection як bridge і generated instruction data як training set; причина, чому open vision-language models зійшлися до однієї форми.

  5. Anthropic, Vision, platform.claude.com/docs/en/build-with-claude/vision, accessed 2026-09-07. «Claude views images in patches instead of pixels. Each patch is a 28×28-pixel block of the image, referred to as a visual token. An image, therefore, costs ⌈width / 28⌉ × ⌈height / 28⌉ visual tokens.» Також два resolution tiers (standard: 1568-pixel long edge, 1568 visual tokens; high-resolution, on Claude 4.7 and later: 2576 pixels and 4784 tokens), downsizing rule і шестирядкова таблиця sizes і token counts, відтворена вище. Model rates з Anthropic, Pricing, platform.claude.com/docs/en/about-claude/pricing, та сама дата: Claude Haiku 4.5 по $1 і $5 за мільйон input і output tokens.

  6. Google, Image understanding, ai.google.dev/gemini-api/docs/image-understanding, accessed 2026-09-07. «258 tokens if both dimensions <= 384 pixels. Larger images are tiled into 768x768 pixel tiles, each costing 258 tokens», із crop-unit formula — floor(min(width, height) / 1.5), dimensions divided by it and multiplied together — і worked example 960 × 540, що дає 3 × 2 = 6 tiles. Google називає це «a rough formula»; scale-invariance, виведена вище, є властивістю формули як опублікованої. Audio input у тому самому сімействі — 32 tokens за секунду audio (ai.google.dev/gemini-api/docs/audio, та сама дата).

  7. OpenAI, Images and vision, developers.openai.com/api/docs/guides/images-vision, accessed 2026-09-07. Джерело patch-based rule (32 × 32 patches, patch_count = ceil(width/32)×ceil(height/32), формула shrink_factor та її integer adjustment, 30,000-patch rejection limit); model sizing table, включно з тим, що low на gpt-5.4 використовує 2048-pixel limit і 6,144-patch budget «so it can use more tokens than high», проти 2,500-patch budget у high; multiplier table (1.2 для сімейств GPT-5.x, 1.62 для gpt-4.1-mini, 2.46 для gpt-4.1-nano); два worked examples, відтворені вище (1024 × 1024 → 1229 tokens, 2048 × 2048 → 3000 tokens); tile-based rules для старіших моделей (base plus 512-pixel tiles, 85 + 170 на gpt-4o); і список limitations, процитований у vision-блоці. 2

  8. Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). Forward noising schedule, reparameterisation, що перетворює objective на predicting the added noise, і sampling loop.

  9. Rombach, R., Blattmann, A., Lorenz, D., Esser, P. and Ommer, B. High-Resolution Image Synthesis with Latent Diffusion Models. arXiv:2112.10752 (2022). Запуск diffusion process у compressed latent space, що зробило fixed step count достатньо дешевим для продажу per image.

  10. Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023), chapter 18. Оголошена делегація для всього, що цей розділ пропустив про diffusion — variational bound, noise schedules, classifier-free guidance і sampler families. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021), — сам adapter, введений у Розділі 11 на language model і використаний тут на image model без зміни математики. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022), — transcription model, per-minute price якої наведено вище.

  11. OpenAI, Image generation, developers.openai.com/api/docs/guides/image-generation, Pricing, developers.openai.com/api/docs/pricing, і сторінка моделі для gpt-image-1, усі accessed 2026-09-07. Сторінка моделі для gpt-image-2 не має pricing section; її rates узято зі сторінки pricing вище. Сторінка GPT Image 1 публікує text input по $5.00, image input по $10.00 і image output по $40.00 за мільйон tokens поруч із per-image table, використаною у виведенні вище. Також: output-token table для models prior to gpt-image-2 (272 / 408 / 400 low, 1056 / 1584 / 1568 medium, 4160 / 6240 / 6208 high, для square, portrait і landscape); per-image price tables для GPT Image 2, 1.5, 1 і 1 Mini, використані вище; речення «a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting»; note, що кожне streamed partial image коштує extra 100 image output tokens; і gpt-image-2 rates $8.00 image input, $2.00 cached image input, $30.00 image output і $5.00 text input за мільйон tokens. Text model rates для порівнянь: gpt-5.6-terra по $2.00 input, $0.20 cached input і $12.00 output, gpt-5.6-luna по $0.20 і $1.20, standard tier, short context. Video: sora-2 по $0.10 за секунду at 720p і sora-2-pro по $0.30, $0.50 і $0.70 at 720p, 1024p і 1080p. Transcription: $0.006, $0.0045, $0.003 і $0.017 за хвилину для gpt-4o-transcribe, gpt-transcribe, gpt-4o-mini-transcribe і gpt-live-transcribe. 2

  12. Google, Gemini Developer API pricing, ai.google.dev/gemini-api/docs/pricing, accessed 2026-09-07. Gemini 3.1 Flash-Lite по $0.25 за мільйон input tokens (text, image і video) і $1.50 output. Gemini 3.1 Flash Image: image output по $60 за мільйон tokens, з опублікованими еквівалентами 747, 1120, 1680 і 2520 tokens для 0.5K, 1K, 2K і 4K images та per-image prices $0.045, $0.067, $0.101 і $0.151. Gemini 3.1 Flash TTS: $1.00 text input, $20.00 audio output, «audio tokens correspond to 25 tokens per second of audio». Gemini 3.1 Flash Live Preview: $0.75 text і «$3.00 or $0.005/min» audio input, «$4.50 (text) $12.00 or $0.018/min (audio)» output. Veo 3.1 per second with audio: $0.40 at 720p and 1080p and $0.60 at 4K standard; $0.10, $0.12 and $0.30 fast. Gemini Omni Flash bills video output «at a rate of 5,792 tokens per second of 720p video», що та сама примітка конвертує приблизно в $0.10 за секунду — найчіткіше опубліковане твердження, що per-second media price є token price. 2

  13. OpenAI model pages для tts-1, tts-1-hd і gpt-4o-mini-tts, developers.openai.com/api/docs/models, accessed 2026-09-07. tts-1 по $15.00 і tts-1-hd по $30.00 за мільйон characters; gpt-4o-mini-tts по $0.60 за мільйон text input tokens і $12.00 за мільйон audio output tokens — той самий постачальник, та сама операція, дві одиниці.

  14. OpenAI, Managing costs (Realtime API), developers.openai.com/api/docs/guides/realtime-costs, accessed 2026-09-07. «Audio tokens in user messages are 1 token per 100 ms of audio, while audio tokens in assistant messages are 1 token per 50ms of audio.» Також: «The entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive»; costs accrue when a Response is created; worked two-turn example, accumulation якого відтворює таблиця вище; і response.done usage payload із його splits input_token_details і output_token_details. Rates зі сторінки pricing, та сама дата: gpt-realtime-2.1 audio по $32.00 input, $0.40 cached input і $64.00 output за мільйон tokens, text по $4.00, $0.40 і $24.00, image input по $5.00. 2

  15. Replicate, Pricing, replicate.com/pricing, accessed 2026-09-07. Nvidia A100 (80GB) по $0.001400 за секунду і $5.04 за годину; Nvidia H100 по $0.001525 за секунду і $5.49 за годину.

Готові довірити вибір моделі LIA?

Створюйте з усіма моделями ШІ в одному місці — почніть безкоштовно вже сьогодні.