Ves al contingut
21/30Capítol 21 de 30

Preus multimodals: què facturen realment imatges, àudio i vídeo

Tres models amb les mateixes 500 fotos discrepen per un factor de 5,5; el més barat canvia quan algú les redimensiona.

En aquesta pàgina

Aquí tens una tasca, amb tres preus: descriure cinc-centes fotografies de producte, amb una llegenda curta cadascuna. Mateixes fotografies, mateixa instrucció, mateixa llargada de resposta. L’únic que canvia és quin model les llegeix.

fotografiagpt-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

Hi ha tres coses en aquesta taula que val la pena aturar-se a mirar.

El model més barat canvia entre la tercera fila i la quarta, en la mateixa tasca, perquè algú ha redimensionat les fotografies. Demana un paràgraf en lloc d’una llegenda i el punt d’encreuament torna a moure’s: a 1280 × 960 el guanyador és Gemini per a una llegenda de quaranta tokens i OpenAI per a un paràgraf de quatre-cents tokens.

La columna de Gemini no es mou gens, en cap fila: una fotografia de 4000 \u00d7 3000 li costa exactament el mateix que una de 640 \u00d7 480. Una fotografia de 4000 × 3000 li costa exactament el mateix que una fotografia de 640 × 480. Això no és un límit màxim. És una conseqüència de com compta, i vol dir que l’optimització de costos més habitual d’aquest negoci —reduir la resolució abans de pujar— paga així:

image tokens, 4000 × 3000 → 800 × 600cost de l’execucióestalvi
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 %

Cap d’aquestes xifres és un preu que publiqui el proveïdor. Totes tres s’han hagut de calcular, a partir de tres regles diferents, perquè una fotografia no és una unitat facturable enlloc: primer es converteix en tokens, mitjançant una aritmètica escrita en tres llocs incompatibles.

El capítol 16 va construir la factura del text i es va aturar on s’atura el text. Aquest capítol és la resta de la factura: imatges, veu, transcripció, vídeo i computació bruta, que entre tots es facturen en vuit unitats diferents, i el mètode per comparar coses que no es venen amb la mateixa mesura.

Mostra els detalls

Què necessita aquest capítol dels anteriors.

  • El capítol 7 va construir el tokenizer i la unitat. Tot el que hi ha aquí és un intent de convertir en aquesta unitat alguna cosa que no és text.
  • El capítol 8 va establir què consumeix un model: no símbols, sinó vectors en un espai d’embedding. Per això una imatge es pot posar preu en tokens.
  • El capítol 16 va construir computeCost, els seus trams de preu i els seus cinc cubells de token. Aquest capítol amplia aquesta funció en lloc de substituir-la.
  • El capítol 11 va introduir LoRA com a tècnica de fine-tuning i el capítol 20 la va valorar com una decisió de pressupost. Aquí apareix en un model que no és un model de llenguatge.

Sense tensors, per la regla del capítol 14: això són tarifes, conversions i comptabilitat, així que és TypeScript.

Un transformer rep una seqüència de vectors. No li importa d’on venen. El capítol 8 li donava embeddings buscats a partir d’un id de token; res en l’arquitectura exigeix aquesta cerca.

Per tant: talla la imatge en quadrats fixos, aplana cada quadrat en una llista de nombres i passa cada llista per una capa lineal apresa per obtenir un vector de l’amplada del model. Un patch de 32 × 32 de píxels de color són 32×32×3=307232 \times 32 \times 3 = 3072 nombres; la projecció ERd×3072E \in \mathbb{R}^{d \times 3072} el converteix en un vector de dd dimensions, exactament la forma amb què arriba un text token. Això és tot, i és el paper que ho diu al títol: una imatge val 16 × 16 paraules.1 Afegeix una codificació posicional perquè el model sàpiga quin quadrat era on, intercala els resultats amb els text embeddings, i la seqüència que llegeix el model és en part imatge i en part frase.

Tres papers ho van convertir en producte. CLIP va entrenar un codificador d’imatges i un codificador de text perquè coincidissin, sobre quatre-cents milions de parells extrets del web, i és allà on la idea que píxels i paraules poden compartir un espai va deixar de ser una hipòtesi.2 Flamingo va acoblar un codificador de visió congelat a un model de llenguatge congelat amb unes quantes capes pont entrenades.3 LLaVA va demostrar que el pont podia ser una sola projecció lineal i que el seguiment d’instruccions es podia ensenyar amb dades generades, i per això tots els models oberts de visió-llenguatge des d’aleshores s’assemblen força.4

La conseqüència per a la teva factura és immediata i poc glamurosa: els patches són posicions en la seqüència, per tant són input tokens, per tant els pagues a la tarifa d’entrada. Quants n’hi ha és aritmètica, i cada proveïdor la fa diferent.

Cada regla de sota està implementada a partir de la documentació pròpia del proveïdor i comprovada contra els exemples resolts de la mateixa documentació.

OpenAI cobreix la imatge amb patches de 32 × 32 i multiplica el recompte per un factor per model. Si el nombre de patches supera el pressupost d’aquell model i nivell de detall, la imatge s’escala cap avall fins que hi cap:

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 la cobreix amb patches de 28 × 28, un visual token cadascun, i limita tant el costat llarg com el nombre de tokens: 1.568 píxels i 1.568 tokens en models de tram estàndard, 2.576 i 4.784 en el tram d’alta resolució. Les imatges massa grans s’escalen a la mida més gran que compleix tots dos límits.5

Google no compta píxels en absolut. Una imatge amb tots dos costats a 384 píxels o menys costa una tarifa plana de 258 tokens. Qualsevol imatge més gran es talla en tiles de 258 tokens cadascun, i la graella de tiles surt d’una unitat de retall de 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;      
}

Executa cadascuna contra les xifres que imprimeix el seu propi proveïdor:

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

S’imprimeixen nou coincidències; l’execució completa en comprova quinze, perquè la taula d’Anthropic dona tots dos trams per a les sis mides. Ara pots executar aquestes regles sobre qualsevol fotografia que tinguis, que és el punt: aquestes són les úniques tres funcions d’aquest capítol que no pots obtenir d’una pàgina de preus.

Passa la mateixa fotografia 4:3 per totes tres a sis mides:

midaOpenAI, highAnthropic, estàndardAnthropic, alta resolucióGemini
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

Llegeix l’última columna cap avall. Un cop la imatge supera els 384 píxels, el nombre no torna a canviar mai, i això no és una coincidència ni un límit. Substitueix la unitat de retall dins la fórmula de tiles, per a una imatge almenys tan ampla com alta:

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

La mida es cancel·la. Els image tokens de Google depenen de la relació d’aspecte i de res més. Una fotografia 4:3 són quatre tiles tant si és una miniatura com un pòster. Aquest únic fet algebraic és tota l’explicació del zero a la taula d’estalvis de més amunt, i cap pàgina de preus ho diu.

Les altres dues columnes, en canvi, limiten: a alçades diferents i per motius diferents —Anthropic en un sostre declarat de token, OpenAI en un pressupost de patches després d’un límit de píxels—, i per això les tres corbes s’encreuen a mides diferents.

Ara trenca-ho. La manera òbvia de gastar menys en un model de visió és demanar menys detall, així que envia 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

Demanar menys detall va costar un 25 % més. No és un error, i OpenAI ho diu en una línia de la taula de mides: en aquesta família de models, low usa un límit de 2048 píxels amb un pressupost de 6.144 patches, mentre que high usa el mateix límit de píxels amb un pressupost de 2.500 patches, «així que pot usar més tokens que high».7 La paraula low anomena un paràmetre de fidelitat, no un preu: en dues de les cinc famílies de models documentades no compra cap estalvi, i en una d’aquestes dues costa més.

Tot fins ara ha estat un model llegint una imatge. Fer-ne una funciona amb un mecanisme que no té tokens en absolut, i per això es ven per imatge i no per paraula.

Fer una imatge: un preu per imatge és un preu per token

Enllaç a la secció: Fer una imatge: un preu per imatge és un preu per token

Els proveïdors publiquen la generació d’imatges com un preu per imatge. No ho és. Els models GPT Image emeten image tokens especialitzats el recompte dels quals depèn de la mida i la qualitat demanades; multiplica els recomptes publicats per la tarifa d’image output publicada de GPT Image 1, $40 per milió, i compara-ho amb els preus per imatge de la mateixa pàgina:

qualitat1024 × 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)

Nou xifres derivades contra nou de publicades, totes les parelles coincidint dins de $0.002.11 Google encara és més explícit i fa la conversió per tu a la mateixa pàgina de preus: image output a $60 per milió de tokens, «les imatges de sortida a 1K (1024x1024px) consumeixen 1120 tokens i equivalen a $0.067 per imatge».12

Així que un preu per imatge és un preu per token amb el recompte plegat a dins. Està bé, i amaga una cosa. Agafa la taula de la generació actual i divideix enrere:

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

La imatge més gran és la més barata en totes les qualitats. Un canvas de 1024 × 1536 té un 50 % més de píxels que un de 1024 × 1024 i costa un 23 % menys de tokens a medium. OpenAI ho marca en una frase que et saltaries: «una resolució no quadrada més gran de vegades pot produir menys output tokens que una resolució més petita o quadrada amb el mateix paràmetre de qualitat»; i en la generació anterior de models anava a l’inrevés, amb el retrat costant un 50 % més que el quadrat.11 Cada valor per defecte de 1024x1024 escrit abans d’aquest canvi és ara l’opció cara.

So, facturat pel segon, pel caràcter i pel token

Enllaç a la secció: So, facturat pel segon, pel caràcter i pel token

Demana a tres productes que pronunciïn els mateixos 519 caràcters —uns 38 segons d’àudio— i obtens tres sistemes d’unitats de dos proveïdors:

modelunitatpreu
tts-1per caràcter$15.00 per milió de caràcters → $0.007785
tts-1-hdper caràcter$30.00 per milió de caràcters → $0.015570
gemini-3.1-flash-ttsper audio token, 25 per segon$20.00 per milió → $0.019319

El mateix proveïdor ven totes dues unitats: tts-1 d’OpenAI es valora per milió de caràcters mentre que gpt-4o-mini-tts es valora per milió de tokens, $0.60 d’entrada i $12.00 de sortida.13 Per tant, «el text-to-speech més barat» no és una pregunta amb resposta fins que dius què es dirà.

I les dues unitats són cegues a coses oposades. Un preu per caràcter no veu la durada: tria una veu lenta i deliberada, o afegeix pauses, i la factura no es mou mentre l’àudio s’allarga. Un preu per segon no veu el contingut: trenta segons costen el mateix tant si són un paràgraf tècnic dens com si algú compta fins a deu. Canvia la veu i exactament un dels teus dos proveïdors revalora.

La transcripció va a l’inrevés i és la línia més simple de tota la factura: per minut d’àudio, plana:

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)

Fixa’t en l’última fila contra la tercera: fer-ho en directe, a mesura que arriben les paraules, costa 5,7 vegades fer-ho sobre un fitxer acabat. Aquesta diferència és el preu de no poder agrupar en batch, i és el que encareix la secció següent.

Ara la xifra que decideix si la veu és una funcionalitat o un producte.

La trucada: una conversa de suport de deu torns, 149 paraules, que a 150 paraules per minut declarades són 59,6 segons de parla: 21,2 parlats per qui truca, 38,4 retornats en veu. Les conversions de token són les dels mateixos proveïdors. OpenAI: «els audio tokens en missatges d’usuari són 1 token per cada 100 ms d’àudio, mentre que els audio tokens en missatges de l’assistent són 1 token per cada 50 ms».14 Google: 25 tokens per segon, en totes dues direccions, cosa que la seva pàgina de preus confirma publicant $12.00 per milió i $0.018 per minut a la mateixa línia.12

La conversa s’acumula exactament com deia el capítol 16, perquè és el mateix mecanisme: «tota la conversa s’envia al model per a cada Response... per tant, els torns posteriors de la sessió seran més cars».14 Només que ara l’historial es mesura en audio tokens.

tornusuariassistantfresh 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

Ara la comparació que decideix el producte, totes quatre normalitzades a un minut:

per minutcontra text
gpt-realtime-2.1, sense caching$0.13125937,9×
gpt-realtime-2.1, historial en cache$0.05742516,6×
gemini-3.1-flash-live, sense caching$0.0239656,9×
les mateixes paraules escrites, gpt-5.6-terra$0.003461

Trenta-vuit vegades. No trenta-vuit per cent. El mateix intercanvi, fet amb so en lloc de text, és gairebé dos ordres de magnitud més car, i cap part d’aquesta diferència és un marge que algú hagi decidit cobrar: és el tipus de conversió. Un segon d’àudio d’assistant són vint tokens. Aquell mateix segon porta 2,5 paraules al ritme declarat, i la transcripció mesurada surt a 1,26 tokens per paraula, així que com a text són 3,15 tokens. El so és un paquet 6,3 vegades més voluminós pel mateix significat, i cadascun dels seus tokens es factura a 5,3 vegades la tarifa de text output i 16 vegades la tarifa de text input. Multiplica una relació de volum per una relació de preu i l’ordre de magnitud ja hi és abans que comenci cap comptabilitat.

De la taula en surten directament dues conseqüències operatives.

L’audio caching no és una optimització, és el model de negoci. L’entrada d’àudio en cache és $0.40 per milió contra $32.00 en fresc: un descompte del 98,75 % que redueix la trucada a la meitat. La regla és la del capítol 16, sense canvis: la cache coincideix amb un prefix, així que qualsevol cosa inserida al davant de la conversa a mitja trucada la destrueix, i el lloc natural per posar «la persona que truca ja està verificada» és exactament allà.

I res del que facis al client desfactura un so. L’usuari parla per sobre de l’assistant, el teu codi atura la reproducció, l’altaveu calla. El que ja s’havia generat ja s’havia cobrat, perquè la facturació s’acumula quan es crea la resposta; i segons la regla del capítol 16, tot el que queda a la conversa es torna a enviar, com a àudio d’entrada, a cada torn posterior. El capítol 14 ho deia sobre avortar un stream de text. En veu costa trenta vegades més.

Vídeo, segons de GPU i un preu que no és un preu

Enllaç a la secció: Vídeo, segons de GPU i un preu que no és un preu

Alguns proveïdors venen vídeo per segon i d’altres per clip, amb trams per resolució i de vegades per durada. Aquestes dues formes no només difereixen en comoditat; s’encreuen.

model1 s2 s5 s10 s20 s
veo-3.1, per segon, 1080p$0.400$0.800$2.000$4.000$8.000
veo-3.1-fast, per segon, 1080p$0.120$0.240$0.600$1.200$2.400
sora-2, per segon, 720p$0.100$0.200$0.500$1.000$2.000
hailuo-02, per clip, 1080p$0.480$0.480$0.480$0.480$0.480
mochi, per segon de GPU$0.018$0.037$0.092$0.183$0.366

El proveïdor per clip és més car que el de per segon per sota d’1,2 segons i 16,7 vegades més barat a vint. Cap ordenació d’aquests dos models sobreviu a un canvi de durada del clip, així que «quin model de vídeo és més barat» no és una pregunta sobre models.

L’última fila és pitjor, i és el cor honest del capítol. mochi es factura contra segons reals de GPU —el temps de predicció mesurat de la feina— a $0.001400 per segon en una A100 i $0.001525 en una H100, que són les tarifes de la màquina llogada i res més.15 És una tarifa perfectament precisa i no és un preu, perquè la quantitat que multiplica és desconeguda fins després que t’hagis compromès a pagar-la. La fila de dalt assumeix dotze segons de GPU per segon de sortida; quadruplica aquest supòsit i surt del tram més barat, i només a sis vegades aterra a mitja taula. És l’única tarifa d’aquesta pàgina que no pots posar en un pressupost.

Així doncs: tokens, image tokens, caràcters, minuts, segons de vídeo, clips sencers, segons de GPU, unitats planes. Vuit quantitats, i l’única manera de posar-les en un mateix eix és declarar una càrrega de treball i posar-li preu.

Aquesta és l’extensió del computeCost del capítol 16: la mateixa maquinària de trams, ara amb criteris que no són la llargada del 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;
}

Les dues línies marcades són on es trenca. Una tarifa citada per unitat multiplica u.images ?? 1; una tarifa citada per token multiplica alguna cosa que per defecte és zero. Dona a totes dues un ús buit —la forma que obtens quan una mesura ha fallat— i mira:

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

No ha passat res, sis vegades, i ha costat tres dòlars una vegada i res cinc vegades. No és una diferència d’arrodoniment; és una decisió sobre què vol dir un nombre absent, presa per separat per a cada unitat i mai escrita. La regla sensata és que un camp que ningú no ha mesurat continua absent, perquè «no mesurat» i «mesurat i ha sortit zero» són coses diferents. Aquesta funció hi discrepa en silenci.

La segona fallada és la durada. La tarifa per clip selecciona el seu tram amb maxDurationSeconds contra u.videoSeconds ?? 0, de manera que un ús que mai no ha registrat una durada encaixa amb el tram més curt:

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

Un quaranta per cent de descompte per no saber quant durava el vídeo. Tots dos errors tenen la mateixa arrel: un valor per defecte triat per comoditat dins d’una funció que té com a única feina ser exacta.

Amb els costos computables, la comparació necessita l’altra meitat: una càrrega de treball representativa declarada, una per engine, exposada en públic perquè el lector hi pugui discrepar:

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 },
};

Cada una d’aquestes línies és un argument. El text barreja un quart d’entrada i tres quarts de sortida perquè l’ús real s’inclina cap a la sortida; una barreja cinquanta-cinquanta ordena els models diferent. La càrrega d’imatge assumeix 1.500 output tokens, entre els 1.056 d’OpenAI per a un quadrat medium i els 1.584 per a un retrat medium. El vídeo assumeix cinc segons a 1080p, i acabem de veure dos proveïdors intercanviar-se el lloc a 1,2 segons. L’entrada de computació assumeix seixanta segons de GPU perquè no hi ha res més a assumir.

Aquest és el mètode, i és l’únic honest disponible: no pots comparar preus en unitats diferents; només pots comparar el cost d’una càrrega de treball que has escrit. Qualsevol taula que ordeni models multimodals sense imprimir la seva càrrega de treball està ordenant els seus propis supòsits.

Ara pots posar preu a qualsevol cosa que pugui produir un model, en la unitat en què es vengui, i dir en veu alta quina càrrega de treball ha assumit la comparació. Això tanca la factura que va obrir el capítol 16, i tanca la part III: tot, del capítol 14 fins aquí, ha anat sobre una crida: com fer-la, què posar-hi, com mostrejar-la, què retorna, què costa.

El capítol 22 canvia la unitat d’anàlisi, i el canvi és car. Un agent no és una crida; és un bucle que decideix per si mateix quantes crides farà, i l’aritmètica dels dos últims capítols és el que converteix això d’un diagrama d’arquitectura en un pressupost. Comença fent la mateixa pregunta al mateix model dues vegades, amb una eina afegida al catàleg la segona vegada, i mesurant què ha fet aquella eina: una crida es va convertir en dues, trenta-nou input tokens es van convertir en 420.

Que això el converteixi en un agent depèn de quina de dues definicions publicades obris, i no coincideixen. Una d’elles no coincideix ni amb si mateixa.


Cada preu, fórmula i tipus de conversió d’aquest capítol s’ha llegit a la pàgina pròpia del proveïdor el 7 de setembre de 2026 i se cita amb aquesta data, perquè tots es mouran. Els recomptes de token, costos i comparacions s’han calculat sobre aquestes dades amb el codi imprès més amunt, en una sola màquina, sense fer cap crida API de pagament; que és també el motiu honest pel qual no hi ha ni una sola afirmació de latència en aquest capítol.

Les funcions d’image-token, les taules de cost, el desglossament de la trucada de veu i els resultats d’ús buit s’han produït amb el TypeScript imprès en aquest capítol, executat sobre Node 22. El diàleg usat per a la comparació de veu té 149 paraules i s’ha tokenitzat amb tiktoken sota la codificació o200k_base a 188 tokens; la seva durada deriva d’un ritme declarat de 150 paraules per minut, que és un paràmetre de la comparació i no una mesura. Cada xifra de proveïdor porta la nota que anomena la pàgina d’on ve.

  1. Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). Patches, la projecció lineal cap a la dimensió d’embedding i els position embeddings que fan llegible la graella per a un model de seqüència.

  2. Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). Entrenament contrastiu d’un codificador d’imatge i un codificador de text sobre 400 milions de parells, i l’espai compartit que assumeix tot el que ve després.

  3. Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). Codificador de visió congelat, model de llenguatge congelat, capes pont entrenades: l’arquitectura que va convertir la comprensió d’imatges en una capacitat de xat.

  4. Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). Una sola projecció lineal com a pont i dades d’instrucció generades com a conjunt d’entrenament; el motiu pel qual els models oberts de visió-llenguatge van convergir en una forma.

  5. Anthropic, Vision, platform.claude.com/docs/en/build-with-claude/vision, consultat el 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.» També els dos trams de resolució (estàndard: costat llarg de 1568 píxels, 1568 visual tokens; alta resolució, a Claude 4.7 i posteriors: 2576 píxels i 4784 tokens), la regla de reducció i la taula de sis files de mides i recomptes de token reproduïda més amunt. Tarifes de model d’Anthropic, Pricing, platform.claude.com/docs/en/about-claude/pricing, mateixa data: Claude Haiku 4.5 a $1 i $5 per milió d’input i output tokens.

  6. Google, Image understanding, ai.google.dev/gemini-api/docs/image-understanding, consultat el 2026-09-07. «258 tokens if both dimensions <= 384 pixels. Larger images are tiled into 768x768 pixel tiles, each costing 258 tokens», amb la fórmula de la unitat de retall —floor(min(width, height) / 1.5), dimensions dividides per ella i multiplicades entre si— i l’exemple resolt de 960 × 540 que dona 3 × 2 = 6 tiles. Google en diu «una fórmula aproximada»; la invariància d’escala derivada més amunt és una propietat de la fórmula tal com està publicada. L’entrada d’àudio de la mateixa família és de 32 tokens per segon d’àudio (ai.google.dev/gemini-api/docs/audio, mateixa data).

  7. OpenAI, Images and vision, developers.openai.com/api/docs/guides/images-vision, consultat el 2026-09-07. Font de la regla basada en patches (patches de 32 × 32, patch_count = ceil(width/32)×ceil(height/32), la fórmula shrink_factor i el seu ajust enter, el límit de rebuig de 30.000 patches); la taula de mides del model, incloent que low a gpt-5.4 usa un límit de 2048 píxels i un pressupost de 6.144 patches «així que pot usar més tokens que high», contra el pressupost de 2.500 patches de high; la taula de multiplicadors (1,2 per a les famílies GPT-5.x, 1,62 per a gpt-4.1-mini, 2,46 per a gpt-4.1-nano); els dos exemples resolts reproduïts més amunt (1024 × 1024 → 1229 tokens, 2048 × 2048 → 3000 tokens); les regles basades en tiles per a models antics (base més tiles de 512 píxels, 85 + 170 a gpt-4o); i la llista de limitacions citada al requadre de visió. 2

  8. Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). El calendari de soroll cap endavant, la reparametrització que converteix l’objectiu en predir el soroll afegit, i el bucle de sampling.

  9. Rombach, R., Blattmann, A., Lorenz, D., Esser, P. and Ommer, B. High-Resolution Image Synthesis with Latent Diffusion Models. arXiv:2112.10752 (2022). Executar el procés de diffusion en un espai latent comprimit, que és el que va fer el nombre fix de passos prou assequible per vendre per imatge.

  10. Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023), capítol 18. La delegació declarada de tot el que aquest capítol ha omès sobre diffusion: la cota variacional, els calendaris de soroll, classifier-free guidance i les famílies de sampler. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021), és l’adaptador mateix, introduït al capítol 11 en un model de llenguatge i usat aquí en un model d’imatge sense canviar la matemàtica. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022), és el model de transcripció el preu per minut del qual apareix més amunt.

  11. OpenAI, Image generation, developers.openai.com/api/docs/guides/image-generation, Pricing, developers.openai.com/api/docs/pricing, i la pàgina de model per a gpt-image-1, tots consultats el 2026-09-07. La pàgina de model de gpt-image-2 no té secció de preus; les seves tarifes venen de la pàgina de preus anterior. La pàgina de GPT Image 1 publica text input a $5.00, image input a $10.00 i image output a $40.00 per milió de tokens al costat de la taula per imatge usada en la derivació anterior. També: la taula d’output-token per als models anteriors a gpt-image-2 (272 / 408 / 400 low, 1056 / 1584 / 1568 medium, 4160 / 6240 / 6208 high, per a quadrat, retrat i paisatge); les taules de preu per imatge de GPT Image 2, 1.5, 1 i 1 Mini usades en les derivacions anteriors; la frase «a larger non-square resolution can sometimes produce fewer output tokens than a smaller or square resolution at the same quality setting»; la nota que cada imatge parcial en streaming costa 100 image output tokens addicionals; i les tarifes de gpt-image-2 de $8.00 image input, $2.00 cached image input, $30.00 image output i $5.00 text input per milió de tokens. Tarifes de models de text usades en les comparacions: gpt-5.6-terra a $2.00 input, $0.20 cached input i $12.00 output, gpt-5.6-luna a $0.20 i $1.20, tram estàndard, context curt. Vídeo: sora-2 a $0.10 per segon a 720p i sora-2-pro a $0.30, $0.50 i $0.70 a 720p, 1024p i 1080p. Transcripció: $0.006, $0.0045, $0.003 i $0.017 per minut per a gpt-4o-transcribe, gpt-transcribe, gpt-4o-mini-transcribe i gpt-live-transcribe. 2

  12. Google, Gemini Developer API pricing, ai.google.dev/gemini-api/docs/pricing, consultat el 2026-09-07. Gemini 3.1 Flash-Lite a $0.25 per milió d’input tokens (text, imatge i vídeo) i $1.50 d’output. Gemini 3.1 Flash Image: image output a $60 per milió de tokens, amb les equivalències publicades de 747, 1120, 1680 i 2520 tokens per a imatges 0.5K, 1K, 2K i 4K i els seus preus per imatge de $0.045, $0.067, $0.101 i $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 i «$3.00 or $0.005/min» audio input, «$4.50 (text) $12.00 or $0.018/min (audio)» output. Veo 3.1 per segon amb àudio: $0.40 a 720p i 1080p i $0.60 a 4K estàndard; $0.10, $0.12 i $0.30 ràpid. Gemini Omni Flash factura video output «at a rate of 5,792 tokens per second of 720p video», que la mateixa nota converteix a aproximadament $0.10 per segon: la declaració publicada més clara que un preu de mitjans per segon és un preu de token. 2

  13. Pàgines de model d’OpenAI per a tts-1, tts-1-hd i gpt-4o-mini-tts, developers.openai.com/api/docs/models, consultades el 2026-09-07. tts-1 a $15.00 i tts-1-hd a $30.00 per milió de caràcters; gpt-4o-mini-tts a $0.60 per milió de text input tokens i $12.00 per milió d’audio output tokens: el mateix proveïdor, la mateixa operació, dues unitats.

  14. OpenAI, Managing costs (Realtime API), developers.openai.com/api/docs/guides/realtime-costs, consultat el 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.» També: «The entire conversation is sent to the model for each Response... thus turns later in the session will be more expensive»; els costos s’acumulen quan es crea una Response; l’exemple resolt de dos torns l’acumulació del qual reprodueix la taula anterior; i el payload d’ús response.done amb les seves divisions input_token_details i output_token_details. Tarifes de la pàgina de preus, mateixa data: àudio gpt-realtime-2.1 a $32.00 input, $0.40 cached input i $64.00 output per milió de tokens, text a $4.00, $0.40 i $24.00, image input a $5.00. 2

  15. Replicate, Pricing, replicate.com/pricing, consultat el 2026-09-07. Nvidia A100 (80GB) a $0.001400 per segon i $5.04 per hora; Nvidia H100 a $0.001525 per segon i $5.49 per hora.

A punt per deixar que triï LIA?

Crea amb tots els models d'IA en un sol lloc — comença gratis avui mateix.