Pular para o conteúdo
21/30Capítulo 21 de 30

Precificação multimodal: o que imagens, áudio e vídeo realmente cobram

Três modelos recebem as mesmas 500 fotos e discordam por 5,5×; o mais barato muda assim que alguém redimensiona as imagens.

Nesta página

Aqui está uma tarefa, precificada de três maneiras: descrever quinhentas fotografias de produtos, uma legenda curta para cada uma. Mesmas fotografias, mesma instrução, mesmo tamanho de resposta. A única coisa que muda é qual modelo as lê.

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

Há três coisas nessa tabela que merecem uma pausa.

O modelo mais barato muda entre a terceira linha e a quarta, na mesma tarefa, porque alguém redimensionou as fotografias. Peça um parágrafo em vez de uma legenda e o ponto de cruzamento muda de novo: em 1280 × 960, o vencedor é Gemini para uma legenda de quarenta tokens e OpenAI para um parágrafo de quatrocentos tokens.

A coluna do Gemini não se move nada, em nenhuma linha: uma fotografia de 4000 × 3000 custa exatamente o mesmo que uma de 640 × 480. Uma fotografia de 4000 × 3000 custa exatamente o mesmo que uma fotografia de 640 × 480. Isso não é um limite. É consequência de como ele conta, e significa que a otimização de custo mais comum neste mercado — reduzir a resolução antes de fazer upload — paga assim:

image tokens, 4000 × 3000 → 800 × 600custo da execuçãoeconomia
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 %

Nenhum desses números é um preço que o fornecedor publica. Os três tiveram de ser calculados, a partir de três regras diferentes, porque uma fotografia não é uma unidade faturável em lugar nenhum: ela primeiro é convertida em tokens, por uma aritmética registrada em três lugares incompatíveis.

Capítulo 16 montou a conta de texto e parou onde o texto termina. Este capítulo é o restante da fatura: imagens, fala, transcrição, vídeo e computação bruta, que juntos são cobrados em oito unidades diferentes, e o método para comparar coisas que não são vendidas pela mesma medida.

Mostrar detalhes

O que este capítulo precisa dos anteriores.

  • Capítulo 7 construiu o tokenizer e a unidade. Tudo aqui é uma tentativa de transformar algo que não é texto nessa unidade.
  • Capítulo 8 estabeleceu o que um modelo consome: não símbolos, mas vetores em um espaço de embedding. É por isso que uma imagem pode ser precificada em tokens.
  • Capítulo 16 construiu computeCost, suas faixas de preço e seus cinco buckets de token. Este capítulo estende essa função em vez de substituí-la.
  • Capítulo 11 apresentou LoRA como técnica de fine-tuning e Capítulo 20 precificou isso como uma decisão de orçamento. Aqui ela aparece em um modelo que não é um modelo de linguagem.

Sem tensores, pela regra do Capítulo 14: isto é tarifas, conversões e contabilidade, então é TypeScript.

Um transformer recebe uma sequência de vetores. Ele não tem opinião sobre de onde eles vieram. O Capítulo 8 o alimentou com embeddings buscados a partir de um ID de token; nada na arquitetura exige essa busca.

Então: corte a imagem em quadrados fixos, achate cada quadrado em uma lista de números e passe cada lista por uma camada linear aprendida para obter um vetor com a largura do modelo. Um patch de 32 × 32 pixels coloridos tem 32×32×3=307232 \times 32 \times 3 = 3072 números; a projeção ERd×3072E \in \mathbb{R}^{d \times 3072} o transforma em um vetor dd-dimensional, exatamente o formato em que um token de texto chega. É só isso, e está no artigo cujo título já diz: uma imagem vale 16 × 16 palavras.1 Adicione uma codificação posicional para o modelo saber qual quadrado estava onde, intercale os resultados com os embeddings de texto, e a sequência lida pelo modelo é parte imagem e parte frase.

Três artigos transformaram isso em produto. CLIP treinou um codificador de imagem e um codificador de texto para concordarem, em quatrocentos milhões de pares coletados da web, e foi ali que a ideia de pixels e palavras compartilharem um espaço deixou de ser hipótese.2 Flamingo acoplou um codificador de visão congelado a um modelo de linguagem congelado com algumas camadas de ponte treinadas.3 LLaVA mostrou que a ponte podia ser uma única projeção linear e que o seguimento de instruções podia ser ensinado com dados gerados, por isso todo modelo aberto de visão-linguagem desde então parece mais ou menos igual.4

A consequência para sua fatura é imediata e nada glamourosa: os patches são posições na sequência, portanto são input tokens, portanto você paga por eles na taxa de entrada. Quantos são é aritmética, e cada fornecedor faz de um jeito.

Três regras, todas publicadas, nenhuma igual

Link para a seção: Três regras, todas publicadas, nenhuma igual

Cada regra abaixo é implementada a partir da própria documentação do fornecedor e conferida contra os exemplos trabalhados nessa mesma documentação.

A OpenAI cobre a imagem com patches de 32 × 32 e multiplica a contagem por um fator por modelo. Se a contagem de patches excede o orçamento desse modelo e nível de detalhe, a imagem é reduzida até caber:

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

A Anthropic a cobre com patches de 28 × 28, um visual token cada, e limita tanto a borda maior quanto a contagem de token — 1.568 pixels e 1.568 tokens em modelos de faixa padrão, 2.576 e 4.784 na faixa de alta resolução. Imagens grandes demais são reduzidas ao maior tamanho que caiba nos dois limites.5

O Google não conta pixels. Uma imagem com ambos os lados em até 384 pixels custa uma taxa fixa de 258 tokens. Qualquer coisa maior é cortada em tiles de 258 tokens cada, e a grade de tiles vem de uma unidade de corte 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;      
}

Execute cada uma contra os números que o próprio fornecedor imprime:

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

Nove concordâncias são impressas; a execução completa confere quinze, já que a tabela da Anthropic dá as duas faixas para todos os seis tamanhos. As regras agora são suas para rodar em qualquer fotografia que você tiver, e esse é o ponto: estas são as únicas três funções deste capítulo que você não consegue tirar de uma página de preços.

Passe a mesma fotografia 4:3 pelas três regras em seis tamanhos:

tamanhoOpenAI, highAnthropic, padrãoAnthropic, alta resoluçãoGemini
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

Leia a última coluna de cima para baixo. Depois que a imagem passa de 384 pixels, o número nunca muda de novo, e isso não é coincidência nem limite. Substitua a unidade de corte de volta na fórmula de tiles, para uma imagem pelo menos tão larga quanto 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

O tamanho cancela. Os image tokens do Google dependem da proporção de aspecto e de nada mais. Uma fotografia 4:3 tem quatro tiles seja ela uma miniatura ou um pôster. Esse único fato algébrico é a explicação inteira do zero na tabela de economia acima, e nenhuma página de preços em lugar nenhum o afirma.

As outras duas colunas impõem limites, em alturas diferentes e por motivos diferentes — Anthropic em um teto declarado de token, OpenAI em um orçamento de patches depois de um limite de pixels —, e é por isso que as três curvas se cruzam em tamanhos diferentes.

Agora quebre a regra. A maneira óbvia de gastar menos em um modelo de visão é pedir menos detalhe, então envie 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

Pedir menos detalhe custou 25 % mais. Isso não é bug, e a OpenAI diz isso em uma linha da tabela de dimensionamento: nessa família de modelos, low usa um limite de 2048 pixels com um orçamento de 6.144 patches, enquanto high usa o mesmo limite de pixels com um orçamento de 2.500 patches, «portanto pode usar mais tokens que high».7 A palavra low nomeia uma configuração de fidelidade, não um preço: em duas das cinco famílias de modelos documentadas ela não compra economia nenhuma, e em uma dessas duas custa mais.

Tudo até aqui foi um modelo lendo uma imagem. Fazer uma imagem roda em um mecanismo sem tokens, e é por isso que ele é vendido por imagem, não por palavra.

Fazer uma imagem: preço por imagem é preço por token

Link para a seção: Fazer uma imagem: preço por imagem é preço por token

Fornecedores publicam geração de imagem como preço por imagem. Não é. Modelos GPT Image emitem image tokens especializados cuja contagem depende do tamanho e da qualidade solicitados; multiplique as contagens publicadas pela taxa de saída de imagem publicada do GPT Image 1, de $40 por milhão, e compare com os preços por imagem na mesma página:

qualidade1024 × 10241024 × 15361536 × 1024
baixa272 tok → $0.0109 ($0.011)408 tok → $0.0163 ($0.016)400 tok → $0.0160 ($0.016)
média1,056 tok → $0.0422 ($0.042)1,584 tok → $0.0634 ($0.063)1,568 tok → $0.0627 ($0.063)
alta4,160 tok → $0.1664 ($0.167)6,240 tok → $0.2496 ($0.25)6,208 tok → $0.2483 ($0.25)

Nove números derivados contra nove publicados, todos os pares concordando dentro de $0.002.11 O Google é ainda mais explícito e faz a conversão para você na própria página de preços: saída de imagem a $60 por milhão de tokens, «imagens de saída em 1K (1024x1024px) consomem 1120 tokens e equivalem a $0.067 por imagem».12

Então um preço por imagem é um preço por token com a contagem embutida. Tudo bem, mas isso esconde algo. Pegue a tabela da geração atual e divida ao contrário:

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

A imagem maior é a mais barata em todas as qualidades. Um canvas de 1024 × 1536 tem 50 % mais pixels que um de 1024 × 1024 e custa 23 % menos tokens em qualidade média. A OpenAI sinaliza isso em uma frase que você pularia — «uma resolução não quadrada maior às vezes pode produzir menos output tokens do que uma resolução menor ou quadrada na mesma configuração de qualidade» — e, na geração anterior do modelo, era o contrário, com retrato custando 50 % mais que quadrado.11 Todo padrão de 1024x1024 escrito antes dessa mudança agora é a opção cara.

Som, cobrado por segundo, por caractere e por token

Link para a seção: Som, cobrado por segundo, por caractere e por token

Peça a três produtos para falar os mesmos 519 caracteres — cerca de 38 segundos de áudio — e você obtém três sistemas de unidades de dois fornecedores:

modelounidadepreço
tts-1por caractere$15.00 por milhão de caracteres → $0.007785
tts-1-hdpor caractere$30.00 por milhão de caracteres → $0.015570
gemini-3.1-flash-ttspor audio token, 25 por segundo$20.00 por milhão → $0.019319

O mesmo fornecedor vende as duas unidades: tts-1 da OpenAI é precificado por milhão de caracteres, enquanto gpt-4o-mini-tts é precificado por milhão de tokens, $0.60 de entrada e $12.00 de saída.13 Portanto «text-to-speech mais barato» não é uma pergunta com resposta até você dizer o que será falado.

E as duas unidades são cegas a coisas opostas. Um preço por caractere não vê duração: escolha uma voz lenta e deliberada, ou adicione pausas, e a conta não muda enquanto o áudio fica mais longo. Um preço por segundo não vê conteúdo: trinta segundos custam o mesmo seja um parágrafo técnico denso ou alguém contando até dez. Mude a voz e exatamente um dos seus dois fornecedores muda o preço.

Transcrição vai no sentido oposto e é a linha mais simples de toda a fatura — por minuto de áudio, fixo:

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)

Observe a última linha em relação à terceira: fazer isso ao vivo, conforme as palavras chegam, custa 5,7 vezes mais do que fazer em um arquivo finalizado. Essa diferença é o preço de não poder fazer batch, e é o que torna a próxima seção cara.

Agora o número que decide se voz é uma funcionalidade ou um produto.

A ligação: uma conversa de suporte de dez turnos, 149 palavras, que a uma taxa declarada de 150 palavras por minuto dá 59,6 segundos de fala — 21,2 falados pelo cliente, 38,4 falados de volta. As conversões de token são dos próprios fornecedores. OpenAI: «audio tokens em mensagens do usuário são 1 token por 100 ms de áudio, enquanto audio tokens em mensagens do assistant são 1 token por 50 ms».14 Google: 25 tokens por segundo, nas duas direções, o que sua página de preços confirma ao publicar $12.00 por milhão e $0.018 por minuto na mesma linha.12

A conversa se acumula exatamente como o Capítulo 16 disse que aconteceria, porque é o mesmo mecanismo: «a conversa inteira é enviada ao modelo para cada Response... portanto turnos posteriores na sessão serão mais caros».14 Só que agora o histórico é medido em audio tokens.

turnousuárioassistantáudio novo de entradaáudio em cache de entradaáudio de saídacusto
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

Agora a comparação que decide o produto, todos os quatro normalizados para um minuto:

por minutoversus texto
gpt-realtime-2.1, sem caching$0.13125937.9×
gpt-realtime-2.1, histórico em cache$0.05742516.6×
gemini-3.1-flash-live, sem caching$0.0239656.9×
as mesmas palavras digitadas, gpt-5.6-terra$0.003461

Trinta e oito vezes. Não trinta e oito por cento. A troca idêntica, conduzida em som em vez de texto, é quase duas ordens de grandeza mais cara, e nada dessa diferença é uma margem que alguém escolheu cobrar — é a taxa de conversão. Um segundo de áudio do assistant são vinte tokens. Esse mesmo segundo carrega 2,5 palavras na taxa declarada, e a transcrição medida roda a 1,26 tokens por palavra, então como texto ele tem 3,15 tokens. Som é um pacote 6,3 vezes mais volumoso para o mesmo significado, e cada um de seus tokens é cobrado a 5,3 vezes a taxa de saída de texto e 16 vezes a taxa de entrada de texto. Multiplique uma razão de volume por uma razão de preço e a ordem de grandeza já está lá antes de qualquer contabilidade começar.

Duas consequências operacionais saem direto da tabela.

Audio caching não é uma otimização, é o modelo de negócio. Entrada de áudio em cache custa $0.40 por milhão contra $32.00 nova — um desconto de 98,75 % que reduz a ligação pela metade. A regra é a do Capítulo 16, sem mudanças: o cache corresponde a um prefixo, então qualquer coisa inserida no início da conversa no meio da ligação o destrói, e o lugar natural para colocar «o cliente agora está verificado» é exatamente ali.

E nada que você faça no cliente desfatura um som. O usuário fala por cima do assistant, seu código interrompe a reprodução, o alto-falante fica em silêncio. O que já tinha sido gerado já foi cobrado, porque o faturamento acumula quando a resposta é criada; e, pela regra do Capítulo 16, o que permanece na conversa é reenviado, como áudio de entrada, em todos os turnos seguintes. O Capítulo 14 fez esse ponto sobre abortar um stream de texto. Em voz, custa trinta vezes mais.

Vídeo, GPU-segundos e um preço que não é preço

Link para a seção: Vídeo, GPU-segundos e um preço que não é preço

Vídeo é vendido por segundo por alguns fornecedores e por clipe por outros, com faixas para resolução e às vezes para duração. Esses dois formatos não diferem apenas em conveniência; eles se cruzam.

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

O fornecedor por clipe é mais caro que o por segundo abaixo de 1,2 segundo e 16,7 vezes mais barato aos vinte. Nenhuma ordenação desses dois modelos sobrevive a uma mudança no comprimento do clipe, então «qual modelo de vídeo é mais barato» não é uma pergunta sobre modelos.

A última linha é pior, e é o coração honesto do capítulo. mochi é cobrado contra segundos reais de GPU — o tempo de predição medido do job — a $0.001400 por segundo em uma A100 e $0.001525 em uma H100, que são as taxas da máquina alugada e nada mais.15 Essa é uma tarifa perfeitamente precisa e não é um preço, porque a quantidade que ela multiplica é desconhecida até depois de você ter se comprometido a pagá-la. A linha acima assume doze GPU-segundos por segundo de saída; quadruplique essa suposição e ela sai da faixa mais barata, e só em seis vezes cai no meio da tabela. É a única tarifa nesta página que você não consegue colocar em uma cotação.

Então: tokens, image tokens, caracteres, minutos, segundos de vídeo, clipes inteiros, GPU-segundos, unidades fixas. Oito quantidades, e a única forma de colocá-las em um eixo é declarar uma carga de trabalho e precificá-la.

Essa é a extensão do computeCost do Capítulo 16 — a mesma maquinaria de faixas, agora com critérios que não são o comprimento do 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;
}

As duas linhas marcadas são onde ele quebra. Uma tarifa cotada por unidade multiplica u.images ?? 1; uma tarifa cotada por token multiplica algo cujo padrão é zero. Alimente ambas com uso vazio — o formato que você obtém quando uma medição falhou — e veja:

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

Nada aconteceu, seis vezes, e custou três dólares uma vez e nada cinco vezes. Isso não é diferença de arredondamento; é uma decisão sobre o que um número ausente significa, tomada separadamente para cada unidade e nunca escrita. A regra sensata é que um campo que ninguém mediu permanece ausente, porque «não medido» e «medido e deu zero» são coisas diferentes. Esta função discorda em silêncio.

A segunda falha é duração. A tarifa por clipe seleciona sua faixa com maxDurationSeconds contra u.videoSeconds ?? 0, então um uso que nunca registrou duração corresponde à faixa mais curta:

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

Quarenta por cento de desconto por não saber quanto durou o vídeo. Ambos os bugs têm a mesma raiz: um padrão escolhido por conveniência dentro de uma função cujo trabalho inteiro é ser exata.

Com custos computáveis, a comparação precisa da outra metade — uma carga de trabalho representativa declarada, uma por engine, exposta publicamente para que um leitor possa discordar dela:

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 uma dessas linhas é um argumento. Texto mistura um quarto de entrada e três quartos de saída porque o uso real pende para a saída; uma mistura meio a meio classifica os modelos de outro jeito. A carga de imagem assume 1.500 output tokens, entre os 1.056 da OpenAI para um quadrado médio e os 1.584 para um retrato médio. Vídeo assume cinco segundos em 1080p, e acabamos de ver dois fornecedores trocarem de lugar em 1,2 segundo. A entrada de computação assume sessenta GPU-segundos porque não há mais nada a assumir.

Esse é o método, e é o único honesto disponível: você não pode comparar preços em unidades diferentes; só pode comparar o custo de uma carga de trabalho que você escreveu. Qualquer tabela que classifique modelos multimodais sem imprimir sua carga de trabalho está classificando as próprias suposições.

Agora você consegue precificar qualquer coisa que um modelo possa produzir, em qualquer unidade em que ela seja vendida, e dizer em voz alta qual carga de trabalho sua comparação assumiu. Isso fecha a fatura que o Capítulo 16 abriu, e fecha a Parte III: tudo do Capítulo 14 até aqui tratou de uma chamada — como fazê-la, o que colocar nela, como amostrá-la, o que ela retorna, quanto custa.

O Capítulo 22 muda a unidade de análise, e a mudança é cara. Um agent não é uma chamada; é um loop que decide por si mesmo quantas chamadas fazer, e a aritmética dos dois últimos capítulos é o que transforma isso de um diagrama de arquitetura em um orçamento. Ele começa fazendo a mesma pergunta ao mesmo modelo duas vezes, com uma ferramenta adicionada ao catálogo na segunda vez, e medindo o que essa única ferramenta fez: uma chamada virou duas, trinta e nove input tokens viraram 420.

Se isso faz dele um agent depende de qual das duas definições publicadas você abre, e elas não concordam. Uma delas não concorda consigo mesma.


Cada preço, fórmula e taxa de conversão neste capítulo foi lido da própria página do fornecedor em 7 de setembro de 2026 e é citado com essa data, porque todos eles vão mudar. As contagens de token, custos e comparações foram calculados sobre esses dados pelo código impresso acima, em uma máquina, sem nenhuma chamada de API paga — o que também é o motivo honesto para não haver uma única afirmação de latência neste capítulo.

As funções de image-token, as tabelas de custo, o detalhamento da chamada de voz e os resultados de uso vazio foram produzidos pelo TypeScript impresso neste capítulo, executado no Node 22. O diálogo usado para a comparação de voz tem 149 palavras e foi tokenizado com tiktoken sob a codificação o200k_base em 188 tokens; sua duração vem de uma taxa declarada de 150 palavras por minuto, que é um parâmetro da comparação e não uma medição. Cada número de fornecedor carrega a nota de rodapé que nomeia a página de onde veio.

  1. Dosovitskiy, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. arXiv:2010.11929 (2020). Patches, a projeção linear para a dimensão de embedding e os position embeddings que tornam a grade legível para um modelo de sequência.

  2. Radford, A. et al. Learning Transferable Visual Models From Natural Language Supervision. arXiv:2103.00020 (2021). Treinamento contrastivo de um codificador de imagem e um codificador de texto em 400 milhões de pares, e o espaço compartilhado que tudo a jusante assume.

  3. Alayrac, J.-B. et al. Flamingo: a Visual Language Model for Few-Shot Learning. arXiv:2204.14198 (2022). Codificador de visão congelado, modelo de linguagem congelado, camadas de ponte treinadas — a arquitetura que transformou compreensão de imagem em capacidade de chat.

  4. Liu, H., Li, C., Wu, Q. and Lee, Y. J. Visual Instruction Tuning. arXiv:2304.08485 (2023). Uma única projeção linear como ponte e dados de instrução gerados como conjunto de treino; o motivo pelo qual modelos abertos de visão-linguagem convergiram para um formato.

  5. Anthropic, Vision, platform.claude.com/docs/en/build-with-claude/vision, acessado em 2026-09-07. «Claude vê imagens em patches em vez de pixels. Cada patch é um bloco de 28×28 pixels da imagem, referido como um visual token. Uma imagem, portanto, custa ⌈width / 28⌉ × ⌈height / 28⌉ visual tokens.» Também as duas faixas de resolução (padrão: borda maior de 1568 pixels, 1568 visual tokens; alta resolução, em Claude 4.7 e posteriores: 2576 pixels e 4784 tokens), a regra de redução de tamanho e a tabela de seis linhas de tamanhos e contagens de token reproduzida acima. Taxas de modelo de Anthropic, Pricing, platform.claude.com/docs/en/about-claude/pricing, mesma data: Claude Haiku 4.5 a $1 e $5 por milhão de input e output tokens.

  6. Google, Image understanding, ai.google.dev/gemini-api/docs/image-understanding, acessado em 2026-09-07. «258 tokens se ambas as dimensões <= 384 pixels. Imagens maiores são divididas em tiles de 768x768 pixels, cada um custando 258 tokens», com a fórmula da unidade de corte — floor(min(width, height) / 1.5), dimensões divididas por ela e multiplicadas — e o exemplo trabalhado de 960 × 540 dando 3 × 2 = 6 tiles. O Google chama isso de «uma fórmula aproximada»; a invariância de escala derivada acima é uma propriedade da fórmula como publicada. Entrada de áudio na mesma família é 32 tokens por segundo de áudio (ai.google.dev/gemini-api/docs/audio, mesma data).

  7. OpenAI, Images and vision, developers.openai.com/api/docs/guides/images-vision, acessado em 2026-09-07. Fonte da regra baseada em patches (patches de 32 × 32, patch_count = ceil(width/32)×ceil(height/32), a fórmula shrink_factor e seu ajuste inteiro, o limite de rejeição de 30.000 patches); a tabela de dimensionamento de modelos, incluindo que low em gpt-5.4 usa um limite de 2048 pixels e um orçamento de 6.144 patches «portanto pode usar mais tokens que high», contra o orçamento de 2.500 patches de high; a tabela de multiplicadores (1,2 para as famílias GPT-5.x, 1,62 para gpt-4.1-mini, 2,46 para gpt-4.1-nano); os dois exemplos trabalhados reproduzidos acima (1024 × 1024 → 1229 tokens, 2048 × 2048 → 3000 tokens); as regras baseadas em tiles para modelos mais antigos (base mais tiles de 512 pixels, 85 + 170 em gpt-4o); e a lista de limitações citada na caixa de visão. 2

  8. Ho, J., Jain, A. and Abbeel, P. Denoising Diffusion Probabilistic Models. arXiv:2006.11239 (2020). O agendamento de ruído direto, a reparametrização que transforma o objetivo em prever o ruído adicionado e o loop de amostragem.

  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 o processo de diffusion em um espaço latente comprimido, que foi o que tornou a contagem fixa de etapas acessível o bastante para vender por imagem.

  10. Prince, S. J. D. Understanding Deep Learning (MIT Press, 2023), capítulo 18. A delegação declarada para tudo que este capítulo pulou sobre diffusion — o limite variacional, os agendamentos de ruído, classifier-free guidance e as famílias de samplers. Hu, E. et al., LoRA: Low-Rank Adaptation of Large Language Models, arXiv:2106.09685 (2021), é o adaptador em si, apresentado no Capítulo 11 em um modelo de linguagem e usado aqui em um modelo de imagem sem mudança de matemática. Radford, A. et al., Robust Speech Recognition via Large-Scale Weak Supervision (Whisper), arXiv:2212.04356 (2022), é o modelo de transcrição cujo preço por minuto aparece acima.

  11. OpenAI, Image generation, developers.openai.com/api/docs/guides/image-generation, Pricing, developers.openai.com/api/docs/pricing, e a página do modelo gpt-image-1, todos acessados em 2026-09-07. A página do modelo gpt-image-2 não traz seção de preços; suas taxas vêm da página de preços acima. A página do GPT Image 1 publica entrada de texto a $5.00, entrada de imagem a $10.00 e saída de imagem a $40.00 por milhão de tokens ao lado da tabela por imagem usada na derivação acima. Também: a tabela de output-token para modelos anteriores ao gpt-image-2 (272 / 408 / 400 baixa, 1056 / 1584 / 1568 média, 4160 / 6240 / 6208 alta, para quadrado, retrato e paisagem); as tabelas de preço por imagem para GPT Image 2, 1.5, 1 e 1 Mini usadas nas derivações acima; a frase «uma resolução não quadrada maior às vezes pode produzir menos output tokens do que uma resolução menor ou quadrada na mesma configuração de qualidade»; a observação de que cada imagem parcial em streaming custa 100 image output tokens extras; e as taxas do gpt-image-2 de $8.00 entrada de imagem, $2.00 entrada de imagem em cache, $30.00 saída de imagem e $5.00 entrada de texto por milhão de tokens. Taxas de modelos de texto usadas nas comparações: gpt-5.6-terra a $2.00 entrada, $0.20 entrada em cache e $12.00 saída, gpt-5.6-luna a $0.20 e $1.20, faixa padrão, context curto. Vídeo: sora-2 a $0.10 por segundo em 720p e sora-2-pro a $0.30, $0.50 e $0.70 em 720p, 1024p e 1080p. Transcrição: $0.006, $0.0045, $0.003 e $0.017 por minuto para gpt-4o-transcribe, gpt-transcribe, gpt-4o-mini-transcribe e gpt-live-transcribe. 2

  12. Google, Gemini Developer API pricing, ai.google.dev/gemini-api/docs/pricing, acessado em 2026-09-07. Gemini 3.1 Flash-Lite a $0.25 por milhão de input tokens (texto, imagem e vídeo) e $1.50 de saída. Gemini 3.1 Flash Image: saída de imagem a $60 por milhão de tokens, com as equivalências publicadas de 747, 1120, 1680 e 2520 tokens para imagens 0.5K, 1K, 2K e 4K e seus preços por imagem de $0.045, $0.067, $0.101 e $0.151. Gemini 3.1 Flash TTS: $1.00 de entrada de texto, $20.00 de saída de áudio, «audio tokens correspondem a 25 tokens por segundo de áudio». Gemini 3.1 Flash Live Preview: $0.75 texto e «$3.00 ou $0.005/min» entrada de áudio, «$4.50 (texto) $12.00 ou $0.018/min (áudio)» saída. Veo 3.1 por segundo com áudio: $0.40 em 720p e 1080p e $0.60 em 4K padrão; $0.10, $0.12 e $0.30 rápido. Gemini Omni Flash cobra saída de vídeo «a uma taxa de 5.792 tokens por segundo de vídeo 720p», que a mesma nota converte para cerca de $0.10 por segundo — a declaração publicada mais clara em qualquer lugar de que um preço de mídia por segundo é um preço por token. 2

  13. Páginas de modelo da OpenAI para tts-1, tts-1-hd e gpt-4o-mini-tts, developers.openai.com/api/docs/models, acessadas em 2026-09-07. tts-1 a $15.00 e tts-1-hd a $30.00 por milhão de caracteres; gpt-4o-mini-tts a $0.60 por milhão de text input tokens e $12.00 por milhão de audio output tokens — o mesmo fornecedor, a mesma operação, duas unidades.

  14. OpenAI, Managing costs (Realtime API), developers.openai.com/api/docs/guides/realtime-costs, acessado em 2026-09-07. «Audio tokens em mensagens do usuário são 1 token por 100 ms de áudio, enquanto audio tokens em mensagens do assistant são 1 token por 50ms de áudio.» Também: «A conversa inteira é enviada ao modelo para cada Response... portanto turnos posteriores na sessão serão mais caros»; custos acumulam quando uma Response é criada; o exemplo trabalhado de dois turnos cuja acumulação a tabela acima reproduz; e o payload de uso response.done com suas divisões input_token_details e output_token_details. Taxas da página de preços, mesma data: áudio gpt-realtime-2.1 a $32.00 entrada, $0.40 entrada em cache e $64.00 saída por milhão de tokens, texto a $4.00, $0.40 e $24.00, entrada de imagem a $5.00. 2

  15. Replicate, Pricing, replicate.com/pricing, acessado em 2026-09-07. Nvidia A100 (80GB) a $0.001400 por segundo e $5.04 por hora; Nvidia H100 a $0.001525 por segundo e $5.49 por hora.

Pronto para deixar a LIA escolher por você?

Crie com todos os modelos de IA em um só lugar — comece grátis hoje.