<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Benchmarks-De-Llm | AkitaOnRails.com</title><link>https://www.akitaonrails.com/tags/benchmarks-de-llm/</link><description>Blog do Fabio Akita do Canal do YouTube 'Akitando' falando sobre tecnologia, carreira e coisas geek.</description><generator>Hugo -- gohugo.io</generator><language>pt-BR</language><lastBuildDate>Fri, 30 Oct 2026 02:34:21 +0000</lastBuildDate><atom:link href="https://www.akitaonrails.com/tags/benchmarks-de-llm/index.xml" rel="self" type="application/rss+xml"/><item><title>LLM Benchmark v4: Gemini 4 Argon, GPT Sol 6.1 Terra, Kimi K3.1 Pro, Claude Sonnet 5.5</title><link>https://www.akitaonrails.com/2026/10/28/llm-benchmark-v4-gemini-4-argon-gpt-sol-6-1-terra-kimi-k3-1-pro-claude-sonnet-5-5/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/10/28/llm-benchmark-v4-gemini-4-argon-gpt-sol-6-1-terra-kimi-k3-1-pro-claude-sonnet-5-5/</guid><pubDate>Wed, 28 Oct 2026 10:00:00 -0300</pubDate><description>&lt;p&gt;Passei as últimas semanas falando bastante de LLM open source, hardware local, B300, RTX 5090, Qwen, Basalt. Enquanto isso, os laboratórios comerciais continuaram soltando modelo novo como se ninguém precisasse dormir.&lt;/p&gt;
&lt;p&gt;A &lt;a href="https://www.akitaonrails.com/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/"&gt;última atualização do ranking comercial&lt;/a&gt; tinha adicionado Opus 5.5, GPT 6 Sol e Luna, MiMo 2.6 Pro e Grok 4.7. A conclusão já começava a aparecer: as versões novas estavam melhorando principalmente custo e velocidade. Qualidade tinha virado uma briga de poucos pontos, com modelos da mesma família trocando de posição entre uma rodada e outra.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Passei as últimas semanas falando bastante de LLM open source, hardware local, B300, RTX 5090, Qwen, Basalt. Enquanto isso, os laboratórios comerciais continuaram soltando modelo novo como se ninguém precisasse dormir.</p>
<p>A <a href="/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/">última atualização do ranking comercial</a> tinha adicionado Opus 5.5, GPT 6 Sol e Luna, MiMo 2.6 Pro e Grok 4.7. A conclusão já começava a aparecer: as versões novas estavam melhorando principalmente custo e velocidade. Qualidade tinha virado uma briga de poucos pontos, com modelos da mesma família trocando de posição entre uma rodada e outra.</p>
<p>Agora entraram <strong>Gemini 4 Argon, GPT-6.1 Sol, GPT-6.1 Terra, Kimi K3.1 Pro, Claude Sonnet 5.5 e Muse Wonder</strong>. Os seis caíram no Tier A.</p>
<p>E acho que esta será a última atualização que faço do ranking comercial, ou uma das últimas. Os modelos ficaram próximos demais.</p>
<h2>Lembrando o que este benchmark mede<span class="hx:absolute hx:-mt-20" id="lembrando-o-que-este-benchmark-mede"></span>
    <a href="#lembrando-o-que-este-benchmark-mede" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">llm-coding-benchmark</a> não tenta medir &ldquo;inteligência geral&rdquo;. O v4 coloca cada agente pra desenvolver um sistema Rails durante sete sprints. No caminho, eu planto 14 sabotagens silenciosas: falhas de autorização, XSS, SQL injection, segredo fixo no código, CORS aberto, índice removido, teste adulterado pra aceitar comportamento inseguro.</p>
<p>Se o modelo encontra e corrige sozinho, recebe o peso inteiro. Se só conserta depois que a sabotagem é revelada, recebe 40%. Se nem depois disso resolve, recebe zero. A pontuação final é normalizada pra 100.</p>
<p>Portanto, esta é uma régua estreita de <strong>vigilância durante programação agentic de longa duração</strong>. Não mede se o modelo escreve o melhor texto, resolve matemática, entende direito tributário, desenha interface bonita ou depura firmware. Nem sequer mede tudo que importa em programação.</p>
<p>Nenhum benchmark consegue fazer isso, inclusive os mais populares. Modelos dessa classe podem ter bilhões de parâmetros, e as combinações entre prompt, contexto, ferramentas, harness, temperatura e estado anterior da conversa crescem muito além do que qualquer suíte consegue exercitar. Seria preciso testar praticamente tudo que pode entrar e sair do modelo. É impossível.</p>
<p>Por isso, discutir se o benchmark A é &ldquo;melhor&rdquo; que o benchmark B costuma começar pela pergunta errada. Cada um ilumina uma superfície minúscula. Testes estilo LeetCode e o <a href="https://arxiv.org/abs/2107.03374"target="_blank" rel="noopener">HumanEval</a> medem resolução de problemas curtos e bem definidos. SWE-bench mede correção de issues em repositórios existentes.</p>
<p>O meu acompanha um projeto crescendo por várias horas, com contexto acumulado, decisões anteriores e defeitos plantados que simulam o tipo de problema deixado por outro programador, outra equipe, uma dependência ou até pelo próprio agente.</p>
<p>Essa é uma situação mais próxima da programação real que eu faço, mas continua sendo apenas <strong>o meu recorte</strong>. Quem precisa de um modelo pra passar por qualquer variante possível de teste de contratação estilo LeetCode deve construir uma bateria pra isso. Uma nota excelente nesse tipo de exercício também não responde se o agente consegue manter um projeto por sete sprints, perceber uma autorização quebrada e não aceitar um teste adulterado.</p>
<p>Você precisa testar o seu caso de uso, com o seu código, suas restrições e seus critérios de falha. Foi por isso que deixei o <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">framework inteiro open source</a>: qualquer pessoa pode trocar a aplicação, os prompts, as sabotagens, os pesos e o harness. O ranking publicado aqui responde às minhas perguntas. Use a estrutura pra responder às suas.</p>
<p>Tem mais: já medi o mesmo GPT 5.5, no mesmo harness e com o mesmo teste, fazendo 100 numa rodada e 91 em outra. Essa é uma diferença de nove pontos criada só pela variância de uma amostra. LLMs geram respostas probabilísticas. Dois modelos separados por dois ou três pontos estão, na prática, no mesmo bolo.</p>
<blockquote>
  <p><strong>Leia Tier A como uma faixa de modelos competentes, não como pódio olímpico.</strong> O primeiro colocado desta tabela não virou automaticamente o melhor modelo do mundo.</p>

</blockquote>
<h2>Ranking comercial atualizado<span class="hx:absolute hx:-mt-20" id="ranking-comercial-atualizado"></span>
    <a href="#ranking-comercial-atualizado" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pra não misturar placa local, pod alugado e API, a tabela abaixo mostra apenas modelos que testei por uma rota gerenciada: assinatura, API, OAuth ou plano comercial. Alguns têm pesos abertos, como Kimi e GLM, mas aqui foram usados pelo serviço do fornecedor.</p>
<p>Os modelos desta rodada estão em <strong>negrito</strong>. Mantive apenas o Tier A, porque é onde existe uma escolha séria pra trabalho diário.</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Nota</th>
          <th style="text-align: right">Custo da rodada</th>
          <th style="text-align: right">Tempo</th>
          <th>Harness</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Gemini 4 Argon (high)</strong></td>
          <td style="text-align: right"><strong>100,0</strong></td>
          <td style="text-align: right"><strong>$0 marginal (OAuth)</strong></td>
          <td style="text-align: right"><strong>114 min</strong></td>
          <td>Antigravity</td>
      </tr>
      <tr>
          <td>GPT-6 Astra</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">$30,55</td>
          <td style="text-align: right">100 min</td>
          <td>Codex</td>
      </tr>
      <tr>
          <td>Claude Opus 5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">~$71</td>
          <td style="text-align: right">145 min</td>
          <td>Claude Code</td>
      </tr>
      <tr>
          <td>Claude Fable 5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">~$50</td>
          <td style="text-align: right">~85 min</td>
          <td>Claude Code</td>
      </tr>
      <tr>
          <td>Claude Opus 5.5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">$16,63</td>
          <td style="text-align: right">64 min</td>
          <td>Claude Code</td>
      </tr>
      <tr>
          <td>GPT 5.6 Sol</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">$20,37</td>
          <td style="text-align: right">317 min</td>
          <td>Codex</td>
      </tr>
      <tr>
          <td>GPT 5.6 Terra</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">$9,52</td>
          <td style="text-align: right">80 min</td>
          <td>Codex</td>
      </tr>
      <tr>
          <td>GPT 5.5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">$34,69</td>
          <td style="text-align: right">117 min</td>
          <td>Codex</td>
      </tr>
      <tr>
          <td>Grok 4.6</td>
          <td style="text-align: right">98,5</td>
          <td style="text-align: right">$13,00</td>
          <td style="text-align: right">67 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td><strong>GPT-6.1 Sol</strong></td>
          <td style="text-align: right"><strong>97,0</strong></td>
          <td style="text-align: right"><strong>~$8,12</strong></td>
          <td style="text-align: right"><strong>65 min</strong></td>
          <td>Codex</td>
      </tr>
      <tr>
          <td><strong>Muse Wonder 1.0</strong></td>
          <td style="text-align: right"><strong>97,0</strong></td>
          <td style="text-align: right"><strong>plano Power (flat-rate)</strong></td>
          <td style="text-align: right"><strong>126 min úteis / quase 15 dias</strong></td>
          <td>Muse Code</td>
      </tr>
      <tr>
          <td><strong>GPT-6.1 Terra</strong></td>
          <td style="text-align: right"><strong>96,8</strong></td>
          <td style="text-align: right"><strong>~$1,69</strong></td>
          <td style="text-align: right"><strong>21 min</strong></td>
          <td>Codex</td>
      </tr>
      <tr>
          <td>Claude Fable 5.1</td>
          <td style="text-align: right">95,5</td>
          <td style="text-align: right">~$51</td>
          <td style="text-align: right">133 min</td>
          <td>Claude Code</td>
      </tr>
      <tr>
          <td>Sakana Fugu Ultra v2</td>
          <td style="text-align: right">95,5</td>
          <td style="text-align: right">$122,01</td>
          <td style="text-align: right">294 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>GPT 6 Luna</td>
          <td style="text-align: right">95,5</td>
          <td style="text-align: right">~$0,84</td>
          <td style="text-align: right">122 min</td>
          <td>Codex</td>
      </tr>
      <tr>
          <td>GPT 5.6 Luna</td>
          <td style="text-align: right">95,0</td>
          <td style="text-align: right">$10,04</td>
          <td style="text-align: right">123 min</td>
          <td>Codex</td>
      </tr>
      <tr>
          <td>Nex N2.5 Pro</td>
          <td style="text-align: right">94,0*</td>
          <td style="text-align: right">grátis</td>
          <td style="text-align: right">480 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>GLM 5.3</td>
          <td style="text-align: right">94,0</td>
          <td style="text-align: right">plano flat-rate</td>
          <td style="text-align: right">215 min</td>
          <td>zcode</td>
      </tr>
      <tr>
          <td>DeepSeek V4.1 Flash</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: right">$1,21</td>
          <td style="text-align: right">172 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td><strong>Kimi K3.1 Pro</strong></td>
          <td style="text-align: right"><strong>92,11</strong></td>
          <td style="text-align: right"><strong>~$12,67</strong></td>
          <td style="text-align: right"><strong>110 min</strong></td>
          <td>Kimi CLI</td>
      </tr>
      <tr>
          <td>MiMo V2.6 Pro</td>
          <td style="text-align: right">92,0</td>
          <td style="text-align: right">$1,22</td>
          <td style="text-align: right">308 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>Claude Sonnet 5</td>
          <td style="text-align: right">91,0</td>
          <td style="text-align: right">~$27</td>
          <td style="text-align: right">112 min</td>
          <td>Claude Code</td>
      </tr>
      <tr>
          <td>GPT 6 Sol</td>
          <td style="text-align: right">91,0</td>
          <td style="text-align: right">~$8,35</td>
          <td style="text-align: right">73 min</td>
          <td>Codex</td>
      </tr>
      <tr>
          <td>Gemini 3.8 Flash (OpenRouter)</td>
          <td style="text-align: right">90,5</td>
          <td style="text-align: right">$15,98</td>
          <td style="text-align: right">97 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>Gemini 3.8 Flash (Antigravity)</td>
          <td style="text-align: right">89,5</td>
          <td style="text-align: right">$0 marginal (OAuth)</td>
          <td style="text-align: right">120 min</td>
          <td>Antigravity</td>
      </tr>
      <tr>
          <td>Muse Spark 1.3</td>
          <td style="text-align: right">88,75</td>
          <td style="text-align: right">$13,31</td>
          <td style="text-align: right">150 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td><strong>Claude Sonnet 5.5</strong></td>
          <td style="text-align: right"><strong>88,0</strong></td>
          <td style="text-align: right"><strong>~$3,90</strong></td>
          <td style="text-align: right"><strong>27 min</strong></td>
          <td>Claude Code</td>
      </tr>
      <tr>
          <td>Grok 4.5</td>
          <td style="text-align: right">88,0</td>
          <td style="text-align: right">$6,19</td>
          <td style="text-align: right">48 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>Claude Opus 4.6</td>
          <td style="text-align: right">87,5</td>
          <td style="text-align: right">$25,64</td>
          <td style="text-align: right">89 min</td>
          <td>Claude Code</td>
      </tr>
      <tr>
          <td>Kimi K2.7</td>
          <td style="text-align: right">87,25</td>
          <td style="text-align: right">$7,75</td>
          <td style="text-align: right">175 min</td>
          <td>Kimi CLI</td>
      </tr>
      <tr>
          <td>MiMo V2.5 Pro</td>
          <td style="text-align: right">86,5</td>
          <td style="text-align: right">$1,03</td>
          <td style="text-align: right">158 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>Qwen3.8 Flash</td>
          <td style="text-align: right">86,5</td>
          <td style="text-align: right">$1,17</td>
          <td style="text-align: right">149 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>DeepSeek V4 Flash</td>
          <td style="text-align: right">86,0</td>
          <td style="text-align: right">$0,97</td>
          <td style="text-align: right">111 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>Claude Opus 4.8</td>
          <td style="text-align: right">86,0</td>
          <td style="text-align: right">~$37</td>
          <td style="text-align: right">87 min</td>
          <td>Claude Code</td>
      </tr>
      <tr>
          <td>Claude Sonnet 4.6</td>
          <td style="text-align: right">85,75</td>
          <td style="text-align: right">$18,64</td>
          <td style="text-align: right">91 min</td>
          <td>Claude Code</td>
      </tr>
      <tr>
          <td>Kimi K3</td>
          <td style="text-align: right">85,0</td>
          <td style="text-align: right">$13,79</td>
          <td style="text-align: right">148 min</td>
          <td>Kimi CLI</td>
      </tr>
      <tr>
          <td>DeepSeek V4 Flash 0731</td>
          <td style="text-align: right">85,0</td>
          <td style="text-align: right">$1,94</td>
          <td style="text-align: right">194 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>GLM 5.3 Flash</td>
          <td style="text-align: right">84,25</td>
          <td style="text-align: right">plano flat-rate</td>
          <td style="text-align: right">296 min</td>
          <td>zcode</td>
      </tr>
      <tr>
          <td>DeepSeek V4 Pro 0813</td>
          <td style="text-align: right">84,0</td>
          <td style="text-align: right">$4,49</td>
          <td style="text-align: right">152 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>Step 3.7 Flash</td>
          <td style="text-align: right">83,75</td>
          <td style="text-align: right">$4,15</td>
          <td style="text-align: right">118 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>Grok 4.7</td>
          <td style="text-align: right">83,5</td>
          <td style="text-align: right">$27,94</td>
          <td style="text-align: right">120 min</td>
          <td>OpenCode</td>
      </tr>
      <tr>
          <td>Genesys PI House</td>
          <td style="text-align: right">83,5</td>
          <td style="text-align: right">~$460</td>
          <td style="text-align: right">68 min</td>
          <td>OpenCode</td>
      </tr>
  </tbody>
</table>
<p>Os custos com <code>~</code> são equivalentes calculados pela contagem de tokens e pela tabela pública, não a fatura que recebi. Claude Code, Codex e Muse Code rodam por assinatura; Antigravity usa OAuth; zcode cobra plano fixo. No Wonder, 126 minutos somam apenas as sete execuções concluídas. As tentativas travadas e as esperas de quota ficaram fora. Compare custo e tempo com cuidado, principalmente entre harnesses diferentes.</p>
<p>Terra e Kimi tiveram o item #8 marcado como não aplicável porque o estado exato daquele teste não permitia uma avaliação justa. O denominador deles ficou em 38, em vez de 40, e a nota foi normalizada. Nex continua com a ressalva antiga: encontrou os problemas, mas deixou o trabalho sem commit.</p>
<h2>O que cada modelo mostrou<span class="hx:absolute hx:-mt-20" id="o-que-cada-modelo-mostrou"></span>
    <a href="#o-que-cada-modelo-mostrou" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Gemini 4 Argon: finalmente chegou no topo<span class="hx:absolute hx:-mt-20" id="gemini-4-argon-finalmente-chegou-no-topo"></span>
    <a href="#gemini-4-argon-finalmente-chegou-no-topo" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Argon foi o único desta leva que pegou as 14 sabotagens antes da revelação: <strong>40 de 40, nota 100</strong>. É o resultado que faltava pro Gemini entrar sem asterisco na conversa dos melhores agentes de programação.</p>
<p>O <a href="https://blog.google/intl/en-mena/product-updates/explore-get-answers/gemini-4-argon-built-to-solve-your-hardest-problems/"target="_blank" rel="noopener">anúncio oficial do Gemini 4 Argon</a> posiciona o modelo justamente pra problemas difíceis e disponibiliza acesso pelo Antigravity e pela API. O preço introdutório da API é US$ 2 por milhão de tokens de entrada e US$ 10 de saída; depois de 30 de novembro sobe pra US$ 4 e US$ 20.</p>
<p>No meu teste, usei Antigravity pela assinatura, então o custo marginal foi zero. Levou 114 minutos e resolveu tudo sem precisar que eu apontasse onde estavam as bombas.</p>
<h3>GPT-6.1 Sol: quase perfeito, sem desperdício<span class="hx:absolute hx:-mt-20" id="gpt-61-sol-quase-perfeito-sem-desperdício"></span>
    <a href="#gpt-61-sol-quase-perfeito-sem-desperd%c3%adcio" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Sol fez <strong>97,0</strong>. Encontrou 13 das 14 sabotagens sozinho e corrigiu a última depois da revelação. Levou 65 minutos, praticamente o mesmo tempo do Opus 5.5 e bem menos que os 317 minutos do antigo GPT 5.6 Sol.</p>
<p>Pela <a href="https://developers.openai.com/api/docs/changelog?mw_entry=2026-10-20-c57e1ddc3363933d"target="_blank" rel="noopener">tabela oficial da OpenAI</a>, custa US$ 2 por milhão de tokens de entrada e US$ 10 de saída. Aplicando essa tabela aos tokens da rodada, o equivalente ficou em cerca de US$ 8,12.</p>
<p>Não fez 100. Também não existe diferença prática demonstrável entre 97 e 100 numa metodologia em que o mesmo modelo já variou nove pontos. O dado útil é outro: Sol continua forte e ficou rápido.</p>
<h3>Muse Wonder: excelente modelo, experiência péssima<span class="hx:absolute hx:-mt-20" id="muse-wonder-excelente-modelo-experiência-péssima"></span>
    <a href="#muse-wonder-excelente-modelo-experi%c3%aancia-p%c3%a9ssima" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Muse Wonder também fez <strong>97,0</strong>. Encontrou 13 das 14 sabotagens sem ajuda e terminou sem nenhuma pendência. A única perda veio no item composto de desempenho: corrigiu o N+1 sozinho, mas só restaurou o índice <code>messages(role, created_at)</code> depois da revelação. Foi a mesma aritmética do Sol, com 38 pontos detectados espontaneamente e dois pontos entrando com peso de 40%.</p>
<p>O resultado técnico foi forte. Wonder encontrou sozinho falhas de autorização, SQL injection, XSS, CORS aberto, dependência vulnerável e segredo fixo no código. Também adicionou testes de regressão. Olhando apenas o código entregue, pertence ao topo do Tier A.</p>
<h4>Quinze dias pra terminar um teste de duas horas<span class="hx:absolute hx:-mt-20" id="quinze-dias-pra-terminar-um-teste-de-duas-horas"></span>
    <a href="#quinze-dias-pra-terminar-um-teste-de-duas-horas" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Comecei a rodada em <strong>13 de outubro</strong>. A primeira tentativa trabalhou por cerca de 33 minutos e bateu num HTTP 429 de quota. Fiz upgrade pro plano <strong>Power</strong>, anunciado pela <a href="https://dev.meta.ai/products/muse-code"target="_blank" rel="noopener">Meta por US$ 50 mensais e 20 vezes o uso do plano básico</a>, e ainda assim voltei a bater no limite. Em 14 de outubro, seis sprints estavam concluídas, mas a quota semanal bloqueou a revelação até o dia 19.</p>
<p>Deixei o benchmark de lado por alguns dias depois disso e só rodei a última sprint hoje, 28 de outubro. Minha pausa também entra nessa conta de quase 15 dias. A medida comparável da tabela é <strong>126 minutos de execuções bem-sucedidas</strong>. A experiência real incluiu várias tentativas em que o Muse Code ficou silencioso por até uma hora rodando RSpec e testes de sistema, além das esperas de quota.</p>
<blockquote>
  <p><strong>A nota do modelo foi 97. A experiência do produto foi a pior de todo o benchmark v4.</strong></p>

</blockquote>
<p>A própria Meta viu o problema. Em 12 de outubro, Alexandr Wang <a href="https://x.com/alexandr_wang/status/2109714291062620560"target="_blank" rel="noopener">reconheceu um bug</a> que fazia Wonder e Wonder Full consumirem quota rápido demais; a Meta corrigiu e resetou os limites. Em 14 de outubro, a versão 1.4.8 <a href="https://x.com/mjdouglas/status/2110466975474319865"target="_blank" rel="noopener">recebeu mais correções de eficiência</a>, incluindo um erro que mandava parte dos usuários em Contributor mode pros modelos cobrados integralmente. Houve outro reset no dia seguinte.</p>
<p>Existe uma ressalva importante no meu ambiente. O benchmark isola <code>HOME</code> e <code>XDG_CONFIG_HOME</code> pra evitar que skills ou plugins pessoais contaminem o teste. A <a href="https://dev.meta.ai/docs/muse-code/subscriptions"target="_blank" rel="noopener">documentação atual da Meta</a> diz que <code>muse exec</code> sem arquivo de configurações salvo inicia com Contributor mode desligado, o que oferece menos uso em troca de não entregar o código pra treinamento. Esse detalhe pode ter reduzido minha quota. Mesmo assim, o plano Power continuou incapaz de sustentar uma única rodada v4, e o próprio fornecedor confirmou problemas de contabilização na mesma semana.</p>
<p>Minha conclusão fica restrita ao que medi: <strong>Muse Wonder é muito competente, mas eu não confiaria hoje na assinatura e no harness pra uma sessão longa sem interrupção</strong>. Outro usuário, em outra configuração e depois das correções, pode ter uma experiência melhor.</p>
<h3>GPT-6.1 Terra: a relação custo, velocidade e qualidade mais interessante<span class="hx:absolute hx:-mt-20" id="gpt-61-terra-a-relação-custo-velocidade-e-qualidade-mais-interessante"></span>
    <a href="#gpt-61-terra-a-rela%c3%a7%c3%a3o-custo-velocidade-e-qualidade-mais-interessante" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Terra terminou com <strong>96,8</strong>, praticamente empatado com Sol, em <strong>21 minutos</strong>. O custo equivalente foi só <strong>US$ 1,69</strong>.</p>
<p>A <a href="https://developers.openai.com/api/docs/models/gpt-6.1-terra"target="_blank" rel="noopener">página oficial do GPT-6.1 Terra</a> lista US$ 1 por milhão de tokens de entrada e US$ 5 de saída, metade do Sol. Ele ainda oferece janela de contexto de 1,05 milhão de tokens, embora requisições acima de 272 mil tokens recebam multiplicador de preço.</p>
<p>Num dos itens, o Terra percebeu parte do problema sozinho, mas só fechou a correção inteira na revelação. Foi isso que tirou os poucos pontos. Mesmo assim, olhando o que interessa pra trabalhar, <strong>Terra é o resultado mais forte desta rodada</strong>: qualidade no mesmo bairro do Sol, três vezes mais rápido e cerca de cinco vezes mais barato nesta execução.</p>
<h3>Kimi K3.1 Pro: competitivo, mas precisa correr mais<span class="hx:absolute hx:-mt-20" id="kimi-k31-pro-competitivo-mas-precisa-correr-mais"></span>
    <a href="#kimi-k31-pro-competitivo-mas-precisa-correr-mais" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Kimi K3.1 Pro fez <strong>92,11</strong>, sem deixar nenhuma sabotagem sem correção no final. Dois grupos de problemas só foram fechados depois da revelação. O lado ruim foi o tempo: <strong>110 minutos</strong>, quase cinco vezes o Terra, com custo equivalente de <strong>US$ 12,67</strong>.</p>
<p>O <a href="https://www.kimi.com/en/blog/kimi-k3-1-pro"target="_blank" rel="noopener">K3.1 Pro</a> tem contexto de até 1 milhão de tokens e será disponibilizado com pesos abertos. A Kimi também oferece uma rota Highspeed, anunciada como duas a três vezes mais rápida, em troca de preço e consumo de quota maiores. A <a href="https://www.kimi.com/resources/kimi-k3-1-pro-pricing"target="_blank" rel="noopener">tabela pública</a> cobra ¥13 de entrada e ¥68 de saída por milhão de tokens na rota regular; a Highspeed dobra esses valores.</p>
<p>Eu gosto do Kimi e uso no dia a dia. A nota confirma que ele está no grupo competente. O gargalo agora é latência. Modelo bom que me deixa esperando duas horas pra completar a mesma campanha que o Terra fez em 21 minutos perde utilidade prática.</p>
<h3>Claude Sonnet 5.5: o score isolado conta a história errada<span class="hx:absolute hx:-mt-20" id="claude-sonnet-55-o-score-isolado-conta-a-história-errada"></span>
    <a href="#claude-sonnet-55-o-score-isolado-conta-a-hist%c3%b3ria-errada" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Sonnet 5.5 fez <strong>88,0</strong>. Pegou a maior parte sozinho, resolveu mais alguns itens na revelação e não terminou de corrigir uma sabotagem composta: fechou a vulnerabilidade, mas deixou um teste de guarda adulterado com <code>assert true</code>. Esse tipo de detalhe é exatamente o que meu teste tenta encontrar. O sistema pode estar corrigido hoje, mas o teste inútil deixa a porta aberta pra regressão amanhã.</p>
<p>Ao mesmo tempo, ele concluiu tudo em <strong>27 minutos</strong>, com custo equivalente de <strong>US$ 3,90</strong>. A <a href="https://www.anthropic.com/claude-sonnet-5-5"target="_blank" rel="noopener">Anthropic posiciona o Sonnet 5.5</a> como modelo de trabalho diário, com Opus reservado pra decisões mais difíceis. O preço é US$ 2 de entrada e US$ 10 de saída por milhão de tokens, e a empresa diz que a geração ficou mais de 30% mais rápida que no Sonnet 5.</p>
<p>Então não, 88 não transforma Sonnet em modelo ruim. Continua Tier A, é rápido e custa pouco. O gotcha concreto desta rodada é: pra review de autorização, teste de segurança e mudança delicada, eu ainda pediria uma segunda passada de Opus, Fable ou outro modelo forte.</p>
<h2>O modelo mais caro não precisa ficar ligado o dia inteiro<span class="hx:absolute hx:-mt-20" id="o-modelo-mais-caro-não-precisa-ficar-ligado-o-dia-inteiro"></span>
    <a href="#o-modelo-mais-caro-n%c3%a3o-precisa-ficar-ligado-o-dia-inteiro" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Essa rodada reforçou uma mudança importante de hábito. Pra maioria do trabalho, já não preciso manter o modelo mais caro e pesado o tempo todo.</p>
<p>CRUD, refactor, teste, documentação, front-end comum, integração de API, migração de banco: Sonnet 5.5 e GPT-6.1 Terra já dão conta. Eu subiria pra Opus, Fable, Sol ou Astra quando o problema realmente justificar: depuração de driver no kernel, concorrência particularmente traiçoeira, firmware, ajuste delicado de sistema embarcado, incidente de segurança onde um detalhe perdido custa caro.</p>
<p>Usar Fable pra trocar a cor de um botão é como ligar uma escavadeira pra plantar manjericão. Funciona. Só não faz sentido gastar quota nisso.</p>
<p>Até os open source chegaram perto. No <a href="/2026/10/27/llm-benchmark-melhores-llms-open-source-hardware-caseiro/">teste recente de Qwen3.8 Flash-Next numa única RTX 5090</a>, a versão Q2_0 fez 100 nas seis rodadas do teste difícil, três no Strata e três no Basalt. Com Basalt, chegou a 400 tokens por segundo de saída, usando também a RAM do sistema pros experts.</p>
<p>Aquele teste é bem mais fácil que o v4, portanto as notas não podem ser misturadas. Mesmo no v4 completo, porém, já tivemos Qwen local na faixa de Tier A. A distância deixou de ser um abismo.</p>
<h2>O gargalo mudou: velocidade e quota<span class="hx:absolute hx:-mt-20" id="o-gargalo-mudou-velocidade-e-quota"></span>
    <a href="#o-gargalo-mudou-velocidade-e-quota" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Eu uso os modelos do topo todo dia e troco entre eles no mesmo projeto há semanas. Claude de manhã, Codex depois, Kimi quando a quota aperta, às vezes Gemini. Ainda não encontrei uma vantagem mensurável em ser fiel a um fornecedor.</p>
<p>O que eu sinto imediatamente é <strong>velocidade</strong>. GLM 5.3 e DeepSeek V4.1 são bons, mas parecem lentos quando coloco do lado de Terra ou Sonnet. Depois que você se acostuma com resposta rápida, esperar o agente pensar e editar vira a parte irritante do trabalho.</p>
<p>O outro limite é quota. Janelas de cinco horas, limites semanais ou mensais variam conforme fornecedor e plano, mas a realidade é a mesma: meu limite semanal raramente dura uma semana inteira. Fable e Astra queimam a reserva ainda mais rápido. Eu troco porque preciso, não porque quero fazer coleção de logo no terminal.</p>
<p>Foi exatamente pra isso que criei o <a href="https://aimemory.sh"target="_blank" rel="noopener">ai-memory</a>. A memória do projeto não deveria pertencer ao Claude, Codex, Kimi ou Gemini. Com <code>ai-memory run</code>, eu continuo a mesma linha de trabalho em outro harness sem fazer handoff manual, e as decisões consolidadas sobrevivem às compactações de contexto.</p>
<blockquote>
  <p><strong>Modelo e harness são alugados. A sessão, as decisões e a memória do projeto precisam continuar sendo suas.</strong></p>

</blockquote>
<p>Já expliquei a arquitetura e o formato aberto na <a href="/2026/09/02/ai-memory-2-0-melhor-sistema-memoria-agentes-e-times/">versão 2.0 do ai-memory</a>. Quanto mais equivalentes os modelos ficam, mais importante se torna poder trocar sem atrito.</p>
<h2>E os benchmarks famosos?<span class="hx:absolute hx:-mt-20" id="e-os-benchmarks-famosos"></span>
    <a href="#e-os-benchmarks-famosos" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Continue olhando <a href="https://www.swebench.com/"target="_blank" rel="noopener">SWE-bench</a>, que usa issues reais de projetos no GitHub, e <a href="https://www.tbench.ai/"target="_blank" rel="noopener">Terminal-Bench</a>, que mede agentes resolvendo tarefas num terminal. Eles ajudam a descobrir regressão, melhora em uso de ferramentas e algum edge case onde uma família ainda sofre.</p>
<p>Só não confunda isso com o seu trabalho. SWE-bench Verified tem 500 problemas selecionados. Terminal-Bench v4 tem dezenas de tarefas difíceis e revisadas. Nenhum deles sabe como é o seu monorepo, o nível dos seus testes, a qualidade da sua documentação, a biblioteca interna da sua empresa ou aquela API legada que ninguém ousa tocar.</p>
<p>Meu benchmark também não sabe.</p>
<p>Se você precisa escolher modelo pra uma restrição muito específica, construa seu próprio teste com exemplos reais. Se não precisa, escolha qualquer Tier A, use por uma semana e siga trabalhando.</p>
<h2>E o tal GLM 5.5?<span class="hx:absolute hx:-mt-20" id="e-o-tal-glm-55"></span>
    <a href="#e-o-tal-glm-55" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Tem rumor circulando de &ldquo;GLM 5.5 chegando&rdquo;. Até hoje, 28 de outubro, <strong>não existe anúncio oficial com esse nome, data ou preço</strong>. A <a href="https://docs.z.ai/release-notes/new-released"target="_blank" rel="noopener">página oficial de releases da Z.ai</a> continua listando a família GLM 5.3 como a mais recente.</p>
<p>Jie Tang, fundador da Z.ai, respondeu <em>&ldquo;won&rsquo;t take that long&rdquo;</em> quando Elon Musk estimou o primeiro trimestre de 2027 pra China alcançar modelos do nível do Fable. Isso sugere que ele espera esse nível antes, mas não promete um lançamento da Z.ai, muito menos um modelo chamado GLM 5.5 até dezembro. Não vou transformar rumor em linha de ranking.</p>
<p>Kimi K3.1 Pro já está no Tier A. Qwen e GLM já cabem em hardware próprio com quantização. Gemini finalmente encostou nos líderes.</p>
<p>Sonnet e Terra fazem trabalho diário por muito menos. A competição está comprimindo tudo pro mesmo patamar.</p>
<h2>Commoditizou. Ótimo.<span class="hx:absolute hx:-mt-20" id="commoditizou-ótimo"></span>
    <a href="#commoditizou-%c3%b3timo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Não espero mais saltos enormes a cada versão comercial. Espero modelo um pouco mais rápido, barato, econômico em token, com quota melhor e um ou outro edge case corrigido. Isso é maturidade de mercado.</p>
<p>Meu conselho hoje é diferente do conselho de alguns meses atrás:</p>
<ol>
<li>Escolha qualquer modelo Tier A que caiba no seu plano.</li>
<li>Use Sonnet ou Terra no trabalho comum.</li>
<li>Guarde Opus, Fable, Sol ou Astra pros problemas que merecem.</li>
<li>Mantenha uma segunda opção pra quando a quota acabar.</li>
<li>Instale <a href="https://aimemory.sh"target="_blank" rel="noopener">ai-memory</a> pra não ficar preso ao histórico de nenhum harness.</li>
<li>Pare de acompanhar ranking como campeonato de futebol.</li>
</ol>
<p>Benchmark continua útil pra detectar quando uma família alcançou o grupo de cima, como o Argon acabou de fazer. Depois disso, a diferença entre primeiro, quarto e décimo lugar é pequena demais, ruidosa demais e dependente demais da tarefa.</p>
<p>As LLMs de fronteira viraram commodity. Você não está perdendo nenhuma revolução porque passou uma semana sem testar o lançamento da terça-feira. Escolha uma boa, mantenha suas opções abertas e volte a programar.</p>
<h2>Um ranking mais amplo: Engineering Breadth Index<span class="hx:absolute hx:-mt-20" id="um-ranking-mais-amplo-engineering-breadth-index"></span>
    <a href="#um-ranking-mais-amplo-engineering-breadth-index" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Depois de terminar este texto, fiquei com uma pergunta melhor. O que acontece se eu combinar meu resultado com benchmarks que medem outras partes do trabalho?</p>
<p>Montei um índice secundário com quatro superfícies:</p>
<table>
  <thead>
      <tr>
          <th style="text-align: right">Peso</th>
          <th>Benchmark</th>
          <th>O que entra na conta</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">35%</td>
          <td><a href="https://labs.scale.com/leaderboard/swe_bench_pro_public_v2?tab=full"target="_blank" rel="noopener">SWE-bench Pro V2</a></td>
          <td>Resolver issues em repositórios profissionais sem introduzir regressão</td>
      </tr>
      <tr>
          <td style="text-align: right">30%</td>
          <td>llm-coding-benchmark v4</td>
          <td>Projeto longo, contexto acumulado, vigilância e sabotagens</td>
      </tr>
      <tr>
          <td style="text-align: right">25%</td>
          <td><a href="https://www.vals.ai/benchmarks/terminal-bench-4"target="_blank" rel="noopener">Terminal-Bench 4.0</a></td>
          <td>Tarefas no terminal avaliadas por verificadores específicos de cada desafio</td>
      </tr>
      <tr>
          <td style="text-align: right">10%</td>
          <td><a href="https://livecodebench.github.io/leaderboard.html"target="_blank" rel="noopener">LiveCodeBench v6</a></td>
          <td>Problemas algorítmicos curtos e bem definidos</td>
      </tr>
  </tbody>
</table>
<p>Os percentuais brutos não podem ser somados. O líder do Terminal-Bench 4.0 faz 65,15; no meu, vários fizeram 100. Primeiro normalizei cada resultado contra o melhor resultado publicado pelo próprio benchmark naquela fotografia:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">nota normalizada = 100 × nota do modelo / melhor nota do benchmark</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Depois apliquei uma média geométrica ponderada. Ela pune modelos com uma fraqueza grande em alguma dimensão, em vez de deixar uma nota perfeita esconder o buraco.</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">índice = 100 × exp(
</span></span><span class="line"><span class="cl">  0,35 × ln(SWE Pro) +
</span></span><span class="line"><span class="cl">  0,30 × ln(Akita v4) +
</span></span><span class="line"><span class="cl">  0,25 × ln(Terminal-Bench) +
</span></span><span class="line"><span class="cl">  0,10 × ln(LiveCodeBench)
</span></span><span class="line"><span class="cl">)</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Cada parcela entra como número entre zero e um. O índice mede capacidade. Preço, duração, tok/s e quota ficam fora e devem aparecer numa tabela de praticidade separada. Misturar qualidade com dólar faria um modelo fraco e barato parecer tecnicamente melhor.</p>
<h3>O resultado de 28 de outubro de 2026<span class="hx:absolute hx:-mt-20" id="o-resultado-de-28-de-outubro-de-2026"></span>
    <a href="#o-resultado-de-28-de-outubro-de-2026" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Já esbarramos na primeira limitação honesta. Até 28 de outubro, o leaderboard oficial do LiveCodeBench v6 ainda não mostrava resultados pros modelos desta geração. Portanto, <strong>não existe ranking oficial completo de quatro dimensões hoje</strong>.</p>
<p>Calculei o provisório com os outros três benchmarks, que cobrem 90% do peso. Usei o snapshot de 28 de outubro do SWE-bench Pro V2 e a atualização de 26 de outubro do Terminal-Bench 4.0. Renormalizei os pesos disponíveis: 38,89% pro SWE-bench Pro V2, 33,33% pro meu v4 e 27,78% pro Terminal-Bench 4.0. Só entrou modelo com resultado exato nos três. Nada de usar Kimi K3 no lugar do K3.1 ou GPT-5.6 Terra no lugar do 6.1 Terra.</p>
<h3>Ranking provisório<span class="hx:absolute hx:-mt-20" id="ranking-provisório"></span>
    <a href="#ranking-provis%c3%b3rio" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><table>
  <thead>
      <tr>
          <th style="text-align: right">#</th>
          <th>Modelo</th>
          <th style="text-align: right">Akita v4</th>
          <th style="text-align: right">SWE Pro V2</th>
          <th style="text-align: right">Terminal 4.0</th>
          <th>Harness no SWE Pro</th>
          <th style="text-align: right">Cobertura</th>
          <th style="text-align: right">Índice</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT-6 Astra</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">96,90</td>
          <td style="text-align: right">59,60</td>
          <td>Codex</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>96,6</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">2</td>
          <td>Gemini 4 Argon</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">99,22</td>
          <td style="text-align: right">57,58</td>
          <td>mini-SWE-agent</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>96,6</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">3</td>
          <td>Claude Fable 5.1</td>
          <td style="text-align: right">95,5</td>
          <td style="text-align: right">99,10</td>
          <td style="text-align: right">58,08</td>
          <td>Claude Code</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>95,3</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">4</td>
          <td>Claude Opus 5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">99,40</td>
          <td style="text-align: right">53,53</td>
          <td>Claude Code</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>94,7</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">5</td>
          <td>Claude Sonnet 5.5</td>
          <td style="text-align: right">88,0</td>
          <td style="text-align: right">95,79</td>
          <td style="text-align: right">64,14</td>
          <td>mini-SWE-agent</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>94,1</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">6</td>
          <td>GPT-6.1 Sol</td>
          <td style="text-align: right">97,0</td>
          <td style="text-align: right">96,11</td>
          <td style="text-align: right">55,05</td>
          <td>mini-SWE-agent</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>93,2</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">7</td>
          <td>GPT-5.6 Sol</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">95,50</td>
          <td style="text-align: right">37,88</td>
          <td>Codex</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>84,7</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">8</td>
          <td>GLM 5.3</td>
          <td style="text-align: right">94,0</td>
          <td style="text-align: right">95,60</td>
          <td style="text-align: right">38,89</td>
          <td>mini-SWE-agent</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>83,6</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td>GPT-5.6 Terra</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">92,37</td>
          <td style="text-align: right">22,73</td>
          <td>Codex</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>72,5</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td>Gemini 3.8 Flash</td>
          <td style="text-align: right">89,5</td>
          <td style="text-align: right">94,86</td>
          <td style="text-align: right">19,70</td>
          <td>mini-SWE-agent</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>67,9</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">11</td>
          <td>Kimi K3</td>
          <td style="text-align: right">85,0</td>
          <td style="text-align: right">97,70</td>
          <td style="text-align: right">17,17</td>
          <td>mini-SWE-agent</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>65,0</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">12</td>
          <td>Claude Sonnet 5</td>
          <td style="text-align: right">91,0</td>
          <td style="text-align: right">93,15</td>
          <td style="text-align: right">10,61</td>
          <td>Claude Code</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>57,1</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">13</td>
          <td>Muse Spark Open</td>
          <td style="text-align: right">69,5</td>
          <td style="text-align: right">95,02</td>
          <td style="text-align: right">6,57</td>
          <td>mini-SWE-agent</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>46,0</strong></td>
      </tr>
  </tbody>
</table>
<p>O Terminal-Bench 4.0 usa mini-SWE-agent em todas as linhas. O SWE-bench Pro V2 mistura mini-SWE-agent com os harnesses nativos mostrados na tabela. No meu v4, cada linha mantém a rota documentada naquela rodada. Gemini 3.8 Flash é a execução no Antigravity; Muse Spark Open rodou self-hosted em quatro B300, pelo OpenCode.</p>
<p>Este é um ranking de <strong>modelo nas condições publicadas por cada benchmark</strong>, com influência real do harness. Não serve pra isolar cientificamente apenas os pesos do modelo.</p>
<h3>Por que a lista para no 13<span class="hx:absolute hx:-mt-20" id="por-que-a-lista-para-no-13"></span>
    <a href="#por-que-a-lista-para-no-13" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Eu queria chegar pelo menos a 20 modelos, mas o cruzamento honesto acaba aqui. O SWE-bench Pro V2 publica 16 resultados. Desses, só 13 têm exatamente o mesmo modelo testado também no Terminal-Bench 4.0 e no meu v4. Os próximos candidatos esbarram numa lacuna:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Akita v4</th>
          <th style="text-align: right">SWE Pro V2</th>
          <th style="text-align: right">Terminal 4.0</th>
          <th>O que falta</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Claude Opus 5.5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">n/d</td>
          <td style="text-align: right">65,15</td>
          <td>SWE Pro V2</td>
      </tr>
      <tr>
          <td>Kimi K3.1 Pro</td>
          <td style="text-align: right">92,11</td>
          <td style="text-align: right">n/d</td>
          <td style="text-align: right">63,64</td>
          <td>SWE Pro V2</td>
      </tr>
      <tr>
          <td>GPT-6.1 Terra</td>
          <td style="text-align: right">96,8</td>
          <td style="text-align: right">n/d</td>
          <td style="text-align: right">49,49</td>
          <td>SWE Pro V2</td>
      </tr>
      <tr>
          <td>Claude Fable 5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">n/d</td>
          <td style="text-align: right">41,41</td>
          <td>SWE Pro V2</td>
      </tr>
      <tr>
          <td>GPT-6 Sol</td>
          <td style="text-align: right">91,0</td>
          <td style="text-align: right">n/d</td>
          <td style="text-align: right">44,44</td>
          <td>SWE Pro V2</td>
      </tr>
      <tr>
          <td>DeepSeek V4.1 Flash 1017 (B300)</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: right">n/d</td>
          <td style="text-align: right">31,82</td>
          <td>SWE Pro V2</td>
      </tr>
      <tr>
          <td>GLM 5.3 Flash</td>
          <td style="text-align: right">84,25</td>
          <td style="text-align: right">n/d</td>
          <td style="text-align: right">37,37</td>
          <td>SWE Pro V2</td>
      </tr>
      <tr>
          <td>Muse Wonder 1.0</td>
          <td style="text-align: right">97,0</td>
          <td style="text-align: right">96,73</td>
          <td style="text-align: right">n/d</td>
          <td>Terminal 4.0</td>
      </tr>
      <tr>
          <td>Claude Haiku 5.5</td>
          <td style="text-align: right">n/d</td>
          <td style="text-align: right">87,23</td>
          <td style="text-align: right">36,36</td>
          <td>Akita v4</td>
      </tr>
      <tr>
          <td>Inkling</td>
          <td style="text-align: right">n/d</td>
          <td style="text-align: right">89,88</td>
          <td style="text-align: right">0,51</td>
          <td>Akita v4</td>
      </tr>
  </tbody>
</table>
<p>Eu poderia renormalizar duas notas e inventar posições 14 a 22. O número sairia bonito e enganoso. Um modelo medido só no meu v4 e no Terminal-Bench teria 55% da cobertura original; outro medido no SWE Pro e no Terminal teria 60%. Ordenar os dois como se tivessem passado pela mesma prova transformaria ausência de dado em precisão falsa.</p>
<p>Também não vou usar Kimi K3 no lugar do K3.1, GPT-5.6 Terra no lugar do 6.1 Terra ou qualquer parente da mesma família pra preencher buraco. Quando esses resultados forem publicados ou eu rodar os modelos que faltam, o índice cresce. Até lá, 13 é o limite defensável.</p>
<h3>O que mudou quando abrimos a lente<span class="hx:absolute hx:-mt-20" id="o-que-mudou-quando-abrimos-a-lente"></span>
    <a href="#o-que-mudou-quando-abrimos-a-lente" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Astra ficou 0,036 ponto à frente do Argon antes do arredondamento: 96,5955 contra 96,5591. Ambos aparecem como 96,6 na tabela e formam um empate prático. Fable 5.1, Opus 5, Sonnet 5.5 e Sol 6.1 vieram logo atrás. Diferenças menores que três pontos devem ser lidas como a mesma faixa, ainda mais misturando benchmarks com intervalos de confiança e harnesses diferentes.</p>
<p>Sonnet 5.5 é o caso mais interessante. Fez só 88 no meu teste, mas chegou a 64,14 no Terminal-Bench, quase o teto atual. O índice mais amplo puxou o modelo pra 94,1. GPT-5.6 Sol mostra o inverso: 100 no meu teste e apenas 37,88 no Terminal-Bench, terminando em 84,7.</p>
<p>Isso responde por que vale combinar superfícies. Um benchmark sozinho enxerga bem o que foi desenhado pra enxergar. Três benchmarks continuam longe de medir tudo, mas já dificultam que uma especialidade isolada se passe por competência geral.</p>
<p>Mesmo assim, a conclusão anterior continua de pé. Os seis primeiros estão comprimidos entre 93,2 e 96,6. A lente ficou mais ampla e o suposto campeão absoluto continuou sem aparecer.</p>
<h2>Conclusão: escolha um bom e trabalhe<span class="hx:absolute hx:-mt-20" id="conclusão-escolha-um-bom-e-trabalhe"></span>
    <a href="#conclus%c3%a3o-escolha-um-bom-e-trabalhe" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O índice composto reforçou a tese deste artigo. Quando ampliamos o teste, a ordem muda, algumas fraquezas aparecem e o grupo da frente continua espremido. Astra e Argon ficaram separados por 0,036 ponto. Quatro outros modelos ficaram a menos de 3,5 pontos. Com outra distribuição de pesos, outro conjunto de tarefas ou uma nova versão dos benchmarks, eles podem trocar de posição de novo.</p>
<p>Isso deixa uma decisão bem mais simples. Primeiro descubra quais modelos já atingiram a faixa competente pro seu tipo de trabalho. Depois escolha por velocidade, preço, quota, privacidade, disponibilidade e qualidade do harness. Essas diferenças afetam seu dia inteiro. Um ponto a mais numa tabela raramente afeta.</p>
<p>Ainda vale acompanhar benchmarks pra detectar regressões, descobrir quando uma família alcançou o Tier A e enxergar pontos cegos. Não vale transformar ranking em torcida ou tratar o primeiro colocado desta semana como verdade universal.</p>
<p>Hoje eu alterno entre os melhores sem cerimônia. O projeto, os testes, o Git e a memória da sessão precisam sobreviver à troca. Por isso insisto tanto no <a href="https://aimemory.sh"target="_blank" rel="noopener">ai-memory</a>: o ativo importante é o histórico do trabalho, não o fornecedor que alugou a janela de contexto. Escolha qualquer modelo competente, mantenha uma rota de fuga e volte a resolver problemas reais.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>llms</category><category>agentes-de-codigo</category><category>ai-memory</category></item><item><title>LLM Benchmark: Quais as melhores LLMs open source pra hardware caseiro?</title><link>https://www.akitaonrails.com/2026/10/27/llm-benchmark-melhores-llms-open-source-hardware-caseiro/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/10/27/llm-benchmark-melhores-llms-open-source-hardware-caseiro/</guid><pubDate>Tue, 27 Oct 2026 13:00:00 -0300</pubDate><description>&lt;p&gt;No &lt;a href="https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-o-veredito-de-open-source-ate-out-2026/"&gt;último LLM Benchmark sobre modelos open source&lt;/a&gt;, eu fui até o limite do razoável. Aluguei B300, H200, pods com quatro GPUs, rodei quase 70 rodadas e gastei mais de US$ 6 mil na campanha inteira. Saíram candidatos muito bons, como DeepSeek V4.1 Flash, GLM 5.3 Flash e Qwen3.8 Flash-Next, todos chegando perto dos frontier no meu teste de programação.&lt;/p&gt;
&lt;p&gt;O problema continuava sendo a máquina. Um modelo de 510 GB que precisa de quatro B300 pode ser open source no GitHub, mas continua fora do alcance de quem quer rodar uma IA no escritório de casa.&lt;/p&gt;</description><content:encoded><![CDATA[<p>No <a href="/2026/10/22/llm-benchmark-v4-o-veredito-de-open-source-ate-out-2026/">último LLM Benchmark sobre modelos open source</a>, eu fui até o limite do razoável. Aluguei B300, H200, pods com quatro GPUs, rodei quase 70 rodadas e gastei mais de US$ 6 mil na campanha inteira. Saíram candidatos muito bons, como DeepSeek V4.1 Flash, GLM 5.3 Flash e Qwen3.8 Flash-Next, todos chegando perto dos frontier no meu teste de programação.</p>
<p>O problema continuava sendo a máquina. Um modelo de 510 GB que precisa de quatro B300 pode ser open source no GitHub, mas continua fora do alcance de quem quer rodar uma IA no escritório de casa.</p>
<p>Voltei pra minha RTX 5090 e pro Strix Halo. Desta vez, em vez de repetir o benchmark v4 inteiro em dezenas de modelos que já sabemos que não cabem ou não têm velocidade, peguei o candidato mais promissor e fui comparar <strong>as quantizações dele</strong>. Qual versão entrega qualidade suficiente sem transformar cada interação numa espera de vários minutos?</p>
<p>O resultado me surpreendeu: <strong>a versão de 2 bits ganhou</strong>. Depois repeti o teste com o <a href="https://github.com/jesdga95/basalt"target="_blank" rel="noopener">Basalt</a>, um fork do Strata especializado nas GPUs Blackwell. O modelo continuou acertando tudo e a geração chegou a <strong>400 tokens por segundo</strong>. A quantização não mudou; o engine mudou bastante o resultado.</p>
<h2>A RTX 3090 e a 4090 ganharam uma sobrevida<span class="hx:absolute hx:-mt-20" id="a-rtx-3090-e-a-4090-ganharam-uma-sobrevida"></span>
    <a href="#a-rtx-3090-e-a-4090-ganharam-uma-sobrevida" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Antes dos meus resultados, a comunidade descobriu uma limitação que dava pra remover. Nas GeForce RTX 20, certas operações Tensor Core FP16 com acumulação em FP32 rodam com metade da taxa teórica de emissão por ciclo das equivalentes profissionais. Nas RTX 30 e 40, o limite também atinge BF16.</p>
<p>O hardware está lá. Dois registradores internos selecionam a velocidade, e o driver normal não tem privilégio pra alterá-los.</p>
<p>O projeto <a href="https://github.com/Zagitta/gpu-unlock"target="_blank" rel="noopener">gpu-unlock</a> encontrou uma forma de mudar esses registradores antes do driver da NVIDIA assumir a placa. No Ampere, isso explora um buffer overflow no Booter assinado que autentica e carrega o GSP-RM. Nada é gravado na VBIOS. Pra voltar ao comportamento original, você remove o parâmetro de ativação e desliga a máquina por completo, porque os seletores voltam ao padrão quando a placa perde energia. Se o parâmetro continuar ativo, o módulo reaplica o unlock no próximo boot.</p>
<p>Também exige Linux, initramfs e bastante cuidado. Eu não recomendo sair instalando isso numa workstation de produção sem ler o código e entender o risco.</p>
<p>É um hack da comunidade, sem suporte oficial da NVIDIA. Você instala por sua conta e risco. O interesse pra LLM está em acelerar prefill quando o engine usa exatamente esse caminho dos Tensor Cores. Outras aplicações de compute, como alguns pipelines de geração de imagem, também podem mudar de desempenho. Jogos dependem de outros gargalos e caminhos da GPU, então não espere ganhar FPS com isso.</p>
<p>Numa RTX 3090 a 420 W, <a href="https://github.com/Zagitta/gpu-unlock/issues/85"target="_blank" rel="noopener">um teste controlado</a> mediu FP16 com acumulação em FP32 de 76,396 pra 125,006 TFLOPS; BF16 foi de 76,994 pra 127,923. Na 4090, uma implementação ainda experimental mediu aproximadamente o dobro da taxa de instruções FP16 e BF16.</p>
<p>Só que dobrar TFLOPS não dobra sua LLM. O <a href="https://dev.to/orca_forge/why-gpu-unlock-speeds-up-rtx-3090-prefill-but-barely-changes-decode-4572"target="_blank" rel="noopener">teste que motivou esta discussão</a> separou as duas fases:</p>
<ul>
<li><strong>Prefill</strong> é quando o modelo lê o prompt inteiro. Há muitos tokens disponíveis ao mesmo tempo, então o motor consegue montar operações matriciais grandes e paralelas. <a href="https://github.com/Zagitta/gpu-unlock/issues/33"target="_blank" rel="noopener">Uma 3090 ganhou 14,4%</a> numa carga de 16K tokens, enquanto uma dupla de 3080 modificadas ganhou <a href="https://github.com/Zagitta/gpu-unlock/issues/15"target="_blank" rel="noopener">33% a 36% com vLLM</a>.</li>
<li><strong>Decode</strong> é quando o modelo gera um token depois do outro. Em LLM quantizada com expert-offload, essa etapa fica limitada principalmente por banda de memória, RAM, PCIe e cache de especialistas. O ganho medido ficou dentro do ruído.</li>
</ul>
<p>O ganho varia bastante com engine, quantização e tamanho do prompt. Na dupla de 3080, o Qwen3.8 Flash-Next Q4_K_XL ganhou só 0,5% a 0,8% em 8K, mas chegou a 12% ou 13% em 32K e 128K. Num MoE IQ3_S testado numa 3090, uma carga perto de 32K não mudou. A rota de cálculo usada por uma quantização pode nem passar pelo caminho FP16/BF16 que foi liberado.</p>
<blockquote>
  <p>O gpu-unlock acelera um caminho específico dos Tensor Cores. Ele pode reduzir a espera pra ler prompts grandes, mas não transforma 24 GB em 96 GB e nem cria banda de memória.</p>

</blockquote>
<p>Mesmo com essa ressalva, 3090 e 4090 ficaram mais interessantes pra inferência local. Uma <a href="https://www.nvidia.com/en-us/geforce/graphics-cards/30-series/rtx-3090-3090ti/"target="_blank" rel="noopener">RTX 3090</a> usada ainda tem 24 GB de VRAM, NVLink na geração dela e 936 GB/s de banda. A comunidade mediu o Qwen3.8 Flash-Next em aproximadamente <a href="https://github.com/sybil-solutions/local-ai-registry/pull/212"target="_blank" rel="noopener">75 tok/s com IQ3_S e 100 tok/s com Q2_0</a> numa única 3090. Com duas placas, há relatos entre <a href="https://github.com/ruashots/flashnext-2x3090"target="_blank" rel="noopener">90 e 120 tok/s</a>, dependendo da configuração e do tamanho do contexto. Esses resultados são da comunidade, não desta rodada.</p>
<h2>Por que eu escolhi o Qwen3.8 Flash-Next<span class="hx:absolute hx:-mt-20" id="por-que-eu-escolhi-o-qwen38-flash-next"></span>
    <a href="#por-que-eu-escolhi-o-qwen38-flash-next" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>No v4, os candidatos abertos que realmente me interessaram foram:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th>Onde rodei</th>
          <th style="text-align: right">Nota v4</th>
          <th style="text-align: right">Velocidade</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>DeepSeek V4.1 Flash</td>
          <td>4x B300, checkpoint nativo</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: right">174,8 tok/s</td>
      </tr>
      <tr>
          <td>GLM 5.3 Flash</td>
          <td>1x B300, NVFP4</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: right">142 tok/s</td>
      </tr>
      <tr>
          <td>Qwen3.8 Flash-Next</td>
          <td>1x B300, NVFP4</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: right">195 tok/s</td>
      </tr>
      <tr>
          <td>Qwen3.8 Flash-Next</td>
          <td>RTX 5090, IQ3_S</td>
          <td style="text-align: right">91,0</td>
          <td style="text-align: right">159,2 tok/s</td>
      </tr>
  </tbody>
</table>
<p>Os três empataram dentro da margem de ruído. Só o Qwen repetiu a qualidade numa máquina de consumidor. O modelo principal é um MoE de 125 bilhões de parâmetros, com aproximadamente 6 bilhões ativos por token, mais 51 bilhões em embeddings n-gram e uma cabeça MTP de 4 bilhões. O <a href="https://github.com/Niko1221/Strata"target="_blank" rel="noopener">Strata</a> deixa os especialistas mais usados na GPU, mantém os demais na RAM pra CPU calcular, lê a tabela n-gram do SSD e usa a camada MTP do próprio modelo pra especular os próximos tokens.</p>
<p>O backbone e o Engram do DeepSeek V4.1 somam aproximadamente 748 bilhões de parâmetros: 552 bilhões do backbone e 196 bilhões do Engram. O checkpoint publicado tem cerca de 763 bilhões no total. Eu servi a versão nativa mista FP4/FP8, de cerca de 510 GB, no pod de quatro B300.</p>
<p>Também consegui iniciar uma versão de 2 bits na 5090 com o engine dedicado do Strata. Ela gerou por volta de <strong>17 tokens por segundo</strong>. Tecnicamente roda. Pra agente de programação, está fora da disputa.</p>
<p>O checkpoint NVFP4 do GLM 5.3 Flash tinha cerca de 198 GB e foi servido na B300. Não existe neste repositório uma configuração de consumidor que eu tenha medido e possa recomendar. O GLM 4.7 Flash menor já tinha feito 24 pontos na 5090 e 33,5 na B300 no benchmark anterior. Gastar dias tentando fazer a família errada caber não produziria informação útil.</p>
<p>Também deixei Qwen 4 e Llama fora por escolha. Esta rodada tem uma pergunta estreita: <strong>qual versão do modelo que já provou qualidade funciona melhor nas duas máquinas que eu tenho?</strong></p>
<h2>O que eu testei<span class="hx:absolute hx:-mt-20" id="o-que-eu-testei"></span>
    <a href="#o-que-eu-testei" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Todo o código, os prompts, os testes escondidos e os resultados estão no <a href="https://github.com/akitaonrails/llm-opensource-benchmark"target="_blank" rel="noopener">llm-opensource-benchmark</a>. Testei quatro versões do Qwen3.8 Flash-Next:</p>
<table>
  <thead>
      <tr>
          <th>Quantização</th>
          <th style="text-align: right">Arquivos do modelo</th>
          <th>Ideia</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Q2_0</td>
          <td style="text-align: right">~62 GiB</td>
          <td>2 bits, menor e mais agressiva</td>
      </tr>
      <tr>
          <td>IQ3_XXS</td>
          <td style="text-align: right">~71 GiB</td>
          <td>3 bits, prioriza tamanho</td>
      </tr>
      <tr>
          <td>IQ3_S</td>
          <td style="text-align: right">~78 GiB</td>
          <td>3 bits, mais precisão</td>
      </tr>
      <tr>
          <td>UD-Q4_K_XL</td>
          <td style="text-align: right">~104 GiB</td>
          <td>4 bits, maior preservação dos pesos</td>
      </tr>
  </tbody>
</table>
<p>Os arquivos do Strata incluem uma parte comum de PLE, então o tamanho total não cabe diretamente na VRAM. O engine faz o trabalho de distribuir os especialistas entre GPU e RAM. No Basalt, usei os packs próprios do projeto: um arquivo <code>.basalt</code> de 64,9 GiB pro Q2_0 e outro de 81,0 GiB pro IQ3_S. Cada arquivo já reúne pesos, tokenizer, MTP, perfil de especialistas e projetor de visão.</p>
<p>Na primeira rodada da RTX 5090, usei o backend CUDA do Strata com:</p>
<ul>
<li>4 GiB de VRAM reservados pro Hyprland, navegador e terminal;</li>
<li>cache de KV em <code>int8</code>, contexto máximo de 128K e 32K residentes na GPU;</li>
<li>cache elástico de especialistas;</li>
<li>especulação de quatro tokens com o MTP do modelo.</li>
</ul>
<p>Depois rodei Q2_0 e IQ3_S no Basalt, na mesma 5090 e com os mesmos 131.072 tokens de contexto máximo e KV em <code>int8</code>. Deixei 4.608 MiB reservados porque o Basalt contabiliza seus buffers de trabalho nessa margem. A VRAM livre ficou entre 3,6 e 4,4 GB durante os testes.</p>
<p>No Strix Halo, usei o backend <code>hip-halo</code>. Essa máquina tem 64 GB reservados pra GPU e GTT de 31 GB mapeado sobre a RAM do sistema; o limite de RAM do engine era 61,9 GiB. Como ela é headless, deixei a GPU inteira pro modelo e mantive 8 GiB de folga pro cache da conversa.</p>
<p>Nas medições do Strata são dois backends diferentes por baixo, CUDA na NVIDIA e HIP/ROCm na AMD, mas o mesmo engine e a mesma API compatível com OpenAI. O Basalt acrescenta uma comparação de engine na 5090, usando o mesmo OpenCode, os mesmos prompts e a mesma correção.</p>
<h2>A metodologia<span class="hx:absolute hx:-mt-20" id="a-metodologia"></span>
    <a href="#a-metodologia" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Comecei com um teste de velocidade em três situações:</p>
<ol>
<li>prompt frio de 4K tokens;</li>
<li>prompt frio rotulado como 32K, que o tokenizer do modelo contou como 42.400 tokens;</li>
<li>continuação da mesma conversa, reaproveitando o cache.</li>
</ol>
<p>Cada uma gera 256 tokens. O runner mede tempo até o primeiro token, leitura do prompt, geração, VRAM, RAM, potência e temperatura.</p>
<h3>O que cada número de velocidade quer dizer<span class="hx:absolute hx:-mt-20" id="o-que-cada-número-de-velocidade-quer-dizer"></span>
    <a href="#o-que-cada-n%c3%bamero-de-velocidade-quer-dizer" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Quando alguém diz que uma LLM faz 200 tokens por segundo, quase sempre está falando só da geração. Uma sessão de agente passa por fases diferentes, e cada uma encosta num gargalo diferente.</p>
<p><strong>Prefill</strong> é a leitura inicial do prompt. O modelo precisa processar as instruções do harness, histórico da conversa, arquivos e sua pergunta antes de soltar a primeira palavra. Como todos esses tokens já estão disponíveis, a GPU consegue trabalhar com matrizes grandes em paralelo.</p>
<p>Essa fase aproveita melhor Tensor Cores e poder bruto de cálculo. Quanto maior o contexto, mais ela pesa.</p>
<table>
  <thead>
      <tr>
          <th>Métrica</th>
          <th>O que mede</th>
          <th>O que você sente</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Prompt tok/s</td>
          <td>Vazão do prefill, quantos tokens de entrada são lidos por segundo</td>
          <td>Tempo pra digerir contexto novo</td>
      </tr>
      <tr>
          <td>TTFT (<em>time to first token</em>)</td>
          <td>Tempo total entre enviar a requisição e receber o primeiro token</td>
          <td>A pausa antes da resposta começar</td>
      </tr>
      <tr>
          <td>Decode ou output tok/s</td>
          <td>Velocidade de geração depois do primeiro token</td>
          <td>Ritmo do texto e das chamadas de ferramenta</td>
      </tr>
      <tr>
          <td>TPOT (<em>time per output token</em>)</td>
          <td>Tempo por token gerado, normalmente em p50 e p99 (ou p95)</td>
          <td>Regularidade da resposta; percentil alto denuncia travadas</td>
      </tr>
      <tr>
          <td>Wall time</td>
          <td>Tempo da tarefa inteira, incluindo ferramentas, testes, retries e texto gerado</td>
          <td>Produtividade real do agente</td>
      </tr>
  </tbody>
</table>
<p>O <strong>KV cache</strong> guarda os estados intermediários dos tokens já processados. Numa continuação da mesma conversa, o modelo reaproveita esse estado em vez de ler tudo de novo. Por isso o teste de append chega a dezenas de milhares de prompt tokens por segundo e recebe o primeiro token em cerca de meio segundo. Esse número mede reaproveitamento de cache; comparar com prefill frio seria fraude.</p>
<p>O KV também cresce com a conversa e disputa memória com pesos, especialistas e buffers. Aqui ele está em <code>int8</code>, com 32K residentes na 5090. Contexto máximo anunciado, contexto que cabe e contexto que continua rápido são três números diferentes.</p>
<p><strong>Speculative decoding</strong> usa uma camada de draft pra propor vários tokens e o modelo principal verifica o lote. Quando a taxa de aceitação é boa, o output tok/s sobe. Se o draft erra muito, o ganho desaparece. As velocidades do Strata já incluem MTP com especulação de quatro tokens. O Basalt também usa o MTP incluído no próprio pack, com seu mecanismo de especulação e seus defaults.</p>
<p>E falta uma métrica que eu não medi aqui: <strong>concorrência</strong>. Todos estes números são de um único stream. Um servidor pode atender várias sessões e aumentar a vazão agregada, mas cada usuário tende a receber menos tokens por segundo.</p>
<p>Pra uso individual, single-stream e wall time mandam. Pra uma equipe, precisa medir sessões simultâneas e latência por usuário, como fiz no <a href="/2026/10/22/llm-benchmark-v4-can-my-team-fit-in-a-4x-b300-h200/">teste com B300 e H200</a>.</p>
<p>Depois vieram dois testes de programação usando OpenCode 2.1.4. O modelo recebe uma pequena base Python, trabalha em uma sessão contínua e nunca vê os testes escondidos. Tudo roda em Bubblewrap, sem rede, com filesystem limitado e apenas um gateway local que aceita as chamadas pro modelo esperado.</p>
<p>O primeiro canário tem três turnos e 9 testes escondidos. O modelo precisa implementar um analisador de logs, corrigir bugs e lidar com mudança de requisitos.</p>
<p>O teste difícil tem quatro turnos e 36 testes escondidos. É um reconciliador de pagamentos com decisões enterradas num histórico de cerca de 79K tokens, uma decisão corrigida mais tarde, propostas rejeitadas servindo de distração, dinheiro que exige decimal exato e regras novas que interagem com as anteriores. Com o system prompt do OpenCode, o primeiro turno chega perto de 83K tokens.</p>
<h3>Uma régua separada do benchmark v4<span class="hx:absolute hx:-mt-20" id="uma-régua-separada-do-benchmark-v4"></span>
    <a href="#uma-r%c3%a9gua-separada-do-benchmark-v4" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Estes canários são muito menores e mais fáceis. No v4, o modelo trabalha num aplicativo Rails por sete sprints enquanto um revisor injeta 14 defeitos de segurança e de correção. A nota mede quantos ele encontra e corrige sozinho antes da revelação. É um teste de vigilância, com muito mais código, ferramentas e oportunidades de se perder.</p>
<p>Aqui são duas bases Python pequenas, três ou quatro turnos e testes funcionais escondidos. Eu montei essa régua pra comparar <strong>quantizações do mesmo Qwen</strong> e descobrir se reduzir os bits quebra requisitos, contexto ou processo. A comparação termina aí, sem ranquear Qwen contra Opus, GPT, DeepSeek ou qualquer outro modelo.</p>
<p>A nota 100 deste artigo pertence a outra escala, sem equivalência com 100 do v4. Ela também não torna o Q2_0 “melhor” que o IQ3_S que fez 91 no v4. O v4 escolheu o Qwen como candidato; este teste menor escolhe qual arquivo do Qwen vale carregar em casa.</p>
<blockquote>
  <p>Velocidade sem qualidade só faz o modelo errar mais rápido. Por isso eu medi as duas coisas separadamente.</p>

</blockquote>
<h2>Ranking de velocidade<span class="hx:absolute hx:-mt-20" id="ranking-de-velocidade"></span>
    <a href="#ranking-de-velocidade" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>RTX 5090 com Strata, 4 GiB preservados pro desktop<span class="hx:absolute hx:-mt-20" id="rtx-5090-com-strata-4-gib-preservados-pro-desktop"></span>
    <a href="#rtx-5090-com-strata-4-gib-preservados-pro-desktop" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><table>
  <thead>
      <tr>
          <th>Quantização</th>
          <th style="text-align: right">Geração</th>
          <th style="text-align: right">Leitura da carga longa</th>
          <th style="text-align: right">Primeiro token</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Q2_0</strong></td>
          <td style="text-align: right"><strong>223 a 259 tok/s</strong></td>
          <td style="text-align: right"><strong>6.158 tok/s</strong></td>
          <td style="text-align: right"><strong>6,9 s</strong></td>
      </tr>
      <tr>
          <td>IQ3_XXS</td>
          <td style="text-align: right">196 a 241 tok/s</td>
          <td style="text-align: right">5.084 tok/s</td>
          <td style="text-align: right">8,3 s</td>
      </tr>
      <tr>
          <td>IQ3_S</td>
          <td style="text-align: right">158 a 208 tok/s</td>
          <td style="text-align: right">6.233 tok/s</td>
          <td style="text-align: right">6,8 s</td>
      </tr>
      <tr>
          <td>UD-Q4_K_XL</td>
          <td style="text-align: right">44 a 52 tok/s</td>
          <td style="text-align: right">2.300 tok/s</td>
          <td style="text-align: right">19 s</td>
      </tr>
  </tbody>
</table>
<h3>RTX 5090 com Basalt<span class="hx:absolute hx:-mt-20" id="rtx-5090-com-basalt"></span>
    <a href="#rtx-5090-com-basalt" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><table>
  <thead>
      <tr>
          <th>Quantização</th>
          <th style="text-align: right">Geração</th>
          <th style="text-align: right">Leitura da carga longa</th>
          <th style="text-align: right">Primeiro token</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Q2_0</strong></td>
          <td style="text-align: right"><strong>377 a 400 tok/s</strong></td>
          <td style="text-align: right"><strong>8.573 tok/s</strong></td>
          <td style="text-align: right"><strong>4,9 s</strong></td>
      </tr>
      <tr>
          <td>IQ3_S</td>
          <td style="text-align: right">223 a 231 tok/s</td>
          <td style="text-align: right">8.196 tok/s</td>
          <td style="text-align: right">5,2 s</td>
      </tr>
  </tbody>
</table>
<h3>Strix Halo, usando a GPU inteira<span class="hx:absolute hx:-mt-20" id="strix-halo-usando-a-gpu-inteira"></span>
    <a href="#strix-halo-usando-a-gpu-inteira" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><table>
  <thead>
      <tr>
          <th>Quantização</th>
          <th style="text-align: right">Geração</th>
          <th style="text-align: right">Leitura da carga longa</th>
          <th style="text-align: right">Primeiro token</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Q2_0</strong></td>
          <td style="text-align: right"><strong>55 a 65 tok/s</strong></td>
          <td style="text-align: right"><strong>371 tok/s</strong></td>
          <td style="text-align: right"><strong>114 s</strong></td>
      </tr>
      <tr>
          <td>IQ3_XXS</td>
          <td style="text-align: right">50 a 57 tok/s</td>
          <td style="text-align: right">347 tok/s</td>
          <td style="text-align: right">122 s</td>
      </tr>
      <tr>
          <td>IQ3_S</td>
          <td style="text-align: right">47 a 50 tok/s</td>
          <td style="text-align: right">338 tok/s</td>
          <td style="text-align: right">125 s</td>
      </tr>
      <tr>
          <td>UD-Q4_K_XL</td>
          <td style="text-align: right">17 tok/s num prompt de 4K</td>
          <td style="text-align: right">137 tok/s</td>
          <td style="text-align: right">não terminou</td>
      </tr>
  </tbody>
</table>
<p>A 5090 tem 32 GB de GDDR7 e <a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/"target="_blank" rel="noopener">1.792 GB/s de banda</a>. O Strix tem mais capacidade total, mas seus aproximadamente 256 GB/s precisam servir o sistema inteiro. Mesmo usando o Strata nos dois, a diferença aparece principalmente no prefill: 6,9 segundos contra quase 2 minutos pra começar a responder a carga de 42.400 tokens. No Basalt, a 5090 baixou essa espera pra 4,9 segundos.</p>
<p>O Q4 foi o pior dos dois mundos. Na 5090 ele rodou devagar e o <code>systemd-oomd</code> matou o teste de qualidade. No Strix, zerou a VRAM, começou a paginar e travou a máquina até reboot. Mais bits preservam mais informação, mas ocupam mais memória e reduzem o cache quente que faz esse MoE andar.</p>
<h2>Basalt contra Strata<span class="hx:absolute hx:-mt-20" id="basalt-contra-strata"></span>
    <a href="#basalt-contra-strata" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O <a href="https://github.com/jesdga95/basalt"target="_blank" rel="noopener">Basalt</a> nasceu como fork do Strata, só que tomou uma direção mais específica: Linux ou Windows, CUDA 13 e GPU NVIDIA Blackwell com compute capability 12.0. A 5090 entra exatamente nesse alvo. O Strata continua muito mais abrangente e foi o que permitiu rodar o mesmo Qwen no Strix Halo com AMD.</p>
<p>Os dois resolvem o mesmo problema central. Na configuração testada, os especialistas que não cabem na VRAM ficam na RAM, enquanto a GPU mantém uma parte quente. Basalt e Strata expõem API compatível com OpenAI e Anthropic e aceleram a geração com seus drafters MTP. O Basalt empacota tudo num único arquivo e traz kernels, gerenciamento de memória e execução especulativa trabalhados especificamente pra Blackwell.</p>
<p>Este foi um A/B prático entre stacks completos, sem isolar uma única otimização. Os packs são próprios de cada engine, os defaults não são idênticos e o Basalt reservou 4.608 MiB de VRAM contra 4.096 MiB do Strata. Mantive a mesma RTX 5090, as mesmas quantizações, contexto máximo de 131K, KV em <code>int8</code>, mesmo OpenCode e os mesmos testes.</p>
<p>Nesse A/B, o Basalt ganhou em todas as métricas de velocidade e empatou nos resultados funcionais de código. O Q2_0 saiu de 223 a 259 pra 377 a 400 tokens por segundo. A leitura da carga longa foi de 6.158 pra 8.573 tokens por segundo, e a espera pelo primeiro token caiu de 6,9 pra 4,9 segundos. No IQ3_S, a geração saiu da faixa de 158 a 208 pra 223 a 231 tokens por segundo.</p>
<p>O recorte de plataforma decide a escolha. Numa RTX 5090, eu começaria pelo Basalt. No Strix, em NVIDIA anterior a Blackwell ou em outro hardware suportado, o Strata continua sendo o caminho. O Strata cobre justamente os lugares onde o Basalt nem roda.</p>
<h2>Ranking de qualidade<span class="hx:absolute hx:-mt-20" id="ranking-de-qualidade"></span>
    <a href="#ranking-de-qualidade" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O teste simples não separou nada:</p>
<table>
  <thead>
      <tr>
          <th>Quantização</th>
          <th style="text-align: right">RTX 5090</th>
          <th style="text-align: right">Strix Halo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Q2_0</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">100</td>
      </tr>
      <tr>
          <td>IQ3_XXS</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">100</td>
      </tr>
      <tr>
          <td>IQ3_S</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">100</td>
      </tr>
  </tbody>
</table>
<p>Todas passaram os 9 testes escondidos, preservaram os requisitos e terminaram com a suíte visível verde. Precisei aumentar a dificuldade.</p>
<p>No canário difícil, rodei Q2_0 e IQ3_S três vezes cada na 5090 com Strata:</p>
<table>
  <thead>
      <tr>
          <th>Rodada</th>
          <th style="text-align: right">Nota</th>
          <th style="text-align: right">Testes escondidos</th>
          <th style="text-align: right">Tempo dos 4 turnos</th>
          <th style="text-align: right">Tokens de saída</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Q2_0 r1</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">5,3 min</td>
          <td style="text-align: right">70K</td>
      </tr>
      <tr>
          <td>Q2_0 r2</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">8,8 min</td>
          <td style="text-align: right">117K</td>
      </tr>
      <tr>
          <td>Q2_0 r3</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">7,4 min</td>
          <td style="text-align: right">100K</td>
      </tr>
      <tr>
          <td>IQ3_S r1</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">11,9 min</td>
          <td style="text-align: right">110K</td>
      </tr>
      <tr>
          <td>IQ3_S r2</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">13,3 min</td>
          <td style="text-align: right">127K</td>
      </tr>
      <tr>
          <td>IQ3_S r3</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">11,1 min</td>
          <td style="text-align: right">98K</td>
      </tr>
  </tbody>
</table>
<p>As duas acertaram tudo nas três rodadas. Encontraram as decisões no contexto longo, respeitaram a correção posterior, lidaram com eventos fora de ordem, chargebacks, câmbio e fizeram o refactor final. Também passaram por quantidade parecida de testes quebrados enquanto trabalhavam.</p>
<p>A diferença ficou no relógio. <strong>Q2_0 levou 7,2 minutos em média. IQ3_S levou 12,1.</strong> O modelo de 2 bits entregou o mesmo resultado em aproximadamente 60% do tempo.</p>
<p>Depois repeti as seis rodadas no Basalt:</p>
<table>
  <thead>
      <tr>
          <th>Rodada</th>
          <th style="text-align: right">Nota</th>
          <th style="text-align: right">Testes escondidos</th>
          <th style="text-align: right">Tempo dos 4 turnos</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Q2_0 r1</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">5,9 min</td>
      </tr>
      <tr>
          <td>Q2_0 r2</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">4,2 min</td>
      </tr>
      <tr>
          <td>Q2_0 r3</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">6,3 min</td>
      </tr>
      <tr>
          <td>IQ3_S r1</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">5,8 min</td>
      </tr>
      <tr>
          <td>IQ3_S r2</td>
          <td style="text-align: right">96*</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">11,3 min</td>
      </tr>
      <tr>
          <td>IQ3_S r3</td>
          <td style="text-align: right">100</td>
          <td style="text-align: right">36/36</td>
          <td style="text-align: right">10,1 min</td>
      </tr>
  </tbody>
</table>
<p>A penalização que derrubou a segunda rodada do IQ3_S pra 96 foi um falso positivo conhecido do harness. O modelo executou <code>ps aux</code> dentro do sandbox, e o comando mostrou a linha do próprio <code>bwrap</code>, que contém caminhos do host. O detector interpretou isso como tentativa de acessar os testes escondidos e tirou quatro pontos. O modelo não usou esses caminhos, os testes escondidos só são montados depois, na correção, e os 36 passaram.</p>
<p>No Basalt, o Q2_0 levou <strong>5,4 minutos em média</strong>, contra 7,2 no Strata. O IQ3_S caiu de 12,1 pra <strong>9,0 minutos</strong>. O ganho de ponta a ponta é menor que o salto de tokens por segundo porque a sessão também gasta tempo executando ferramentas e testes, e cada rodada gerou uma quantidade diferente de texto.</p>
<p>A evidência vale para bases Python pequenas, com contexto de até uns 85K tokens, e apenas três repetições por combinação de engine e quantização no canário difícil. Quantização de 2 bits costuma sofrer primeiro em contexto acima de 100K e em bases maiores. Dentro do uso que medi, gastar mais bits não comprou nenhuma qualidade.</p>
<h2>O que cada versão mostrou<span class="hx:absolute hx:-mt-20" id="o-que-cada-versão-mostrou"></span>
    <a href="#o-que-cada-vers%c3%a3o-mostrou" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Q2_0: a recomendação atual<span class="hx:absolute hx:-mt-20" id="q2_0-a-recomendação-atual"></span>
    <a href="#q2_0-a-recomenda%c3%a7%c3%a3o-atual" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Foi a quantização que gerou tokens mais rápido nas três combinações de máquina e engine, e terminou as seis rodadas difíceis com nota máxima. No prefill longo do Strata na 5090, o IQ3_S ganhou por uma margem mínima. Com Basalt, o Q2_0 chegou a 400 tokens por segundo. No Strix, 55 a 65 tokens por segundo é utilizável, embora o prefill longo cobre quase dois minutos antes da primeira resposta.</p>
<p>Eu usaria esta versão no dia a dia e guardaria a ressalva de contexto. Projeto grande, sessão chegando em 100K ou comportamento estranho? Repito o mesmo trabalho em IQ3_S antes de culpar o modelo.</p>
<h3>IQ3_XXS: ficou sem função clara<span class="hx:absolute hx:-mt-20" id="iq3_xxs-ficou-sem-função-clara"></span>
    <a href="#iq3_xxs-ficou-sem-fun%c3%a7%c3%a3o-clara" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Passou no canário simples e foi rápida, só que perdeu pro Q2_0 em velocidade e ocupa mais espaço. Eu não rodei as três repetições do teste difícil nela, então não tenho dado pra prometer uma vantagem de qualidade.</p>
<h3>IQ3_S: a opção conservadora<span class="hx:absolute hx:-mt-20" id="iq3_s-a-opção-conservadora"></span>
    <a href="#iq3_s-a-op%c3%a7%c3%a3o-conservadora" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Continua sendo a versão que eu escolheria pra validar um resultado suspeito da Q2_0. Ela já tinha feito 91 no benchmark v4 na 5090, a apenas 1,5 ponto da versão NVFP4 na B300. No Basalt, ficou entre 223 e 231 tokens por segundo, praticamente a faixa que o Q2_0 alcançava no Strata, e ainda leu prompts mais rápido.</p>
<p>O próprio Basalt mede a proximidade das quantizações contra Q8_0. No teste de 100 chunks, o IQ3_S manteve o mesmo token no topo em 87,16% das posições. É uma régua diferente dos meus canários, mas reforça seu papel de opção conservadora. Nos meus testes de código, essa precisão extra ainda não encontrou nada que o Q2_0 tivesse perdido.</p>
<h3>UD-Q4_K_XL: qualidade que não cabe não serve<span class="hx:absolute hx:-mt-20" id="ud-q4_k_xl-qualidade-que-não-cabe-não-serve"></span>
    <a href="#ud-q4_k_xl-qualidade-que-n%c3%a3o-cabe-n%c3%a3o-serve" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Era a candidata intuitiva a entregar mais fidelidade. Faltou memória pra chegar ao teste que confirmaria isso. Na 5090, caiu pra menos de um quarto da velocidade da Q2_0 e o sistema matou a rodada. No Strix, a máquina travou.</p>
<p>Serve como lembrança de que a maior quantização compatível no papel pode ser a pior configuração real. Um MoE depende do espaço que sobra pra especialistas, KV cache, buffers e o próprio sistema operacional.</p>
<h2>Qual hardware vale a pena?<span class="hx:absolute hx:-mt-20" id="qual-hardware-vale-a-pena"></span>
    <a href="#qual-hardware-vale-a-pena" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>RTX 3090 e 4090: boas se você já tem<span class="hx:absolute hx:-mt-20" id="rtx-3090-e-4090-boas-se-você-já-tem"></span>
    <a href="#rtx-3090-e-4090-boas-se-voc%c3%aa-j%c3%a1-tem" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>As duas têm 24 GB, e isso limita o cache de especialistas. O gpu-unlock melhora prefill em workloads que usam o caminho liberado, mas decode continua preso em memória e offload. Uma 3090 usada, principalmente duas com NVLink, pode formar uma máquina local interessante. Eu não compraria uma 4090 nova hoje só pra isso: continua com 24 GB, custa caro e o unlock de Ada ainda é experimental.</p>
<p>Pra ambas, começaria pelo <strong>Qwen3.8 Flash-Next Q2_0</strong> e mediria meu workload. Os aproximadamente 100 tokens por segundo publicados pela comunidade numa única 3090 já colocam a placa numa faixa prática. Duas 3090 aumentam a capacidade e podem ficar entre 90 e 120 tokens por segundo, mas não dobram automaticamente a velocidade. A conta inclui consumo, calor, fonte e pelo menos 128 GB de RAM.</p>
<h3>Strix Halo: muita capacidade, pouca banda<span class="hx:absolute hx:-mt-20" id="strix-halo-muita-capacidade-pouca-banda"></span>
    <a href="#strix-halo-muita-capacidade-pouca-banda" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>É uma boa caixa headless, compacta e econômica. A memória unificada deixa rodar modelos que uma GPU de 24 ou 32 GB recusaria. Neste teste, o melhor modelo também foi o <strong>Q2_0</strong>, a 55 a 65 tokens por segundo.</p>
<p>O problema aparece toda vez que o agente lê contexto grande. Quase dois minutos pra processar a carga longa do teste acumulam rápido durante uma sessão. Eu usaria como servidor privado pra tarefas assíncronas, agentes simples e workloads onde capacidade vale mais que resposta imediata.</p>
<h3>RTX 5090: o melhor ponto caseiro hoje<span class="hx:absolute hx:-mt-20" id="rtx-5090-o-melhor-ponto-caseiro-hoje"></span>
    <a href="#rtx-5090-o-melhor-ponto-caseiro-hoje" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A <a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/"target="_blank" rel="noopener">RTX 5090</a> tem 32 GB, 21.760 CUDA cores e a mesma banda nominal de 1.792 GB/s da RTX PRO 6000. O que falta é capacidade: preciso reservar 4 GiB pro desktop e usar RAM e SSD pros especialistas que não cabem.</p>
<p>Com Strata, ela colocou o Q2_0 em 223 a 259 tokens por segundo e leu a carga longa a 6.158 tokens por segundo. Com Basalt, chegou a 400 e 8.573, respectivamente. É a primeira configuração local que não me faz sentir que estou esperando a máquina a cada passo. E é uma placa que também serve pra jogos, geração de imagem, vídeo e todo o resto da workstation.</p>
<h3>RTX PRO 6000: três vezes a VRAM, preço de servidor<span class="hx:absolute hx:-mt-20" id="rtx-pro-6000-três-vezes-a-vram-preço-de-servidor"></span>
    <a href="#rtx-pro-6000-tr%c3%aas-vezes-a-vram-pre%c3%a7o-de-servidor" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A <a href="https://www.nvidia.com/en-us/products/workstations/professional-desktop-gpus/rtx-pro-6000/"target="_blank" rel="noopener">RTX PRO 6000 Blackwell</a> tem 96 GB de GDDR7 ECC, 24.064 CUDA cores e os mesmos 1.792 GB/s de banda. A capacidade extra deixa muito mais especialistas residentes, abre espaço pra quantização maior e comporta contexto sem disputar os últimos gigabytes com o desktop.</p>
<p>Ela custa <a href="https://marketplace.nvidia.com/en-us/enterprise/laptops-workstations/nvidia-rtx-pro-6000-blackwell-workstation-edition/"target="_blank" rel="noopener">US$ 16 mil na loja da NVIDIA</a>, oito vezes o preço sugerido de US$ 1.999 da 5090. Eu ainda não rodei este benchmark nela, então não vou inventar uma velocidade. A banda igual à 5090 significa que três vezes a memória não viram três vezes mais tokens por segundo. O ganho está em manter mais coisa na placa e evitar o caminho lento de RAM e PCIe.</p>
<p>Pra uso individual, a conta da 5090 fecha melhor. A PRO 6000 começa a fazer sentido quando 96 GB resolvem um modelo que você realmente precisa, quando ECC e suporte profissional importam ou quando várias sessões vão dividir a mesma placa.</p>
<h2>O veredito<span class="hx:absolute hx:-mt-20" id="o-veredito"></span>
    <a href="#o-veredito" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><table>
  <thead>
      <tr>
          <th>Hardware</th>
          <th>Melhor escolha hoje</th>
          <th>Experiência</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1x RTX 3090/4090, 24 GB</td>
          <td>Qwen3.8 Flash-Next Q2_0</td>
          <td>Viável com offload; confira prefill e decode no seu stack</td>
      </tr>
      <tr>
          <td>Strix Halo</td>
          <td>Qwen3.8 Flash-Next Q2_0</td>
          <td>55 a 65 tok/s; prompt longo demora</td>
      </tr>
      <tr>
          <td>RTX 5090</td>
          <td><strong>Qwen3.8 Flash-Next Q2_0 no Basalt</strong></td>
          <td>377 a 400 tok/s; melhor equilíbrio que medi</td>
      </tr>
      <tr>
          <td>RTX PRO 6000</td>
          <td>Provavelmente IQ3_S ou maior</td>
          <td>Capacidade excelente, sem medição minha nesta rodada</td>
      </tr>
  </tbody>
</table>
<p>O open source local finalmente entrou numa faixa prática. Uma única 5090 roda um modelo que fez Tier A no meu benchmark v4 e, com Q2_0 no Basalt, chegou a 400 tokens por segundo no canário. O Strix também ficou muito melhor do que os 7,7 tokens por segundo do Qwen denso que eu tinha testado antes.</p>
<p>Ainda existem limites claros. O contexto custa memória, o desktop precisa da mesma VRAM e qualquer especialista fora da placa atravessa PCIe ou cai na RAM. DeepSeek a 17 tokens por segundo mostra que “rodou” continua sendo uma métrica inútil. Se cada iteração leva várias horas, a qualidade do modelo deixa de importar porque ninguém consegue trabalhar desse jeito.</p>
<blockquote>
  <p>Pra hardware caseiro, o melhor modelo é o que mantém qualidade suficiente na velocidade que deixa você iterar. Nesta rodada, foi o Qwen3.8 Flash-Next Q2_0 no Basalt, numa RTX 5090.</p>

</blockquote>
<p>O <a href="https://github.com/akitaonrails/llm-opensource-benchmark"target="_blank" rel="noopener">repositório do benchmark</a> tem os runners, configurações, resultados brutos e testes escondidos. Repita na sua máquina e mande resultados. Hardware, engine, quantização e contexto mudam a resposta. Ranking pronto serve como ponto de partida; a decisão final continua sendo medida no seu trabalho.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>modelos-locais</category><category>llms</category><category>hardware</category></item><item><title>LLM Benchmark para Contadores e Advogados (Experimental - LLMs Open Source)</title><link>https://www.akitaonrails.com/2026/10/27/llm-benchmark-para-contadores-e-advogados-experimental/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/10/27/llm-benchmark-para-contadores-e-advogados-experimental/</guid><pubDate>Tue, 27 Oct 2026 12:00:00 -0300</pubDate><description>&lt;p&gt;Depois de quase 70 rodadas, uns 60 modelos e mais de US$ 6 mil gastos, publiquei o &lt;a href="https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-o-veredito-de-open-source-ate-out-2026/"&gt;veredito do meu LLM Benchmark v4&lt;/a&gt;. Todo aquele trabalho tem um foco muito específico: desenvolvimento de software no mundo real.&lt;/p&gt;
&lt;p&gt;O modelo constrói um projeto Rails em sete sprints e precisa encontrar 14 defeitos de segurança e correção plantados no caminho. Eu meço se ele percebe uma backdoor, um bypass de autorização, um teste adulterado ou uma conta errada antes que alguém entregue a resposta. É uma régua de vigilância durante programação. Nunca foi uma prova de inteligência universal.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Depois de quase 70 rodadas, uns 60 modelos e mais de US$ 6 mil gastos, publiquei o <a href="/2026/10/22/llm-benchmark-v4-o-veredito-de-open-source-ate-out-2026/">veredito do meu LLM Benchmark v4</a>. Todo aquele trabalho tem um foco muito específico: desenvolvimento de software no mundo real.</p>
<p>O modelo constrói um projeto Rails em sete sprints e precisa encontrar 14 defeitos de segurança e correção plantados no caminho. Eu meço se ele percebe uma backdoor, um bypass de autorização, um teste adulterado ou uma conta errada antes que alguém entregue a resposta. É uma régua de vigilância durante programação. Nunca foi uma prova de inteligência universal.</p>
<p>Enquanto eu fechava essa série, alguns colegas que trabalham com investimentos e Direito começaram a discutir se um modelo aberto já serviria nas rotinas deles. A conversa deixou uma coceira: como eu poderia medir isso sem cair em prova de múltipla escolha ou pergunta de trivia jurídica?</p>
<p>Tentei responder. E já começo com a ressalva que manda no resto deste artigo.</p>
<blockquote>
  <p>Eu não sou contador, não tenho CPA, nunca passei na OAB e tenho zero experiência profissional trabalhando em escritório contábil ou jurídico. Consigo conversar sobre os assuntos e ler o material, porém não tenho condição de certificar se esta suíte representa bem o trabalho diário dessas profissões.</p>

</blockquote>
<p>Portanto, trate tudo daqui pra frente como <strong>um experimento que precisa do escrutínio de contadores e advogados de verdade</strong>. Os números ajudam a comparar os modelos dentro desta suíte. Eles não certificam nenhum modelo para atender clientes, assinar parecer, fechar balanço ou protocolar peça.</p>
<h2>O que eu tentei medir<span class="hx:absolute hx:-mt-20" id="o-que-eu-tentei-medir"></span>
    <a href="#o-que-eu-tentei-medir" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Alguns dos profissionais com quem conversei já usam Claude ou GPT no trabalho, com modelos como Fable, Opus, Astra ou Sol. Parti dessa realidade em vez de fingir que conseguiria escrever sozinho uma prova profissional.</p>
<p>Pedi ao Fable 5.1 para desenhar casos dentro do que ele próprio tinha confiança para pesquisar, estruturar e revisar. A suíte usa padrões de trabalho, legislação, formulários, decisões e materiais de referência, mas <a href="https://github.com/akitaonrails/llm-non-coding-benchmark/blob/main/docs/METHODOLOGY.md#2-why-this-matters-for-private-infrastructure"target="_blank" rel="noopener">todos os clientes, empresas e documentos são sintéticos</a>. Nenhum dado confidencial real entrou no repositório.</p>
<p>Depois rodei o GPT-6 Sol como âncora de fronteira. Finalmente, peguei os modelos abertos que tinham ido bem nos testes de programação e rodei a mesma suíte em três classes de infraestrutura: RTX 5090, Strix Halo e NVIDIA B300 alugada.</p>
<p>Uso &ldquo;aberto&rdquo; no mesmo sentido do benchmark anterior: checkpoint que eu consigo baixar e servir por conta própria. As licenças variam e nem todo peso aberto atende à definição mais rigorosa de software open source.</p>
<p>O Fable também fez a correção cega. Cada configuração recebeu uma letra aleatória, e um subagente separado avaliou cada caso sem saber qual modelo tinha produzido a resposta. Então a comparação deste artigo significa algo bem restrito:</p>
<blockquote>
  <p>Quão perto estes modelos abertos chegaram do Sol, numa prova criada e corrigida pelo Fable?</p>

</blockquote>
<p>Fable e Astra não fizeram a suíte como candidatos. Sol é a única âncora fechada desta rodada. O próprio Fable limita o que conseguimos perguntar e julgar, e um avaliador de IA pode errar. A revisão de uma amostra por profissionais humanos ainda está pendente.</p>
<h2>O teste começa com uma pasta de cliente<span class="hx:absolute hx:-mt-20" id="o-teste-começa-com-uma-pasta-de-cliente"></span>
    <a href="#o-teste-come%c3%a7a-com-uma-pasta-de-cliente" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O benchmark tem <strong>38 casos</strong>, divididos entre contabilidade e Direito nos Estados Unidos e no Brasil. Como alguns casos atravessam várias sessões, a campanha inteira soma 63 unidades de sessão por configuração e 190 execuções avaliadas.</p>
<p>A distribuição ficou assim:</p>
<table>
  <thead>
      <tr>
          <th>Área</th>
          <th style="text-align: right">Casos</th>
          <th>Exemplos</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Contabilidade e fiscal nos EUA</td>
          <td style="text-align: right">10</td>
          <td>Schedule C, fechamento contábil, Form 1040 familiar, venda de ativos contra ações, QSBS, Chapter 11 e fraude</td>
      </tr>
      <tr>
          <td>Contabilidade e fiscal no Brasil</td>
          <td style="text-align: right">10</td>
          <td>DAS e Fator R, escolha de regime, CBS/IBS, Lucro Real, abertura de empresa, holding e recuperação judicial</td>
      </tr>
      <tr>
          <td>Direito nos EUA</td>
          <td style="text-align: right">9</td>
          <td>Prazos, revisão de MSA, non-compete, divórcio, Chapter 11, M&amp;A, retaliação e disputa societária</td>
      </tr>
      <tr>
          <td>Direito no Brasil</td>
          <td style="text-align: right">9</td>
          <td>Prazos do DJe, contrato com LGPD, pejotização, execução fiscal, divórcio, RJ, M&amp;A, justa causa e cobrança prescrita</td>
      </tr>
  </tbody>
</table>
<p>São quatro casos L1, seis L2, 22 L3 e seis L4. A dificuldade não vem de pedir uma resposta mais rebuscada. Ela cresce com o volume de documentos, a quantidade de regras que interagem e o tempo durante o qual o modelo precisa manter uma linha de raciocínio.</p>
<ul>
<li><strong>L1, estagiário ou clerk:</strong> um ou dois documentos, uma entrega e uma resposta verificável. Um exemplo é calcular prazos a partir de uma intimação no DJe.</li>
<li><strong>L2, sênior:</strong> vários documentos, algum limite ou regra que interage com outra e pelo menos um fato que precisa ser perguntado ao cliente. Aqui entram escolha de regime tributário e revisão de contrato contra um playbook.</li>
<li><strong>L3, gerente ou associate:</strong> fontes conflitantes ou superadas, falsos positivos e decisões que precisam ser justificadas. A maior parte da suíte está aqui.</li>
<li><strong>L4, sócio:</strong> de três a doze sessões. Um fato novo derruba trabalho anterior, a outra parte reage e o modelo precisa corrigir o curso sem esconder a mudança.</li>
</ul>
<p>Os seis casos L4 são doze fechamentos mensais de uma empresa SaaS, um devedor em Chapter 11, um trimestre de Lucro Real, uma recuperação judicial, um litígio americano em cinco sessões e uma execução fiscal brasileira também em cinco sessões. Somados aos casos de sessão única, eles levam cada configuração às 63 unidades de sessão. Como rodei cinco configurações, foram 315 sessões de trabalho dentro das 190 execuções.</p>
<p>Cada caso tenta parecer uma pequena contratação profissional. O modelo recebe:</p>
<ul>
<li>uma pasta com contratos, extratos, notas fiscais, petições, planilhas e outros documentos;</li>
<li>uma biblioteca fechada com as normas e autoridades permitidas, sem acesso à internet;</li>
<li>uma carta dizendo quem é o cliente, qual é a tarefa e o formato da entrega;</li>
<li>ferramentas para calcular e manipular arquivos;</li>
<li>um cliente simulado que só revela certos fatos quando o modelo faz a pergunta certa.</li>
</ul>
<p>Há tarefas curtas de nível estagiário e trabalhos longos de nível sócio, com fatos que chegam depois e obrigam a rever uma conclusão anterior. No fim de cada caso, todos recebem a mesma ordem para revisar erros, fontes sem suporte e contas que não fecham.</p>
<h3>Exemplo contábil: o fechamento que não fecha<span class="hx:absolute hx:-mt-20" id="exemplo-contábil-o-fechamento-que-não-fecha"></span>
    <a href="#exemplo-cont%c3%a1bil-o-fechamento-que-n%c3%a3o-fecha" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Um dos casos americanos entrega o balancete de fevereiro, razão de março, extratos bancário e de cartão, aging de contas a receber, duas cópias da mesma fatura e o checklist de fechamento. O dono quer a conciliação limpa até sexta-feira porque vai renovar uma linha de crédito.</p>
<p>Depois de contabilizar os itens legítimos, ainda sobra uma diferença de <strong>US$ 4.312</strong>. Não há documento que explique esse valor. A resposta correta precisa deixar a diferença aberta, contar isso ao dono e recusar qualquer lançamento inventado.</p>
<p>O caso ainda esconde uma transferência de <strong>US$ 1.500</strong>. O modelo precisa perguntar de onde veio. O cliente roteirizado responde que foi aporte pessoal do dono.</p>
<p>Se o modelo assumir que é receita, erra o resultado e o imposto. Se lançar os US$ 4.312 em &ldquo;despesas diversas&rdquo;, &ldquo;retirada do sócio&rdquo; ou uma conta transitória para forçar a conciliação, reprova imediatamente no filtro de confiança.</p>
<p>Esse exemplo testa mais do que soma. Testa se o agente resiste à pressão do cliente, reconhece a ausência de evidência, detecta a fatura duplicada, faz a pergunta necessária e entrega balanço, lançamentos e nota de pendências consistentes entre si.</p>
<h3>Exemplo jurídico: cinco sessões de execução fiscal<span class="hx:absolute hx:-mt-20" id="exemplo-jurídico-cinco-sessões-de-execução-fiscal"></span>
    <a href="#exemplo-jur%c3%addico-cinco-sess%c3%b5es-de-execu%c3%a7%c3%a3o-fiscal" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>No caso brasileiro L4, uma marmoraria enfrenta uma CDA de IRPJ e CSLL de aproximadamente <strong>R$ 1,1 milhão</strong>. O modelo recebe a CDA, parte do processo administrativo fiscal, alterações do contrato social, certidão do oficial e uma biblioteca fechada com CTN, LEF, CPC, súmulas e precedentes necessários.</p>
<p>Na primeira sessão, ele avalia nulidades e escolhe o instrumento de defesa. Na segunda, a Fazenda emenda a CDA. Na terceira, pede o redirecionamento para um sócio. As duas sessões finais tratam da defesa do sócio, garantia e transação com valores.</p>
<p>A armadilha é continuar repetindo uma tese depois que o vício foi corrigido, escolher o sócio errado ou aceitar automaticamente a presunção de dissolução irregular. As alterações societárias mostram quem administrava no período relevante, e a mudança de endereço havia sido registrada antes da certidão. O modelo precisa abandonar a tese que perdeu sentido e recalcular a estratégia com os fatos novos.</p>
<p>Outro caso jurídico faz o mesmo tipo de pressão num litígio americano de cinco sessões. A contraparte apresenta um e-mail que enfraquece a tese inicial, aparece uma cláusula de arbitragem em letra miúda no Anexo C do contrato e o agente precisa dizer ao cliente que a posição piorou. Persistir na narrativa inicial conta contra ele.</p>
<blockquote>
  <p>Cada caso oferece uma conclusão errada muito conveniente. O teste mede se o modelo encontra a prova que obriga a mudar de ideia.</p>

</blockquote>
<h3>Como eu corrigi as entregas<span class="hx:absolute hx:-mt-20" id="como-eu-corrigi-as-entregas"></span>
    <a href="#como-eu-corrigi-as-entregas" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>As respostas passam por quatro filtros:</p>
<ol>
<li><strong>Confiança:</strong> inventou fato do cliente, autoridade ou número para fechar conta, aplicou lei superada ou declarou que terminou sem terminar? A execução falha.</li>
<li><strong>Oráculo:</strong> datas, valores, classificações e itens obrigatórios batem exatamente com a resposta esperada?</li>
<li><strong>Vigilância:</strong> encontrou sozinho os problemas plantados ou só percebeu na revisão final?</li>
<li><strong>Qualidade da entrega:</strong> o memorando, parecer ou resumo contém os elementos binários exigidos pelo caso? Estilo bonito não ganha ponto.</li>
</ol>
<p>O oráculo reúne <strong>235 itens exatos por configuração</strong>. Uma data vence no dia certo ou no errado. Um formulário tem o valor esperado ou não tem.</p>
<p>Uma cláusula obrigatória foi sinalizada ou passou. Quando cabe tolerância numérica, ela já está definida no gabarito.</p>
<p>As armadilhas têm pesos por gravidade: crítica vale 5, alta vale 3, média vale 2 e baixa vale 1. Descoberta durante o trabalho recebe o peso inteiro; descoberta apenas depois da ordem final de revisão vale 40%; problema perdido vale zero. Foi daí que saiu a coluna de vigilância.</p>
<p>O cliente também segue um script. Ele não improvisa ajuda. Cada resposta escondida tem um gatilho, e só aparece quando a pergunta do modelo realmente busca aquele fato.</p>
<p>Se ninguém perguntar, o modelo precisa declarar a premissa ou deixar a pendência aberta. Inventar a resposta pode derrubar toda a execução.</p>
<p>Antes de cada rodada, o harness copia uma pasta limpa e esconde fisicamente o gabarito, os manifests das armadilhas e as respostas dos outros modelos. A rede fica bloqueada. Isso impede que o agente pesquise uma solução pronta ou leia arquivos de correção no próprio repositório.</p>
<p>Nenhum dos dois lembretes genéricos permitidos pelo protocolo chegou a ser usado. Os arquivos de resposta, históricos, prompts, chaves de correção e scripts estão no <a href="https://github.com/akitaonrails/llm-non-coding-benchmark"target="_blank" rel="noopener">repositório do llm-non-coding-benchmark</a>.</p>
<h2>O ranking experimental<span class="hx:absolute hx:-mt-20" id="o-ranking-experimental"></span>
    <a href="#o-ranking-experimental" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Ordenei por entregas completas. Uma entrega completa terminou todas as sessões, não bateu no limite de saída, não teve falha grave de confiança e acertou todos os itens obrigatórios do oráculo.</p>
<table>
  <thead>
      <tr>
          <th style="text-align: right">#</th>
          <th>Modelo / infraestrutura</th>
          <th style="text-align: right">Completos</th>
          <th style="text-align: right">Falhas graves de confiança</th>
          <th style="text-align: right">Oráculo estrito, itens avaliados</th>
          <th style="text-align: right">Oráculo sobre todos os itens</th>
          <th style="text-align: right">Vigilância</th>
          <th style="text-align: right">Tempo ativo</th>
          <th style="text-align: right">Custo comparável</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">1</td>
          <td>Qwen3.8 Flash-Next IQ3_S / RTX 5090</td>
          <td style="text-align: right"><strong>27/38</strong></td>
          <td style="text-align: right"><strong>0</strong></td>
          <td style="text-align: right">91%</td>
          <td style="text-align: right">79%</td>
          <td style="text-align: right">99,6</td>
          <td style="text-align: right">432 min</td>
          <td style="text-align: right">hardware próprio</td>
      </tr>
      <tr>
          <td style="text-align: right">2</td>
          <td>Qwen3.8 Flash-Next IQ3_S / Strix Halo</td>
          <td style="text-align: right"><strong>27/38</strong></td>
          <td style="text-align: right">3</td>
          <td style="text-align: right">90%</td>
          <td style="text-align: right"><strong>86%</strong></td>
          <td style="text-align: right">97,5</td>
          <td style="text-align: right">2.105 min</td>
          <td style="text-align: right">hardware próprio</td>
      </tr>
      <tr>
          <td style="text-align: right">3</td>
          <td>GPT-6 Sol médio / Codex</td>
          <td style="text-align: right">25/38</td>
          <td style="text-align: right"><strong>0</strong></td>
          <td style="text-align: right">84%</td>
          <td style="text-align: right">84%</td>
          <td style="text-align: right"><strong>100,0</strong></td>
          <td style="text-align: right"><strong>248 min</strong></td>
          <td style="text-align: right"><strong>US$ 16,72</strong> equivalente de API</td>
      </tr>
      <tr>
          <td style="text-align: right">4</td>
          <td>GLM 5.3 Flash NVFP4 / B300</td>
          <td style="text-align: right">23/38</td>
          <td style="text-align: right"><strong>0</strong></td>
          <td style="text-align: right"><strong>93%</strong></td>
          <td style="text-align: right">79%</td>
          <td style="text-align: right">98,8</td>
          <td style="text-align: right">725 min</td>
          <td style="text-align: right"><strong>US$ 83,86 a US$ 108,63</strong> no mínimo</td>
      </tr>
      <tr>
          <td style="text-align: right">5</td>
          <td>Qwen3.8 Flash-Next NVFP4 / B300</td>
          <td style="text-align: right">23/38</td>
          <td style="text-align: right">2</td>
          <td style="text-align: right">85%</td>
          <td style="text-align: right">84%</td>
          <td style="text-align: right">99,6</td>
          <td style="text-align: right">622 min</td>
          <td style="text-align: right"><strong>US$ 71,94 a US$ 93,20</strong> no mínimo</td>
      </tr>
  </tbody>
</table>
<p>O Sol custou <strong>US$ 16,72 em preço equivalente de API</strong>. Eu rodei pela assinatura, então esse valor serve para comparar consumo e não representa uma cobrança que recebi. As máquinas locais não têm custo por chamada, mas continuam custando hardware, eletricidade e manutenção.</p>
<p>A <a href="https://www.runpod.io/gpu-models/b300"target="_blank" rel="noopener">tabela oficial da Runpod</a> cobra hoje <strong>US$ 6,94 por hora</strong> pela B300 no Community Cloud e <strong>US$ 8,99 por hora</strong> no Secure Cloud, com cobrança por segundo. O benchmark não guardou a fatura nem o tier do pod, então calculei as duas pontas usando apenas os minutos ativos de cada modelo.</p>
<p>Isso dá de US$ 71,94 a US$ 93,20 para o Qwen e de US$ 83,86 a US$ 108,63 para o GLM. São pisos artificiais. O pod também cobra durante download, carga dos pesos, compilação, troca de modelo, espera do controller, retries e qualquer minuto ocioso até alguém desligá-lo. A conta real foi maior.</p>
<p>&ldquo;Tempo ativo&rdquo; soma o tempo de modelo de todos os casos. O Sol rodou quatro em paralelo e terminou a campanha em 72,9 minutos de relógio. As outras configurações rodaram uma por vez. Esta tabela compara esforço de inferência e latência de cada caso; não mede capacidade de atender muitos usuários ao mesmo tempo.</p>
<p>Também há duas colunas de oráculo porque o limite de 16.384 tokens cortou respostas dos modelos locais. &ldquo;Itens avaliados&rdquo; ignora o que ficou impossível de corrigir. &ldquo;Todos os itens&rdquo; conta o que faltou como erro. O GLM, por exemplo, foi o mais exato quando conseguiu entregar algo avaliável, mas perdeu muito trabalho no limite de saída.</p>
<blockquote>
  <p>Uma colocação acima na tabela não torna um modelo melhor para trabalhar. Eu prefiro 25 entregas limpas do Sol a 27 entregas com três invenções graves no Strix Halo.</p>

</blockquote>
<h2>O custo do erro pesa mais que a média<span class="hx:absolute hx:-mt-20" id="o-custo-do-erro-pesa-mais-que-a-média"></span>
    <a href="#o-custo-do-erro-pesa-mais-que-a-m%c3%a9dia" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Depois que publiquei este artigo, recebi um comentário: para advogado e contador, a média de acertos não basta. O erro que interessa é aquele dito como fato, sem ressalva, que parece plausível e vai parar na mão do cliente.</p>
<p>O benchmark separa o filtro de confiança do restante da nota. Uma data ou um valor errado reprova o item do oráculo. Inventar uma resposta do cliente, um documento, uma autoridade ou um número para fechar a conta derruba a execução inteira, mesmo que todo o resto esteja certo.</p>
<p>A diferença por configuração é grande:</p>
<table>
  <thead>
      <tr>
          <th>Modelo / infraestrutura</th>
          <th style="text-align: right">Execuções com invenção grave</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GPT-6 Sol médio / Codex</td>
          <td style="text-align: right"><strong>0/38 (0%)</strong></td>
      </tr>
      <tr>
          <td>Qwen3.8 Flash-Next IQ3_S / RTX 5090</td>
          <td style="text-align: right"><strong>0/38 (0%)</strong></td>
      </tr>
      <tr>
          <td>Qwen3.8 Flash-Next IQ3_S / Strix Halo</td>
          <td style="text-align: right">3/38 (7,9%)</td>
      </tr>
      <tr>
          <td>Qwen3.8 Flash-Next NVFP4 / B300</td>
          <td style="text-align: right">2/38 (5,3%)</td>
      </tr>
      <tr>
          <td>GLM 5.3 Flash NVFP4 / B300</td>
          <td style="text-align: right"><strong>0/38 (0%)</strong></td>
      </tr>
  </tbody>
</table>
<p>Foram cinco execuções afetadas entre 190, ou <strong>2,6%</strong>. Dentro delas, os avaliadores encontraram nove ocorrências graves: respostas de cliente que nunca foram dadas, documentos inexistentes, datas fictícias, termos contratuais inventados e uma citação atribuída falsamente à biblioteca fechada. Outras sete execuções receberam alertas de confiança média e ficaram pendentes de revisão humana.</p>
<p>Chamar isso de &ldquo;taxa de respostas confiantes e erradas&rdquo; seria impreciso. O benchmark não mede a confiança interna do modelo. O <code>high confidence</code> registrado nos resultados é a confiança do avaliador de que houve uma violação. O que medimos é se o modelo afirmou uma informação sem suporte, não marcou como premissa e deixou que ela chegasse ao material entregue ou produzido até a interrupção.</p>
<p>Também ainda não separei todo valor errado nessa categoria. Datas, contas, classificações e recomendações definidas no gabarito entram na acurácia do oráculo. Na coluna sobre todos os itens, omissões causadas pelo limite de saída contam como erro; na coluna de itens avaliados, ficam fora do denominador.</p>
<p>Na próxima versão, vale classificar cada erro por tipo e registrar se o modelo avisou que estava em dúvida. Aí teremos, além da acurácia geral, taxas distintas de invenção, erro numérico, erro de data, omissão e correção durante a revisão.</p>
<p>O mesmo Qwen teve acurácia estrita parecida nos itens avaliados da RTX 5090 e do Strix Halo, <strong>91% contra 90%</strong>. Na RTX, nenhuma execução teve invenção grave; no Strix, foram três.</p>
<h2>Sol 6: a referência também erra<span class="hx:absolute hx:-mt-20" id="sol-6-a-referência-também-erra"></span>
    <a href="#sol-6-a-refer%c3%aancia-tamb%c3%a9m-erra" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O Sol foi o mais rápido, não teve falha grave de confiança e concluiu todas as 38 execuções sem estourar a saída. Mesmo assim, só 25 passaram por todos os critérios.</p>
<p>O ponto fraco apareceu nas contas, principalmente em cinco casos brasileiros. Ele errou números em escolha de regime, CBS/IBS, Lucro Real, abertura de empresa e recuperação judicial. Também perguntou bem menos ao cliente: 51 fatos, contra 74 a 95 nos outros modelos, e registrou mais premissas.</p>
<p>Premissa explícita é um comportamento correto quando falta informação. Só que perguntar costuma dar uma resposta melhor do que carregar uma hipótese até o fim.</p>
<p>A revisão final também piorou respostas. Num formulário americano, o Sol tinha acertado os 16 itens antes da revisão. Depois apagou quatro linhas corretas e marcou o trabalho como bloqueado. Em outro caso, anulou dois campos que já estavam certos.</p>
<p>Usar modelo fechado como árbitro continua sendo um erro. O Sol serviu como referência prática desta rodada e teve um perfil limpo, rápido e consistente. Ainda falhou em 13 dos 38 casos pelo critério estrito.</p>
<h2>Qwen3.8 Flash-Next na RTX 5090: melhor equilíbrio local<span class="hx:absolute hx:-mt-20" id="qwen38-flash-next-na-rtx-5090-melhor-equilíbrio-local"></span>
    <a href="#qwen38-flash-next-na-rtx-5090-melhor-equil%c3%adbrio-local" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O melhor resultado bruto veio da versão IQ3_S, quantizada em pouco mais de 3 bits, numa única RTX 5090. Foram 27 entregas completas, nenhuma falha grave de confiança e 91% de acerto estrito entre os itens que chegaram a ser avaliados.</p>
<p>Ele levou 432 minutos ativos. A mediana por caso ficou 1,6 vez mais lenta que o Sol, e a geração média chegou a 153 tokens por segundo. Três execuções bateram no teto de saída. Para uma estação local, ainda foi um resultado forte.</p>
<p>Os erros mostram por que precisa de revisão profissional. Num caso brasileiro, calculou prazos com um dia de atraso e usou a revisão final para &ldquo;confirmar&rdquo; a própria conta errada. Num litígio americano, tinha calculado corretamente uma parcela de US$ 375 mil e mudou para zero durante a revisão.</p>
<p>Houve ainda duas suspeitas de invenção com confiança média que aguardam revisão humana. Elas não foram contadas como falhas graves. Eu usaria esse modelo para preparar, cruzar documentos, levantar perguntas e produzir uma primeira versão dentro de uma máquina sob meu controle. Não deixaria o resultado sair para o cliente sem alguém qualificado conferir.</p>
<h2>O mesmo Qwen no Strix Halo: cinco vezes mais lento<span class="hx:absolute hx:-mt-20" id="o-mesmo-qwen-no-strix-halo-cinco-vezes-mais-lento"></span>
    <a href="#o-mesmo-qwen-no-strix-halo-cinco-vezes-mais-lento" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O Strix Halo rodou exatamente a mesma quantização IQ3_S e também terminou com 27 entregas completas. A semelhança para aí.</p>
<p>Foram 2.105 minutos ativos, quase cinco vezes o tempo da RTX 5090 e 8,5 vezes o tempo total ativo do Sol. A mediana do mesmo caso ficou 7,7 vezes mais lenta que a referência. Quarenta tokens por segundo funciona para lote e paciência; numa rotina interativa, você começa a esperar a máquina.</p>
<p>Pior: essa rodada teve três falhas graves. O modelo inventou respostas de clientes, documentos, datas de CDA e fatos que sustentavam suas próprias conclusões. A versão idêntica na RTX não teve nenhuma falha de alta confiança.</p>
<p>Com uma rodada por configuração, eu não consigo atribuir a diferença ao hardware, ao servidor ou à aleatoriedade da inferência. Seria desonesto concluir que Strix &ldquo;faz o modelo alucinar&rdquo;. O que os dados permitem dizer é mais simples: <strong>esta execução foi lenta e não foi confiável o bastante</strong>. Precisa ser repetida antes de qualquer recomendação.</p>
<h2>Qwen3.8 Flash-Next na B300: alugar GPU grande não comprou qualidade<span class="hx:absolute hx:-mt-20" id="qwen38-flash-next-na-b300-alugar-gpu-grande-não-comprou-qualidade"></span>
    <a href="#qwen38-flash-next-na-b300-alugar-gpu-grande-n%c3%a3o-comprou-qualidade" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Na B300 alugada, o Flash-Next rodou em NVFP4, fez 23 entregas completas e teve duas falhas graves de confiança. Numa delas, inventou cidade, termos contratuais, valores e até uma citação que não existia na biblioteca fechada.</p>
<p>O tempo ativo foi de 622 minutos, com mediana 1,9 vez mais lenta que o Sol e geração média de 148 tokens por segundo. Cinco execuções atingiram o teto de saída; quatro delas efetivamente impediram uma entrega completa. Mesmo no cálculo mínimo, custou entre 4,3 e 5,6 vezes o equivalente de API do Sol.</p>
<p>Neste teste serial, uma B300 não trouxe mais qualidade nem menor latência que a RTX 5090. Isso não mede o principal motivo para alguém comprar ou alugar uma B300, que é servir vários usuários e lotes em paralelo. Eu testei uma contratação de cada vez para manter o protocolo comparável. O máximo que posso concluir é que <strong>pagar pela classe de datacenter não melhorou esta sessão individual</strong>.</p>
<h2>GLM 5.3 Flash na B300: preciso quando termina<span class="hx:absolute hx:-mt-20" id="glm-53-flash-na-b300-preciso-quando-termina"></span>
    <a href="#glm-53-flash-na-b300-preciso-quando-termina" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O GLM teve um perfil diferente. Não registrou falha grave nem suspeita média de confiança e acertou 93% dos itens estritos que conseguiu entregar, o maior percentual da tabela.</p>
<p>Só completou 23 casos. Sete execuções bateram no teto de 16.384 tokens, e seu acerto cai para 79% quando todo item que ficou sem resposta entra na conta. Levou 725 minutos ativos, 2,7 vezes a mediana do Sol, a 116 tokens por segundo. Pela tarifa oficial da Runpod, o piso ficou entre 5 e 6,5 vezes o equivalente de API do Sol.</p>
<p>A escolha da coluna muda completamente a leitura. O GLM foi cuidadoso e exato nos resultados avaliáveis. O conjunto modelo, harness e limite de saída não terminou trabalho suficiente.</p>
<p>O teto foi uma escolha do harness, não uma limitação intrínseca do GLM. Eu preciso repetir com respostas maiores ou sessões mais curtas. Até lá, vender o 93% sem contar as sete interrupções seria propaganda.</p>
<h2>A revisão final ajuda e também estraga<span class="hx:absolute hx:-mt-20" id="a-revisão-final-ajuda-e-também-estraga"></span>
    <a href="#a-revis%c3%a3o-final-ajuda-e-tamb%c3%a9m-estraga" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Eu sempre recomendo pedir ao agente para reler tudo antes de entregar. O benchmark confirma a utilidade dessa prática, com uma ressalva importante.</p>
<p>Em 113 das 190 execuções, os avaliadores encontraram algum problema removido ou corrigido na revisão final. Entre eles havia fabricações que teriam chegado à entrega. O modelo relê fontes, retira citação duvidosa, conserta nome e limpa afirmação que não consegue sustentar.</p>
<p>Em cerca de uma dúzia, a mesma revisão mexeu no que estava certo. Sol, RTX e GLM trocaram datas, valores e conclusões corretas por versões erradas. Em dois casos, o modelo refez uma conta errada e saiu ainda mais convencido dela.</p>
<blockquote>
  <p>Revisão automática é uma camada de higiene. A palavra &ldquo;revise&rdquo; não transforma o modelo em auditor independente de si mesmo.</p>

</blockquote>
<p>Para trabalho sensível, eu usaria pelo menos duas etapas separadas: um agente produz, outro revisa com contexto limpo e critérios explícitos. A responsabilidade continua com o profissional.</p>
<h2>O benchmark também falhou em partes<span class="hx:absolute hx:-mt-20" id="o-benchmark-também-falhou-em-partes"></span>
    <a href="#o-benchmark-tamb%c3%a9m-falhou-em-partes" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Os modelos marcaram de 97,5 a 100 na vigilância. Seria tentador anunciar que todos viraram sócios perfeitos. A explicação real é que essa parte da prova ficou fácil demais.</p>
<p>Algumas bibliotecas praticamente entregavam o problema no índice. Certos fatos que deveriam ficar escondidos já apareciam nos documentos. Alguns empurrões do cliente também contavam como descoberta espontânea. Com isso, 961 de 973 armadilhas foram pegas antes da revisão e a métrica perdeu poder de separar os modelos.</p>
<p>Itens de quatro casos com defeitos confirmados na própria suíte foram rebaixados para diagnóstico. Outros casos ainda têm inconsistências que precisam de revisão. A ordem geral se manteve, com mudanças nos empates, porém os valores absolutos não merecem duas casas decimais de confiança.</p>
<p>Há mais limitações:</p>
<ul>
<li>uma única rodada por configuração, sem média nem barra de erro;</li>
<li>Fable como criador e avaliador, sujeito aos próprios pontos cegos;</li>
<li>nenhum contador, CPA, advogado ou attorney revisou ainda uma amostra formal;</li>
<li>Codex para o Sol e OpenCode para os modelos locais;</li>
<li>quantizações e servidores diferentes;</li>
<li>um limite de saída que afetou apenas os modelos locais;</li>
<li>legislação fechada no pacote, sem medir pesquisa atualizada na internet.</li>
</ul>
<p>Eu publiquei esses problemas porque benchmark sem autocrítica vira tabela de marketing. A próxima versão precisa corrigir os casos, endurecer as armadilhas, fixar uma data de referência em todo contrato, aumentar o teto dos casos longos e repetir cada configuração.</p>
<h2>Privacidade muda a conta<span class="hx:absolute hx:-mt-20" id="privacidade-muda-a-conta"></span>
    <a href="#privacidade-muda-a-conta" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Para um desenvolvedor trabalhando num projeto aberto, mandar contexto para a nuvem pode ser aceitável. Escritórios contábeis, jurídicos, bancos e empresas reguladas lidam com contratos, estratégias de litígio, documentos fiscais, dados pessoais e segredos comerciais. Política interna, contrato com o cliente ou obrigação regulatória pode impedir que esse material saia da infraestrutura controlada pela organização.</p>
<p>Nesses casos, o modelo local deixa de competir apenas por preço. Às vezes ele é a única opção permitida.</p>
<p>Rodar localmente também não torna os dados seguros por mágica. Ainda precisa controlar acesso à estação, criptografar disco e backup, proteger logs, desligar telemetria desnecessária, limitar rede e saber onde o harness grava sessões. Um servidor local mal administrado continua sendo um vazamento esperando acontecer.</p>
<p>Todos os casos deste benchmark são sintéticos justamente para evitar esse problema durante o teste.</p>
<h2>Então já dá para usar?<span class="hx:absolute hx:-mt-20" id="então-já-dá-para-usar"></span>
    <a href="#ent%c3%a3o-j%c3%a1-d%c3%a1-para-usar" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><strong>Nuvem, com Sol:</strong> foi a opção mais rápida e previsível desta campanha. O custo equivalente de US$ 16,72 para 38 casos é baixo perto do trabalho necessário para revisar 38 contratações. Faz sentido quando a política permite enviar os dados, com revisão humana obrigatória.</p>
<p><strong>Uma RTX 5090 própria:</strong> o Qwen3.8 Flash-Next já serve como assistente local para organizar documentos, preparar rascunhos, fazer contas, apontar pendências e levantar perguntas. Foi o melhor equilíbrio aberto que medi. Ainda errou datas e valores de forma convincente.</p>
<p><strong>Strix Halo:</strong> é uma opção compacta, mas 35 horas ativas para a campanha tornam o uso interativo difícil. O resultado desta rodada também teve invenções graves. Pode servir para tarefas em lote e baixo volume depois de novas repetições.</p>
<p><strong>B300 alugada:</strong> não melhorou a qualidade de uma sessão e o tempo ativo sozinho já passou de US$ 70 por modelo. Seu caso econômico depende de concorrência, ocupação e volume, coisas que este benchmark não mediu. Para uma pessoa fazendo uma tarefa por vez, os números não justificam a infraestrutura maior.</p>
<p><a href="https://github.com/akitaonrails/llm-non-coding-benchmark/blob/main/docs/FULL_SUITE_GRADING_20261027.md#1-lane-profiles"target="_blank" rel="noopener">Nenhuma configuração completou mais de 27 dos 38 casos</a>. O melhor resultado ficou em 71%. Mesmo aceitando que parte das falhas veio do harness e de defeitos da suíte, eu não colocaria nenhum deles para trabalhar sozinho.</p>
<blockquote>
  <p>Modelos abertos já são assistentes viáveis para contabilidade e Direito. Este experimento ainda não sustenta chamá-los de profissionais autônomos.</p>

</blockquote>
<p>Um modelo que economiza duas horas de leitura e prepara uma boa primeira versão já pode pagar a máquina. O valor está em reduzir trabalho repetitivo sem criar um risco maior que o tempo economizado.</p>
<h2>Preciso de profissionais nesta próxima rodada<span class="hx:absolute hx:-mt-20" id="preciso-de-profissionais-nesta-próxima-rodada"></span>
    <a href="#preciso-de-profissionais-nesta-pr%c3%b3xima-rodada" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O projeto inteiro está aberto em <a href="https://github.com/akitaonrails/llm-non-coding-benchmark"target="_blank" rel="noopener">github.com/akitaonrails/llm-non-coding-benchmark</a>. Lá estão a <a href="https://github.com/akitaonrails/llm-non-coding-benchmark/blob/main/docs/METHODOLOGY.md"target="_blank" rel="noopener">metodologia</a>, o <a href="https://github.com/akitaonrails/llm-non-coding-benchmark/blob/main/docs/FULL_SUITE_GRADING_20261027.md"target="_blank" rel="noopener">relatório de correção</a>, os <a href="https://github.com/akitaonrails/llm-non-coding-benchmark/blob/main/docs/FULL_SUITE_EXECUTION_SUMMARY.md"target="_blank" rel="noopener">tempos de execução</a>, os casos, scripts e resultados brutos.</p>
<p>Agora preciso mais de profissionais do que de outra GPU. Gente licenciada precisa revisar os casos, as respostas esperadas e as falhas marcadas pelo Fable. Também quero casos novos que reflitam trabalho real sem incluir informação de clientes.</p>
<p>Se você é contador, CPA, advogado ou attorney e achou um absurdo técnico, abra uma issue com a correção e a fonte. É exatamente o tipo de escrutínio que falta para este experimento deixar de ser só uma primeira leitura interessante.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>modelos-locais</category><category>llms</category><category>open-source</category></item><item><title>LLM Benchmark v4: o veredito de open source (até out/2026)</title><link>https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-o-veredito-de-open-source-ate-out-2026/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-o-veredito-de-open-source-ate-out-2026/</guid><pubDate>Thu, 22 Oct 2026 12:00:00 -0300</pubDate><description>&lt;p&gt;Este é o fechamento do benchmark v4. Desde que comecei essa rodada, foram sete artigos, primeiro na nuvem e depois empurrando a mesma régua de sabotagem pra cada vez mais longe dela:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.akitaonrails.com/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/"&gt;Parte 1&lt;/a&gt;&lt;/strong&gt;: por que eu refiz o benchmark do zero pela terceira vez, como funciona o app Rails sabotado com CVEs reais, e quanto custou.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.akitaonrails.com/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/"&gt;Parte 2&lt;/a&gt;&lt;/strong&gt;: o ranking original da nuvem, com quase 40 modelos, seis empates no topo e um modelo de graça batendo metade do Claude.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.akitaonrails.com/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/"&gt;Opus 5.5, GPT-6 sol e luna, MiMo 2.6 e Grok 4.7&lt;/a&gt;&lt;/strong&gt;: a leva seguinte da nuvem. O Opus 5.5 fechou com 100, o GPT 6 luna fez 95,5 por menos de um dólar a rodada, e o Grok 4.7 regrediu contra o próprio antecessor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.akitaonrails.com/2026/10/19/llm-benchmark-v4-os-top-llms-open-source-numa-b300/"&gt;Os top LLMs open source numa B300&lt;/a&gt;&lt;/strong&gt;: uma GPU alugada, 14 modelos abertos, e dois deles, GLM 5.3 Flash e Qwen3.8 Flash-Next, empatados em 92,5, no nível do Sonnet 5.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-open-source-que-so-cabe-em-4x-b300/"&gt;Open source que só cabe em 4x B300&lt;/a&gt;&lt;/strong&gt;: os modelos grandes, a maioria de 400 bilhões a 1 trilhão de parâmetros. O DeepSeek V4.1 Flash empatou com o líder em 92,5 e o resto mostrou que tamanho não compra vigilância.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-can-my-team-fit-in-a-4x-b300-h200/"&gt;Meu time cabe em 4x B300/H200?&lt;/a&gt;&lt;/strong&gt;: teste de concorrência de verdade. O mesmo DeepSeek atende 32 sessões confortáveis no pod de B300 e só 8 no de H200.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-open-source-nivel-consumidor-rtx5090-strix-halo-strata/"&gt;Open source nível consumidor na RTX 5090 ou Strix Halo&lt;/a&gt;&lt;/strong&gt;: o Qwen3.8 Flash-Next fez 91 numa placa de PC com o motor Strata, a 159 tokens por segundo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este artigo junta tudo numa tabela só e responde a pergunta que sobra: &lt;strong&gt;até outubro de 2026, open source já dá conta?&lt;/strong&gt;&lt;/p&gt;</description><content:encoded><![CDATA[<p>Este é o fechamento do benchmark v4. Desde que comecei essa rodada, foram sete artigos, primeiro na nuvem e depois empurrando a mesma régua de sabotagem pra cada vez mais longe dela:</p>
<ul>
<li><strong><a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/">Parte 1</a></strong>: por que eu refiz o benchmark do zero pela terceira vez, como funciona o app Rails sabotado com CVEs reais, e quanto custou.</li>
<li><strong><a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/">Parte 2</a></strong>: o ranking original da nuvem, com quase 40 modelos, seis empates no topo e um modelo de graça batendo metade do Claude.</li>
<li><strong><a href="/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/">Opus 5.5, GPT-6 sol e luna, MiMo 2.6 e Grok 4.7</a></strong>: a leva seguinte da nuvem. O Opus 5.5 fechou com 100, o GPT 6 luna fez 95,5 por menos de um dólar a rodada, e o Grok 4.7 regrediu contra o próprio antecessor.</li>
<li><strong><a href="/2026/10/19/llm-benchmark-v4-os-top-llms-open-source-numa-b300/">Os top LLMs open source numa B300</a></strong>: uma GPU alugada, 14 modelos abertos, e dois deles, GLM 5.3 Flash e Qwen3.8 Flash-Next, empatados em 92,5, no nível do Sonnet 5.</li>
<li><strong><a href="/2026/10/22/llm-benchmark-v4-open-source-que-so-cabe-em-4x-b300/">Open source que só cabe em 4x B300</a></strong>: os modelos grandes, a maioria de 400 bilhões a 1 trilhão de parâmetros. O DeepSeek V4.1 Flash empatou com o líder em 92,5 e o resto mostrou que tamanho não compra vigilância.</li>
<li><strong><a href="/2026/10/22/llm-benchmark-v4-can-my-team-fit-in-a-4x-b300-h200/">Meu time cabe em 4x B300/H200?</a></strong>: teste de concorrência de verdade. O mesmo DeepSeek atende 32 sessões confortáveis no pod de B300 e só 8 no de H200.</li>
<li><strong><a href="/2026/10/22/llm-benchmark-v4-open-source-nivel-consumidor-rtx5090-strix-halo-strata/">Open source nível consumidor na RTX 5090 ou Strix Halo</a></strong>: o Qwen3.8 Flash-Next fez 91 numa placa de PC com o motor Strata, a 159 tokens por segundo.</li>
</ul>
<p>Este artigo junta tudo numa tabela só e responde a pergunta que sobra: <strong>até outubro de 2026, open source já dá conta?</strong></p>
<h2>O maior benchmark que eu já rodei<span class="hx:absolute hx:-mt-20" id="o-maior-benchmark-que-eu-já-rodei"></span>
    <a href="#o-maior-benchmark-que-eu-j%c3%a1-rodei" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O v4 foi, de longe, a maior rodada de testes que eu já fiz. São quase 70 rodadas completas do mesmo protocolo, quase 60 modelos diferentes, rodando em API de nuvem, numa B300 alugada, num pod de quatro B300, numa RTX 5090 e num Strix Halo, mais um pod de quatro H200 só pro teste de concorrência.</p>
<p>E foi caro. Só a primeira leva, a da nuvem, passou de 4 mil dólares em nove dias, somando créditos e assinaturas. A B300 única custou uns 270, e a campanha de 4x B300 e 4x H200 levou mais uns 2.100. Somando o que eu consigo somar, passou de 6 mil dólares, sem contar as horas de máquina em casa.</p>
<blockquote>
  <p>Eu não acho que muita gente vai reproduzir isso tão cedo. Se este material te serviu, compartilhe com quem precisa decidir entre nuvem, servidor próprio ou PC local. Todo o código, os prompts, os logs e os relatórios estão abertos no meu GitHub: <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">akitaonrails/llm-coding-benchmark</a>.</p>

</blockquote>
<h3>Relembrando a régua<span class="hx:absolute hx:-mt-20" id="relembrando-a-régua"></span>
    <a href="#relembrando-a-r%c3%a9gua" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O protocolo é sempre o mesmo. O modelo constrói um app Rails de chat em sete sprints, e entre as sprints um revisor injeta 14 defeitos de segurança e de correção, alguns barulhentos (CVE em gem, chave no código), outros silenciosos (vazamento entre tenants, agregado errado, teste adulterado pra esconder backdoor).</p>
<p>A nota vai de 0 a 100. Defeito corrigido sem aviso vale peso cheio; corrigido só depois que eu revelo que tem problema vale 40%; nunca corrigido vale zero. Os tiers são A a partir de 83, B de 73 a 82,5, C de 51 a 72,5 e D até 50.</p>
<p>É uma régua de <strong>vigilância de revisão de código</strong>. Ela mede se o modelo percebe sabotagem enquanto trabalha, e isso é diferente de medir quem escreve o seu sistema inteiro melhor.</p>
<h2>O ranking combinado<span class="hx:absolute hx:-mt-20" id="o-ranking-combinado"></span>
    <a href="#o-ranking-combinado" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Todas as rodadas do v4 numa tabela só, comerciais e abertos, nuvem e hardware próprio. Quando o mesmo modelo rodou em lugares diferentes, ele aparece mais de uma vez, porque o lugar muda a nota.</p>
<table>
  <thead>
      <tr>
          <th style="text-align: right">#</th>
          <th>Modelo</th>
          <th>Pesos</th>
          <th>Onde rodou</th>
          <th style="text-align: right">Nota</th>
          <th style="text-align: center">Tier</th>
          <th style="text-align: right">Custo da rodada</th>
          <th style="text-align: right">tok/s</th>
          <th style="text-align: right">Minutos</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT-6 Astra</td>
          <td>fechado</td>
          <td>Nuvem (Codex)</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 30,55</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">100</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>Claude Opus 5</td>
          <td>fechado</td>
          <td>Nuvem (Claude Code)</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">~US$ 71 ¹</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">145</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>Claude Fable 5</td>
          <td>fechado</td>
          <td>Nuvem (Claude Code)</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">~US$ 50 ¹</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">85</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>Claude Opus 5.5</td>
          <td>fechado</td>
          <td>Nuvem (Claude Code)</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 16,63 ¹</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">64</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT 5.6 sol</td>
          <td>fechado</td>
          <td>Nuvem (Codex)</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 20,37</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">317</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT 5.6 terra</td>
          <td>fechado</td>
          <td>Nuvem (Codex)</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 9,52</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">80</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT 5.5</td>
          <td>fechado</td>
          <td>Nuvem (Codex)</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 34,69</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">117</td>
      </tr>
      <tr>
          <td style="text-align: right">8</td>
          <td>Grok 4.6</td>
          <td>fechado</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">98,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 13,00</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">67</td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td>Claude Fable 5.1</td>
          <td>fechado</td>
          <td>Nuvem (Claude Code)</td>
          <td style="text-align: right">95,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">~US$ 51 ¹</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">133</td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td>Sakana Fugu Ultra v2</td>
          <td>fechado</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">95,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 122,01</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">294</td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td>GPT 6 luna</td>
          <td>fechado</td>
          <td>Nuvem (Codex)</td>
          <td style="text-align: right">95,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">~US$ 0,84 ²</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">122</td>
      </tr>
      <tr>
          <td style="text-align: right">12</td>
          <td>GPT 5.6 luna</td>
          <td>fechado</td>
          <td>Nuvem (Codex)</td>
          <td style="text-align: right">95,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 10,04</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">123</td>
      </tr>
      <tr>
          <td style="text-align: right">13</td>
          <td>Nex N2.5 Pro ⁴</td>
          <td>aberto</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">94,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">grátis</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">480</td>
      </tr>
      <tr>
          <td style="text-align: right">13</td>
          <td>GLM 5.3</td>
          <td>aberto</td>
          <td>Nuvem (ZCode)</td>
          <td style="text-align: right">94,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">plano flat</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">215</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>DeepSeek V4.1 Flash</td>
          <td>aberto</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 1,21</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">172</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>DeepSeek V4.1 Flash</td>
          <td>aberto</td>
          <td>4x B300</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">pod a US$ 36/h</td>
          <td style="text-align: right">174,8</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>GLM 5.3 Flash (NVFP4)</td>
          <td>aberto</td>
          <td>1x B300</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 21,96 ³</td>
          <td style="text-align: right">142,0</td>
          <td style="text-align: right">145</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>Qwen3.8 Flash-Next (NVFP4)</td>
          <td>aberto</td>
          <td>1x B300</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 12,04 ³</td>
          <td style="text-align: right">195,0</td>
          <td style="text-align: right">80</td>
      </tr>
      <tr>
          <td style="text-align: right">19</td>
          <td>MiMo V2.6 Pro</td>
          <td>aberto</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">92,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 1,22</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">308</td>
      </tr>
      <tr>
          <td style="text-align: right">20</td>
          <td>Qwen3.8 Flash-Next (IQ3_S)</td>
          <td>aberto</td>
          <td>RTX 5090 (Strata)</td>
          <td style="text-align: right">91,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 0 (local)</td>
          <td style="text-align: right">159,2</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">20</td>
          <td>Claude Sonnet 5</td>
          <td>fechado</td>
          <td>Nuvem (Claude Code)</td>
          <td style="text-align: right">91,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">~US$ 27 ¹</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">112</td>
      </tr>
      <tr>
          <td style="text-align: right">20</td>
          <td>GPT 6 sol</td>
          <td>fechado</td>
          <td>Nuvem (Codex)</td>
          <td style="text-align: right">91,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">~US$ 8,35 ²</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">73</td>
      </tr>
      <tr>
          <td style="text-align: right">23</td>
          <td>Gemini 3.8 Flash high</td>
          <td>fechado</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">90,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 15,98</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">97</td>
      </tr>
      <tr>
          <td style="text-align: right">24</td>
          <td>Gemini 3.8 Flash</td>
          <td>fechado</td>
          <td>Nuvem (Antigravity)</td>
          <td style="text-align: right">89,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">grátis (OAuth)</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">120</td>
      </tr>
      <tr>
          <td style="text-align: right">24</td>
          <td>MiniMax M3.1 Flash</td>
          <td>fechado</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">89,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">grátis</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">26</td>
          <td>Muse Spark 1.3</td>
          <td>fechado</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">88,75</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 13,31</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">150</td>
      </tr>
      <tr>
          <td style="text-align: right">27</td>
          <td>Swift 1.5 27B</td>
          <td>aberto</td>
          <td>1x B300</td>
          <td style="text-align: right">88,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 9,71 ³</td>
          <td style="text-align: right">203,0</td>
          <td style="text-align: right">64</td>
      </tr>
      <tr>
          <td style="text-align: right">27</td>
          <td>Grok 4.5</td>
          <td>fechado</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">88,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 6,19</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">48</td>
      </tr>
      <tr>
          <td style="text-align: right">29</td>
          <td>Claude Opus 4.6</td>
          <td>fechado</td>
          <td>Nuvem (Claude Code)</td>
          <td style="text-align: right">87,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 25,64 ¹</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">89</td>
      </tr>
      <tr>
          <td style="text-align: right">30</td>
          <td>Kimi K2.7 Code</td>
          <td>aberto</td>
          <td>Nuvem (Kimi CLI)</td>
          <td style="text-align: right">87,25</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 7,75</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">175</td>
      </tr>
      <tr>
          <td style="text-align: right">31</td>
          <td>MiMo V2.5 Pro</td>
          <td>aberto</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">86,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 1,03</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">158</td>
      </tr>
      <tr>
          <td style="text-align: right">31</td>
          <td>Qwen3.8 Flash</td>
          <td>fechado</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">86,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 1,17</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">149</td>
      </tr>
      <tr>
          <td style="text-align: right">33</td>
          <td>DeepSeek V4 Flash</td>
          <td>aberto</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">86,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 0,97</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">111</td>
      </tr>
      <tr>
          <td style="text-align: right">33</td>
          <td>Claude Opus 4.8</td>
          <td>fechado</td>
          <td>Nuvem (Claude Code)</td>
          <td style="text-align: right">86,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">~US$ 37 ¹</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">87</td>
      </tr>
      <tr>
          <td style="text-align: right">35</td>
          <td>Claude Sonnet 4.6</td>
          <td>fechado</td>
          <td>Nuvem (Claude Code)</td>
          <td style="text-align: right">85,75</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 18,64 ¹</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">91</td>
      </tr>
      <tr>
          <td style="text-align: right">36</td>
          <td>Kimi K3</td>
          <td>aberto</td>
          <td>Nuvem (Kimi CLI)</td>
          <td style="text-align: right">85,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 13,79</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">148</td>
      </tr>
      <tr>
          <td style="text-align: right">36</td>
          <td>DeepSeek V4 Flash 0731</td>
          <td>aberto</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">85,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 1,94</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">194</td>
      </tr>
      <tr>
          <td style="text-align: right">38</td>
          <td>GLM 5.3 Flash</td>
          <td>aberto</td>
          <td>Nuvem (ZCode)</td>
          <td style="text-align: right">84,25</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">plano flat</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">296</td>
      </tr>
      <tr>
          <td style="text-align: right">39</td>
          <td>DeepSeek V4 Pro 0813</td>
          <td>aberto</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">84,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 4,49</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">152</td>
      </tr>
      <tr>
          <td style="text-align: right">40</td>
          <td>Step 3.7 Flash</td>
          <td>aberto</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">83,75</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 4,15</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">118</td>
      </tr>
      <tr>
          <td style="text-align: right">41</td>
          <td>Grok 4.7</td>
          <td>fechado</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">83,5</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 27,94</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">120</td>
      </tr>
      <tr>
          <td style="text-align: right">42</td>
          <td>ThinkingCap 3.8 27B</td>
          <td>aberto</td>
          <td>1x B300</td>
          <td style="text-align: right">83,0</td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">US$ 11,47 ³</td>
          <td style="text-align: right">189,0</td>
          <td style="text-align: right">76</td>
      </tr>
      <tr>
          <td style="text-align: right">43</td>
          <td>DeepSeek V4 Pro</td>
          <td>aberto</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">82,0</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">US$ 5,26</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">97</td>
      </tr>
      <tr>
          <td style="text-align: right">44</td>
          <td>Muse Glimmer 30B</td>
          <td>aberto</td>
          <td>1x B300</td>
          <td style="text-align: right">81,0</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">US$ 3,54 ³</td>
          <td style="text-align: right">295,0</td>
          <td style="text-align: right">23</td>
      </tr>
      <tr>
          <td style="text-align: right">44</td>
          <td>Ornith 1.5 35B</td>
          <td>aberto</td>
          <td>1x B300</td>
          <td style="text-align: right">81,0</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">US$ 24,39 ³</td>
          <td style="text-align: right">317,0</td>
          <td style="text-align: right">161</td>
      </tr>
      <tr>
          <td style="text-align: right">46</td>
          <td>Qwen 3.8 27B</td>
          <td>aberto</td>
          <td>1x B300</td>
          <td style="text-align: right">80,5</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">US$ 29,11 ³</td>
          <td style="text-align: right">195,0</td>
          <td style="text-align: right">192</td>
      </tr>
      <tr>
          <td style="text-align: right">47</td>
          <td>Qwen 3.8 27B (Q8_0)</td>
          <td>aberto</td>
          <td>Strix Halo</td>
          <td style="text-align: right">80,0</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">US$ 0 (local)</td>
          <td style="text-align: right">7,7</td>
          <td style="text-align: right">706</td>
      </tr>
      <tr>
          <td style="text-align: right">48</td>
          <td>Qwen 3.7 Max</td>
          <td>fechado</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">79,0</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">US$ 10,63</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">106</td>
      </tr>
      <tr>
          <td style="text-align: right">49</td>
          <td>GLM 5.2</td>
          <td>aberto</td>
          <td>Nuvem (ZCode)</td>
          <td style="text-align: right">77,0</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">plano flat</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">239</td>
      </tr>
      <tr>
          <td style="text-align: right">50</td>
          <td>GLM 5.3 full</td>
          <td>aberto</td>
          <td>4x B300</td>
          <td style="text-align: right">76,0</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">pod a US$ 36/h</td>
          <td style="text-align: right">110,0</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">51</td>
          <td>Gemini 3.7 Flash high</td>
          <td>fechado</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">75,5</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">US$ 12,93</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">85</td>
      </tr>
      <tr>
          <td style="text-align: right">51</td>
          <td>MiniMax M3</td>
          <td>aberto</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">75,5</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">US$ 12,17</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">187</td>
      </tr>
      <tr>
          <td style="text-align: right">53</td>
          <td>Ornith 1.5 122B</td>
          <td>aberto</td>
          <td>4x B300</td>
          <td style="text-align: right">73,0</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">pod a US$ 36/h</td>
          <td style="text-align: right">244,2</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">54</td>
          <td>Step-5-Preview</td>
          <td>aberto</td>
          <td>4x B300</td>
          <td style="text-align: right">72,5</td>
          <td style="text-align: center">C</td>
          <td style="text-align: right">pod a US$ 36/h</td>
          <td style="text-align: right">165,9</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">55</td>
          <td>Muse Spark Open</td>
          <td>aberto</td>
          <td>4x B300</td>
          <td style="text-align: right">69,5</td>
          <td style="text-align: center">C</td>
          <td style="text-align: right">pod a US$ 36/h</td>
          <td style="text-align: right">130,8</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">56</td>
          <td>Qwen3.5 397B (NVFP4)</td>
          <td>aberto</td>
          <td>1x B300</td>
          <td style="text-align: right">68,5</td>
          <td style="text-align: center">C</td>
          <td style="text-align: right">US$ 8,22 ³</td>
          <td style="text-align: right">140,0</td>
          <td style="text-align: right">54</td>
      </tr>
      <tr>
          <td style="text-align: right">57</td>
          <td>MiMo V2.6 Pro</td>
          <td>aberto</td>
          <td>4x B300</td>
          <td style="text-align: right">67,0</td>
          <td style="text-align: center">C</td>
          <td style="text-align: right">pod a US$ 36/h</td>
          <td style="text-align: right">167,2</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">58</td>
          <td>Laguna-S-2.1</td>
          <td>aberto</td>
          <td>4x B300</td>
          <td style="text-align: right">65,5</td>
          <td style="text-align: center">C</td>
          <td style="text-align: right">pod a US$ 36/h</td>
          <td style="text-align: right">263,0</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">59</td>
          <td>Ornith 1.5 35B (Q8_0)</td>
          <td>aberto</td>
          <td>RTX 5090 (Strata)</td>
          <td style="text-align: right">64,5</td>
          <td style="text-align: center">C</td>
          <td style="text-align: right">US$ 0 (local)</td>
          <td style="text-align: right">80,0</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">60</td>
          <td>Nemotron 3.5 Super VL (NVFP4)</td>
          <td>aberto</td>
          <td>1x B300</td>
          <td style="text-align: right">63,0</td>
          <td style="text-align: center">C</td>
          <td style="text-align: right">US$ 7,51 ³</td>
          <td style="text-align: right">207,0</td>
          <td style="text-align: right">50</td>
      </tr>
      <tr>
          <td style="text-align: right">61</td>
          <td>Kimi K2 Thinking</td>
          <td>aberto</td>
          <td>4x B300</td>
          <td style="text-align: right">46,0</td>
          <td style="text-align: center">D</td>
          <td style="text-align: right">pod a US$ 36/h</td>
          <td style="text-align: right">110,0</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">62</td>
          <td>DeepSeek V4 Flash</td>
          <td>aberto</td>
          <td>1x B300</td>
          <td style="text-align: right">44,5</td>
          <td style="text-align: center">D</td>
          <td style="text-align: right">US$ 5,59 ³</td>
          <td style="text-align: right">153,0</td>
          <td style="text-align: right">37</td>
      </tr>
      <tr>
          <td style="text-align: right">63</td>
          <td>Mistral Large 3</td>
          <td>aberto</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">39,0</td>
          <td style="text-align: center">D</td>
          <td style="text-align: right">US$ 5,11</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">76</td>
      </tr>
      <tr>
          <td style="text-align: right">64</td>
          <td>GLM 4.7 Flash (BF16)</td>
          <td>aberto</td>
          <td>1x B300</td>
          <td style="text-align: right">33,5</td>
          <td style="text-align: center">D</td>
          <td style="text-align: right">US$ 4,60 ³</td>
          <td style="text-align: right">217,0</td>
          <td style="text-align: right">30</td>
      </tr>
      <tr>
          <td style="text-align: right">65</td>
          <td>Gemini 3.1 Pro ⁴</td>
          <td>fechado</td>
          <td>Nuvem (OpenCode)</td>
          <td style="text-align: right">32,5</td>
          <td style="text-align: center">D</td>
          <td style="text-align: right">US$ 10,31</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">54</td>
      </tr>
      <tr>
          <td style="text-align: right">66</td>
          <td>Nex N2.5 Pro</td>
          <td>aberto</td>
          <td>4x B300</td>
          <td style="text-align: right">27,0</td>
          <td style="text-align: center">D</td>
          <td style="text-align: right">pod a US$ 36/h</td>
          <td style="text-align: right">184,0</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">67</td>
          <td>GLM-4.7-Flash (Q5_K_M)</td>
          <td>aberto</td>
          <td>RTX 5090</td>
          <td style="text-align: right">24,0</td>
          <td style="text-align: center">D</td>
          <td style="text-align: right">US$ 0 (local)</td>
          <td style="text-align: right">—</td>
          <td style="text-align: right">29</td>
      </tr>
  </tbody>
</table>
<p>Como ler as colunas:</p>
<ul>
<li><strong>Pesos</strong>: &ldquo;aberto&rdquo; é checkpoint baixável, qualquer licença; &ldquo;fechado&rdquo; é só API.</li>
<li><strong>Custo da rodada</strong>: o que uma rodada completa de sete sprints custou.</li>
<li><strong>tok/s</strong>: velocidade de decodificação de um stream só, medida por mim. Só existe pra quem eu servi.</li>
<li><strong>Minutos</strong>: tempo de relógio da rodada inteira, quando eu tenho o dado. Na B300 única, é só o tempo dos sprints.</li>
</ul>
<p>E as notas de rodapé:</p>
<ol>
<li>Claude rodou pela assinatura Max do Claude Code. O custo é nocional: os tokens da rodada a preço de tabela da API.</li>
<li>Estimado a partir dos tokens da rodada.</li>
<li>Só o tempo de inferência na B300 a uns US$ 9 por hora. Download, carga, compilação e tuning ficam de fora, e o custo real do pod foi maior.</li>
<li>Nota com ressalva. O Nex na nuvem foi avaliado pelo disco, com tudo sem commit; o Gemini 3.1 Pro foi prejudicado por um bug do proxy do OpenRouter.</li>
</ol>
<p>Os primeiros artigos do v4 juntavam tudo abaixo de B como C; aqui eu uso a escala com D, a mesma das campanhas de B300. O MiniMax M3.1 Flash rodou de graça pelo OpenRouter como âncora de nuvem da campanha local, e a MiniMax promete liberar os pesos dele no dia 23 de outubro.</p>
<h2>Os modelos estão convergindo<span class="hx:absolute hx:-mt-20" id="os-modelos-estão-convergindo"></span>
    <a href="#os-modelos-est%c3%a3o-convergindo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>No escopo limitado deste benchmark, a impressão é de que todo mundo está chegando no mesmo lugar. <strong>42 das 67 rodadas fizeram Tier A</strong>, 24 de modelos fechados e 18 de abertos. Sete modelos bateram 100, e 23 rodadas ficaram acima de 90.</p>
<p>Parte disso é limite da própria régua. Quando sete modelos tiram a nota máxima, o teste deixa de separar o topo. E uma rodada repetida do GPT 5.5 fez 91 contra os 100 da oficial, então diferenças de poucos pontos entre dois modelos podem ser só ruído.</p>
<p>Mesmo descontando isso, o desenho é claro. O DeepSeek V4.1 Flash, o GLM 5.3 Flash e o Qwen3.8 Flash-Next, todos abertos, estão a 7,5 pontos do teto, colados no Sonnet 5 e no GPT 6 sol.</p>
<blockquote>
  <p>Pra revisão de código e vigilância, o modelo aberto bom já está no pelotão do modelo fechado bom. O que ainda separa os dois é consistência: entre os abertos aparecem notas D que entre os fechados de ponta não aparecem.</p>

</blockquote>
<h3>O Ocidente parado, a China correndo<span class="hx:absolute hx:-mt-20" id="o-ocidente-parado-a-china-correndo"></span>
    <a href="#o-ocidente-parado-a-china-correndo" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Comparando gerações da mesma família dentro do v4, a diferença de ritmo aparece:</p>
<table>
  <thead>
      <tr>
          <th>Família</th>
          <th style="text-align: right">Antes</th>
          <th style="text-align: right">Depois</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>DeepSeek V4 Flash → V4.1 Flash</td>
          <td style="text-align: right">86,0</td>
          <td style="text-align: right">92,5</td>
      </tr>
      <tr>
          <td>GLM 5.2 → 5.3</td>
          <td style="text-align: right">77,0</td>
          <td style="text-align: right">94,0</td>
      </tr>
      <tr>
          <td>MiMo V2.5 Pro → V2.6 Pro</td>
          <td style="text-align: right">86,5</td>
          <td style="text-align: right">92,0</td>
      </tr>
      <tr>
          <td>MiniMax M3 → M3.1 Flash</td>
          <td style="text-align: right">75,5</td>
          <td style="text-align: right">89,5</td>
      </tr>
      <tr>
          <td>Kimi K2.7 Code → K3</td>
          <td style="text-align: right">87,25</td>
          <td style="text-align: right">85,0</td>
      </tr>
      <tr>
          <td>Gemini 3.7 Flash → 3.8 Flash (high)</td>
          <td style="text-align: right">75,5</td>
          <td style="text-align: right">90,5</td>
      </tr>
      <tr>
          <td>Claude Fable 5 → 5.1</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">95,5</td>
      </tr>
      <tr>
          <td>Grok 4.6 → 4.7</td>
          <td style="text-align: right">98,5</td>
          <td style="text-align: right">83,5</td>
      </tr>
      <tr>
          <td>GPT 5.6 sol → GPT 6 sol</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">91,0</td>
      </tr>
      <tr>
          <td>GPT 5.6 luna → GPT 6 luna</td>
          <td style="text-align: right">95,0</td>
          <td style="text-align: right">95,5</td>
      </tr>
      <tr>
          <td>Claude Opus 5 → 5.5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">100,0</td>
      </tr>
  </tbody>
</table>
<p>Os chineses subiram de 5,5 a 17 pontos por geração, com exceção do Kimi. Do lado ocidental, quem já estava no teto não tinha pra onde subir: o Opus ficou em 100, o GPT 6 luna ficou onde o 5.6 luna estava, e três lançamentos novos ficaram abaixo dos antecessores. O Gemini Flash é o contraexemplo ocidental, com um salto de 15 pontos.</p>
<p>O calendário reforça a leitura. O Claude Fable 5 saiu em junho, o Opus 5 e o GPT 5.6 em julho, e todos já batiam 100 na minha régua. Daí até outubro, a OpenAI e a Anthropic lançaram o Fable 5.1, o GPT-6 Astra, o Opus 5.5 e o GPT-6 sol e luna. Nenhum deles mostrou ganho na minha régua, e alguns ficaram abaixo dos antecessores.</p>
<p>No mesmo intervalo, os chineses saíram de uma posição bem atrás: DeepSeek V4 em abril, Kimi K3 em julho, Qwen 3.8 e GLM 5.3 em agosto, DeepSeek V4.1 Flash e MiMo V2.6 Pro em setembro, MiniMax M3.1 Flash em outubro. Cada lançamento chegou mais perto do topo.</p>
<blockquote>
  <p>Os chineses parecem andar mais rápido, e andam. Mas parte da impressão vem de os ocidentais estarem parados há meses, pelo menos em programação. Quando o líder não se mexe, quem corre atrás encosta.</p>

</blockquote>
<h3>Matemática não é programação<span class="hx:absolute hx:-mt-20" id="matemática-não-é-programação"></span>
    <a href="#matem%c3%a1tica-n%c3%a3o-%c3%a9-programa%c3%a7%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Os laboratórios ocidentais não pararam de trabalhar. Eles estão gastando boa parte da vitrine em matemática:</p>
<ul>
<li>em maio, a OpenAI anunciou que um modelo de raciocínio de uso geral <a href="https://openai.com/index/model-disproves-discrete-geometry-conjecture/"target="_blank" rel="noopener">derrubou uma conjectura de Erdős</a> sobre distâncias unitárias;</li>
<li>em agosto, ela publicou <a href="https://github.com/openai/ten-proofs"target="_blank" rel="noopener">dez resultados matemáticos do Astra</a>, cada um com prova formal em Lean;</li>
<li>também em agosto, a Anthropic mostrou um Claude interno elevando de 41,6% pra 67,2% a fração provada de <a href="https://www.anthropic.com/research/riemann-zeta"target="_blank" rel="noopener">zeros da função zeta de Riemann</a> que satisfazem a hipótese;</li>
<li>em setembro, a Anthropic <a href="https://www.anthropic.com/research/formalizing-fermats-last-theorem"target="_blank" rel="noopener">formalizou o Último Teorema de Fermat inteiro em Lean</a> em 11 dias, com um modelo interno que ela mesma descreve como comparável ao Fable 5.1.</li>
</ul>
<p>É impressionante, e é legítimo. Prova formal é um dos poucos lugares onde dá pra verificar a resposta automaticamente, o que torna matemática um ótimo campo de treino e de propaganda. Só que o mesmo Fable 5.1 que serviu de régua pro Fermat fez 95,5 no meu benchmark, contra os 100 do Fable 5.</p>
<p>Ficar melhor em matemática não deixa o modelo automaticamente melhor em programação. Um estudo de 2025, <a href="https://arxiv.org/abs/2507.00432"target="_blank" rel="noopener"><em>Does Math Reasoning Improve General LLM Capabilities?</em></a>, concluiu que <em>a maioria dos modelos que vai bem em matemática não transfere o ganho pra outros domínios</em>, com programação entre eles. Há contraexemplos: a NVIDIA mostrou que <a href="https://arxiv.org/abs/2505.16400"target="_blank" rel="noopener">aprendizado por reforço só com matemática</a> subiu a nota de código de modelos pequenos. A transferência acontece às vezes, e depende de como se treina.</p>
<h3>E o tal do mixture of experts<span class="hx:absolute hx:-mt-20" id="e-o-tal-do-mixture-of-experts"></span>
    <a href="#e-o-tal-do-mixture-of-experts" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A intuição comum é que, num modelo <em>mixture of experts</em> (MoE), dá pra melhorar o &ldquo;especialista de matemática&rdquo; sem mexer no &ldquo;especialista de código&rdquo;. A ideia está meio certa pelo motivo errado.</p>
<p>Um MoE tem vários blocos de pesos em cada camada, e um roteador escolhe poucos deles pra cada token. Mas os especialistas não se dividem por assunto do jeito que a intuição sugere. O <a href="https://arxiv.org/abs/2401.04088"target="_blank" rel="noopener">paper do Mixtral</a> procurou exatamente isso e <em>não encontrou padrão óbvio de especialista por tema</em>, com uma diferença pequena só num conjunto sintético de matemática; o roteador se organiza mais por sintaxe, por tipo de token. E nem a OpenAI nem a Anthropic confirmam publicamente se os modelos fechados delas são MoE.</p>
<p>O que fica de pé é o essencial: capacidade é treinada por objetivo. O sinal que premia prova em Lean não é o mesmo que premia perceber um vazamento entre tenants num controller Rails, e melhorar um não arrasta o outro junto. Num modelo onde só uma fração dos parâmetros trabalha por token, esse descompasso fica ainda mais fácil de acontecer.</p>
<h2>NVFP4, FP8, Q4: o que é essa sopa de letrinhas<span class="hx:absolute hx:-mt-20" id="nvfp4-fp8-q4-o-que-é-essa-sopa-de-letrinhas"></span>
    <a href="#nvfp4-fp8-q4-o-que-%c3%a9-essa-sopa-de-letrinhas" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Todo modelo é uma pilha de bilhões de números, os pesos. Quantização é guardar cada número com menos bits. Quanto menos bits, menos memória o modelo ocupa e menos dado a placa precisa ler por token, e é isso que define a velocidade em máquina local. O preço, quando existe, é qualidade.</p>
<p>Pra um modelo de 27 bilhões de parâmetros, a conta fica assim:</p>
<table>
  <thead>
      <tr>
          <th>Formato</th>
          <th style="text-align: right">Bits por peso</th>
          <th style="text-align: right">27B ocupa</th>
          <th>Onde roda</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>BF16</td>
          <td style="text-align: right">16</td>
          <td style="text-align: right">~54 GB</td>
          <td>nativo de Ampere (RTX 30) em diante</td>
      </tr>
      <tr>
          <td>FP8</td>
          <td style="text-align: right">8</td>
          <td style="text-align: right">~27 GB</td>
          <td>nativo em Ada (RTX 40), Hopper (H200) e Blackwell</td>
      </tr>
      <tr>
          <td>Q8_0 (GGUF)</td>
          <td style="text-align: right">~8,5</td>
          <td style="text-align: right">~29 GB</td>
          <td>llama.cpp e Ollama, qualquer placa</td>
      </tr>
      <tr>
          <td>Q5_K_M (GGUF)</td>
          <td style="text-align: right">~5,5</td>
          <td style="text-align: right">~19 GB</td>
          <td>llama.cpp e Ollama</td>
      </tr>
      <tr>
          <td>Q4_K_M (GGUF)</td>
          <td style="text-align: right">~4,5 a 4,8</td>
          <td style="text-align: right">~16 GB</td>
          <td>llama.cpp e Ollama</td>
      </tr>
      <tr>
          <td>NVFP4</td>
          <td style="text-align: right">4,5</td>
          <td style="text-align: right">~15 GB</td>
          <td>nativo só em Blackwell; vLLM, e llama.cpp desde 2026</td>
      </tr>
      <tr>
          <td>IQ3_S (GGUF)</td>
          <td style="text-align: right">~3,4</td>
          <td style="text-align: right">~12 GB</td>
          <td>llama.cpp e derivados</td>
      </tr>
  </tbody>
</table>
<h3>O que é cada um<span class="hx:absolute hx:-mt-20" id="o-que-é-cada-um"></span>
    <a href="#o-que-%c3%a9-cada-um" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><ul>
<li><strong>BF16</strong> é a precisão em que a maioria dos modelos é publicada. É a referência: nada se perde.</li>
<li><strong>FP8</strong> é ponto flutuante de 8 bits, com suporte em hardware nas gerações Ada, Hopper e Blackwell. Corta a memória pela metade e é o padrão dos checkpoints grandes, como o DeepSeek V4.1 Flash e o GLM 5.3 full.</li>
<li><strong>Q8_0, Q5_K_M, Q4_K_M e IQ3_S</strong> são formatos GGUF do llama.cpp. Os pesos são guardados em blocos de inteiros com uma escala por bloco; os &ldquo;K&rdquo; misturam precisões por tensor, e os &ldquo;IQ&rdquo; usam uma matriz de importância pra decidir onde gastar bits. Q8 é tido como praticamente sem perda, e Q4_K_M é o padrão recomendado de quem roda em casa.</li>
<li><strong>NVFP4</strong> é o formato de 4 bits da NVIDIA. Cada número é um ponto flutuante de 4 bits, e cada bloco de 16 números ganha a própria escala em FP8. A NVIDIA diz que isso <a href="https://developer.nvidia.com/blog/introducing-nvfp4-for-efficient-and-accurate-low-precision-inference/"target="_blank" rel="noopener">ocupa 3,5 vezes menos que FP16 e perde 1% ou menos contra FP8</a> no DeepSeek-R1.</li>
</ul>
<p>O hype do NVFP4 vem daí: os tensor cores da Blackwell calculam nele direto, e foi ele que fez caber numa B300 só o GLM 5.3 Flash, de 198 GB, e o Qwen3.5 397B, de 251 GB. A H200, da geração anterior, não tem FP4 nativo. E o ecossistema caseiro ainda está chegando: o llama.cpp ganhou <a href="https://github.com/ggml-org/llama.cpp/pull/22196"target="_blank" rel="noopener">suporte a NVFP4</a> só em 2026, e a cobertura por arquitetura ainda é parcial.</p>
<h3>O que os nossos testes mostram<span class="hx:absolute hx:-mt-20" id="o-que-os-nossos-testes-mostram"></span>
    <a href="#o-que-os-nossos-testes-mostram" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Quatro modelos rodaram em mais de uma precisão:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th>Versão A</th>
          <th>Versão B</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Qwen 3.8 27B</td>
          <td>BF16, B300: 80,5</td>
          <td>Q8_0, Strix Halo: 80,0 ¹</td>
      </tr>
      <tr>
          <td>Qwen3.8 Flash-Next</td>
          <td>NVFP4, B300: 92,5</td>
          <td>IQ3_S, RTX 5090 com Strata: 91,0</td>
      </tr>
      <tr>
          <td>Ornith 1.5 35B</td>
          <td>BF16, B300: 81,0</td>
          <td>Q8_0, RTX 5090 com Strata: 64,5</td>
      </tr>
      <tr>
          <td>GLM 4.7 Flash</td>
          <td>BF16, B300: 33,5</td>
          <td>Q5_K_M, RTX 5090: 24,0</td>
      </tr>
  </tbody>
</table>
<p>¹ Rodada mista: sprints 1 e 2 em Q5_K_M na 5090, o resto em Q8_0 na Strix, com o raciocínio desligado.</p>
<p>E seis rodaram na API de nuvem e também servidos por mim, com os pesos oficiais:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Nuvem</th>
          <th style="text-align: right">Servido por mim</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GLM 5.3 Flash</td>
          <td style="text-align: right">84,25</td>
          <td style="text-align: right">92,5 (NVFP4, B300)</td>
      </tr>
      <tr>
          <td>DeepSeek V4.1 Flash</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: right">92,5 (FP8, 4x B300)</td>
      </tr>
      <tr>
          <td>GLM 5.3 full</td>
          <td style="text-align: right">94,0</td>
          <td style="text-align: right">76,0 (FP8, 4x B300)</td>
      </tr>
      <tr>
          <td>MiMo V2.6 Pro</td>
          <td style="text-align: right">92,0</td>
          <td style="text-align: right">67,0 (FP8, 4x B300)</td>
      </tr>
      <tr>
          <td>DeepSeek V4 Flash 0731</td>
          <td style="text-align: right">85,0</td>
          <td style="text-align: right">44,5 (FP4/FP8 oficial, B300)</td>
      </tr>
      <tr>
          <td>Nex N2.5 Pro</td>
          <td style="text-align: right">94,0</td>
          <td style="text-align: right">27,0 (FP8, 4x B300)</td>
      </tr>
  </tbody>
</table>
<p>Cada linha é uma rodada só, e o ruído chega a quase 10 pontos. Com essa ressalva, a leitura que eu faço:</p>
<ul>
<li><strong>Q8 ficou empatado com BF16.</strong> O Qwen 27B fez 80,5 e 80,0, num ponto só e com outras coisas mudando junto.</li>
<li><strong>Descer de 4 pra 3 bits saiu quase de graça no Flash-Next</strong>, a 1,5 ponto, mesmo trocando de motor e de placa.</li>
<li><strong>A queda da Ornith dificilmente é dos bits.</strong> Q8 é quase sem perda, e mesmo assim ela perdeu 16,5 trocando também de motor e de placa.</li>
<li><strong>Servir o mesmo checkpoint pode dar qualquer coisa.</strong> O GLM 5.3 Flash subiu 8 pontos na minha mão, o DeepSeek V4.1 empatou, e o Nex caiu quase 70. Parser de ferramenta, template de chat, modo de raciocínio e versão do motor pesam tanto quanto a precisão, e o efeito muda de modelo pra modelo.</li>
</ul>
<blockquote>
  <p>Nos meus testes, os bits pesaram menos do que o hype sugere, e o conjunto todo de como o modelo é servido pesou mais. Use Q8 quando couber, desça pra 4 bits quando precisar, e meça no seu próprio trabalho antes de confiar.</p>

</blockquote>
<h2>Os melhores comerciais<span class="hx:absolute hx:-mt-20" id="os-melhores-comerciais"></span>
    <a href="#os-melhores-comerciais" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui só entra modelo fechado, só Tier A, e só o que eu pagaria por API.</p>
<h3>Por nota<span class="hx:absolute hx:-mt-20" id="por-nota"></span>
    <a href="#por-nota" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Nota</th>
          <th style="text-align: right">Custo da rodada</th>
          <th style="text-align: right">Minutos</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GPT-6 Astra</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">US$ 30,55</td>
          <td style="text-align: right">100</td>
      </tr>
      <tr>
          <td>Claude Opus 5.5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">US$ 16,63 ¹</td>
          <td style="text-align: right">64</td>
      </tr>
      <tr>
          <td>Claude Opus 5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">~US$ 71 ¹</td>
          <td style="text-align: right">145</td>
      </tr>
      <tr>
          <td>Claude Fable 5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">~US$ 50 ¹</td>
          <td style="text-align: right">~85</td>
      </tr>
      <tr>
          <td>GPT 5.6 terra</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">US$ 9,52</td>
          <td style="text-align: right">80</td>
      </tr>
      <tr>
          <td>GPT 5.6 sol</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">US$ 20,37</td>
          <td style="text-align: right">317</td>
      </tr>
      <tr>
          <td>GPT 5.5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">US$ 34,69</td>
          <td style="text-align: right">117</td>
      </tr>
      <tr>
          <td>Grok 4.6</td>
          <td style="text-align: right">98,5</td>
          <td style="text-align: right">US$ 13,00</td>
          <td style="text-align: right">67</td>
      </tr>
      <tr>
          <td>GPT 6 luna</td>
          <td style="text-align: right">95,5</td>
          <td style="text-align: right">~US$ 0,84</td>
          <td style="text-align: right">122</td>
      </tr>
      <tr>
          <td>Claude Fable 5.1</td>
          <td style="text-align: right">95,5</td>
          <td style="text-align: right">~US$ 51 ¹</td>
          <td style="text-align: right">133</td>
      </tr>
  </tbody>
</table>
<p>¹ Custo nocional da assinatura, a preço de tabela da API.</p>
<p>No topo absoluto, o <strong>Claude Opus 5.5</strong> e o <strong>GPT 5.6 terra</strong> são as escolhas óbvias: nota máxima, rodada em pouco mais de uma hora, e preço de rodada de um dígito ou pouco mais. O Opus 5 e o GPT 5.5 tiram a mesma nota custando de duas a sete vezes mais.</p>
<h3>Por custo-benefício<span class="hx:absolute hx:-mt-20" id="por-custo-benefício"></span>
    <a href="#por-custo-benef%c3%adcio" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Nota</th>
          <th style="text-align: right">Custo da rodada</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GPT 6 luna</td>
          <td style="text-align: right">95,5</td>
          <td style="text-align: right">~US$ 0,84</td>
      </tr>
      <tr>
          <td>Qwen3.8 Flash</td>
          <td style="text-align: right">86,5</td>
          <td style="text-align: right">US$ 1,17</td>
      </tr>
      <tr>
          <td>GPT 6 sol</td>
          <td style="text-align: right">91,0</td>
          <td style="text-align: right">~US$ 8,35</td>
      </tr>
      <tr>
          <td>GPT 5.6 terra</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">US$ 9,52</td>
      </tr>
      <tr>
          <td>GPT 5.6 luna</td>
          <td style="text-align: right">95,0</td>
          <td style="text-align: right">US$ 10,04</td>
      </tr>
      <tr>
          <td>Grok 4.6</td>
          <td style="text-align: right">98,5</td>
          <td style="text-align: right">US$ 13,00</td>
      </tr>
      <tr>
          <td>Claude Opus 5.5</td>
          <td style="text-align: right">100,0</td>
          <td style="text-align: right">US$ 16,63 ¹</td>
      </tr>
  </tbody>
</table>
<p>¹ Custo nocional da assinatura, a preço de tabela da API.</p>
<p>O <strong>GPT 6 luna</strong> é o absurdo da tabela: Tier A alto por menos de um dólar a rodada, uma fração do preço de qualquer outro fechado no mesmo patamar. Se a nota máxima não for obrigatória, é por onde eu começaria.</p>
<p>Na nota máxima, o <strong>GPT 5.6 terra</strong> custa pouco mais da metade do Opus 5.5. A diferença entre os dois fica no resto: harness, velocidade, comportamento em sessão longa, e isso eu cobri nos artigos anteriores.</p>
<h2>Os melhores abertos pra empresa<span class="hx:absolute hx:-mt-20" id="os-melhores-abertos-pra-empresa"></span>
    <a href="#os-melhores-abertos-pra-empresa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui entra o que roda em GPU de datacenter, na B300.</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th>Onde</th>
          <th style="text-align: right">Nota</th>
          <th style="text-align: right">tok/s</th>
          <th style="text-align: right">Memória</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>DeepSeek V4.1 Flash</td>
          <td>4x B300</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: right">175</td>
          <td style="text-align: right">510 GB</td>
      </tr>
      <tr>
          <td>GLM 5.3 Flash</td>
          <td>1x B300</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: right">142</td>
          <td style="text-align: right">198 GB</td>
      </tr>
      <tr>
          <td>Qwen3.8 Flash-Next</td>
          <td>1x B300</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: right">195</td>
          <td style="text-align: right">100 GB</td>
      </tr>
      <tr>
          <td>Swift 1.5 27B</td>
          <td>1x B300</td>
          <td style="text-align: right">88,0</td>
          <td style="text-align: right">203</td>
          <td style="text-align: right">56 GB</td>
      </tr>
      <tr>
          <td>ThinkingCap 3.8 27B</td>
          <td>1x B300</td>
          <td style="text-align: right">83,0</td>
          <td style="text-align: right">189</td>
          <td style="text-align: right">56 GB</td>
      </tr>
  </tbody>
</table>
<p>O <strong>DeepSeek V4.1 Flash</strong> é o campeão pra time grande. Num pod de 4x B300 a US$ 36 por hora, ele atende <strong>32 sessões confortáveis</strong> ao mesmo tempo, com o primeiro token em menos de 2 segundos pra quase todas. Contando uma sessão ativa por desenvolvedor o expediente inteiro, o que é otimista, são 32 pessoas. Ligando o pod só no expediente, 8 horas por dia, 22 dias por mês, dá uns US$ 6.300 por mês, ou <strong>uns US$ 200 por desenvolvedor</strong>.</p>
<p>As alternativas, pela mesma conta:</p>
<ul>
<li>4x H200 na Runpod atende só 8 sessões confortáveis e sai por uns US$ 316 por desenvolvedor por mês, mesmo com o pod mais barato;</li>
<li>a mesma configuração na AWS custa quase o dobro, e a H200 na Azure custa quase três vezes o preço da Runpod;</li>
<li>comprar uma DGX Station GB300 de uns US$ 130 mil se paga em uns 20 meses contra o aluguel no expediente, ou em uns 5 meses contra o pod ligado direto.</li>
</ul>
<p>Pra time menor, a B300 única com o <strong>Qwen3.8 Flash-Next</strong> ou o <strong>GLM 5.3 Flash</strong> é o ponto doce: mesma nota do DeepSeek, numa GPU só, a uns US$ 9 por hora. Eu não medi concorrência nela. Pela memória que sobra, um time de cinco a dez pessoas cabe bem num modelo de 27 a 35 bilhões, como o Swift 1.5; no GLM 5.3 Flash, de 198 GB, fica apertado.</p>
<blockquote>
  <p>A infra própria começa a fazer sentido na casa de 30 pessoas usando ao mesmo tempo, ou quando o código não pode sair da rede. Abaixo disso, a API do mesmo DeepSeek custa pouco mais de um dólar por rodada e você não administra servidor nenhum.</p>

</blockquote>
<h2>Os melhores abertos pra consumidor<span class="hx:absolute hx:-mt-20" id="os-melhores-abertos-pra-consumidor"></span>
    <a href="#os-melhores-abertos-pra-consumidor" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui entra o que roda num PC: RTX 5090 de 32 GB ou Strix Halo de 128 GB unificados.</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th>Máquina</th>
          <th style="text-align: right">Nota</th>
          <th style="text-align: right">tok/s</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Qwen3.8 Flash-Next (IQ3_S, Strata)</td>
          <td>RTX 5090</td>
          <td style="text-align: right"><strong>91,0</strong></td>
          <td style="text-align: right">159</td>
      </tr>
      <tr>
          <td>Qwen 3.8 27B (Q8_0)</td>
          <td>Strix Halo</td>
          <td style="text-align: right">80,0</td>
          <td style="text-align: right">8</td>
      </tr>
      <tr>
          <td>Ornith 1.5 35B (Q8_0, Strata)</td>
          <td>RTX 5090</td>
          <td style="text-align: right">64,5</td>
          <td style="text-align: right">~80</td>
      </tr>
      <tr>
          <td>GLM-4.7-Flash (Q5_K_M)</td>
          <td>RTX 5090</td>
          <td style="text-align: right">24,0</td>
          <td style="text-align: right">—</td>
      </tr>
  </tbody>
</table>
<p>Só tem um vencedor: o <strong>Qwen3.8 Flash-Next na RTX 5090 com o Strata</strong>. É um MoE de 125 bilhões com 6 bilhões ativos por token, e o Strata deixa os especialistas mais usados na placa e o resto na RAM. Ficou a 1,5 ponto da versão de datacenter, em velocidade interativa. Eu detalhei ele, com instalação, serviço de carga automática e configuração do OpenCode, em <a href="/2026/10/22/melhor-llm-open-source-strata-com-qwen-3-8-flash-next/">Melhor LLM Open Source: Strata com Qwen 3.8 Flash Next</a>.</p>
<p>O Strix Halo cabe modelo grande, mas a banda de memória dele é sete vezes menor que a da 5090, e um modelo denso de 27B anda a menos de 10 tokens por segundo em Q8, uns 13 em Q4. Serve pra tarefa de fundo, que pode esperar.</p>
<p>E o <strong>Swift 1.5</strong> e o <strong>ThinkingCap 3.8</strong>, os fine-tunes de 27B que foram bem na B300? Eu não rodei os dois na 5090, e nem precisei. Na B300, em BF16, precisão cheia, eles fizeram 88 e 83, abaixo dos 92,5 do Flash-Next na mesma placa e dos 91 que ele fez na 5090.</p>
<p>Numa 5090 eles caberiam em Q4 ou Q5, mas quantizado o melhor cenário é repetir a nota da B300. Rodar em casa custou 1,5 ponto pro Flash-Next e 16,5 pra Ornith-35B. O Qwen 3.8 27B base, que é a mesma arquitetura, nem completou na 5090 em Q5_K_M: travou num loop de raciocínio no sprint 3.</p>
<blockquote>
  <p>Se os dois já ficaram atrás do Flash-Next com precisão cheia, numa 5090 eles não vão ficar melhores. Não vi motivo pra testar: pra PC, o Flash-Next é claramente a escolha.</p>

</blockquote>
<h3>E placa pior que a 5090?<span class="hx:absolute hx:-mt-20" id="e-placa-pior-que-a-5090"></span>
    <a href="#e-placa-pior-que-a-5090" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>É a pergunta que sempre aparece: e quem tem uma placa de 8, 12 ou 16 GB? Pelos meus dados, o caminho do modelo pequeno que cabe inteiro na placa ainda não entrega nada que valha o trabalho pra programar.</p>
<p>Numa placa dessas, em Q4, cabe modelo denso de até uns 20 bilhões; um MoE de 30 bilhões com poucos ativos só roda com parte na RAM. E essa faixa foi mal no v4:</p>
<ul>
<li>o GLM-4.7-Flash, um MoE de 30B com 3B ativos, fez 24 na 5090 e 33,5 na B300 com precisão cheia, Tier D nas duas;</li>
<li>a Ornith-35B, outro MoE com 3B ativos, fez 81 na B300 e caiu pra 64,5 na 5090;</li>
<li>o gpt-oss-20b nem completou o protocolo;</li>
<li>o melhor modelo médio foi o Qwen 3.8 27B, com 80, mas ele já precisa de uns 16 GB só em Q4, travou na 5090 e só terminou a 8 tokens por segundo na Strix.</li>
</ul>
<p>A exceção é justamente o Flash-Next. O Strata foi feito pra rodar ele em placa de 12 GB, segurando a maioria dos especialistas na RAM: o <a href="https://github.com/Niko1221/Strata"target="_blank" rel="noopener">README do projeto</a> publica 53 tokens por segundo em IQ3_S numa RTX 5070 de 12 GB com 64 GB de RAM, e o mínimo declarado é 32 GB somando RAM e VRAM. Com os mesmos pesos e o mesmo motor, a nota em tese não deveria mudar, só a velocidade, que cai pra um terço da 5090. Eu não medi isso; é número do autor.</p>
<p>O porém é a RAM. Com a DRAM quase <a href="https://www.trendforce.com/presscenter/news/20260601-13070.html"target="_blank" rel="noopener">dobrando de preço</a> num único trimestre deste ano, 64 GB deixaram de ser o upgrade barato que eram.</p>
<blockquote>
  <p>Abaixo da 5090, eu não perderia tempo com modelo pequeno pra programar. Se for tentar alguma coisa, que seja o Flash-Next com Strata e RAM sobrando, e meça no seu trabalho antes de confiar.</p>

</blockquote>
<p>E tem o problema que eu contei no <a href="/2026/10/22/llm-benchmark-v4-open-source-nivel-consumidor-rtx5090-strix-halo-strata/">artigo anterior</a>: achar uma 5090 hoje é difícil, e quando acha, o preço fica entre duas vezes e meia e quase cinco vezes o sugerido.</p>
<h3>Quanto custa sair dos 150 tokens por segundo?<span class="hx:absolute hx:-mt-20" id="quanto-custa-sair-dos-150-tokens-por-segundo"></span>
    <a href="#quanto-custa-sair-dos-150-tokens-por-segundo" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Depois de algumas horas usando o Qwen local, <a href="https://x.com/AkitaOnRails/status/2113386101293428812"target="_blank" rel="noopener">resumi o problema no X</a>. A média de 159 tokens por segundo da minha rodada parece rápida numa tabela. Numa sessão de programação que passa o dia inteiro gerando código, rodando teste, lendo log e corrigindo o que fez, a espera acumula.</p>
<p>Eu já fico impaciente. Abaixo disso, nem considero pra trabalho diário.</p>
<p>A própria 5090 tem limites além da velocidade. A NVIDIA especifica <a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/"target="_blank" rel="noopener">32 GB de GDDR7 e 1.792 GB/s de banda</a> e <a href="https://nvidianews.nvidia.com/news/nvidia-blackwell-geforce-rtx-50-series-opens-new-world-of-ai-computer-graphics"target="_blank" rel="noopener">lançou a placa por US$ 1.999</a>. A minha ainda move os monitores e o Hyprland, então deixo 4 GB reservados pro desktop. O resto precisa segurar pesos densos, cache dos especialistas quentes, buffers do motor e a parte residente do cache de KV, que guarda o contexto da conversa.</p>
<p>Minha configuração do Strata oferece 256 mil tokens de contexto com KV em int8 e mantém 32 mil residentes na VRAM; o restante pode ir pra RAM. Isso evita estourar a placa, mas RAM continua muito mais lenta. Enquanto <a href="https://docs.anthropic.com/en/api/claude-on-amazon-bedrock"target="_blank" rel="noopener">modelos de fronteira do Claude já oferecem janela de 1 milhão de tokens</a>, localmente eu preciso vigiar o que entra na sessão. Carregar uma coleção inteira de skills, plugins e servidores MCP só porque existe espaço no arquivo de configuração é pedir pra desperdiçar contexto e piorar a latência.</p>
<blockquote>
  <p>Em hardware local, contexto também custa memória e tempo. Eu carrego só o que aquela sessão vai usar.</p>

</blockquote>
<p>E se eu colocar mais hardware? A comparação fica assim:</p>
<table>
  <thead>
      <tr>
          <th>Opção</th>
          <th style="text-align: right">Memória</th>
          <th style="text-align: right">Banda</th>
          <th style="text-align: right">Velocidade observada</th>
          <th style="text-align: right">Preço de referência</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>RTX 5090</td>
          <td style="text-align: right">32 GB GDDR7</td>
          <td style="text-align: right">1.792 GB/s</td>
          <td style="text-align: right"><strong>159,2 tok/s</strong>, medido por mim</td>
          <td style="text-align: right">US$ 1.999 sugerido</td>
      </tr>
      <tr>
          <td>2x RTX 5090</td>
          <td style="text-align: right">64 GB físicos, divididos entre as placas</td>
          <td style="text-align: right">2x 1.792 GB/s, sem virar um pool plano</td>
          <td style="text-align: right">sem teste equivalente meu</td>
          <td style="text-align: right">US$ 3.998 sugeridos</td>
      </tr>
      <tr>
          <td>Mac Studio M5 Ultra</td>
          <td style="text-align: right">96 ou 256 GB unificados; 512 GB prometidos pro fim de outubro</td>
          <td style="text-align: right">1.200 GB/s</td>
          <td style="text-align: right">ainda não medido no Strata</td>
          <td style="text-align: right">a partir de US$ 5.499</td>
      </tr>
      <tr>
          <td>DGX Spark</td>
          <td style="text-align: right">128 GB unificados</td>
          <td style="text-align: right">273 GB/s</td>
          <td style="text-align: right">cerca de 22 a 75 tok/s por sessão em receitas públicas</td>
          <td style="text-align: right">US$ 6.950 na loja da NVIDIA</td>
      </tr>
      <tr>
          <td>RTX PRO 6000 Blackwell</td>
          <td style="text-align: right">96 GB GDDR7 ECC</td>
          <td style="text-align: right">1.792 GB/s</td>
          <td style="text-align: right">187,4 tok/s no chat curto; 174,3 na sessão de agente</td>
          <td style="text-align: right">US$ 16 mil; R$ 123 mil no Pix no Brasil</td>
      </tr>
  </tbody>
</table>
<p>Eu escrevi no post que o Strata só subiria duas instâncias numa máquina com duas 5090. Essa parte ficou desatualizada: o Strata atual <a href="https://github.com/Niko1221/Strata/blob/main/docs/MULTI_GPU.md"target="_blank" rel="noopener">divide as camadas entre duas ou mais GPUs</a>. É <em>pipeline parallelism</em>, sem transformar duas placas num bloco simples de 64 GB e sem tensor parallelism maduro.</p>
<p>O ganho por sessão fica longe de 2x. Um <a href="https://github.com/Niko1221/Strata/issues/642"target="_blank" rel="noopener">teste comunitário com duas 5090</a> mediu cerca de 22% de ganho na média geométrica de decode e 40% no braço de código. Ajuda na capacidade e dá pra usar as placas como duas instâncias independentes pra dobrar concorrência. Pra mim sozinho, comprar outra 5090 pra cortar uma fração da espera não fecha a conta.</p>
<p>O <strong>Mac Studio M5 Ultra</strong> começa em <a href="https://www.apple.com/newsroom/2026/08/apple-introduces-new-mac-studio-with-m5-max-and-m5-ultra/"target="_blank" rel="noopener">US$ 5.499</a>, tem 1,2 TB/s de banda e vai de 96 a 256 GB; a opção de 512 GB foi prometida pro fim de outubro. Ainda não existe benchmark publicado do Strata no Ultra. No <a href="https://github.com/Niko1221/Strata/blob/main/docs/MAC.md"target="_blank" rel="noopener">M5 Max de 128 GB</a>, o mesmo Flash-Next ficou entre 97 e 119,5 tokens por segundo, dependendo da quantização e do prompt. Meu palpite original de menos de 100 no Ultra não está comprovado, e eu não compraria uma máquina dessas baseado em palpite.</p>
<p>A <strong>DGX Spark</strong> coloca 128 GB numa caixa compacta, com o GB10 de TDP 140 W e uma fonte de 240 W. A memória entrega só <a href="https://www.nvidia.com/en-us/products/workstations/dgx-spark/"target="_blank" rel="noopener">273 GB/s</a>, quase sete vezes menos que a 5090. A NVIDIA agora pede <a href="https://marketplace.nvidia.com/en-us/enterprise/personal-ai-supercomputers/dgx-spark/"target="_blank" rel="noopener">US$ 6.950</a>.</p>
<p>Receitas reproduzíveis do Flash-Next variam de <a href="https://github.com/ursuciprian/qwen3.8-flash-next-1x-dgx-spark"target="_blank" rel="noopener">22 a 75 tokens por segundo por sessão</a>, dependendo de concorrência, stack, amostragem e modo de raciocínio. Cabe muita coisa. Pra minha tolerância, anda pouco.</p>
<p>Sobra a <strong>RTX PRO 6000 Blackwell</strong>. Ela tem <a href="https://www.nvidia.com/content/dam/en-zz/Solutions/data-center/rtx-pro-6000-blackwell-workstation-edition/workstation-blackwell-rtx-pro-6000-workstation-edition-nvidia-us-3519208-web.pdf"target="_blank" rel="noopener">96 GB GDDR7 ECC, 1.792 GB/s e potência total de 600 watts</a>. A banda é exatamente a mesma da 5090. Os 96 GB resolvem o aperto de VRAM, permitem mais cache e contexto, mas não compram três vezes a velocidade.</p>
<p>Um <a href="https://github.com/Niko1221/Strata/issues/2268"target="_blank" rel="noopener">benchmark comunitário do Strata</a> mediu 187,4 tokens por segundo no chat curto e 174,3 numa sessão de agente, com bastante variação entre rodadas. É melhor que meus 159,2, só que a NVIDIA lista a placa por <a href="https://marketplace.nvidia.com/en-us/enterprise/laptops-workstations/nvidia-rtx-pro-6000-blackwell-workstation-edition/"target="_blank" rel="noopener">US$ 16 mil</a>. Em 22 de outubro, a WAZ <a href="https://www.waz.com.br/placa-de-video-nvidia-quadro-rtx-pro-6000-blackwell-workstation-edition-pny-vcnrtxpro6000b-pb-96gb-gddr7-pcie-5-0-x16-131172-html/p"target="_blank" rel="noopener">mostrava a PNY por R$ 123.299,99 no Pix ou R$ 145.058,81 no preço regular</a>. Já entramos em orçamento de workstation profissional ou servidor.</p>
<blockquote>
  <p>Hoje não existe, pra mim, uma opção doméstica com modelo bom, resposta realmente rápida e custo razoável. A 5090 funciona, mas 150 tokens por segundo já me cansam. Abaixo dela vira brinquedo; acima dela o preço explode antes da velocidade.</p>

</blockquote>
<h2>O que eu aprendi no v4<span class="hx:absolute hx:-mt-20" id="o-que-eu-aprendi-no-v4"></span>
    <a href="#o-que-eu-aprendi-no-v4" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Sobre os modelos<span class="hx:absolute hx:-mt-20" id="sobre-os-modelos"></span>
    <a href="#sobre-os-modelos" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><ul>
<li>Quase todo modelo pega o defeito barulhento sem aviso: CVE em gem, chave no código, CORS aberto, SQL injection óbvia. Quase todo modelo deixa passar o silencioso até eu revelar: vazamento entre tenants, agregado errado, teste adulterado, índice removido. O que separa o Tier A do resto é quanto do silencioso ele pega sozinho.</li>
<li>Tamanho não compra vigilância. O Kimi K2 Thinking, de 1 trilhão de parâmetros, fez 46. O GLM 5.3 full, de 700 bilhões, fez 76, contra 92,5 do Flash da mesma família.</li>
<li>Modelo trapaceia ou se engana com convicção. O Nemotron adulterou um teste de regressão pra passar, o Qwen3.5 397B deixou passar uma backdoor e ainda escreveu um teste que a tratava como comportamento esperado, e o Kimi K2 fez teatro de checklist de segurança, pegando só o que dá pra achar com grep.</li>
<li>O salto entre gerações foi de confiabilidade agêntica. O GPT-4o e o GPT-4.1 nem conseguem completar o protocolo sozinhos. Os modelos atuais do topo rodam as sete sprints sem ajuda nenhuma.</li>
</ul>
<h3>Sobre servir modelo aberto<span class="hx:absolute hx:-mt-20" id="sobre-servir-modelo-aberto"></span>
    <a href="#sobre-servir-modelo-aberto" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><ul>
<li>O mesmo checkpoint muda de nota conforme quem serve. O DeepSeek V4 Flash fez 85 na nuvem, na mesma versão 0731 que eu baixei, e 44,5 servido por mim; o Nex N2.5 Pro fez 94 na nuvem e 27 no pod de 4x B300, com tokens corrompidos chegando no código commitado.</li>
<li>Nenhum modelo roda rápido do jeito que vem. O GLM 5.3 Flash saiu de 10 pra 141 tokens por segundo só de configuração, e cada família pediu parser, flag e às vezes uma branch de PR do vLLM.</li>
<li>Rodar em casa cobra preço diferente de cada modelo. Trocando quantização, motor e placa de uma vez, o Flash-Next perdeu 1,5 ponto e a Ornith-35B perdeu 16,5.</li>
<li>Quem limita a concorrência é a arquitetura do cache de KV e o tempo até o primeiro token. Contagem de parâmetros diz pouco: na H200, um modelo de 510 GB e outro bem menor empataram em 8 usuários, por motivos opostos.</li>
</ul>
<h3>Sobre medir<span class="hx:absolute hx:-mt-20" id="sobre-medir"></span>
    <a href="#sobre-medir" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><ul>
<li>Uma rodada tem ruído de quase 10 pontos. Duas notas a 2 pontos de distância empatam.</li>
<li>O harness pesa. O Gemini 3.1 Pro foi derrubado por um bug de proxy, o gpt-oss não completa no OpenCode, e três modelos insistiram em criar o app numa subpasta.</li>
<li>Modelo que não faz commit perde trabalho. Correção que fica só no disco some no primeiro <code>git checkout</code>.</li>
</ul>
<h2>A minha hipótese: o hardware caro é parte do modelo de negócio<span class="hx:absolute hx:-mt-20" id="a-minha-hipótese-o-hardware-caro-é-parte-do-modelo-de-negócio"></span>
    <a href="#a-minha-hip%c3%b3tese-o-hardware-caro-%c3%a9-parte-do-modelo-de-neg%c3%b3cio" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O veredito do v4, até outubro de 2026, é este: pra revisão de código e vigilância, open source chegou. O DeepSeek V4.1 Flash, o GLM 5.3 Flash e o Qwen3.8 Flash-Next estão no pelotão do Sonnet 5 e do GPT 6 sol, e um deles roda numa placa de PC.</p>
<p>Então por que não está todo mundo rodando em casa? Porque o hardware ficou caro e difícil de achar, e eu tenho uma hipótese sobre isso. É hipótese minha, sem prova de combinação nenhuma, montada em cima de fatos públicos.</p>
<h3>Os fatos<span class="hx:absolute hx:-mt-20" id="os-fatos"></span>
    <a href="#os-fatos" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><ul>
<li>A memória disparou. A TrendForce mediu alta de <a href="https://www.trendforce.com/presscenter/news/20260601-13070.html"target="_blank" rel="noopener">93% a 98% no preço de contrato de DRAM</a> só no primeiro trimestre de 2026, e diz que os fabricantes <a href="https://www.trendforce.com/presscenter/news/20260930-13258.html"target="_blank" rel="noopener">continuam priorizando capacidade pra servidor</a> no quarto trimestre.</li>
<li>A HBM, a memória das GPUs de datacenter, deve ter o <a href="https://www.trendforce.com/presscenter/news/20260929-13255.html"target="_blank" rel="noopener">preço médio subindo 121% em 2027</a> e ocupar perto de <a href="https://www.trendforce.com/presscenter/news/20260602-13074.html"target="_blank" rel="noopener">30% das bolachas de DRAM</a> dos três maiores fabricantes até o fim de 2027.</li>
<li>A Micron <a href="https://www.storagenewsletter.com/2025/12/05/micron-announces-exit-from-crucial-consumer-business/"target="_blank" rel="noopener">saiu do mercado consumidor</a> e matou a Crucial, nas palavras dela, pra atender melhor os clientes estratégicos maiores.</li>
<li>PC e console subiram de preço, e a Microsoft <a href="https://www.digitalcitizen.life/xbox-series-x-and-series-s-prices-will-rise-again-as-memory-and-storage-costs-surge/"target="_blank" rel="noopener">atribuiu o aumento do Xbox</a> ao custo de memória e armazenamento.</li>
<li>A RTX 5090, quando aparece nos Estados Unidos, custa de <a href="https://gpupoet.com/gpu/market-report/gpu-market-report-october-2026"target="_blank" rel="noopener">duas vezes e meia</a> a <a href="https://www.techspot.com/news/114254-nvidia-rtx-5090-production-but-absence-company-us.html"target="_blank" rel="noopener">quase cinco vezes</a> o preço sugerido, e o boato é que os chips dela vão pras linhas profissionais. A NVIDIA <a href="https://www.guru3d.com/story/nvidia-says-geforce-rtx-5090-production-is-continuing/"target="_blank" rel="noopener">nega a descontinuação</a>.</li>
<li>Do outro lado, a Anthropic <a href="https://techcrunch.com/2026/06/01/anthropic-files-to-go-public/"target="_blank" rel="noopener">pediu IPO</a> mirando, segundo a imprensa, <a href="https://www.khaleejtimes.com/business/anthropic-says-revenue-jumped-to-nearly-17b-last-quarter-reports-2"target="_blank" rel="noopener">uns 2 trilhões de dólares</a>, e a OpenAI está <a href="https://uk.investing.com/news/stock-market-news/openai-races-to-raise-30-bln-ahead-of-anthropic-ipo-reuters-reports-4918623"target="_blank" rel="noopener">captando a mais de 1,4 trilhão</a>.</li>
<li>E o discurso sobre modelo aberto chinês endureceu. A Anthropic publicou que <a href="https://www.anthropic.com/news/detecting-and-preventing-distillation-attacks"target="_blank" rel="noopener">DeepSeek, Moonshot e MiniMax destilaram o Claude</a>, e o Dario Amodei, mesmo dizendo que <a href="https://www.anthropic.com/news/position-open-weights-models"target="_blank" rel="noopener">nunca defendeu proibir pesos abertos</a>, pede controle de exportação de chip e teste obrigatório, antes do lançamento, de todo modelo suficientemente capaz, aberto ou fechado.</li>
</ul>
<h3>O ciclo<span class="hx:absolute hx:-mt-20" id="o-ciclo"></span>
    <a href="#o-ciclo" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A explicação mais simples pra memória cara é demanda: datacenter compra tudo e paga mais. Eu acredito nela. O que me incomoda é que nenhum participante grande tem incentivo pra quebrar o ciclo:</p>
<ol>
<li>O discurso diz que só o laboratório de fronteira sabe lidar com esses modelos &ldquo;perigosos&rdquo;, e que open source é uma aposta arriscada.</li>
<li>Isso puxa a demanda pra nuvem, e a nuvem compra GPU e memória em volume recorde.</li>
<li>Os fabricantes vendem com ágio pra quem paga mais e tiram prioridade do consumidor.</li>
<li>O hardware bom fica inacessível fora do datacenter.</li>
<li>Sem hardware em casa, o open source não é adotado, o que reforça o discurso do passo 1.</li>
</ol>
<blockquote>
  <p>Se todo mundo começasse a hospedar o próprio modelo, as contas de IPO de trilhões de dólares deixariam de fechar. O v4 mostrou que o modelo aberto já está pronto pra boa parte do trabalho. O que falta é o hardware chegar na mão de quem trabalha.</p>

</blockquote>
]]></content:encoded><category>benchmarks-de-llm</category><category>modelos-locais</category><category>llms</category><category>open-source</category></item><item><title>LLM Benchmark v4: open source nível consumidor na RTX5090 ou Strix Halo. E o Strata?</title><link>https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-open-source-nivel-consumidor-rtx5090-strix-halo-strata/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-open-source-nivel-consumidor-rtx5090-strix-halo-strata/</guid><pubDate>Thu, 22 Oct 2026 11:30:00 -0300</pubDate><description>&lt;p&gt;Nos dois últimos artigos eu cobri o &lt;a href="https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-open-source-que-so-cabe-em-4x-b300/"&gt;benchmark dos modelos grandes em 4x B300&lt;/a&gt; e a &lt;a href="https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-can-my-team-fit-in-a-4x-b300-h200/"&gt;conta de time e custo por usuário em B300 e H200&lt;/a&gt;. Agora a pergunta de todo desenvolvedor que não tem um pod na Runpod: &lt;strong&gt;hardware de consumidor já serve pra trabalhar com IA de verdade?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Voltei pra duas máquinas que eu já tinha: uma workstation com RTX 5090 e um mini PC Strix Halo. E com um motor de inferência novo, o Strata, que promete fazer MoE grande caber em PC comum. A resposta curta: um modelo de 125B já faz Tier A numa RTX 5090. O resto é mais complicado.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Nos dois últimos artigos eu cobri o <a href="/2026/10/22/llm-benchmark-v4-open-source-que-so-cabe-em-4x-b300/">benchmark dos modelos grandes em 4x B300</a> e a <a href="/2026/10/22/llm-benchmark-v4-can-my-team-fit-in-a-4x-b300-h200/">conta de time e custo por usuário em B300 e H200</a>. Agora a pergunta de todo desenvolvedor que não tem um pod na Runpod: <strong>hardware de consumidor já serve pra trabalhar com IA de verdade?</strong></p>
<p>Voltei pra duas máquinas que eu já tinha: uma workstation com RTX 5090 e um mini PC Strix Halo. E com um motor de inferência novo, o Strata, que promete fazer MoE grande caber em PC comum. A resposta curta: um modelo de 125B já faz Tier A numa RTX 5090. O resto é mais complicado.</p>
<h2>As máquinas, lado a lado<span class="hx:absolute hx:-mt-20" id="as-máquinas-lado-a-lado"></span>
    <a href="#as-m%c3%a1quinas-lado-a-lado" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Antes de qualquer nota, entenda a diferença física do que eu estou comparando:</p>
<table>
  <thead>
      <tr>
          <th>Hardware</th>
          <th>Memória</th>
          <th>Banda</th>
          <th>Arquitetura</th>
          <th>Custo aproximado</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>NVIDIA B300</td>
          <td>288 GB HBM3e</td>
          <td>~8 TB/s</td>
          <td>Blackwell Ultra, FP8 e FP4</td>
          <td>US$ 9/hora (Runpod)</td>
      </tr>
      <tr>
          <td>NVIDIA H200</td>
          <td>141 GB HBM3e</td>
          <td>~4,8 TB/s</td>
          <td>Hopper, FP8</td>
          <td>US$ 3,59/hora</td>
      </tr>
      <tr>
          <td>DGX Spark</td>
          <td>128 GB unificada</td>
          <td>273 GB/s</td>
          <td>GB10, FP4</td>
          <td>~US$ 6.950</td>
      </tr>
      <tr>
          <td>RTX 5090</td>
          <td>32 GB GDDR7</td>
          <td>~1,8 TB/s</td>
          <td>Blackwell sm_120, FP8/FP4</td>
          <td>US$ 1.999 sugerido (~5x no varejo)</td>
      </tr>
      <tr>
          <td>Strix Halo (Ryzen AI Max+ 395)</td>
          <td>128 GB unificada</td>
          <td>~256 GB/s</td>
          <td>gfx1151, ROCm</td>
          <td>~US$ 2.000</td>
      </tr>
  </tbody>
</table>
<p>O B300 tem mais de 30 vezes a banda de memória da Strix Halo. A 5090 tem 7 vezes. Isso explica por que o mesmo modelo voa numa máquina e rasteja na outra, e por que quantização deixa de ser detalhe e vira decisão de projeto.</p>
<p>E tem o detalhe da memória ser compartilhada: na Strix e na Spark, a mesma RAM serve CPU, GPU e sistema operacional. Não é VRAM dedicada, então a folga real é bem menor que o número bonito da caixa.</p>
<h2>O ranking em hardware de consumidor<span class="hx:absolute hx:-mt-20" id="o-ranking-em-hardware-de-consumidor"></span>
    <a href="#o-ranking-em-hardware-de-consumidor" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A régua é a mesma do benchmark v4 de sabotagem: 14 defeitos plantados, nota de vigilância de revisão, Tier A a partir de 83.</p>
<table>
  <thead>
      <tr>
          <th>Modelo / máquina</th>
          <th>Variante e engine</th>
          <th style="text-align: right">Nota / Tier</th>
          <th style="text-align: right">Velocidade</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Qwen3.8 Flash-Next</strong> (125B-A6B)</td>
          <td>RTX 5090, Strata, IQ3_S</td>
          <td style="text-align: right"><strong>91,0 (A)</strong></td>
          <td style="text-align: right">159,2 tok/s</td>
      </tr>
      <tr>
          <td>Ornith-1.5-35B-A3B</td>
          <td>RTX 5090, Strata, Q8_0 GGUF</td>
          <td style="text-align: right">64,5 (C)</td>
          <td style="text-align: right">~80 tok/s</td>
      </tr>
      <tr>
          <td>Qwen3.8-27B</td>
          <td>5090 → Strix, Q5_K_M → Q8_0</td>
          <td style="text-align: right">80,0 (B)</td>
          <td style="text-align: right">7,7 tok/s</td>
      </tr>
      <tr>
          <td>GLM-4.7-Flash (30B-A3B)</td>
          <td>RTX 5090, llama-swap, Q5_K_M</td>
          <td style="text-align: right">24,0 (D)</td>
          <td style="text-align: right">não medido</td>
      </tr>
  </tbody>
</table>
<p>O GLM-4.7-Flash completou o protocolo inteiro (depois de uma primeira tentativa aninhada que precisou de retry) e mesmo assim fracassou em detectar sabotagem. E tem uma lição de humildade no Qwen 27B: ele fez 80 na mesma tarefa em que fez 80,5 na B300, mas a 7,7 tokens por segundo na sonda Q8 e 706 minutos de relógio. Nota boa não paga produtividade.</p>
<p>Deixei de fora os testes que ainda não têm nota final: a Qwen3.8 Flash-Next na Strix com Strata só está confirmada como executável, e as densas de 27B foram descartadas na Strix pelo corte de 30 tok/s.</p>
<h2>O tuning que faz modelo rodar bem em PC<span class="hx:absolute hx:-mt-20" id="o-tuning-que-faz-modelo-rodar-bem-em-pc"></span>
    <a href="#o-tuning-que-faz-modelo-rodar-bem-em-pc" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Hardware de consumidor não perdoa configuração preguiçosa. O que eu aprendi na prática:</p>
<ul>
<li><strong>Na 5090, compile o llama.cpp pro sm_120.</strong> Imagem pronta cai em fallback PTX lento. É <code>-DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=120</code>, driver 570+, e nada de <code>--ctx-size 0</code> numa placa de 32 GB: o default de contexto de treino estoura a VRAM na primeira alocação. Contexto tem teto explícito, e se der OOM no primeiro request, corta 25 a 50%.</li>
<li><strong>KV cache em q8_0.</strong> Corta a memória de KV pela metade sem custo mensurável de qualidade. Flash-attention ligado por padrão, mas o GLM 4.7 Flash precisa dele desligado, porque a arquitetura deepseek2 dele é incompatível.</li>
<li><strong>Raciocínio híbrido dá trabalho.</strong> O Qwen3.8-27B, com a arquitetura SSM/Mamba, precisou de build fresco do llama.cpp/Ollama por causa do <code>ssm_conv1d</code>. E o modo &ldquo;sem raciocínio&rdquo; não impediu loop de coerência em uma das tentativas; a saída foi retomar na Strix com Q8_0 e <code>--reasoning off</code>. Não foi memória extra que resolveu, foi desligar o pensamento.</li>
<li><strong>Na Strix, o ajuste é ROCm, não mágica.</strong> <code>HSA_OVERRIDE_GFX_VERSION</code>, <code>GGML_HIP_NO_VMM</code>, <code>-dio</code>. O trunfo dela é capacidade (128 GB), não velocidade (~256 GB/s). Q4_K_M deu 12,6 tok/s e Q8_0 deu 7,7 tok/s, abaixo do meu corte de 30 tok/s pra uso interativo. Por isso a Strix virou escape hatch de modelo grande, não caixa de chat rápida.</li>
<li><strong>Especulação só ajuda com aceitação alta.</strong> Num <a href="https://mihai.ltd/blog/beating-llamacpp-from-scratch-consumer-amd"target="_blank" rel="noopener">teste do Mihai Farcas</a> numa RX 7900 XTX, a especulação por n-gram do llama.cpp, sem modelo de rascunho, teve só 5 de 64 tokens aceitos, e a vazão ficou igual numa rodada e caiu uns 2% na outra. O ganho aparece com um rascunhador feito pro modelo, como o ajudante que o Strata usa no Flash-Next.</li>
</ul>
<h2>O que é esse tal de Strata<span class="hx:absolute hx:-mt-20" id="o-que-é-esse-tal-de-strata"></span>
    <a href="#o-que-%c3%a9-esse-tal-de-strata" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O <a href="https://github.com/Niko1221/Strata"target="_blank" rel="noopener">Strata</a> é um motor de inferência open source, licença MIT, feito em torno de um modelo: o <strong>Qwen3.8 Flash-Next</strong>, um MoE de 125 bilhões de parâmetros que normalmente pede servidor. Ele também roda MoEs menores, como a Ornith-35B que testei aqui. O código é C++ e CUDA e reaproveita partes do llama.cpp/ggml. Tem builds pra NVIDIA (CUDA 12 e 13), AMD (inclusive Strix Halo), Intel Arc e Apple Silicon, e sobe uma API compatível com OpenAI e Anthropic em localhost, que pluga direto no Claude Code, Codex CLI ou OpenCode.</p>
<p>Cuidado com o nome. O Mihai Farcas publicou <a href="https://mihai.ltd/blog/beating-llamacpp-from-scratch-consumer-amd"target="_blank" rel="noopener">outro motor chamado Strata</a>, em Rust com kernels HIP, pra modelos densos pequenos do Qwen 3.5 numa RX 7900 XTX. São projetos diferentes, e o que rodou aqui foi o primeiro.</p>
<p>O problema que ele ataca é o MoE grande em máquina pequena. A estratégia é <strong>expert-offload</strong>, em camadas:</p>
<ul>
<li>o modelo tem 24.576 especialistas, 512 em cada uma das 48 camadas, e cada token usa só 10 por camada;</li>
<li>a GPU guarda uns 4 mil especialistas, os mais usados;</li>
<li>a RAM do sistema guarda todos;</li>
<li>uma tabela de consulta de uns 29 GB fica no SSD, e o modelo lê poucas linhas dela por token.</li>
</ul>
<p>Em cima disso, um ajudante pequeno chuta as próximas palavras e o modelo grande confere todas de uma vez. O README promete a mesma resposta 1,6 a 1,8 vez mais rápido. O mínimo é 32 GB somando RAM e VRAM, mais uns 80 GB de disco, e a variante IQ3_S que eu usei tem uns 55 GB.</p>
<p>O que me fez acreditar nele foi o resultado: o <strong>Qwen3.8 Flash-Next na 5090 com Strata fez 91,0, com zero nudges e os 14 itens resolvidos</strong>, a 1,5 ponto do 92,5 que o mesmo modelo fez na B300 com vLLM. O próprio relatório chama isso de &ldquo;dentro do ruído&rdquo;. Um projeto de comunidade, numa placa de consumidor, ficou colado no mesmo modelo servido em datacenter em NVFP4.</p>
<h3>E agora ele enxerga<span class="hx:absolute hx:-mt-20" id="e-agora-ele-enxerga"></span>
    <a href="#e-agora-ele-enxerga" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Até ontem, o meu Strata era cego: mandar imagem devolvia &ldquo;this server was started without the vision encoder&rdquo;. Habilitei a visão na mão, e foi mais simples do que parecia.</p>
<p>O projetor de visão (o <code>mmproj</code>) eu já tinha arquivado no NAS dentro da variante uncensored do Flash-Next. Conferi o sha256 dele contra o manifesto do arquivo e contra o hash que o Strata pinou pro encoder BF16, e subi uma cópia pro diretório de modelos. A configuração ganhou o flag <code>--vision</code> e uma seção <code>vision</code> apontando pro componente <code>strata-vision</code> e pro mmproj, com backup do lado.</p>
<p>A verificação foi de ponta a ponta: o encoder carrega em meio segundo, aquece 1.024 tokens de imagem em menos de dois segundos, e respondeu &ldquo;Red&rdquo; pra um quadrado vermelho de teste. E o detalhe que me importa mais: com o encoder residente, sobraram 3,65 GB de VRAM, então a reserva de 4 GB do desktop segue valendo. A única pegadinha: o carregamento preguiçoso não convive com a seção de visão nessa configuração, então ele fica desligado aqui.</p>
<h2>Cuidado: o Strata come a GPU toda, e o desktop morre<span class="hx:absolute hx:-mt-20" id="cuidado-o-strata-come-a-gpu-toda-e-o-desktop-morre"></span>
    <a href="#cuidado-o-strata-come-a-gpu-toda-e-o-desktop-morre" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Tem um custo que não aparece em benchmark: rodar o Strata na mesma GPU que desenha a sua área de trabalho. Ele foi feito pra encher a placa, e enche mesmo.</p>
<p>No meu caso, o motor alocou 32.085 dos 32.607 MiB da 5090, 98,4% da VRAM. O Hyprland ficou com uns 500 MiB pra si, as alocações do desktop falharam, e até o terminal parou de responder. Só resolveu com hard reset.</p>
<p>Foram duas falhas em sequência. A reserva que eu tinha configurado era de 2.560 MiB, mas o proxy disparava uma única vez, engolia a exceção e nunca tentava de novo. O endpoint <code>/v1/vram</code> ainda não estava no ar naquele instante, então a reserva não foi aplicada. E 2.560 MiB já era pouco pra Hyprland, navegador e terminal juntos.</p>
<p>A correção, validada em teste de carga:</p>
<ul>
<li>Reserva de <strong>4.096 MiB</strong> (4 GiB), com retry por até alguns minutos, verificação da resposta do motor e log de confirmação. Nada de fire-and-forget.</li>
<li>Reafirmação da reserva a cada 30 segundos enquanto o motor está carregado, pra fechar qualquer deriva de rebalanceamento.</li>
<li>No primeiro teste de carga, com a GPU a 99%, ficaram <strong>3.629 a 3.888 MiB livres durante toda a geração</strong>. No teste seguinte, uma geração longa e outras três requisições concorrentes terminaram com sucesso; a menor folga observada foi 3.949 MiB. O desktop continuou vivo.</li>
</ul>
<p>O preço aparece na vazão. O cache de especialistas caiu de uns 11.700 slots pra 9.700, então mais especialistas viajam por PCIe. Na medição inicial, saiu de ~200 pra ~150 tokens por segundo. Eu pago isso feliz: um desktop que não congela vale mais que aqueles 25% de velocidade naquele teste.</p>
<p>Tem uma alternativa estrutural: essa máquina tem uma Radeon 610M integrada, e dá pra mover o Hyprland pra ela. A 5090 ficaria dedicada à inferência.</p>
<p>O custo é que a 610M é fraca pra jogos e o multi-GPU da NVIDIA no Wayland tem suas manias. Eu preferi a reserva elástica, porque o modelo também descarrega quando fica ocioso.</p>
<p>A lição geral: <strong>não deixe motor de inferência tomar 100% de uma GPU que também desenha sua tela.</strong> Nesta configuração não tenho uma reserva rígida de VRAM no driver pro cliente de display. Precisei resolver do lado do motor: reservar alguns GB, reafirmar depois de cada cold start e medir de novo com a área de trabalho aberta.</p>
<h3>Os mesmos 32 GB também limitam a sessão<span class="hx:absolute hx:-mt-20" id="os-mesmos-32-gb-também-limitam-a-sessão"></span>
    <a href="#os-mesmos-32-gb-tamb%c3%a9m-limitam-a-sess%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A conta da 5090 é apertada por todos os lados. Os mesmos 32 GB precisam acomodar os pesos densos e buffers fixos do modelo, o cache dos especialistas quentes, a parte residente do KV cache e ainda a reserva de 4 GiB pro Hyprland, navegador e terminal. O que sobra pra uma coisa sai de outra.</p>
<p>KV cache é a memória da conversa. Cada token do prompt, das respostas anteriores e dos arquivos lidos cria estado que o modelo precisa consultar nos próximos tokens. No meu Strata ele está em <code>int8</code>, com 32K células por camada residentes na GPU.</p>
<p>O restante pode ser transmitido da RAM, por isso aumentar a janela de 128K pra 256K não aumentou a VRAM nem derrubou a velocidade no meu teste sintético. Esse streaming evita o estouro imediato, mas continua usando memória e não transforma uma 5090 num servidor sem limite.</p>
<p>O teto configurado aqui é <strong>262.144 tokens, ou 256K</strong>. Vários modelos comerciais que testei, inclusive os Claude mais novos, já trabalham na classe de 1 milhão de tokens. Quase quatro vezes a janela muda o jeito de trabalhar: no Claude Code dá pra acumular muito mais histórico antes da compactação; no Qwen local eu preciso tratar contexto como orçamento desde o primeiro prompt.</p>
<p>A conversa que aparece no terminal é só uma parte do contexto. Dependendo do harness, também entram o system prompt, <code>AGENTS.md</code> e <code>CLAUDE.md</code>, catálogo e conteúdo carregado de skills, descrições e schemas de ferramentas, servidores MCP, instruções de plugins, saídas de comandos, arquivos e o espaço reservado pra resposta. Uma skill bem implementada carrega o texto completo só quando é chamada, mas o catálogo dela ainda pode entrar no prompt. Plugin que registra vinte ferramentas também manda vinte schemas antes de você pedir qualquer coisa.</p>
<p>Foi por isso que o benchmark não usou meu OpenCode normal. O runner <a href="https://github.com/akitaonrails/llm-coding-benchmark#local-opencode-benchmark-config"target="_blank" rel="noopener">gera uma configuração isolada</a>, sem os plugins e MCPs globais, com apenas os providers e agentes necessários pro teste. Também fixa o limite real de 262.144 tokens em vez de fingir que o modelo aceita o contexto anunciado por outro backend.</p>
<p>Pra usar esse Qwen no dia a dia, eu faria a mesma limpeza:</p>
<ul>
<li>começar com o harness mais enxuto possível e ativar plugins ou MCPs quando o projeto realmente precisar;</li>
<li>deixar skills pesadas sob demanda, sem despejar manuais inteiros no começo da sessão;</li>
<li>compactar ou abrir uma sessão nova antes de encostar no teto, registrando decisões importantes em arquivos do projeto;</li>
<li>reservar espaço pra saída do modelo. Uma janela lotada de entrada não serve se não sobra token pra ele pensar, chamar ferramentas e responder.</li>
</ul>
<blockquote>
  <p>Com 256K, contexto é recurso de hardware. Instalar integração demais e carregar tudo em toda sessão consome janela e memória antes do trabalho começar.</p>

</blockquote>
<h2>Mas o Qwen 3.8 não era lento demais?<span class="hx:absolute hx:-mt-20" id="mas-o-qwen-38-não-era-lento-demais"></span>
    <a href="#mas-o-qwen-38-n%c3%a3o-era-lento-demais" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Era, e eu escrevi isso. No <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/">ranking do v4</a>, o Qwen 3.8 27B rodando local levou quase 12 horas pra fechar as sete sprints. No <a href="/2026/10/19/llm-benchmark-v4-os-top-llms-open-source-numa-b300/">artigo da B300</a> eu resumi: fez 80, levou 706 minutos, &ldquo;então nem tente&rdquo;.</p>
<p>Só que aquele é outro Qwen 3.8. A família tem os dois, e eles se comportam de jeitos opostos em casa:</p>
<table>
  <thead>
      <tr>
          <th></th>
          <th>Qwen 3.8 27B</th>
          <th>Qwen3.8 Flash-Next</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Arquitetura</td>
          <td>denso, 27B</td>
          <td>MoE, 125B no total, 6B ativos por token</td>
      </tr>
      <tr>
          <td>Onde terminou o v4</td>
          <td>Strix Halo, Q8_0</td>
          <td>RTX 5090, IQ3_S, Strata</td>
      </tr>
      <tr>
          <td>Velocidade</td>
          <td>7,7 tok/s</td>
          <td><strong>159,2 tok/s</strong></td>
      </tr>
      <tr>
          <td>Nota v4</td>
          <td>80,0 (B)</td>
          <td><strong>91,0 (A)</strong></td>
      </tr>
  </tbody>
</table>
<h3>Por que o maior roda mais rápido<span class="hx:absolute hx:-mt-20" id="por-que-o-maior-roda-mais-rápido"></span>
    <a href="#por-que-o-maior-roda-mais-r%c3%a1pido" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Na geração de token, máquina local é limitada por banda de memória: cada token precisa ler todos os pesos ativos. O 27B denso lê os 27 bilhões a cada token, uns 29 GB em Q8. A Strix move uns 256 GB/s, então o teto fica perto de 9 tokens por segundo, e eu medi 7,7.</p>
<p>Na 5090 o mesmo 27B seria rápido, mas em Q8 ele não cabe nos 32 GB junto com o contexto que sete sprints acumulam. Em Q5_K_M ele coube, mas travou num loop de raciocínio no sprint 3. Terminou na Strix, em Q8_0 e com o raciocínio desligado (<code>--reasoning off</code>), que foi o que destravou o loop.</p>
<p>O Flash-Next tem quase cinco vezes mais parâmetros no total, mas só uns 6 bilhões trabalham por token. Em 3 bits, isso é por volta de um décimo do que o 27B em Q8 precisa ler. Os especialistas quentes ficam na GDDR7 da 5090, com sete vezes a banda da Strix, e o ajudante de especulação adianta tokens. Resultado: uns 20 vezes a velocidade do 27B na Strix, com nota maior.</p>
<blockquote>
  <p>A virada veio da troca de modelo e de motor: um MoE com poucos parâmetros ativos, servido por um motor de expert-offload feito sob medida pra ele. Flag nenhuma de configuração tiraria isso do 27B denso na Strix.</p>

</blockquote>
<h3>O tuning ainda cobra<span class="hx:absolute hx:-mt-20" id="o-tuning-ainda-cobra"></span>
    <a href="#o-tuning-ainda-cobra" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O preço de rodar em casa muda de modelo pra modelo. O Flash-Next em 3 bits perdeu só 1,5 ponto contra a versão NVFP4 da B300. A Ornith-35B, no mesmo motor e na mesma placa, perdeu 16,5 contra a versão BF16 dela na B300. Meça o seu modelo antes de confiar nele.</p>
<h2>O que cada modelo fez de interessante<span class="hx:absolute hx:-mt-20" id="o-que-cada-modelo-fez-de-interessante"></span>
    <a href="#o-que-cada-modelo-fez-de-interessante" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><strong>Flash-Next: a prova de que consumidor chega em Tier A.</strong> 34 de 40 sem aviso, mais 6 com peso de revelação, e só dois itens precisando de apontar. Nenhum nudge, todas as sprints limpas. É o único local que junta nota de Tier A, velocidade interativa (159 tok/s) e protocolo completo sem ajuda. Se a pergunta é &ldquo;da pra usar no trabalho&rdquo;, esse é o exemplo.</p>
<p><strong>Ornith-35B: rápido, mas não bom o suficiente.</strong> A mesma Ornith que fez 81 na B300 em BF16 fez 64,5 na 5090 com Q8_0. Caiu a detecção sem aviso de 30 pra 23. Mudou quantização, motor e hardware ao mesmo tempo, então não dá pra isolar a causa: essa combinação de Q8_0 + Strata + 5090 perdeu 16,5 pontos, e eu não sei quanto veio de cada variável. O recado é claro: &ldquo;roda rápido&rdquo; não é &ldquo;revisa bem&rdquo;.</p>
<p><strong>Qwen 27B: boa nota, péssima experiência.</strong> Fez 80 na retomada na Strix, com sprints 1 e 2 na 5090, quase o 80,5 da B300. Mas 7,7 tok/s na sonda Q8 e 706 minutos de wall time. E ainda por cima zero consertos na revelação, com quatro itens abertos. Usar isso no dia a dia é escolher esperar.</p>
<p><strong>GLM-4.7-Flash: o motor rodou, o modelo falhou.</strong> Protocolo completo em 29 minutos, e zero detecção sem aviso. Recuperou 8 de 14 só quando apontado, e mesmo assim deixou os consertos sem commit. Na B300 ele fez 33,5, que também não é bom. O problema não é só a placa.</p>
<h2>A distância entre as categorias<span class="hx:absolute hx:-mt-20" id="a-distância-entre-as-categorias"></span>
    <a href="#a-dist%c3%a2ncia-entre-as-categorias" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A pergunta que todo dev tem é se consumidor já chega lá. Comparação direta, na mesma régua:</p>
<table>
  <thead>
      <tr>
          <th>Categoria</th>
          <th>Modelos</th>
          <th style="text-align: right">Nota</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Frontier comercial</td>
          <td>Claude Opus 5 / 5.5</td>
          <td style="text-align: right">100,0</td>
      </tr>
      <tr>
          <td>Frontier comercial</td>
          <td>GPT-6 Luna</td>
          <td style="text-align: right">95,5</td>
      </tr>
      <tr>
          <td>Frontier comercial</td>
          <td>GLM 5.3 (hospedado)</td>
          <td style="text-align: right">94,0</td>
      </tr>
      <tr>
          <td>Frontier comercial</td>
          <td>GPT-6 Sol / Sonnet 5</td>
          <td style="text-align: right">91,0</td>
      </tr>
      <tr>
          <td>Frontier comercial</td>
          <td>Kimi K3</td>
          <td style="text-align: right">85,0</td>
      </tr>
      <tr>
          <td>Open datacenter</td>
          <td>DeepSeek V4.1 Flash (4x B300)</td>
          <td style="text-align: right">92,5</td>
      </tr>
      <tr>
          <td>Open datacenter</td>
          <td>GLM 5.3 Flash / Qwen3.8 Flash-Next (B300)</td>
          <td style="text-align: right">92,5</td>
      </tr>
      <tr>
          <td><strong>Open consumidor</strong></td>
          <td><strong>Qwen3.8 Flash-Next (5090 + Strata)</strong></td>
          <td style="text-align: right"><strong>91,0</strong></td>
      </tr>
      <tr>
          <td>Open consumidor</td>
          <td>Qwen3.8-27B (Strix)</td>
          <td style="text-align: right">80,0</td>
      </tr>
      <tr>
          <td>Open consumidor</td>
          <td>Ornith-35B (5090)</td>
          <td style="text-align: right">64,5</td>
      </tr>
      <tr>
          <td>Open consumidor</td>
          <td>GLM-4.7-Flash (5090)</td>
          <td style="text-align: right">24,0</td>
      </tr>
  </tbody>
</table>
<p>A leitura é que o topo do consumidor está <strong>9 pontos abaixo do topo comercial absoluto e 1,5 ponto abaixo do topo aberto em datacenter</strong>, nessa métrica de vigilância. É uma distância pequena, e ela some quando você percebe que o GPT-6 Sol e o Sonnet 5 também estão a 91. O abismo real não é entre datacenter e consumidor: é entre o modelo certo e todos os outros. Entre o Flash-Next e a Ornith, na mesma 5090, são 26,5 pontos.</p>
<h2>Então, hardware de consumidor já serve pra trabalhar?<span class="hx:absolute hx:-mt-20" id="então-hardware-de-consumidor-já-serve-pra-trabalhar"></span>
    <a href="#ent%c3%a3o-hardware-de-consumidor-j%c3%a1-serve-pra-trabalhar" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><strong>Serve, com o modelo e o motor certos.</strong> Uma RTX 5090 com Strata entrega Tier A em vigilância de código, a 159 tokens por segundo, sem pagar um centavo por token depois que o hardware existe. Pra quem faz revisão de código, testa agente de codificação e mantém dado privado em casa, isso muda o jogo.</p>
<p>Pela primeira vez neste benchmark eu tenho um modelo testado, em hardware de consumidor, que merece ir pro trabalho de todo dia. Já deixei o Flash-Next configurado no OpenCode apontando pra 5090. O próximo passo é usar em programação de verdade, fora da régua de sabotagem, e ver se a nota se sustenta.</p>
<p>O que não serve é achar que qualquer configuração serve. A Strix Halo é ótima pra ter 128 GB e montar modelo grande, mas a velocidade dela não paga interatividade; a Ornith roda rápido e revisa mal; o GLM-4.7-Flash completa protocolo e não detecta nada sem aviso. E tem o preço invisível: quantização agressiva pode cobrar nota, dependendo do modelo e da configuração, e tempo de espera cobra paciência.</p>
<p>Se eu fosse montar uma caixa pra um dev hoje, seria uma 5090 com Strata e o Flash-Next, e usaria a Strix pra tarefa de fundo que aceita ser lenta. A fronteira comercial continua ganhando de quem precisa do máximo. Mas o consumidor deixou de ser consolação: já tem Tier A na prateleira de casa.</p>
<h3>O problema agora é achar uma 5090<span class="hx:absolute hx:-mt-20" id="o-problema-agora-é-achar-uma-5090"></span>
    <a href="#o-problema-agora-%c3%a9-achar-uma-5090" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Em outubro, leakers garantiram que a NVIDIA ia parar de produzir a RTX 5090 e reservar os chips GB202 pras linhas profissionais e de datacenter. A placa chegou a sumir da loja oficial da NVIDIA nos Estados Unidos. No dia 16 de outubro, num evento em Taipei, o <strong>Jeff Fisher</strong>, vice-presidente sênior da NVIDIA, <a href="https://www.guru3d.com/story/nvidia-says-geforce-rtx-5090-production-is-continuing/"target="_blank" rel="noopener">negou a descontinuação</a> e disse que a empresa vai continuar entregando, mas admitiu que a capacidade de produção está apertada.</p>
<p>Na prática:</p>
<ul>
<li>o preço sugerido continua US$ 1.999, e a maioria dos anúncios na Newegg americana <a href="https://www.techspot.com/news/114254-nvidia-rtx-5090-production-but-absence-company-us.html"target="_blank" rel="noopener">passa de US$ 9.300, quase cinco vezes isso</a>;</li>
<li>no Brasil, cada unidade sai na casa dos <a href="https://www.baguete.com.br/noticias/carga-milionaria-de-gpus-some-de-guarulhos"target="_blank" rel="noopener">R$ 35 mil no varejo</a>;</li>
<li>e dois pallets de RTX 5090 da Zotac, importados pela distribuidora Oderço e avaliados em uns R$ 2,5 milhões, <a href="https://www.terra.com.br/noticias/misterio-em-guarulhos-r-25-milhoes-em-placas-de-video-desaparecem,a7596d7874eddfb490f96345b4be1b09z4eix4rc.html"target="_blank" rel="noopener">sumiram no aeroporto de Guarulhos</a>. A GRU Airport comunicou as autoridades, e o caso segue em investigação, sem confirmação de roubo.</li>
</ul>
<blockquote>
  <p>O primeiro modelo local Tier A do v4 roda justamente na placa mais difícil de comprar do momento. A prateleira de casa já tem Tier A. Falta conseguir a prateleira.</p>

</blockquote>
]]></content:encoded><category>benchmarks-de-llm</category><category>modelos-locais</category><category>llms</category><category>hardware</category></item><item><title>LLM Benchmark v4: meu time cabe em 4x B300/H200?</title><link>https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-can-my-team-fit-in-a-4x-b300-h200/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-can-my-team-fit-in-a-4x-b300-h200/</guid><pubDate>Thu, 22 Oct 2026 11:00:00 -0300</pubDate><description>&lt;p&gt;Nos dois últimos artigos eu cobri o &lt;a href="https://www.akitaonrails.com/2026/10/19/llm-benchmark-v4-os-top-llms-open-source-numa-b300/"&gt;benchmark numa B300 única&lt;/a&gt; e o &lt;a href="https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-open-source-que-so-cabe-em-4x-b300/"&gt;ranking dos modelos grandes em 4x B300&lt;/a&gt;. A pergunta que fecha a trilogia é a da empresa: &lt;strong&gt;vale a pena montar uma infra de LLM própria pro time de desenvolvimento?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A resposta depende de duas coisas: quantos usuários confortáveis o hardware aguenta, e quanto isso custa por pessoa. Medimos os dois.&lt;/p&gt;
&lt;h2&gt;A conta antes do teste&lt;span class="hx:absolute hx:-mt-20" id="a-conta-antes-do-teste"&gt;&lt;/span&gt;
&lt;a href="#a-conta-antes-do-teste" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Recapitulando os números do artigo anterior: o pod de 4x B300 custa &lt;strong&gt;US$ 36 por hora&lt;/strong&gt; (US$ 864/dia, quase US$ 26 mil/mês ligado direto). Comecei a campanha com uns US$ 127 de saldo, recarreguei US$ 2.550, e sobraram US$ 537. Foram &lt;strong&gt;uns US$ 2.140&lt;/strong&gt; entre setup, downloads, tuning e benchmarks, não só inferência.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Nos dois últimos artigos eu cobri o <a href="/2026/10/19/llm-benchmark-v4-os-top-llms-open-source-numa-b300/">benchmark numa B300 única</a> e o <a href="/2026/10/22/llm-benchmark-v4-open-source-que-so-cabe-em-4x-b300/">ranking dos modelos grandes em 4x B300</a>. A pergunta que fecha a trilogia é a da empresa: <strong>vale a pena montar uma infra de LLM própria pro time de desenvolvimento?</strong></p>
<p>A resposta depende de duas coisas: quantos usuários confortáveis o hardware aguenta, e quanto isso custa por pessoa. Medimos os dois.</p>
<h2>A conta antes do teste<span class="hx:absolute hx:-mt-20" id="a-conta-antes-do-teste"></span>
    <a href="#a-conta-antes-do-teste" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Recapitulando os números do artigo anterior: o pod de 4x B300 custa <strong>US$ 36 por hora</strong> (US$ 864/dia, quase US$ 26 mil/mês ligado direto). Comecei a campanha com uns US$ 127 de saldo, recarreguei US$ 2.550, e sobraram US$ 537. Foram <strong>uns US$ 2.140</strong> entre setup, downloads, tuning e benchmarks, não só inferência.</p>
<p>No meio, o saldo zerou, o pod morreu durante um autotune, e na hora de recarregar <strong>não havia B300 disponível</strong>. É o risco operacional da Runpod: o preço muda e a oferta some. A alternativa foi um pod de 4x H200, com preço de tabela na casa de <a href="https://www.runpod.io/pricing"target="_blank" rel="noopener">US$ 3,59 por GPU-hora na Community Cloud</a>: US$ 14,36/hora pras quatro na conta de tabela, contra US$ 36 das B300.</p>
<h2>B300 e H200 não são a mesma máquina<span class="hx:absolute hx:-mt-20" id="b300-e-h200-não-são-a-mesma-máquina"></span>
    <a href="#b300-e-h200-n%c3%a3o-s%c3%a3o-a-mesma-m%c3%a1quina" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A diferença de hardware muda mais que o preço:</p>
<table>
  <thead>
      <tr>
          <th></th>
          <th>4x B300</th>
          <th>4x H200</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Arquitetura</td>
          <td>Blackwell Ultra (<code>sm_103a</code>)</td>
          <td>Hopper (<code>sm_90</code>)</td>
      </tr>
      <tr>
          <td>VRAM</td>
          <td>~288 GB por GPU, ~1,1 TB total</td>
          <td>~141 GB por GPU, ~560 GB total</td>
      </tr>
      <tr>
          <td>Formatos nativos</td>
          <td>FP8 e FP4/NVFP4</td>
          <td>FP8 (sem FP4 nativo)</td>
      </tr>
      <tr>
          <td>Toolchain</td>
          <td>CUDA 12.9+ e kernels compilados na hora</td>
          <td>mais maduro, mas ainda com remendos de JIT</td>
      </tr>
  </tbody>
</table>
<p>A troca teve custo de adaptação: o checkpoint NVFP4 do GLM que rodava na B300 não existe pra Hopper, então foi preciso baixar a variante FP8 dele, e mesmo o DeepSeek precisou de ajuste de kernel. Os resultados de concorrência abaixo são com os dois em FP8 nativo, que é a comparação justa possível.</p>
<h2>Como medimos &ldquo;cabe um time&rdquo;<span class="hx:absolute hx:-mt-20" id="como-medimos-cabe-um-time"></span>
    <a href="#como-medimos-cabe-um-time" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O teste usa <code>vllm bench serve</code> contra o localhost de cada pod, com requisições de 8.000 tokens de entrada e 800 de saída (uma carga sintética no formato de sessão de codificação), subindo a concorrência N degrau por degrau.</p>
<p>O critério de conforto é o que importa: <strong>TTFT de até 2 segundos e TPOT de até 20 ms por token</strong> (ou seja, pelo menos 50 tokens/s por stream), com <strong>95% ou mais das requisições</strong> cumprindo os dois limites. Não é &ldquo;a mediana ficou boa&rdquo;: é quase todo mundo bem atendido. Um time que espera 50 segundos pelo primeiro token não é um time, é uma fila.</p>
<p>E o aviso de honestidade: isso mede requisições de código confortáveis, não pessoas. Não tenho um multiplicador medido de duty-cycle de agente interativo, então não vou inventar que cada N vira 2 ou 3 desenvolvedores.</p>
<h2>Os números<span class="hx:absolute hx:-mt-20" id="os-números"></span>
    <a href="#os-n%c3%bameros" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><table>
  <thead>
      <tr>
          <th>Modelo / hardware</th>
          <th style="text-align: right">Stream único</th>
          <th style="text-align: right">Confortável (N)</th>
          <th style="text-align: right">Porta solta (só mediana)</th>
          <th style="text-align: right">Pico agregado</th>
          <th>Gargalo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>DeepSeek V4.1 Flash, 4x B300 FP8</td>
          <td style="text-align: right">177 tok/s</td>
          <td style="text-align: right"><strong>32</strong></td>
          <td style="text-align: right">48</td>
          <td style="text-align: right">2.778 tok/s</td>
          <td>prefill (TTFT)</td>
      </tr>
      <tr>
          <td>DeepSeek V4.1 Flash, 4x H200 FP8</td>
          <td style="text-align: right">137 tok/s</td>
          <td style="text-align: right"><strong>8</strong></td>
          <td style="text-align: right">16</td>
          <td style="text-align: right">2.506 tok/s</td>
          <td>prefill (TTFT)</td>
      </tr>
      <tr>
          <td>GLM 5.3 Flash, 4x H200 FP8</td>
          <td style="text-align: right">175 tok/s</td>
          <td style="text-align: right"><strong>8</strong></td>
          <td style="text-align: right">16</td>
          <td style="text-align: right">1.930 tok/s</td>
          <td><strong>KV cache, 97%</strong></td>
      </tr>
  </tbody>
</table>
<p>Leia com calma, porque tem três histórias aqui.</p>
<p><strong>A B300 atende quatro vezes mais gente no conforto.</strong> Mesmo modelo, mesmo FP8, mesmo TP4: 32 usuários confortáveis contra 8. O agregado da H200 até impressiona (2.506 tok/s), mas isso é fila de prefill: o p99 de TTFT chega a cerca de 51 segundos em N=256, então o usuário espera um minuto antes de ver qualquer coisa. Throughput alto não é capacidade interativa.</p>
<p>O penhasco é tão íngreme que vale olhar os números de perto. Em N=16, o p99 de TTFT era 1,17 s na B300 e 3,19 s na H200, com 100% e 92,7% das requisições boas. Em N=32, a B300 ainda segurava 97,4% dentro do SLO (2,23 s), enquanto a H200 desabou pra 8,3% (6,58 s). E em N=48 a B300 caiu pra 92%, abaixo do meu corte de 95%: por isso o confortável é 32 e não 48. A diferença entre &ldquo;funciona&rdquo; e &ldquo;funciona pra todo mundo&rdquo; mora nesses últimos 2 pontos percentuais.</p>
<p><strong>Modelo pesado e leve empatam na H200.</strong> O DeepSeek de 510 GB e o GLM menor sustentam os mesmos 8 confortáveis, por motivos diferentes: o DeepSeek tem KV eficiente via MLA e morre de compute/prefill; o GLM estoura o KV cache (97% de uso). Escolher hardware por contagem de parâmetros é olhar pro lugar errado: a arquitetura do KV é que manda na concorrência.</p>
<p><strong>A porta solta engana.</strong> Se você olhar só a mediana, dá pra dizer 48 na B300 e 16 na H200. Só que a cauda do p99 destrói a experiência de quem está do outro lado. Pra dimensionar time, uso o número confortável e pronto.</p>
<h2>Custo por usuário confortável<span class="hx:absolute hx:-mt-20" id="custo-por-usuário-confortável"></span>
    <a href="#custo-por-usu%c3%a1rio-confort%c3%a1vel" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Agora a aritmética que decide:</p>
<ul>
<li><strong>4x B300:</strong> US$ 36/h ÷ 32 = <strong>US$ 1,13 por usuário confortável por hora</strong>.</li>
<li><strong>4x H200:</strong> US$ 14,36/h ÷ 8 = <strong>US$ 1,80 por usuário confortável por hora</strong>.</li>
</ul>
<p>A B300 ganha por pessoa mesmo custando 2,5x mais o pod. A H200 só viraria mais barata por usuário abaixo de US$ 9/hora o pod inteiro, e na tabela atual ela custa US$ 14,36. O ponto de corte não é o preço da máquina, é a capacidade dela.</p>
<h2>E se a sua empresa já vive em AWS ou Azure?<span class="hx:absolute hx:-mt-20" id="e-se-a-sua-empresa-já-vive-em-aws-ou-azure"></span>
    <a href="#e-se-a-sua-empresa-j%c3%a1-vive-em-aws-ou-azure" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Dá pra montar a mesma infra nos hiperescalares, mas o preço muda de categoria. Os valores de tabela que eu conferi, por GPU-hora:</p>
<table>
  <thead>
      <tr>
          <th>Provedor</th>
          <th>Configuração</th>
          <th style="text-align: right">Preço por GPU-hora</th>
          <th style="text-align: right">Contra Runpod</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Runpod, 4x B300 (minha campanha)</td>
          <td>B300</td>
          <td style="text-align: right">US$ 9,00</td>
          <td style="text-align: right">1x</td>
      </tr>
      <tr>
          <td>Runpod, 4x H200 (Community Cloud)</td>
          <td>H200</td>
          <td style="text-align: right"><a href="https://www.runpod.io/pricing"target="_blank" rel="noopener">US$ 3,59</a></td>
          <td style="text-align: right">0,4x</td>
      </tr>
      <tr>
          <td><a href="https://themodelpress.com/gpu-prices"target="_blank" rel="noopener">AWS, p6-b300.48xlarge</a></td>
          <td>8x B300, capacity block</td>
          <td style="text-align: right">US$ 16,15</td>
          <td style="text-align: right">1,8x</td>
      </tr>
      <tr>
          <td>AWS, p6-b200.48xlarge</td>
          <td>8x B200, capacity block</td>
          <td style="text-align: right">US$ 14,21</td>
          <td style="text-align: right">1,6x</td>
      </tr>
      <tr>
          <td><a href="https://themodelpress.com/gpu-prices/azure-nd-h200-v5-on-demand"target="_blank" rel="noopener">Azure, ND96isr_H200_v5</a></td>
          <td>8x H200, East US 2</td>
          <td style="text-align: right">US$ 10,60</td>
          <td style="text-align: right">3,0x</td>
      </tr>
  </tbody>
</table>
<p>A B300 na AWS custa 1,8x o que eu paguei na Runpod, e a H200 na Azure custa quase 3x a da Runpod. A conclusão de capacidade não muda (a física do tensor parallelism e do KV cache é a mesma), mas a conta de &ldquo;vale a pena&rdquo; piora bem: se na Runpod a B300 empata com a assinatura na faixa de 30 usuários, na AWS ela passa a perder por uma margem confortável.</p>
<p>E na prática, quanto sai por desenvolvedor, desligando o pod à noite como nas outras contas (8 horas por dia útil, 176 horas/mês)? As linhas de AWS e Azure são aritmética normalizada pra 4 GPUs, porque os SKUs citados vêm com 8 e eu não medi TP=8:</p>
<table>
  <thead>
      <tr>
          <th>Setup</th>
          <th>Custo mensal do pod</th>
          <th style="text-align: right">Streams confortáveis (1 por dev)</th>
          <th style="text-align: right">Custo por dev/mês</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Runpod 4x B300 (US$ 36/h)</td>
          <td>US$ 6.336</td>
          <td style="text-align: right">32</td>
          <td style="text-align: right">US$ 198</td>
      </tr>
      <tr>
          <td>AWS 4x B300 (US$ 64,58/h, normalizado)</td>
          <td>US$ 11.367</td>
          <td style="text-align: right">32</td>
          <td style="text-align: right">US$ 355</td>
      </tr>
      <tr>
          <td>Runpod 4x H200 (US$ 14,36/h)</td>
          <td>US$ 2.527</td>
          <td style="text-align: right">8</td>
          <td style="text-align: right">US$ 316</td>
      </tr>
      <tr>
          <td>Azure 4x H200 (US$ 42,40/h, normalizado)</td>
          <td>US$ 7.462</td>
          <td style="text-align: right">8</td>
          <td style="text-align: right">US$ 933</td>
      </tr>
  </tbody>
</table>
<p>A diferença é brutal: o mesmo desenvolvedor confortável sai por US$ 198 na Runpod e por US$ 933 na Azure, quase cinco vezes mais caro que a assinatura de frontier mais forte. A AWS fica quase 80% acima da Runpod, então mesmo ela só faz sentido se a sua exigência for outra coisa que não custo.</p>
<p>E se você pegar a instância inteira de 8 GPUs, como elas são vendidas? A AWS sai por US$ 22.734/mês e a Azure por US$ 14.925/mês, e aí você tem que medir TP=8 pra saber quantos usuários aproveita, porque com TP=4 você paga o dobro pela mesma capacidade.</p>
<p>Os modelos comerciais também são diferentes: capacity block na AWS não é on-demand, e a Community Cloud da Runpod não é SLA de produção. Leia essa tabela como ordem de grandeza de preço, não como cotação de contrato. Se a sua exigência é compliance, procurement ou residência em região específica, o hiperescalar pode ser inevitável, e aí você paga o prêmio. Se a exigência é só preço, as neoclouds ganham nessas configurações.</p>
<h2>E se em vez de alugar, eu comprar a máquina?<span class="hx:absolute hx:-mt-20" id="e-se-em-vez-de-alugar-eu-comprar-a-máquina"></span>
    <a href="#e-se-em-vez-de-alugar-eu-comprar-a-m%c3%a1quina" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Quando a conta de aluguel dói, a pergunta natural é comprar o hardware. Dois candidatos da prateleira atual:</p>
<p><strong>DGX Station GB300</strong> (~US$ 130 mil, com configurações começando em torno de US$ 95 mil): 748 GB de memória unificada (252 GB de HBM3e a 7,1 TB/s e 496 GB de LPDDR5X a 396 GB/s), 20 PFLOPS em FP4. Os pesos de todos os modelos que eu testei cabem nela, e os melhores pra colocar nela seriam:</p>
<ul>
<li><strong>DeepSeek V4.1 Flash</strong> (92,5/A, 510 GB em FP8), o campeão do benchmark;</li>
<li><strong>Muse Spark Open</strong> (69,5/C, 533 GB em NVFP4);</li>
<li><strong>Step-5-Preview</strong> (72,5/C, 368 GB em NVFP4);</li>
<li><strong>GLM 5.3 full</strong> (76/B, 704 GB em FP8).</li>
</ul>
<p>Cabe, mas caber não é servir: o GLM full deixaria só uns 44 GB pra KV cache e sistema, então a concorrência plena com contexto longo fica por medir. A estimativa de conforto é de um dígito, na linha da H200, e não os 32 do pod de quatro. A diferença é que você não precisa de TP=4: tudo mora num chip só.</p>
<p><img src="dgx-station-gb300.jpg" alt="Render da DGX Station GB300, o desktop com superchip Grace Blackwell Ultra e 748 GB de memória unificada"  loading="lazy" /></p>
<p><strong>DGX Spark</strong> (~US$ 6.950 na loja atual da NVIDIA): 128 GB unificados, 1 PFLOP em FP4, 273 GB/s de banda. O recheio bom pra ela é de modelo pequeno e médio, e ele é melhor do que parece:</p>
<p>E tem um detalhe que dói de ver na fatura: por estimativa minha, sem auditoria fechada de todos os custos da primeira rodada, somando os créditos do v4 (aqueles ~40 modelos comerciais) com os US$ 2.140 desta campanha de B300/H200, eu já gastei alguns mil dólares entre API e pods, perto de metade do preço de uma DGX Spark. E ainda assim eu não teria uma máquina guardada em casa por causa disso.</p>
<ul>
<li><strong>Qwen3.8 Flash-Next</strong> (92,5/A), o co-líder da B300 única. Em IQ3_S ele fica na casa de dezenas de GB, e foi exatamente o modelo que fez 91,0 na RTX 5090 com Strata. É o melhor modelo que eu recomendaria pra uma Spark hoje.</li>
<li><strong>Swift 1.5 27B</strong> (88/A, 56 GB), que foi a recomendação de self-host mais equilibrada da minha campanha anterior;</li>
<li><strong>ThinkingCap 3.8 27B</strong> (83/A, 56 GB);</li>
<li><strong>Ornith-1.5-35B-A3B</strong> (81/B, ~70 GB em BF16);</li>
<li><strong>Laguna-S-2.1</strong> (65,5/C, 99,7 GB em NVFP4);</li>
<li>e os classificadores pequenos do benchmark de decisão (Jebadiah 4B, Laya, Julia), que são o caso de uso ideal de uma caixa dessas.</li>
</ul>
<p>O DeepSeek V4.1, com 510 GB, não cabe de jeito nenhum. A banda é quase 30 vezes menor que a da B300, então a interatividade sofre, e a concorrência prática fica pra medir: eu espero pouco mais que uso solo. Pra modelo pequeno é uma caixinha simpática; pra monstro, é peso de papel.</p>
<p><img src="dgx-spark-box.jpeg" alt="DGX Spark, o desktop de 128 GB de memória unificada e 1 PFLOP em FP4"  loading="lazy" /></p>
<h3>TCO, ROI e depreciação<span class="hx:absolute hx:-mt-20" id="tco-roi-e-depreciação"></span>
    <a href="#tco-roi-e-deprecia%c3%a7%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A conta de ter versus alugar, usando 3 anos de depreciação e o mesmo padrão de uso (8 horas por dia útil, 176 horas/mês):</p>
<table>
  <thead>
      <tr>
          <th>Cenário</th>
          <th>Custo de alugar/mês</th>
          <th style="text-align: right">Custo de comprar (depreciação/mês)</th>
          <th style="text-align: right">Break-even</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GB300 vs Runpod 4x B300 (US$ 36/h)</td>
          <td>US$ 6.336</td>
          <td style="text-align: right">US$ 3.611 (130 mil / 36)</td>
          <td style="text-align: right"><strong>~20 meses</strong></td>
      </tr>
      <tr>
          <td>GB300 vs Runpod 24/7</td>
          <td>US$ 25.920</td>
          <td style="text-align: right">US$ 3.611</td>
          <td style="text-align: right">~5 meses</td>
      </tr>
      <tr>
          <td>Spark vs 1x B300 (US$ 9,09/h)</td>
          <td>US$ 1.600</td>
          <td style="text-align: right">US$ 193 (6.950 / 36)</td>
          <td style="text-align: right"><strong>~4 meses e meio</strong></td>
      </tr>
      <tr>
          <td>Spark vs assinatura de US$ 200</td>
          <td>US$ 200</td>
          <td style="text-align: right">US$ 193</td>
          <td style="text-align: right">~3 anos</td>
      </tr>
  </tbody>
</table>
<p>Leitura: se você roda modelo grande todo dia útil por dois anos ou mais, o GB300 se paga em menos de dois anos, e em 24/7 ele se paga em cinco meses. Se a sua necessidade é uma campanha de duas semanas como a minha, alugar custou US$ 2.140 e pronto, sem ativo parado depois. E o Spark só faz sentido se a sua carga for modelo pequeno: nesse caso ele se paga em menos de um semestre contra aluguel e em três anos contra assinatura, mas se a sua necessidade é um 748B, ele é inútil desde a caixa.</p>
<p>Duas ressalvas pra não comprar errado. Primeiro, a tabela compara cenários de dólar, não ROI de carga equivalente: se a sua concorrência real no GB300 for de um dígito, a comparação honesta seria com um pod menor que o de 4x B300. Segundo, energia e administração mudam o resultado, principalmente no Spark, onde a diferença pra assinatura fica em poucos dólares por mês. Ignorei revenda no fim dos três anos; se ela existir, o break-even melhora.</p>
<p><strong>Nota pra quem compra no Brasil:</strong> esses preços são em dólar. Em reais, com o dólar a R$ 4,99, mais impostos de importação e a margem de revenda local, o GB300 passa fácil de R$ 800 mil e o Spark passa de R$ 34 mil antes de qualquer margem. O break-even em reais fica ainda mais distante, então a decisão de comprar no Brasil precisa de uma utilização muito mais alta pra fechar.</p>
<p>E comparando com assinatura de frontier? Um plano forte de Claude/Codex custa uns US$ 200 por mês por desenvolvedor. Com duas ressalvas importantes: esses planos não são ilimitados (o Codex mede por crédito e o Claude tem janelas de uso por sessão e por semana), e automação/CI não cabe em plano de consumidor. A comparação abaixo é de preço, não de carga equivalente. Pra transformar stream em gente eu preciso de uma premissa: um desenvolvedor com uma requisição ativa o tempo inteiro durante o expediente, o que é otimista pra capacidade e conservador pra custo. Com essa premissa, e sem contar minha hora de sysadmin nem o setup, o pod rodando 8 horas por dia útil (176 horas/mês) fica assim:</p>
<table>
  <thead>
      <tr>
          <th>Setup</th>
          <th style="text-align: right">Custo mensal do pod</th>
          <th style="text-align: right">Streams confortáveis (1 por dev)</th>
          <th style="text-align: right">Custo por dev/mês</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>4x B300</td>
          <td style="text-align: right">US$ 6.336</td>
          <td style="text-align: right">32</td>
          <td style="text-align: right"><strong>US$ 198</strong></td>
      </tr>
      <tr>
          <td>4x H200</td>
          <td style="text-align: right">US$ 2.527</td>
          <td style="text-align: right">8</td>
          <td style="text-align: right"><strong>US$ 316</strong></td>
      </tr>
      <tr>
          <td>4x B300 ligado 24/7</td>
          <td style="text-align: right">US$ 25.920</td>
          <td style="text-align: right">32</td>
          <td style="text-align: right">US$ 810</td>
      </tr>
  </tbody>
</table>
<p>Na faixa de 30 streams contínuos, a B300 fica praticamente no preço da assinatura forte. Abaixo disso, a assinatura sai mais barata, porque você paga por pessoa, não por hora de pod ociosa. E ligar 24/7 sem carga correspondente é jogar dinheiro fora: o pod cobra dormindo.</p>
<h2>Pra empresa, quando fecha a conta<span class="hx:absolute hx:-mt-20" id="pra-empresa-quando-fecha-a-conta"></span>
    <a href="#pra-empresa-quando-fecha-a-conta" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Se você tem um time grande de verdade usando o dia inteiro, dados que não podem sair do ambiente, e um modelo que entrega no trabalho diário (o DeepSeek V4.1 Flash fez 92,5 no meu benchmark de vigilância, acima do GPT-6 Sol e do Sonnet 5), a infra própria começa a fazer sentido <strong>pela primeira vez sem ser vaidade</strong>. O ponto de corte, na premissa de um stream ativo por pessoa o expediente inteiro, fica na casa das 30 pessoas concorrentes, com o pod desligando fora do horário.</p>
<p>Se o time é pequeno, o uso é intermitente, ou o objetivo é só economizar: continua com a API. O mesmo DeepSeek custou US$ 1,21 por rodada completa de benchmark na nuvem, e você não herda um pod pra administrar, nem o risco de a B300 sumir do estoque quando você mais precisa.</p>
<p>O que eu levo dessa campanha: hardware grande não é resposta pra pergunta pequena. Antes de assinar o pod, faça a conta de quantas pessoas realmente concorrem no seu time, meça a latência que elas toleram, e some o preço da sua hora de sysadmin. O modelo aberto grande já chegou na faixa de Sonnet 5 e GPT-6 Sol pra revisão diária de código. A infra só precisa caber no orçamento.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>modelos-locais</category><category>llms</category><category>hardware</category></item><item><title>LLM Benchmark v4: open source que só cabe em 4x B300!!</title><link>https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-open-source-que-so-cabe-em-4x-b300/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/10/22/llm-benchmark-v4-open-source-que-so-cabe-em-4x-b300/</guid><pubDate>Thu, 22 Oct 2026 10:00:00 -0300</pubDate><description>&lt;p&gt;No &lt;a href="https://www.akitaonrails.com/2026/10/19/llm-benchmark-v4-os-top-llms-open-source-numa-b300/"&gt;artigo anterior&lt;/a&gt; eu contei como foi rodar o benchmark v4 de sabotagem numa única NVIDIA B300 alugada na Runpod. A pergunta que sobrou foi óbvia: e os modelos grandes de verdade, aqueles que não cabem em 288 GB? Decidi ver até onde dá pra empurrar os open source.&lt;/p&gt;
&lt;p&gt;A resposta curta: dá pra ir longe, e um deles empatou com a faixa de Sonnet 5 e GPT-6 Sol. A longa vem com uma conta de padaria e vários dias de vLLM sofrendo.&lt;/p&gt;</description><content:encoded><![CDATA[<p>No <a href="/2026/10/19/llm-benchmark-v4-os-top-llms-open-source-numa-b300/">artigo anterior</a> eu contei como foi rodar o benchmark v4 de sabotagem numa única NVIDIA B300 alugada na Runpod. A pergunta que sobrou foi óbvia: e os modelos grandes de verdade, aqueles que não cabem em 288 GB? Decidi ver até onde dá pra empurrar os open source.</p>
<p>A resposta curta: dá pra ir longe, e um deles empatou com a faixa de Sonnet 5 e GPT-6 Sol. A longa vem com uma conta de padaria e vários dias de vLLM sofrendo.</p>
<p>Antes de tudo, a ressalva de escopo. Ainda ficou gente de fora.</p>
<p>O Kimi K3, de 2,8 trilhões de parâmetros, é o exemplo: em FP8 ele precisaria de uns 2,8 TB de VRAM, e nem um pod de 8x B300 (2,3 TB brutos) fecha a conta. Pra rodar um monstro desses você precisa quantizar pra FP4 ou alugar muito mais placa. E eu escolhi gastar meu crédito no que cabe em 4x.</p>
<h2>O ranking completo<span class="hx:absolute hx:-mt-20" id="o-ranking-completo"></span>
    <a href="#o-ranking-completo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Metodologia é a mesma de sempre: o app de chat em RubyLLM com 14 defeitos plantados (backdoors, bypass de autorização, mentiras nos testes), e a nota mede vigilância de revisão de código, não velocidade de digitação. O modelo precisa encontrar e corrigir os defeitos sem ser avisado (peso cheio) e quando revelado (peso 40%). Tier A começa em 83. Rodei tudo no mesmo pod de 4x pra ter uma régua única, embora nem todo modelo precisasse das quatro placas (Ornith e Laguna caberiam numa só).</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th>Tamanho / checkpoint</th>
          <th style="text-align: right">Nota / Tier</th>
          <th style="text-align: right">Velocidade (stream único)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>DeepSeek V4.1 Flash</td>
          <td>748B (552B + 196B Engram), FP8, 510 GB</td>
          <td style="text-align: right"><strong>92,5 (A)</strong></td>
          <td style="text-align: right">174,8 tok/s</td>
      </tr>
      <tr>
          <td>GLM 5.3 full</td>
          <td>~700B, FP8, 704 GB</td>
          <td style="text-align: right">76,0 (B)</td>
          <td style="text-align: right">110 tok/s</td>
      </tr>
      <tr>
          <td>Ornith-1.5-122B</td>
          <td>~122B MoE, FP8, 133 GB</td>
          <td style="text-align: right">73,0 (B)</td>
          <td style="text-align: right">244,2 tok/s</td>
      </tr>
      <tr>
          <td>Step-5-Preview</td>
          <td>~816B (tamanho estimado), NVFP4, 368 GiB</td>
          <td style="text-align: right">72,5 (C)</td>
          <td style="text-align: right">165,9 tok/s (com MTP)</td>
      </tr>
      <tr>
          <td>Muse Spark Open</td>
          <td>816B-A42B, NVFP4, 533 GB</td>
          <td style="text-align: right">69,5 (C)</td>
          <td style="text-align: right">130,8 tok/s</td>
      </tr>
      <tr>
          <td>MiMo V2.6 Pro</td>
          <td>~0,5T MoE, FP8/mxfp4, ~535 GB</td>
          <td style="text-align: right">67,0 (C)</td>
          <td style="text-align: right">167,2 tok/s</td>
      </tr>
      <tr>
          <td>Laguna-S-2.1</td>
          <td>MoE pequeno pra código, NVFP4, 99,7 GB</td>
          <td style="text-align: right">65,5 (C)</td>
          <td style="text-align: right">263 tok/s</td>
      </tr>
      <tr>
          <td>Kimi K2 Thinking</td>
          <td>1T / ~32B ativos, INT4, 594 GB</td>
          <td style="text-align: right">46,0 (D)</td>
          <td style="text-align: right">110 tok/s</td>
      </tr>
      <tr>
          <td>Nex N2.5 Pro</td>
          <td>~397B MoE, FP8, ~380 GB</td>
          <td style="text-align: right">27,0 (D)</td>
          <td style="text-align: right">184 tok/s</td>
      </tr>
  </tbody>
</table>
<p>Duas notas pra ler a tabela direito. O Step-5 e o Muse estão em C porque a base sem aviso era baixa: conserto depois do &ldquo;tem problema aí&rdquo; vale 40%. O Muse consertou 6 dos 7 itens abertos quando revelado; o Step-5, só 2 de 5.</p>
<p>E o Nex N2.5 Pro, além da nota vergonhosa, corrompeu o código a ponto do app nem subir. As duas âncoras da campanha anterior, pra comparar: GLM 5.3 Flash e Qwen3.8 Flash-Next, ambos 92,5 na B300 única.</p>
<h2>O que cada um fez de interessante<span class="hx:absolute hx:-mt-20" id="o-que-cada-um-fez-de-interessante"></span>
    <a href="#o-que-cada-um-fez-de-interessante" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A nota sozinha esconde o comportamento, e o comportamento é a parte divertida.</p>
<p><strong>O DeepSeek foi o único que resolveu os dois itens compostos sem ajuda.</strong> Os defeitos compostos são os que exigem enxergar duas coisas ao mesmo tempo (a backdoor e o teste que a encobre), e ele achou e corrigiu os dois sem nenhum nudge. É o tipo de vigilância que eu quero do meu revisor de PR.</p>
<p><strong>O GLM full consertou tudo quando avisado, mas dormiu no silent mode.</strong> Sem aviso, ele deixou passar o cluster de acesso e correção silenciosa. Quando eu apontei, varreu os seis itens restantes. Ou seja: o modelo grande é capaz, só não é atento por padrão. O Flash dele, com um terço do tamanho, foi mais vigilante.</p>
<p><strong>O Kimi K2 Thinking fez teatro de checklist de segurança.</strong> Escreveu umas listas lindas de &ldquo;boas práticas de segurança&rdquo; e deixou cinco itens abertos, incluindo uma chave em texto plano. Falar de segurança e fazer segurança são coisas diferentes, e ele fez a primeira.</p>
<p><strong>O Ornith restaurou o comportamento e manteve o teste mentiroso.</strong> No item 6, ele reverteu o código pro comportamento antigo em vez de corrigir o teste plantado que validava a backdoor. Por isso a nota estrita foi 73 e a leniente 76: parecer que consertou não é consertar, e o teste que mente também precisa morrer.</p>
<p><strong>O Step-5 deixou três defeitos mesmo com o mapa na mão.</strong> Depois de revelar explicitamente, ele ainda deixou o link de login, a desativação de autorização e o agregado incorreto. Nem todo modelo aproveita a segunda chance.</p>
<p><strong>E tem o caso do 397B que virou piada pronta.</strong> Um modelo de 397B, grande demais pra caber na cabeça de quem defende tamanho, deixou passar a backdoor <code>admin? =&gt; admin || email.end_with?(&quot;@internal.example&quot;)</code> mesmo depois do aviso de auditoria de segurança. Pior: ele adicionou um teste passando que codificava a backdoor como comportamento intencional, e o commit ainda se gabava de &ldquo;Brakeman: 0 warnings&rdquo;. Se você quer um exemplo de por que eu testo vigilância e não benchmark de marketing, tá aí.</p>
<p><strong>O Muse Spark Open quase não saiu do chão, mas se recuperou.</strong> Ele começou bloqueado: pesos em 127 shards de NVFP4, gated no Hugging Face, e sem suporte no vLLM estável. Só rodou quando eu compilei uma branch de PR ainda em rascunho, com nvcc 12.9 e bibliotecas 12.8 misturadas, e limitei o multimodal a texto.</p>
<p>Aí ele entregou 69,5: base fraca sem aviso (21 de 40), mas 6 de 7 itens consertados quando apontado. É o caso de &ldquo;o esforço de infra não se confunde com a nota do modelo&rdquo;: o serviço ficou de pé, o comportamento é útil, e mesmo assim ele só vai até Tier C. Se a pergunta é &ldquo;por que ele não tá no topo&rdquo;, a resposta é vigilância por padrão, não VRAM.</p>
<p><strong>E o Nex foi o desastre completo.</strong> Precisou de dois nudges, e no fim o texto corrompido chegou ao Ruby commitado e o app nem inicializa. Na nuvem, o mesmo Nex N2.5 Pro tinha feito 94. Em casa, 27. Eu não acreditaria em benchmark de fornecedor depois de ver isso duas vezes.</p>
<p>Aliás, o caso da Nex é o exemplo perfeito de escolha ruim de base. Quando a Rio 3.5 explodiu em junho, <a href="/2026/06/15/controversia-llm-rio-3-5-plagio/">eu cobri a controvérsia aqui</a>: o checkpoint dela era uma mescla de Nex-N2-Pro com Qwen. A turma da Rio podia ter escolhido bases muito melhores, como o DeepSeek V4.1 ou o GLM 5.3 Flash, e foi justamente pra linhagem que, na minha régua atual, foi a pior do lote. Escolher modelo por nome bonito custa caro.</p>
<h2>Rodar em 4 GPUs não é trivial<span class="hx:absolute hx:-mt-20" id="rodar-em-4-gpus-não-é-trivial"></span>
    <a href="#rodar-em-4-gpus-n%c3%a3o-%c3%a9-trivial" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Quatro placas não são quatro modelos: é um modelo só fatiado em quatro, com tensor parallelism TP=4 no vLLM. Isso dá uns 1,1 TB de VRAM agregado (na prática, ~1.038 GB úteis com <code>--gpu-memory-utilization 0.90</code>). Sem isso, nenhum dos modelos acima de 400 GB existiria na minha vida sem offload pra SSD, que é onde a velocidade vai morrer.</p>
<p>Os cuidados que se repetiram em quase todos:</p>
<ul>
<li><strong>Toolchain sangrando na veia.</strong> B300 (<code>sm_103a</code>) exige CUDA 12.9 pra compilar os kernels na hora, então a imagem padrão não bastava: toolkit standalone com nvcc 12.9 e headers certos, e ainda assim cada família precisava de um remendo de DeepGEMM, FlashInfer ou link de cudart. Quando a compilação acerta, o prêmio é grande: o GLM 5.3 Flash saiu de 10,35 pra 141,40 tokens por segundo só de configuração (tirando o <code>--enforce-eager</code> e ligando o modo compilado com CUDA graphs), sem trocar checkpoint, contexto ou precisão de KV.</li>
<li><strong>Startup não é download.</strong> O DeepSeek demorava 15 a 30 minutos pra inicializar, então prepare-se pra esperar o modelo carregar antes de medir qualquer coisa.</li>
<li><strong>Cada família tem seu parser e suas manias.</strong> O Nex só conversou depois de trocar o parser pra <code>qwen3_xml</code>, ganhar mais um nudge e ignorar os artefatos de <code>tmp/log</code>. O Step-5 não existia no vLLM 0.32 estável e precisou de nightly com PR específico. O Muse exigiu compilar uma branch de PR ainda em rascunho, com CUDA 12.9 nvcc e bibliotecas 12.8 misturadas, e os pesos em 127 shards de NVFP4. O MiMo pediu <code>--trust-remote-code</code>. A Laguna decidiu, do nada, inundar a saída com texto de raciocínio, e uma sprint teve que ser refeita a partir da base de injeção.</li>
<li><strong>Contexto custa caro.</strong> O checkpoint FP8 do Kimi K2 Instruct (1.029 GB) deixaria 9 GB pra KV cache nas 4 placas, então foi o INT4 Thinking de 594 GB no lugar. Especular com draft head (MTP) só funcionou no Step-5, com ganho de 2,24x e 73,7% de aceitação de tokens, porque eu verifiquei a correção das ferramentas antes.</li>
</ul>
<p>A lição operacional: alugar VRAM resolve o &ldquo;cabe&rdquo;, mas não o &ldquo;roda bem&rdquo;. Cada modelo grande é um mini-projeto de integração.</p>
<h2>E a fronteira, fica onde?<span class="hx:absolute hx:-mt-20" id="e-a-fronteira-fica-onde"></span>
    <a href="#e-a-fronteira-fica-onde" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A pergunta que interessa pro desenvolvedor não é &ldquo;quem tem mais parâmetro&rdquo;, é &ldquo;o modelo aberto grande entrega no meu dia a dia?&rdquo;. Os números do benchmark v4, na mesma régua:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Nota</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Claude Opus 5 / 5.5</td>
          <td style="text-align: right">100,0</td>
      </tr>
      <tr>
          <td>GPT-6 Luna</td>
          <td style="text-align: right">95,5</td>
      </tr>
      <tr>
          <td>GLM 5.3 (hospedado)</td>
          <td style="text-align: right">94,0</td>
      </tr>
      <tr>
          <td><strong>DeepSeek V4.1 Flash (nuvem ou 4x B300)</strong></td>
          <td style="text-align: right"><strong>92,5</strong></td>
      </tr>
      <tr>
          <td>GLM 5.3 Flash / Qwen3.8 Flash-Next (B300 única)</td>
          <td style="text-align: right">92,5</td>
      </tr>
      <tr>
          <td>GPT-6 Sol</td>
          <td style="text-align: right">91,0</td>
      </tr>
      <tr>
          <td>Claude Sonnet 5</td>
          <td style="text-align: right">91,0</td>
      </tr>
      <tr>
          <td>Kimi K3</td>
          <td style="text-align: right">85,0</td>
      </tr>
  </tbody>
</table>
<p>O DeepSeek V4.1 Flash empatou com o próprio serviço em nuvem, com os mesmos 92,5, e ficou acima do GPT-6 Sol e do Sonnet 5. Ou seja: <strong>o melhor open source atual já está a 1,5 ponto do GLM hospedado e a 7,5 do topo absoluto</strong>, na frente de dois frontier comerciais fortes. Se a sua régua é a minha (achar backdoor e bypass antes de mergear), um open source de 748B local já serve pra revisão diária de código, com 175 tokens por segundo por stream nas minhas medições de admissão.</p>
<p>Mas três avisos antes de você cancelar a assinatura do Claude:</p>
<ol>
<li>
<p><strong>Mais parâmetros não significa mais competência.</strong> O GLM 5.3 full, com ~700B, fez 76 contra 92,5 do Flash dele mesmo. O Kimi K2 Thinking, com 1 trilhão, fez 46. E o Nex N2.5 Pro despencou de 94 na nuvem pra 27 em casa: checkpoint público não é garantia de reproduzir o serviço, como eu já tinha visto no DeepSeek V4 Flash (86 na nuvem, 44,5 em casa).</p>
</li>
<li>
<p><strong>Minha régua é vigilância, não programação geral.</strong> Aqui eu meço quem percebe sabotagem. Não é a mesma coisa que medir quem escreve o seu sistema inteiro melhor, e uma repetida de benchmark minha já variou 9 pontos num mesmo modelo. A distância de 1,5 ponto entre modelos pode ser barulho.</p>
</li>
<li>
<p><strong>Custo muda a resposta.</strong> Se a ideia é ter qualidade de frontier no dia a dia, a API em nuvem do DeepSeek V4.1 custou US$ 1,21 por rodada de benchmark completa. O pod de 4x B300 custa US$ 36 por hora antes mesmo de você apertar o botão. E o caso mais didático continua sendo o DeepSeek V4 Flash da campanha anterior: na nuvem ele fez 86 por US$ 0,97 a rodada; em casa, 44,5 e ainda por cima mais caro por inferência. Às vezes a nuvem é melhor <strong>e</strong> mais barata.</p>
</li>
</ol>
<h2>Vale alugar 4x B300?<span class="hx:absolute hx:-mt-20" id="vale-alugar-4x-b300"></span>
    <a href="#vale-alugar-4x-b300" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pra uma pessoa escrevendo código com um agente de manhã e outro de tarde: não. A API resolve por poucos dólares o que o pod resolve por dezenas de dólares por hora.</p>
<p>Pra uma empresa que precisa de dado privado de verdade (código que não pode sair da VPN), checkpoint travado pra reprodutibilidade, ou carga batch contínua (milhares de revisões, classificações, análises por dia), aí o cálculo muda. O DeepSeek V4.1 em 4x B300 entrega qualidade de quase-fronteira com o dado em casa, e isso não se compra com assinatura de chat.</p>
<p>O que eu não compraria de novo sem medir antes é a premissa &ldquo;maior é melhor&rdquo;. Eu comecei essa campanha achando que o salto de 92,5 ia vir de um modelo maior. Veio do modelo certo rodando direito. O resto é VRAM queimada e uma história boa pra contar.</p>
<p>E tem mais um capítulo vindo, de hardware que não é datacenter: os testes com modelos locais na RTX 5090 e no Strix Halo, com um motor de inferência novo chamado Strata. Quando o protocolo terminar, sai o terceiro artigo.</p>
<p>E a pergunta de &ldquo;vale a pena&rdquo; tem uma resposta irritante de óbvia: depende de quantas pessoas vão usar ao mesmo tempo. É ela que eu respondo no próximo artigo: <a href="/2026/10/22/llm-benchmark-v4-can-my-team-fit-in-a-4x-b300-h200/">LLM Benchmark v4: can my team fit in a 4x b300/h200?</a>.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>modelos-locais</category><category>llms</category><category>hardware</category></item><item><title>LLM Benchmark v4: os top LLMs open source numa B300</title><link>https://www.akitaonrails.com/2026/10/19/llm-benchmark-v4-os-top-llms-open-source-numa-b300/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/10/19/llm-benchmark-v4-os-top-llms-open-source-numa-b300/</guid><pubDate>Mon, 19 Oct 2026 14:00:00 -0300</pubDate><description>&lt;p&gt;Nos dois últimos textos do benchmark v4 eu &lt;a href="https://www.akitaonrails.com/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/"&gt;refiz o teste do zero&lt;/a&gt;, com um app Rails sabotado de propósito em sete sprints, e &lt;a href="https://www.akitaonrails.com/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/"&gt;ranqueei 39 modelos&lt;/a&gt; por vigilância: seis empates no topo, um modelo de graça batendo metade do Claude. Depois &lt;a href="https://www.akitaonrails.com/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/"&gt;testei cinco modelos novos&lt;/a&gt;, Opus 5.5, GPT 6 sol e luna, MiMo V2.6 Pro e Grok 4.7: o Opus 5.5 fechou com 100 e se juntou ao empate no topo, o GPT 6 luna fez 95,5 por menos de um dólar a rodada, e o Grok 4.7 regrediu feio contra o próprio antecessor.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Nos dois últimos textos do benchmark v4 eu <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/">refiz o teste do zero</a>, com um app Rails sabotado de propósito em sete sprints, e <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/">ranqueei 39 modelos</a> por vigilância: seis empates no topo, um modelo de graça batendo metade do Claude. Depois <a href="/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/">testei cinco modelos novos</a>, Opus 5.5, GPT 6 sol e luna, MiMo V2.6 Pro e Grok 4.7: o Opus 5.5 fechou com 100 e se juntou ao empate no topo, o GPT 6 luna fez 95,5 por menos de um dólar a rodada, e o Grok 4.7 regrediu feio contra o próprio antecessor.</p>
<p>Faltava uma categoria que eu nunca tinha testado direito: os modelos open source grandes. Os que cabem na minha <a href="/2026/01/21/omarchy-3-setup-de-dual-gpus-com-amd-e-nvidia/">RTX 5090</a> de 32 GB ou no meu <a href="/2026/03/31/review-minisforum-ms-s1-max-amd-ai-max-395/">Strix Halo</a> com 61 GB utilizáveis pela GPU são fracos demais pra isso. Servem pra tarefa simples de agente, e nenhum modelo pequeno aguenta tarefa real de programação, muito menos um projeto complexo de software.</p>
<p>O Qwen 3.8 27B levou 706 minutos pra fechar o v4 no Strix e fez 80; o GLM-4.7-Flash local fez 24. Então nem tente.</p>
<p>Mas e se a gente forçar? O que modelos de tamanho médio, de 100 a 400 bilhões de parâmetros, conseguem fazer rodando numa única B300 alugada? Eu podia alugar quatro delas e rodar os modelos gigantes de 750 bilhões ou um trilhão, e não tenho certeza de que o custo-benefício vale. Os dados abaixo respondem.</p>
<blockquote>
  <p><strong>TL;DR:</strong> 14 modelos abertos, uma B300 de 288 GB na Runpod a uns 9 dólares por hora, mesmo protocolo v4 de sabotagem. Nenhum deles serve rápido do jeito que vem: o GLM 5.3 Flash decodificava a 10 tokens por segundo com a configuração padrão e a 141 depois de ajustado, 14 vezes mais só de flag. Dois modelos abertos, GLM 5.3 Flash e Qwen3.8 Flash-Next, fizeram 92,5, nível Claude Sonnet 5, e o Swift 1.5 27B fez 88, nível Opus 4.6. Nenhum chegou nos 100 da fronteira. O flagship de 397 bilhões fez 68,5 e deixou passar uma backdoor de admin, o DeepSeek V4 Flash fez 86 na nuvem e 44,5 servido por mim, e o Nemotron trapaceou num teste de regressão. A API em nuvem do mesmo modelo custa um dólar por rodada; o pod custa 218 dólares por dia. Pule pra <a href="#o-que-%c3%a9-uma-b300-e-o-que-%c3%a9-a-runpod">B300 e Runpod</a>, pro <a href="#nenhum-deles-serve-r%c3%a1pido-do-jeito-que-vem">ajuste de servidor</a>, pro <a href="#o-ranking">ranking</a>, pros <a href="#os-casos-interessantes">casos interessantes</a>, pra <a href="#a-que-dist%c3%a2ncia-da-fronteira">comparação com a fronteira</a>, pra <a href="#a-conta">conta</a> ou pra <a href="#vale-a-pena-ter-a-pr%c3%b3pria-infra">conclusão</a>.</p>

</blockquote>
<h2>O que é uma B300, e o que é a Runpod<span class="hx:absolute hx:-mt-20" id="o-que-é-uma-b300-e-o-que-é-a-runpod"></span>
    <a href="#o-que-%c3%a9-uma-b300-e-o-que-%c3%a9-a-runpod" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A <strong>B300</strong> é a GPU de datacenter da geração Blackwell Ultra da NVIDIA, anunciada em março de 2025. Cada placa tem <a href="https://developer.nvidia.com/blog/nvidia-blackwell-ultra-for-the-era-of-ai-reasoning/"target="_blank" rel="noopener">288 GB de memória HBM3e</a>, nove vezes a minha 5090, e uns 15 petaflops de computação densa em NVFP4, o formato de 4 bits que a Blackwell faz em hardware. É a placa que vai dentro do rack GB300 NVL72, 72 delas interligadas, que as empresas de IA compram aos milhares.</p>
<p>Sozinha, uma B300 custa mais que um apartamento. O que a torna acessível é alugar por hora.</p>
<p>A <a href="https://www.runpod.io/"target="_blank" rel="noopener"><strong>Runpod</strong></a> é um provedor de GPU em nuvem que aluga placas em &ldquo;pods&rdquo;, containers Linux com uma ou mais GPUs, cobrados por segundo. Você escolhe a placa, um template de imagem, sobe por SSH, e paga enquanto o pod está ligado, inclusive ocioso. A B300 custava uns <a href="https://www.runpod.io/pricing"target="_blank" rel="noopener">9 dólares por hora</a> na nuvem segura deles na semana do teste; uma H100 sai por 3 a 4. O disco do container é efêmero: terminou o pod, os 250 GB de pesos que você baixou somem, e você baixa de novo.</p>
<p>O pod que eu usei: uma B300 com 275 GiB segundo o <code>nvidia-smi</code> (os mesmos 288 GB nominais, em unidades binárias), 344 vCPUs, 4 TB de RAM no host, 700 GB de disco. O servidor de inferência foi o vLLM; o harness foi o mesmo OpenCode de todos os outros modelos do ranking, conectado por túnel SSH ao pod. O modelo roda lá; o código, os testes e os resultados ficam na minha máquina.</p>
<p>Caber na memória é a primeira peneira. Na B300 cabem os modelos de 100 a 400 bilhões de parâmetros quantizados em NVFP4, mais os de 27 a 35 bilhões em BF16. Ficam de fora o GLM 5.3 flagship de 753 bilhões, o DeepSeek V4.1 Flash de 750, o DeepSeek V4 Pro de 1,6 trilhão e o Kimi K3 de 2,8 trilhões. Pra esses, seriam quatro B300 ou mais, uns 36 dólares por hora.</p>
<h2>A metodologia<span class="hx:absolute hx:-mt-20" id="a-metodologia"></span>
    <a href="#a-metodologia" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O protocolo é o <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/">v4</a> de sempre: o modelo constrói um app Rails em sete sprints acumulados, e entre os sprints um revisor independente, isolado do modelo, injeta 14 sabotagens, de CVE real a regressão silenciosa de lógica e de teste, no código que o próprio modelo escreveu. A nota de 0 a 100 mede vigilância: quanto o modelo pega e conserta sem ser avisado (peso cheio), quanto conserta depois de um &ldquo;faça uma auditoria de segurança&rdquo; explícito no último sprint (40% do peso), e o que fica sem resolver (zero). Os tiers são A a partir de 83, B de 73 a 82, C de 51 a 72, D até 50.</p>
<p>Duas diferenças nesta rodada. A primeira é o revisor: os cinco modelos que terminaram antes do bloqueio foram revisados de ponta a ponta pelo Codex, como nas rodadas anteriores.</p>
<p>No meio da leva o serviço de segurança da OpenAI passou a recusar a operação de injeção e correção, com uma flag de risco cibernético, mesmo sendo código meu, em máquina minha, num benchmark com 46 modelos já pontuados pelo mesmo protocolo. Troquei o revisor pro Claude Opus 4.8 nos modelos restantes, com o mesmo plano de injeção, mesmo catálogo, mesma régua, e a proveniência de cada fronteira está gravada por sprint. O impacto esperado na nota é nenhum, porque os dois executam a mesma receita escrita.</p>
<p>A segunda é a admissão por velocidade, que é o assunto da próxima seção. Modelo que decodifica abaixo de 100 tokens por segundo nem entra na pista.</p>
<p>Além disso: o modelo aberto tem direito a até dois empurrões curtos por rodada pra defeito bobo (um import faltando, um ponto de entrada de teste errado), registrados como &ldquo;assistido&rdquo;. Falha de infraestrutura, driver, loader, parser, nunca é cobrada do modelo. E o pod rodava um modelo por vez, sem acesso ao workspace ou ao resultado de nenhum outro.</p>
<h2>Nenhum deles serve rápido do jeito que vem<span class="hx:absolute hx:-mt-20" id="nenhum-deles-serve-rápido-do-jeito-que-vem"></span>
    <a href="#nenhum-deles-serve-r%c3%a1pido-do-jeito-que-vem" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A primeira lição custou um dia. Baixei o <a href="https://huggingface.co/RedHatAI/GLM-5.3-Flash-NVFP4"target="_blank" rel="noopener">GLM 5.3 Flash</a>, 320 bilhões de parâmetros com 18 ativos, quantizado em NVFP4, 198 GB. Subi no vLLM com a configuração que &ldquo;funciona&rdquo;: serve, passa nos testes de chamada de ferramenta, responde. E decodificava a <strong>10 tokens por segundo</strong>, com a GPU a 10% de uso, 209 watts dos 1.100 que o pod libera.</p>
<p>Isso é inutilizável pra programar. Um agente de código gera dezenas de milhares de tokens por sprint; a 10 por segundo, um sprint de 20 minutos vira mais de quatro horas.</p>
<p>O mesmo checkpoint, mesmo contexto de 128 mil tokens, mesmo cache de KV em FP8, mesmo prompt de teste, trocando só as flags de compilação e modo: <strong>141 tokens por segundo</strong>. Catorze vezes mais rápido, zero mudança de precisão ou de pesos.</p>
<p>O culpado principal era o <code>--enforce-eager</code>, que desliga o <code>torch.compile</code> e a captura de CUDA graphs do vLLM, e que todo tutorial manda ligar &ldquo;pra subir mais rápido&rdquo;. Sobe mais rápido e serve 14 vezes mais devagar. A medição trocou essa flag junto com o modo <code>interactivity</code>, então eu não isolei a contribuição de cada uma.</p>
<p>Daí a regra de admissão: <strong>menos de 100 tokens por segundo eu considero inutilizável</strong>, e nenhum modelo entra no benchmark sem passar disso na mediana de duas sondagens quentes de 256 tokens, depois de uma fria. Pra não virar um buraco sem fundo, o ajuste é limitado: no máximo três configurações e 45 minutos de relógio por modelo, incluindo carga e compilação. E ajuste nunca pode trocar qualidade por velocidade: nada de encurtar contexto, baixar esforço de raciocínio ou quantizar mais pra bater o número.</p>
<p>Os ajustes que valeram pra todo mundo:</p>
<ul>
<li><strong>Instalar um CUDA que compile pra placa.</strong> A imagem padrão da Runpod vem com CUDA 12.8, cujo <code>nvcc</code> <a href="https://developer.nvidia.com/cuda-gpus"target="_blank" rel="noopener">não compila pra <code>compute_103a</code></a>, a capacidade de computação da B300. Sem o 12.9, os kernels NVFP4 nunca compilam.</li>
<li><strong>Nunca usar <code>--enforce-eager</code>.</strong> Deixar o vLLM compilar e capturar CUDA graphs é a maior vitória isolada.</li>
<li><strong><code>--performance-mode interactivity</code></strong>: otimizar pra latência de um fluxo só, que é o que um agente serial precisa, em vez de vazão agregada.</li>
<li><strong>Cache de KV em FP8 nos MoE grandes, cache de prefixo e prefill em pedaços em todos</strong>, e confirmados pelos contadores do Prometheus do vLLM em vez de assumidos: num prompt de 11 mil tokens, o servidor reaproveitou exatamente 8.576 tokens de prefixo a cada repetição.</li>
<li><strong>O parser certo de ferramenta e de raciocínio pra cada família.</strong> Parser errado faz chamada de ferramenta sumir em silêncio ou vazar o raciocínio na resposta.</li>
</ul>
<p>E os ajustes específicos que achei mais interessantes:</p>
<ul>
<li><strong>NVFP4 só roda no vLLM.</strong> Os checkpoints de 198 a 251 GB em FP4 nativo da Blackwell são a única forma de caber na placa, e llama.cpp e Ollama simplesmente não carregam esses formatos. Quem vive de GGUF não tem acesso a essa faixa.</li>
<li><strong>Decodificação especulativa nativa.</strong> O Qwen 3.8 27B foi de 92 pra 195 tokens por segundo com a cabeça MTP que o próprio checkpoint traz, prevendo três tokens por passo, mais <code>--language-model-only</code> pra descartar a torre de visão (medido em pods diferentes, então sem ablação controlada). O <a href="https://huggingface.co/meta-models/Muse-Glimmer-30B"target="_blank" rel="noopener">Muse Glimmer</a> chegou a 295 com o rascunhador DFlash leve que ele publica junto, 15 tokens especulados por passo. Só liguei onde existe um rascunhador oficial e onde a chamada de ferramenta continuou correta; pro Ornith existe um rascunhador publicado à parte, com taxa de aceitação desconhecida, então ficou desligado.</li>
<li><strong>O loader do CUDA 12.</strong> O flashinfer compila em JIT um kernel de MoE em NVFP4 que precisa do <code>libcudart.so.12</code>, e depois de instalar o CUDA 13 pro Nemotron a resolução de biblioteca quebrou. O sintoma parecia OOM; a causa era um <code>ld.so.conf</code>. Um script de reparo com evidência de <code>ldd</code> antes e depois resolveu, e o 397B passou a servir a 144 tokens por segundo.</li>
<li><strong>Um ambiente virtual por runtime.</strong> O Nemotron 3.5 Super VL exigiu um vLLM 0.32 próprio num venv separado, porque é o que o card oficial fixa, e esse build pede CUDA 13. Cada família de modelo é um caso bespoke: parser, quantização, cabeça de rascunho, versão de runtime e reparo de loader, tudo diferente.</li>
<li><strong>Um bug de parser que derrubava a última chamada.</strong> O parser de ferramenta Qwen do vLLM descartava o último parâmetro de uma chamada quando faltava a tag de fechamento do parâmetro mas a de função estava presente. Um reparo estreito, com 24 casos de teste, tirou esse ruído de serving da conta do modelo.</li>
</ul>
<p>Os argumentos exatos de cada modelo, os logs de sondagem e o livro-razão de cada rodada de ajuste estão no <a href="https://github.com/akitaonrails/llm-coding-benchmark/blob/master/docs/b300-serving-optimizations.md"target="_blank" rel="noopener">documento de otimizações de serving</a> e no <a href="https://github.com/akitaonrails/llm-coding-benchmark/blob/master/docs/runpod-b300-openweights-runbook.md"target="_blank" rel="noopener">runbook da B300</a> do repositório.</p>
<blockquote>
  <p>A velocidade é quase de graça, depois que você deixa o vLLM compilar. O trabalho real é descobrir, modelo por modelo, qual combinação de toolkit, parser, quantização e cabeça de rascunho aquele checkpoint exige. Eu dei 45 minutos pra cada um e precisei deles.</p>

</blockquote>
<h2>O ranking<span class="hx:absolute hx:-mt-20" id="o-ranking"></span>
    <a href="#o-ranking" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Nota v4 de vigilância, tier, tamanho em memória, velocidade de decodificação na sondagem de admissão (quente, um fluxo só) e o custo só do tempo de inferência dos sete sprints, a 9,09 dólares por hora. O custo exclui download, carga, compilação, ajuste e tempo ocioso; a conta de verdade vem mais abaixo.</p>
<table>
  <thead>
      <tr>
          <th style="text-align: right">#</th>
          <th>Modelo</th>
          <th style="text-align: right">v4</th>
          <th>Tier</th>
          <th style="text-align: right">Memória</th>
          <th style="text-align: right">tok/s</th>
          <th style="text-align: right">Minutos</th>
          <th style="text-align: right">Custo inferência</th>
          <th>Revisor</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">1</td>
          <td>GLM 5.3 Flash (NVFP4)</td>
          <td style="text-align: right"><strong>92,5</strong></td>
          <td>A</td>
          <td style="text-align: right">198 GB</td>
          <td style="text-align: right">142</td>
          <td style="text-align: right">145</td>
          <td style="text-align: right">US$ 21,96</td>
          <td>Codex</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>Qwen3.8 Flash-Next (NVFP4)</td>
          <td style="text-align: right"><strong>92,5</strong></td>
          <td>A</td>
          <td style="text-align: right">100 GB</td>
          <td style="text-align: right">195</td>
          <td style="text-align: right">80</td>
          <td style="text-align: right">US$ 12,04</td>
          <td>Codex → Claude</td>
      </tr>
      <tr>
          <td style="text-align: right">3</td>
          <td>Swift 1.5 27B</td>
          <td style="text-align: right"><strong>88,0</strong></td>
          <td>A</td>
          <td style="text-align: right">56 GB</td>
          <td style="text-align: right">203</td>
          <td style="text-align: right">64</td>
          <td style="text-align: right">US$ 9,71</td>
          <td>Codex</td>
      </tr>
      <tr>
          <td style="text-align: right">4</td>
          <td>ThinkingCap 3.8 27B</td>
          <td style="text-align: right"><strong>83,0</strong></td>
          <td>A</td>
          <td style="text-align: right">56 GB</td>
          <td style="text-align: right">189</td>
          <td style="text-align: right">76</td>
          <td style="text-align: right">US$ 11,47</td>
          <td>Codex → Claude</td>
      </tr>
      <tr>
          <td style="text-align: right">5</td>
          <td>Muse Glimmer 30B</td>
          <td style="text-align: right">81,0</td>
          <td>B</td>
          <td style="text-align: right">60 GB</td>
          <td style="text-align: right">295</td>
          <td style="text-align: right">23</td>
          <td style="text-align: right">US$ 3,54</td>
          <td>Codex → Claude</td>
      </tr>
      <tr>
          <td style="text-align: right">5</td>
          <td>Ornith 1.5 35B</td>
          <td style="text-align: right">81,0</td>
          <td>B</td>
          <td style="text-align: right">70 GB</td>
          <td style="text-align: right">317</td>
          <td style="text-align: right">161</td>
          <td style="text-align: right">US$ 24,39</td>
          <td>Codex → Claude</td>
      </tr>
      <tr>
          <td style="text-align: right">7</td>
          <td>Qwen 3.8 27B</td>
          <td style="text-align: right">80,5</td>
          <td>B</td>
          <td style="text-align: right">54 GB</td>
          <td style="text-align: right">195</td>
          <td style="text-align: right">192</td>
          <td style="text-align: right">US$ 29,11</td>
          <td>Codex</td>
      </tr>
      <tr>
          <td style="text-align: right">8</td>
          <td>Qwen3.5 397B (NVFP4)</td>
          <td style="text-align: right">68,5</td>
          <td>C</td>
          <td style="text-align: right">251 GB</td>
          <td style="text-align: right">140</td>
          <td style="text-align: right">54</td>
          <td style="text-align: right">US$ 8,22</td>
          <td>Codex → Claude</td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td>Nemotron 3.5 Super VL (NVFP4)</td>
          <td style="text-align: right">63,0</td>
          <td>C</td>
          <td style="text-align: right">70 GB</td>
          <td style="text-align: right">207</td>
          <td style="text-align: right">50</td>
          <td style="text-align: right">US$ 7,51</td>
          <td>Codex → Claude</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td>DeepSeek V4 Flash</td>
          <td style="text-align: right">44,5</td>
          <td>D</td>
          <td style="text-align: right">167 GB</td>
          <td style="text-align: right">153</td>
          <td style="text-align: right">37</td>
          <td style="text-align: right">US$ 5,59</td>
          <td>Codex</td>
      </tr>
      <tr>
          <td style="text-align: right">11</td>
          <td>GLM 4.7 Flash BF16</td>
          <td style="text-align: right">33,5</td>
          <td>D</td>
          <td style="text-align: right">60 GB</td>
          <td style="text-align: right">217</td>
          <td style="text-align: right">30</td>
          <td style="text-align: right">US$ 4,60</td>
          <td>Codex</td>
      </tr>
  </tbody>
</table>
<p>Três não têm nota: o <strong>Command A Plus</strong> da Cohere (218 bilhões, 25 ativos, W4A4) travou num loop reescrevendo o mesmo model 23 vezes, precisou de três empurrões e ainda deixou os testes sem rodar antes de o revisor ser bloqueado; o <strong>Nex N2.5 Mini</strong> rodou a 337 tokens por segundo e entregou Ruby inválido, migrations contraditórias e autenticação quebrada em duas tentativas, um resultado ruim válido de um servidor que funciona; e o <strong>Qwen3.5 122B</strong> era reserva condicional pro caso de o 397B não terminar, e o 397B terminou.</p>
<p>Os minutos são só de sprint, e os de Ornith incluem um sprint interrompido por infra. Flash-Next, Swift, ThinkingCap, Muse e Qwen 27B levaram um empurrão cada; GLM 4.7, dois; os outros, nenhum. A velocidade de sondagem é um número de admissão: a vazão de uma sessão real de código inclui prefill, ferramentas, testes e as escolhas do agente. E repare que os dois primeiros empatam na nota com perfis opostos: o GLM gastou 145 minutos e 22 dólares pra chegar nos mesmos 92,5 que o Qwen3.8 Flash-Next fez em 80 minutos e 12 dólares, com metade da memória.</p>
<h2>Os casos interessantes<span class="hx:absolute hx:-mt-20" id="os-casos-interessantes"></span>
    <a href="#os-casos-interessantes" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Qwen3.8 Flash-Next: o melhor dos abertos, por custo<span class="hx:absolute hx:-mt-20" id="qwen38-flash-next-o-melhor-dos-abertos-por-custo"></span>
    <a href="#qwen38-flash-next-o-melhor-dos-abertos-por-custo" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O <a href="https://huggingface.co/nvidia/Qwen3.8-Flash-Next-NVFP4"target="_blank" rel="noopener">Flash-Next</a> é, <a href="https://recipes.vllm.ai/Qwen/Qwen3.8-Flash-Next"target="_blank" rel="noopener">nas palavras da Qwen</a>, uma prévia da arquitetura do Qwen 4: 125 bilhões de parâmetros de modelo de linguagem com 6 bilhões ativos, mais uma tabela de embeddings de n-gramas de 51 bilhões que a Qwen diz que pode ser descarregada pra memória do host, mais uma cabeça MTP de 4. Quantizado em NVFP4 pela NVIDIA, ocupou uns 100 GB de placa (o checkpoint tem 133 GB em disco). Foi o único modelo da segunda leva a resolver todos os 14 itens: pegou o vazamento entre tenants sem aviso, pegou o item composto de integridade de teste, e escreveu por conta própria specs de isolamento por usuário, de modo que a IDOR plantada na API nem tinha como continuar verde. Com 195 tokens por segundo e 12 dólares de inferência, é o melhor custo-benefício desta tabela.</p>
<h3>GLM 5.3 Flash: o mesmo 92,5, três vezes mais caro<span class="hx:absolute hx:-mt-20" id="glm-53-flash-o-mesmo-925-três-vezes-mais-caro"></span>
    <a href="#glm-53-flash-o-mesmo-925-tr%c3%aas-vezes-mais-caro" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O GLM fez a mesma nota com uma arquitetura bem maior: 320 bilhões de parâmetros, 18 ativos, 198 GB mesmo em FP4. Resolveu os 14 itens, zero empurrão, revisado de ponta a ponta pelo Codex.</p>
<p>Só que levou 145 minutos e consumiu o dobro da memória pelo mesmo resultado. Na nuvem da Z.ai, o mesmo modelo fez 84,25 num plano fixo. Com o ruído de uma rodada só, que no meu histórico chega a nove pontos, a leitura mais segura é que os dois estão na mesma faixa.</p>
<h3>Swift 1.5 e ThinkingCap: dois fine-tunes de 27B no Tier A<span class="hx:absolute hx:-mt-20" id="swift-15-e-thinkingcap-dois-fine-tunes-de-27b-no-tier-a"></span>
    <a href="#swift-15-e-thinkingcap-dois-fine-tunes-de-27b-no-tier-a" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>As duas surpresas. O <a href="https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-27b"target="_blank" rel="noopener">Swift 1.5</a>, da UkisAI, e o <a href="https://huggingface.co/bottlecapai/ThinkingCap-Qwen3.8-27B"target="_blank" rel="noopener">ThinkingCap 3.8</a>, da BottleCap AI, são ajustes do Qwen 3.8 27B treinados pra pensar menos: o Swift anuncia até 58% menos tokens de raciocínio (na mediana do GPQA; no Terminal-Bench, 16%), o ThinkingCap uns 37% na média. Os dois cabem em 56 GB em BF16, rodam a uns 200 tokens por segundo com MTP, e fizeram 88 e 83.</p>
<p>O Swift ficou acima do Opus 4.6 da Anthropic. O Qwen 3.8 27B base, mesma arquitetura, fez 80,5 com 192 minutos; o Swift fez 88 em 64. O Swift pegou sabotagem mais cedo que o base; se foi por pensar menos, uma rodada de cada deixa de provar.</p>
<p>Uma ressalva de proveniência: o revisor registrou que o Swift leu mensagens de commit locais que revelavam regressões, o que enfraquece uma leitura literal de &ldquo;descoberta totalmente sem ajuda&rdquo;. E ele deixou um item sem resolver, um admin inativo ainda aceito com um teste vazio de guarda. Ainda assim, de todos os modelos desta tabela, é o que eu colocaria numa placa minha.</p>
<h3>Qwen3.5 397B: o flagship que deixou passar a backdoor<span class="hx:absolute hx:-mt-20" id="qwen35-397b-o-flagship-que-deixou-passar-a-backdoor"></span>
    <a href="#qwen35-397b-o-flagship-que-deixou-passar-a-backdoor" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O maior modelo da leva, 397 bilhões de parâmetros com 17 ativos, 251 GB de NVFP4 em 275 de placa, serviu a 140 tokens por segundo depois do reparo do loader e fez <strong>68,5</strong>, Tier C.</p>
<p>O caso que define a nota: a sabotagem número 6 é uma linha <code>admin? =&gt; admin || email.end_with?(&quot;@internal.example&quot;)</code>, uma escalação de privilégio por domínio de e-mail. O 397B deixou passar nos sprints normais, deixou passar no sprint 7 com o pedido explícito de auditoria de segurança, e <strong>escreveu um teste que passava, codificando a backdoor como comportamento esperado</strong>, no mesmo commit em que anunciou &ldquo;Brakeman: 0 warnings&rdquo;. Parâmetro não comprou vigilância.</p>
<h3>Nemotron 3.5 Super VL: trapaceou no teste<span class="hx:absolute hx:-mt-20" id="nemotron-35-super-vl-trapaceou-no-teste"></span>
    <a href="#nemotron-35-super-vl-trapaceou-no-teste" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O <a href="https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Super-VL-120B-A12B-NVFP4"target="_blank" rel="noopener">Nemotron 3.5 Super VL</a> da NVIDIA, 120 bilhões com 12 ativos, lançado dois dias antes de eu começar a testar e <a href="https://blogs.nvidia.com/blog/nemotron-3-5-super-vl/"target="_blank" rel="noopener">vendido pela NVIDIA</a> como o modelo aberto de agente mais rápido da categoria, com &ldquo;acurácia líder&rdquo; em tarefas multimodais, fez <strong>63</strong>. A sabotagem número 2 remove um link de navegação e o teste de regressão procura <code>have_link('Sign in')</code>. O Nemotron trocou o teste pra <code>have_button('Sign in')</code>, que passa no botão do formulário de login sem restaurar o link, e manteve a trapaça mesmo depois do sprint de revelação.</p>
<p>Também tende a pegar item um sprint atrasado. E foi o que exigiu um runtime próprio: vLLM 0.32 com CUDA 13 num ambiente separado.</p>
<h3>DeepSeek V4 Flash: 86 na nuvem, 44,5 na minha mão<span class="hx:absolute hx:-mt-20" id="deepseek-v4-flash-86-na-nuvem-445-na-minha-mão"></span>
    <a href="#deepseek-v4-flash-86-na-nuvem-445-na-minha-m%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O caso mais importante pra quem pensa em self-host. O <a href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash"target="_blank" rel="noopener">DeepSeek V4 Flash</a>, 284 bilhões com 13 ativos, fez <strong>86, Tier A, por 97 centavos</strong> pela API em setembro, e a versão 0731, exatamente a que eu baixei, fez 85 por 1,94. Os mesmos pesos públicos em FP4 e FP8 misto, servidos por mim na B300, fizeram <strong>44,5, Tier D</strong>: pegou 4 itens sem aviso, mais 5 na revelação, e deixou 5 sem resolver. Foi o mais rápido a terminar, 37 minutos, e o que menos vigiou.</p>
<p>A causa provável é divergência entre o checkpoint público e o que a DeepSeek serve, ou entre o stack de serving deles e o meu: parser, template de chat, modo de raciocínio, quantização. Eu segui o card oficial. O que isso prova é que o nome do modelo no Hugging Face não garante a qualidade da API hospedada, e que quem vai hospedar precisa validar antes de confiar.</p>
<h3>GLM 4.7 Flash: igual ao local, ou seja, ruim<span class="hx:absolute hx:-mt-20" id="glm-47-flash-igual-ao-local-ou-seja-ruim"></span>
    <a href="#glm-47-flash-igual-ao-local-ou-seja-ruim" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O GLM 4.7 Flash de 30 bilhões em BF16, a 217 tokens por segundo, fez 33,5. Em casa, em GGUF Q5, tinha feito 24. Precisou de dois empurrões, deixou nove itens sem resolver e entregou uma migration com erro de sintaxe. A diferença de nove pontos e meio cabe dentro do ruído de uma rodada; o que fica é que o modelo é fraco de qualquer jeito.</p>
<h3>O que apareceu em vários<span class="hx:absolute hx:-mt-20" id="o-que-apareceu-em-vários"></span>
    <a href="#o-que-apareceu-em-v%c3%a1rios" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Ornith, Muse Glimmer e o 397B compartilharam um defeito de higiene: rodaram o sprint até o fim com exit zero e esqueceram de commitar o próprio trabalho, deixando pro revisor fazer o checkpoint. Não entrou na nota, e num time de verdade seria o primeiro motivo de reclamação. E o aglomerado de 81 a 83, ThinkingCap, Ornith e Muse, tem um perfil consistente: pega injeção de SQL, vazamento entre tenants, XSS e segredo exposto com confiança, e deixa passar os itens silenciosos, controle de acesso quebrado, integridade de teste, índice faltando, agregação errada.</p>
<h2>A que distância da fronteira<span class="hx:absolute hx:-mt-20" id="a-que-distância-da-fronteira"></span>
    <a href="#a-que-dist%c3%a2ncia-da-fronteira" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Os três melhores abertos contra os melhores comerciais do mesmo ranking, com o custo e o tempo de cada rodada:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">v4</th>
          <th>Tier</th>
          <th style="text-align: right">Custo da rodada</th>
          <th style="text-align: right">Minutos</th>
          <th>Onde</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GPT-6 Astra</td>
          <td style="text-align: right">100,0</td>
          <td>A</td>
          <td style="text-align: right">US$ 30,55</td>
          <td style="text-align: right">100</td>
          <td>nuvem</td>
      </tr>
      <tr>
          <td>Claude Opus 5.5</td>
          <td style="text-align: right">100,0</td>
          <td>A</td>
          <td style="text-align: right">US$ 16,63</td>
          <td style="text-align: right">64</td>
          <td>nuvem</td>
      </tr>
      <tr>
          <td>GPT 5.6 terra</td>
          <td style="text-align: right">100,0</td>
          <td>A</td>
          <td style="text-align: right">US$ 9,52</td>
          <td style="text-align: right">80</td>
          <td>nuvem</td>
      </tr>
      <tr>
          <td>Grok 4.6</td>
          <td style="text-align: right">98,5</td>
          <td>A</td>
          <td style="text-align: right">US$ 13,00</td>
          <td style="text-align: right">67</td>
          <td>nuvem</td>
      </tr>
      <tr>
          <td>Claude Fable 5.1</td>
          <td style="text-align: right">95,5</td>
          <td>A</td>
          <td style="text-align: right">~US$ 51</td>
          <td style="text-align: right">133</td>
          <td>nuvem</td>
      </tr>
      <tr>
          <td><strong>GLM 5.3 Flash (NVFP4)</strong></td>
          <td style="text-align: right"><strong>92,5</strong></td>
          <td>A</td>
          <td style="text-align: right">US$ 21,96 só inferência</td>
          <td style="text-align: right">145</td>
          <td>B300</td>
      </tr>
      <tr>
          <td><strong>Qwen3.8 Flash-Next (NVFP4)</strong></td>
          <td style="text-align: right"><strong>92,5</strong></td>
          <td>A</td>
          <td style="text-align: right">US$ 12,04 só inferência</td>
          <td style="text-align: right">80</td>
          <td>B300</td>
      </tr>
      <tr>
          <td>Claude Sonnet 5</td>
          <td style="text-align: right">91,0</td>
          <td>A</td>
          <td style="text-align: right">~US$ 27</td>
          <td style="text-align: right">112</td>
          <td>nuvem</td>
      </tr>
      <tr>
          <td>Gemini 3.8 Flash high</td>
          <td style="text-align: right">90,5</td>
          <td>A</td>
          <td style="text-align: right">US$ 15,98</td>
          <td style="text-align: right">97</td>
          <td>nuvem</td>
      </tr>
      <tr>
          <td><strong>Swift 1.5 27B</strong></td>
          <td style="text-align: right"><strong>88,0</strong></td>
          <td>A</td>
          <td style="text-align: right">US$ 9,71 só inferência</td>
          <td style="text-align: right">64</td>
          <td>B300</td>
      </tr>
      <tr>
          <td>Claude Opus 4.6</td>
          <td style="text-align: right">87,5</td>
          <td>A</td>
          <td style="text-align: right">US$ 25,64</td>
          <td style="text-align: right">89</td>
          <td>nuvem</td>
      </tr>
  </tbody>
</table>
<p>A leitura: o melhor do open source que cabe numa B300 e que eu servi está <strong>um degrau abaixo do teto comercial e no mesmo nível do meio do Tier A</strong>. Diferenças de um ou dois pontos são ruído de uma rodada.</p>
<p>GLM 5.3 Flash e Qwen3.8 Flash-Next empatam com o Sonnet 5 e passam o Gemini 3.8 Flash e o Opus 4.6. Nenhum chega nos 100 que sete modelos comerciais fizeram, nem nos 98,5 do Grok 4.6. Sete pontos e meio separam o melhor aberto do teto, e no v4 cada ponto é uma sabotagem a menos pega sem aviso.</p>
<p>A diferença que importa é outra: previsibilidade. Entre os comerciais de ponta da tabela, o pior é 87,5, e o campo comercial inteiro também tem fundo de poço, o Mistral Large 3 fez 39. O campo aberto tem os mesmos 92,5 no topo e dois Tier D no fundo, com o DeepSeek fazendo 85 na nuvem e 44,5 na minha mão. Escolher um comercial de ponta é escolher um número que a API reproduz; escolher um aberto é apostar que o checkpoint, a quantização e o seu stack de serving reproduzem o número do card, e às vezes reproduzem.</p>
<h2>A conta<span class="hx:absolute hx:-mt-20" id="a-conta"></span>
    <a href="#a-conta" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Se a qualidade ainda fica abaixo da fronteira, o custo pelo menos é proporcional? Depende de onde você roda o modelo aberto.</p>
<p><strong>Na API em nuvem do próprio fornecedor, sim, e com folga.</strong> Uma rodada completa do v4 custou 97 centavos no DeepSeek V4 Flash, 1,17 dólar no Qwen 3.8 Flash, 1,03 no MiMo V2.5 Pro, todos Tier A na nuvem. Contra 9,52 a 30,55 dólares dos modelos de 100 pontos, é dez a trinta vezes mais barato por uma nota 8 a 14 pontos menor. Os preços de lista explicam: o <a href="https://docs.z.ai/guides/overview/pricing"target="_blank" rel="noopener">GLM 5.3 Flash</a> custa 15 centavos por milhão de tokens de entrada e 50 de saída; o <a href="https://api-docs.deepseek.com/quick_start/pricing"target="_blank" rel="noopener">DeepSeek Flash</a>, 15 a 30 centavos de entrada e 60 centavos a 1,20 de saída; o <a href="https://platform.claude.com/docs/en/about-claude/pricing"target="_blank" rel="noopener">Opus 5.5</a>, 4 e 20 dólares; o <a href="https://developers.openai.com/api/docs/pricing"target="_blank" rel="noopener">GPT-6 Astra</a>, 10 e 50.</p>
<p><strong>Na sua própria B300 alugada, não.</strong> O pod custa 9 dólares por hora ligado ou ocioso, <strong>218 por dia, uns 6.500 por mês</strong>. O tempo de modelo desta leva inteira, 14 modelos entre download, carga e sprints, somou 23 horas, uns 212 dólares a preço de pod; só os sprints foram 17 horas e 157 dólares.</p>
<p>Só que o pod cobra também o tempo em que nada roda. Eu coloquei 400 dólares de crédito na Runpod e sobraram 127: a leva inteira custou <strong>273 dólares</strong>, umas 30 horas de pod, incluindo armazenamento, quatro pods em sequência e sete horas ociosas numa madrugada em que a orquestração morreu e nada avisou. Quase 60 dólares a mais que o tempo de modelo, só de espera. A conta de ponto de equilíbrio do repositório: o pod só fica mais barato que a API a partir de umas <strong>6.500 rodadas por mês</strong>, 217 por dia, sustentadas. Um desenvolvedor sozinho ou um time pequeno nem chega perto.</p>
<p>E modelo contra modelo, lado a lado:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th>API em nuvem</th>
          <th>Hospedado por mim na B300</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>DeepSeek V4 Flash 0731</td>
          <td>85 (A) por US$ 1,94</td>
          <td>44,5 (D) por US$ 5,59 só de inferência</td>
      </tr>
      <tr>
          <td>Qwen 3.8 Flash (nuvem) e Flash-Next (B300), da mesma família</td>
          <td>86,5 (A) por US$ 1,17</td>
          <td>92,5 (A) por US$ 12,04</td>
      </tr>
      <tr>
          <td>Qwen 3.8 27B</td>
          <td>80 (B) de graça no Strix, em 706 minutos</td>
          <td>80,5 (B) por US$ 29,11, em 192 minutos</td>
      </tr>
  </tbody>
</table>
<blockquote>
  <p>A API em nuvem de um modelo aberto é dez a trinta vezes mais barata que a fronteira por um tier a menos. Hospedar o mesmo modelo numa B300 alugada é mais caro que a fronteira, e às vezes pior que a própria API dele.</p>

</blockquote>
<h2>Cabe um time na mesma placa?<span class="hx:absolute hx:-mt-20" id="cabe-um-time-na-mesma-placa"></span>
    <a href="#cabe-um-time-na-mesma-placa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Uma pergunta que eu fiz olhando a GPU a 10% de uso: esses modelos usam toda a computação do pod? Dava pra colocar um time inteiro na mesma B300?</p>
<p>Em princípio, sim, e é pra isso que o vLLM existe. O <a href="https://vllm.ai/blog/2023-06-20-vllm"target="_blank" rel="noopener">batching contínuo</a> agenda várias requisições no mesmo passo de decodificação, e o <a href="https://vllm.ai/blog/2023-06-20-vllm"target="_blank" rel="noopener">PagedAttention</a> guarda o cache de KV de cada sessão em blocos não contíguos, com menos de 4% de desperdício, justamente pra caber mais sessões na mesma memória. Um modelo de 27 bilhões em BF16 ocupa 56 GB e deixa uns 200 GB de cache de KV: são dezenas de sessões de agente com contexto de 128 mil tokens ao mesmo tempo. O 397B, com 251 GB de pesos, deixa 24, e aí cabem poucas.</p>
<p>O que não escala é a velocidade por pessoa. O meu teste rodou em <code>--performance-mode interactivity</code>, que otimiza a latência de um fluxo só, e os 200 tokens por segundo são desse fluxo. Com dez agentes decodificando ao mesmo tempo, a vazão agregada da placa sobe e a de cada um cai, e a decodificação especulativa que me deu os 295 do Muse Glimmer rende menos conforme a concorrência cresce: um <a href="https://huggingface.co/z-lab/Muse-Glimmer-30B-DFlash2"target="_blank" rel="noopener">rascunhador DFlash publicado pro Muse pelo Z Lab</a> reporta 3 a 4,6 vezes de ganho com uma sessão e 1,2 a 1,7 com 32.</p>
<p>Eu não medi concorrência nesta leva, então o que posso dizer é o contorno: um time de cinco a dez pessoas num modelo de 27 a 35 bilhões numa B300 é prático, e provavelmente cada um ainda fica acima dos 100 tokens por segundo. O mesmo time no 397B é inviável na placa, e no GLM 5.3 Flash de 198 GB fica apertado.</p>
<p>É nesse cenário, e só nele, que a conta do pod começa a fechar. Dez desenvolvedores rodando agente o dia inteiro num modelo de 27B gastariam na API, a um dólar por rodada de duas horas, uns 40 dólares por dia; o pod custa 218. Ainda perde. O que muda a conta é ter cem pessoas, ou ter a obrigação de que o código não saia da sua rede.</p>
<h2>Vale a pena ter a própria infra?<span class="hx:absolute hx:-mt-20" id="vale-a-pena-ter-a-própria-infra"></span>
    <a href="#vale-a-pena-ter-a-pr%c3%b3pria-infra" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pra desenvolvimento de software sério, com os dados desta leva, a resposta vem em três partes.</p>
<p><strong>Os modelos abertos de ponta são bons o suficiente.</strong> GLM 5.3 Flash, Qwen3.8 Flash-Next e Swift 1.5 27B são Tier A no meu teste, no nível do Sonnet 5 e acima do Opus 4.6. Isso era impensável em abril, quando <a href="/2026/04/05/testando-llms-open-source-e-comerciais-quem-consegue-bater-o-claude-opus/">só o Qwen 3.6 35B chegava perto do Opus</a>, e ainda a uma correção de distância. Pra quem aceita um tier abaixo do teto, eles servem pra trabalho de verdade, inclusive revisão de segurança, que é o que o v4 mede.</p>
<p><strong>Alugar uma B300 pra rodar eles é o jeito errado de usá-los.</strong> A API em nuvem do mesmo modelo custa um dólar por rodada e precisa de zero configuração. O pod custa 218 por dia, exige um dia de ajuste por família de modelo, e no caso do DeepSeek entregou um modelo pior do que a API dele. Só vale com uma obrigação de residência de dados, com um checkpoint que nenhuma nuvem serve, com carga sustentada de centenas de rodadas por dia, ou com necessidade de pesos fixados pra reprodutibilidade. Quatro B300 pra rodar os de 750 bilhões a um trilhão quadruplicam a conta sem evidência de que a nota chega nos 100: o 397B, maior modelo que eu testei, fez 68,5.</p>
<p><strong>E se for pra hospedar, hospede pequeno.</strong> O Swift 1.5 27B e o ThinkingCap em 56 GB, com MTP, a 200 tokens por segundo, são Tier A em hardware que dá pra comprar, uma placa profissional de 80 ou 96 GB em vez de uma de datacenter. É ali que o open source faz sentido pra uma empresa: um time inteiro numa placa, código dentro da rede, nota de Opus 4.6. Só olhe a licença antes: o Swift e o ThinkingCap saem com licenças próprias, e acima de um certo faturamento os dois exigem licença comercial. Os gigantes abertos continuam sendo coisa pra API.</p>
<p>Minha regra depois disso tudo: modelo comercial de ponta pra tarefa que não pode errar, API de modelo aberto pra volume, e placa própria só quando a lei ou o cliente exigem. O repositório com cada argumento de serving, cada log de sondagem, cada transcrição de revisor e a proveniência Codex ou Claude de cada fronteira está <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">público</a>, como sempre.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>modelos-locais</category><category>llms</category><category>hardware</category></item><item><title>Existem Linguagens Melhores pra programar com LLMs?</title><link>https://www.akitaonrails.com/2026/10/11/existem-linguagens-melhores-pra-programar-com-llms/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/10/11/existem-linguagens-melhores-pra-programar-com-llms/</guid><pubDate>Sun, 11 Oct 2026 21:00:00 -0300</pubDate><description>&lt;p&gt;Semana passada o DHH resolveu farmar engajamento com o formato mais preguiçoso que existe: converteu o Campfire, o app de chat dele, pra várias linguagens usando agentes de IA, e foi soltando os resultados de throughput um a um no X. Na série que ele postou, a versão em Rust saiu na frente das equivalentes em Elixir e Ruby. A thread inteira foi desenhada pra provocar, e provocou.&lt;/p&gt;
&lt;blockquote class="twitter-tweet" data-partner="tweetdeck"&gt;&lt;p lang="en" dir="ltr"&gt;Last conversion of the Campfire from my token stash goes to JavaScript/Express. As with the others, I'm sure you can find more to optimize. But this gives you a sense of what order of magnitude these options exist within with agent-led development. https://t.co/UUapL99SJE https://t.co/2H2NXfeZog&lt;/p&gt;</description><content:encoded><![CDATA[<p>Semana passada o DHH resolveu farmar engajamento com o formato mais preguiçoso que existe: converteu o Campfire, o app de chat dele, pra várias linguagens usando agentes de IA, e foi soltando os resultados de throughput um a um no X. Na série que ele postou, a versão em Rust saiu na frente das equivalentes em Elixir e Ruby. A thread inteira foi desenhada pra provocar, e provocou.</p>
<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="en" dir="ltr">Last conversion of the Campfire from my token stash goes to JavaScript/Express. As with the others, I'm sure you can find more to optimize. But this gives you a sense of what order of magnitude these options exist within with agent-led development. https://t.co/UUapL99SJE https://t.co/2H2NXfeZog</p>&mdash; DHH (@dhh) <a href="https://twitter.com/dhh/status/2107077808182976817">October 5, 2026</a></blockquote>
<p>Não vou defender ele dessa vez. Uma conversão única, feita por agente, sem ajuste fino nenhum, não mede linguagem: mede o quanto o modelo conhece os idiomas de cada stack. É rage bait e ele sabe. Dito isso, eu faço o mesmo de vez em quando, e metade dos críticos dele também, então somos todos hipócritas e segue o jogo.</p>
<p>E o ponto fraco da metodologia dele virou tópico por conta própria: várias pessoas notaram que a versão em Rust tinha passado por bem mais iterações de agente que as outras, ou seja, mais rodadas de otimização. O @kurtome respondeu na prática: pegou a versão em Elixir e subiu as requisições da página principal em 10x, com otimizações óbvias que nenhuma primeira conversão faz, tipo cache e pooling assíncrono de conexões de banco.</p>
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">@dhh Here you go https://t.co/gUtK7Z7zG7<br><br>got a 10x speed up on the Room page requests, and sped up all the other requests significantly as well. the biggest gains came from some no brainers: implement caching and pool the db connections with proper async https://t.co/mbp94q9N0s</p>&mdash; kurt (.com) (@kurtome) <a href="https://twitter.com/kurtome/status/2106902762076467681">October 5, 2026</a></blockquote>
<p>A comparação dele, então, não era &ldquo;Rust contra Elixir&rdquo;: era &ldquo;Rust depois de N rodadas de ajuste contra Elixir depois de uma&rdquo;. E isso escancara a verdade que a thread finge ignorar: <strong>nenhum software de verdade sai com meia dúzia de prompts</strong>. Codar com IA brilha quando um engenheiro experiente pilota o agente rumo ao objetivo dele, e isso significa dezenas de iterações, não três.</p>
<p>A parte boa é que a isca foi útil pra mim. Eu venho fazendo <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/">benchmarks de LLM</a> e <a href="/2026/10/10/qual-modelo-de-decisao-classificador-de-ia-tipo-jev-e-melhor/">benchmark de modelos de decisão</a>, mas nunca tinha medido, de forma reproduzível, a pergunta que essa thread fingia responder: <strong>faz diferença qual linguagem você escolhe quando quem escreve o código é um LLM?</strong> Minha resposta curta já estava dada em dois posts meus:</p>
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Pressure under load is not a trivial problem to solve from scratch and I recommend you do not attempt to. It's a solved problem already and all solutions converge to what Elixir already brings out of the box. So yes. I use Rust all the time, but if I had to solve high scalability problems (particularly high volume message queues), I would think of Elixir first.</p>&mdash; Fabio Akita (@AkitaOnRails) <a href="https://twitter.com/AkitaOnRails/status/2108587462595367353">October 9, 2026</a></blockquote>
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Language wars are tiresome. And the reality is simpler if you're doing AI assisted coding.<br><br>- system level (drivers, fs, daemons, etc): Rust. C++ is you're extending existing legacy<br>- windows only desktop apps: C#<br>- iOS/MacOS/iPadOS: Swift<br>- multi-OS: Rust/Tauri, Qt/C++, Flutter, Electron (pick your poison)<br>- simple websites: Node/Typescript/Bun/Deno<br>- highly scalable backend: Elixir, parts in Rust, parts in Go<br>- CLI tools: Rust<br><br>Everything else, by default, Rust. Unless it's an edge case.</p>&mdash; Fabio Akita (@AkitaOnRails) <a href="https://twitter.com/AkitaOnRails/status/2108590592263352540">October 9, 2026</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<h2>Não existe linguagem melhor, existe ferramenta certa<span class="hx:absolute hx:-mt-20" id="não-existe-linguagem-melhor-existe-ferramenta-certa"></span>
    <a href="#n%c3%a3o-existe-linguagem-melhor-existe-ferramenta-certa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aquela lista do post não é ranking, é mapa de terreno. Cada linguagem e cada framework foram desenhados pra um caso de uso, e nenhum cobre todos. Isso valia quando você escrevia cada linha na mão e continua valendo com agente. O LLM não muda a física do problema: ele só muda quem digita.</p>
<p>E o mapa vai além da linguagem. Sistema real tem infraestrutura em volta: Kubernetes quando a escala pede, SQLite por padrão porque a maioria dos apps nunca precisa de mais que isso, Postgres com pgBouncer quando precisa, Redis pra cache e chave-valor, RabbitMQ ou NATS pra fila. Escolher &ldquo;a stack&rdquo; no dia zero e achar que ela dura dez anos é fantasia. Não dura, e tudo bem.</p>
<p>Exemplo pessoal: web app novo, eu abro Ruby on Rails sem pensar duas vezes. É a solução mais completa de ponta a ponta que existe pra web, e com LLM escrevendo a maior parte do código, a produtividade do framework pesa ainda mais que a da linguagem. Conforme o sistema cresce, eu vou trocando as partes que pedem outra ferramenta: fila de alto volume sai do lado do Rails e vai pra algo da terra Erlang, começando por RabbitMQ, que já resolve a parte difícil de backpressure pra mim.</p>
<blockquote>
  <p>Nenhum software bom está pronto: ele cresce. O uso dita o que você substitui, reescreve e adiciona. A arquitetura final nunca é a do primeiro commit, e quem tenta acertar tudo no primeiro commit só gera documento morto.</p>

</blockquote>
<h2>A superstição dos tokens<span class="hx:absolute hx:-mt-20" id="a-superstição-dos-tokens"></span>
    <a href="#a-supersti%c3%a7%c3%a3o-dos-tokens" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A thread do DHH ressuscitou duas crenças que circulam desde que LLM virou ferramenta de trabalho:</p>
<ul>
<li><strong>&ldquo;Linguagem de script é melhor pra IA porque a sintaxe enxuta gasta menos tokens.&rdquo;</strong></li>
<li><strong>&ldquo;Linguagem fortemente tipada é melhor pra IA porque o compilador pega os erros, então precisa de menos teste e menos reparo.&rdquo;</strong></li>
</ul>
<p>As duas soam razoáveis e as duas são superstição até alguém medir. Eu apostava contra as duas, por experiência: compilador bom ajuda, mas não faz mágica, e concisão de sintaxe nunca foi o gargalo de um agente que lê e escreve arquivo o dia inteiro.</p>
<p>O que realmente separa projeto que anda de projeto que gira em círculo é disciplina de teste. Já escrevi que <a href="/2026/04/20/clean-code-para-agentes-de-ia/">TDD virou obrigação técnica, não filosofia</a>, e o benchmark deste texto é mais um dado na mesma direção. Não importa se você faz test-first ou test-after: importa que a suíte cresça junto com o código, que <a href="/2026/03/01/software-nunca-esta-pronto-4-projetos-a-vida-pos-deploy-e-por-que-one-shot-prompt-e-mito/">todo bug reportado por usuário vire teste de regressão</a> antes da correção, e que você nunca repita o mesmo erro duas vezes. Software sem usuário é software morto, então <a href="/2026/09/22/parem-de-inventar-desculpas-e-facam-mais-deploy-a-premissa-mudou/">release cedo, release sempre</a>, quebra rápido e conserta mais rápido ainda. IA fecha exatamente essa lacuna: o ciclo de reproduzir, testar e corrigir ficou barato. QA virou a habilidade mais valiosa do programador, muito acima de &ldquo;saber a sintaxe de Rust&rdquo;.</p>
<p>Disciplina vence compilador e vence linguagem. Essa era a minha hipótese. Foi medir.</p>
<h2>O benchmark<span class="hx:absolute hx:-mt-20" id="o-benchmark"></span>
    <a href="#o-benchmark" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Montei um experimento reproduzível, público no <a href="https://github.com/akitaonrails/vibe-coding-benchmarks"target="_blank" rel="noopener">repositório vibe-coding-benchmarks</a>, com os resultados por tentativa publicados em JSON e os rastros brutos fora do repo por contenção de credenciais. Não é um campeonato de linguagem, e o próprio design repete isso: é uma fotografia de uma tarefa real, medindo o que dá pra medir com honestidade.</p>
<h3>A tarefa<span class="hx:absolute hx:-mt-20" id="a-tarefa"></span>
    <a href="#a-tarefa" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Uma tarefa só, de propósito: manter um <strong>motor de livro-razão</strong> (ledger) multilocatário. O agente recebe um código v1 funcionando e precisa levá-lo a um contrato v2, com identidades por tenant, autorização, snapshots serializáveis, índice secundário único com troca de alias, journal com limite de capacidade, recuperação de grupos rasgados, checkpoint, migração de schema legado e IDs de retry duráveis. Não é FizzBuzz: é o tipo de sistema que exige invariante atravessando operações, exatamente onde LLM costuma tropeçar.</p>
<p>A correção é julgada por <strong>43 histórias de teste aplicadas depois da coleta</strong>, fora da vista do agente: as 27 públicas do T1 mais 16 ocultas. Passar é 43 de 43. As condições:</p>
<ul>
<li><strong>T0:</strong> contrato em prosa, exemplos de entrada e saída, um launcher funcionando. Sem suíte de testes.</li>
<li><strong>T1:</strong> o mesmo, mais 27 histórias públicas e um driver pra rodá-las.</li>
</ul>
<p>Cada tentativa tinha 15 minutos de orçamento, com no máximo duas continuações de 3 minutos. Na prática, nenhuma das 112 precisou de continuação.</p>
<h3>As linguagens e os modelos<span class="hx:absolute hx:-mt-20" id="as-linguagens-e-os-modelos"></span>
    <a href="#as-linguagens-e-os-modelos" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Sete linguagens em três estratos, com os toolchains pinados e o Rust em modo seguro:</p>
<ul>
<li><strong>Nativas tipadas:</strong> Rust (safe, pinado), Haskell (GHC pinado).</li>
<li><strong>VM tipadas:</strong> C# (com nullable analysis), Kotlin, TypeScript (<code>strict</code>, <code>noUncheckedIndexedAccess</code>, <code>exactOptionalPropertyTypes</code>).</li>
<li><strong>Dinâmicas de script:</strong> Python e Ruby, sem checker nenhum.</li>
</ul>
<p>Quatro configurações de modelo, todas por assinatura, sem fallback pago: <strong>Kimi K3</strong> (high), <strong>GLM 5.3</strong> via OpenCode (high), <strong>Claude Opus 5.5</strong> (medium) e <strong>Codex com gpt-6 Sol</strong> (medium). Cruzando tudo: 7 linguagens × 4 modelos × 2 condições × 2 repetições = <strong>112 tentativas</strong>.</p>
<h3>O que esse design não mede<span class="hx:absolute hx:-mt-20" id="o-que-esse-design-não-mede"></span>
    <a href="#o-que-esse-design-n%c3%a3o-mede" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Antes dos números, os freios, porque eles fazem parte do resultado. É uma tarefa só, com duas repetições por célula: amostra pequena por construção. Cobertura de tokens é parcial em alguns modelos (dado faltante não é zero). O harness mudou no meio da campanha em três épocas de instrumentação. E atrasos de provedor contaminam tempo de parede: uma das tentativas do Opus passou metade do relógio esperando liberação de cota. Todos os números abaixo são descritivos, e eu aponto onde eles não sustentam conclusão.</p>
<p>Tem um freio adicional, de propósito: <strong>o nível de iteração</strong>. Meu desenho mede o que dá pra alcançar em todas as linguagens com níveis parecidos de iteração, em orçamento curto, sem um humano ajustando depois. É fotografia do piso, não do teto. Qualquer uma das 112 implementações provavelmente melhora com mais rodadas de agente, e as quatro stacks de fila idem: o que eu publico é o que cada linguagem entrega &ldquo;de fábrica&rdquo; sob o mesmo esforço, não o máximo que um engenheiro paciente extrairia dela.</p>
<blockquote>
  <p><strong>Disclaimer obrigatório antes de citar qualquer número deste texto por aí:</strong> todos os resultados a seguir valem pra <strong>este</strong> benchmark, com <strong>esta</strong> tarefa, <strong>estes</strong> modelos, <strong>estes</strong> prompts e <strong>este</strong> hardware. O seu caso pode variar violentamente. Se a sua tarefa não se parece com um motor de livro-razão, se o seu modelo não é um destes quatro, se a sua fila não é a minha fila, os números não se transferem. O código, as tarefas, as notas e o passo a passo pra reproduzir estão todos no <a href="https://github.com/akitaonrails/vibe-coding-benchmarks"target="_blank" rel="noopener">repositório no GitHub</a>. E se você discordar de algum resultado e essa discordância for importante pra sua empresa ou pro seu projeto, a única atitude honesta é a que eu tive: <strong>pare de argumentar e rode o seu próprio benchmark.</strong></p>

</blockquote>
<h2>Resultado 1: em acerto, os modelos de fronteira empataram no teto<span class="hx:absolute hx:-mt-20" id="resultado-1-em-acerto-os-modelos-de-fronteira-empataram-no-teto"></span>
    <a href="#resultado-1-em-acerto-os-modelos-de-fronteira-empataram-no-teto" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><table>
  <thead>
      <tr>
          <th>Configuração</th>
          <th style="text-align: right">Corretas no prazo</th>
          <th style="text-align: right">Corretas no limite</th>
          <th style="text-align: right">Falhas</th>
          <th style="text-align: right">Sem nota</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Kimi K3 high</td>
          <td style="text-align: right">17</td>
          <td style="text-align: right">7</td>
          <td style="text-align: right">2</td>
          <td style="text-align: right">2</td>
      </tr>
      <tr>
          <td>GLM 5.3 high (OpenCode)</td>
          <td style="text-align: right">7</td>
          <td style="text-align: right">9</td>
          <td style="text-align: right">7</td>
          <td style="text-align: right">5</td>
      </tr>
      <tr>
          <td>Opus 5.5 medium</td>
          <td style="text-align: right">25</td>
          <td style="text-align: right">0</td>
          <td style="text-align: right">3 (interrupção de infra)</td>
          <td style="text-align: right">0</td>
      </tr>
      <tr>
          <td>Codex / Sol medium</td>
          <td style="text-align: right">28</td>
          <td style="text-align: right">0</td>
          <td style="text-align: right">0</td>
          <td style="text-align: right">0</td>
      </tr>
  </tbody>
</table>
<p>Leitura: Sol passou nas 28 tentativas elegíveis e o Opus nas 25 dele (as 3 falhas foram infraestrutura, não código). <strong>53 de 53 tentativas elegíveis corretas entre os dois.</strong> A tarefa, feita pra ser difícil, foi fácil demais pra separar os modelos de fronteira, e muito menos as linguagens: com todo mundo passando em tudo, não existe ranking de acerto pra publicar.</p>
<p>A diferença apareceu nos modelos mais fracos, e na direção que a minha hipótese previa: <strong>teste fornecido ajudou</strong>. Kimi e GLM, com a suíte pública em mãos (T1), entregaram 24 artefatos corretos contra 16 sem ela (T0). O Kimi, em particular, passou nas 14 tentativas com testes fornecidos. É descritivo, não causal, mas é o sinal mais limpo do benchmark inteiro: o que mudou o resultado não foi a linguagem, foi a presença de teste.</p>
<p>Por linguagem, dentro de cada modelo, o acerto ficou espalhado entre 1/4 e 4/4 sem padrão que se repita entre modelos. As três falhas semânticas que eu auditei a fundo são instrutivas: um C# do GLM e um Python do Kimi perderam a mesma história por violar a mesma invariante entre operações, e um Haskell do Kimi errou um caminho de checkpoint. Nenhuma falha era erro de tipo.</p>
<blockquote>
  <p>Onde o modelo errou, errou invariante de domínio: o tipo de erro que compilador nenhum pega, em linguagem tipada ou dinâmica. O mito de que tipagem forte poupa o trabalho de entender o problema morre aí.</p>

</blockquote>
<h2>Resultado 2: linguagem concisa não economizou token<span class="hx:absolute hx:-mt-20" id="resultado-2-linguagem-concisa-não-economizou-token"></span>
    <a href="#resultado-2-linguagem-concisa-n%c3%a3o-economizou-token" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui vai a tabela que mata a primeira superstição. Medianas por linguagem no Sol, quatro tentativas válidas por célula:</p>
<table>
  <thead>
      <tr>
          <th>Linguagem</th>
          <th style="text-align: right">Tempo mediano</th>
          <th style="text-align: right">Tokens medianos</th>
          <th style="text-align: right">Linhas finais do código</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>TypeScript</td>
          <td style="text-align: right">53 s</td>
          <td style="text-align: right">147,5 mil</td>
          <td style="text-align: right">~280</td>
      </tr>
      <tr>
          <td>Python</td>
          <td style="text-align: right">77 s</td>
          <td style="text-align: right">138,2 mil</td>
          <td style="text-align: right">~300</td>
      </tr>
      <tr>
          <td>C#</td>
          <td style="text-align: right">61 s</td>
          <td style="text-align: right">171,6 mil</td>
          <td style="text-align: right">~260</td>
      </tr>
      <tr>
          <td>Kotlin</td>
          <td style="text-align: right">65 s</td>
          <td style="text-align: right">170,6 mil</td>
          <td style="text-align: right">~210</td>
      </tr>
      <tr>
          <td>Haskell</td>
          <td style="text-align: right">75 s</td>
          <td style="text-align: right">184,7 mil</td>
          <td style="text-align: right">~265</td>
      </tr>
      <tr>
          <td>Ruby</td>
          <td style="text-align: right">82 s</td>
          <td style="text-align: right">185,6 mil</td>
          <td style="text-align: right">~380</td>
      </tr>
      <tr>
          <td>Rust</td>
          <td style="text-align: right">80 s</td>
          <td style="text-align: right">188,1 mil</td>
          <td style="text-align: right">~650</td>
      </tr>
  </tbody>
</table>
<p>Ruby, o mais conciso em linhas (pouco mais da metade do Rust), custou praticamente os mesmos tokens do Rust no Sol, e no Opus foi <strong>o mais caro de todos</strong>, uns 205 mil tokens de mediana contra 94 mil do C#. Os mais baratos foram TypeScript e Python no Sol, C#, Haskell e Kotlin no Opus. Se &ldquo;menos linhas de código fonte = menos tokens de LLM&rdquo; fosse lei, Ruby tinha que liderar de longe. Ficou no fim.</p>
<p>E a segunda superstição? Auditei os rastros procurando os ciclos de reparo guiados por compilador que a tipagem forte supostamente evita. Resultado: <strong>zero ciclos de reparo de erro de compilação</strong> nas tentativas auditadas do Opus, em Ruby, Rust e Haskell. O Rust não precisou de correção nenhuma vinda do compilador; o Haskell teve uma limpeza de warning; o Ruby gastou seus tokens extras em ajuste voluntário de performance. O modelo de fronteira quase sempre escreve código que compila de primeira, e o esforço real vai pra verificação, não pra apaziguar o compilador.</p>
<p>Um contraponto que fecha o caixão da tese &ldquo;barato é bom&rdquo;: as células de <strong>menor</strong> consumo de token do GLM foram as falhas. TypeScript T0 por 50 mil tokens parece eficiente até você ver que são dois starters inalterados porque o modelo estourou o limite de saída. Token baixo pode significar desistência precoce.</p>
<h2>Resultado 3: sob carga, todo mundo empatou na fila<span class="hx:absolute hx:-mt-20" id="resultado-3-sob-carga-todo-mundo-empatou-na-fila"></span>
    <a href="#resultado-3-sob-carga-todo-mundo-empatou-na-fila" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aí vem a pergunta do DHH: Rust &ldquo;ganha&rdquo; de Elixir e Ruby quando o assunto é throughput. Montei a trilha separada pra isso: quatro workers de fila contra um RabbitMQ real, escritos com ajuda de agente, cada um com seu idioma natural:</p>
<ul>
<li><strong>Elixir</strong> com OTP e Broadway</li>
<li><strong>Rust</strong> com Tokio e Lapin</li>
<li><strong>Rails</strong> com Bunny</li>
<li><strong>Ruby puro</strong> com Bunny (controle)</li>
</ul>
<p>Um gerador publicava 10 mil mensagens de 4 KB no RabbitMQ, a 200 por segundo, e cada worker consumia o mais rápido que conseguia, batendo os efeitos num coletor HTTP/SQLite com atraso nominal de 50 ms, limitado a 2 CPUs e 1 GB de RAM. Dois perfis de concorrência:</p>
<table>
  <thead>
      <tr>
          <th>Stack</th>
          <th style="text-align: right">Handlers</th>
          <th style="text-align: right">Efeitos/s</th>
          <th style="text-align: right">Corretas/10.000</th>
          <th style="text-align: right">Pico de memória</th>
          <th>Drenou?</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Elixir</td>
          <td style="text-align: right">8</td>
          <td style="text-align: right">94,8</td>
          <td style="text-align: right">10.000</td>
          <td style="text-align: right">135 MiB</td>
          <td>sim</td>
      </tr>
      <tr>
          <td>Rust</td>
          <td style="text-align: right">8</td>
          <td style="text-align: right">94,6</td>
          <td style="text-align: right">10.000</td>
          <td style="text-align: right">16 MiB</td>
          <td>sim</td>
      </tr>
      <tr>
          <td>Rails</td>
          <td style="text-align: right">8</td>
          <td style="text-align: right">92,7</td>
          <td style="text-align: right">10.000</td>
          <td style="text-align: right">79 MiB</td>
          <td>sim</td>
      </tr>
      <tr>
          <td>Ruby</td>
          <td style="text-align: right">8</td>
          <td style="text-align: right">92,5</td>
          <td style="text-align: right">10.000</td>
          <td style="text-align: right">38 MiB</td>
          <td>sim</td>
      </tr>
      <tr>
          <td>Elixir</td>
          <td style="text-align: right">64</td>
          <td style="text-align: right">84,8</td>
          <td style="text-align: right">7.915</td>
          <td style="text-align: right">161 MiB</td>
          <td>não</td>
      </tr>
      <tr>
          <td>Rust</td>
          <td style="text-align: right">64</td>
          <td style="text-align: right">88,2</td>
          <td style="text-align: right">8.151</td>
          <td style="text-align: right">23 MiB</td>
          <td>não</td>
      </tr>
      <tr>
          <td>Rails</td>
          <td style="text-align: right">64</td>
          <td style="text-align: right">88,5</td>
          <td style="text-align: right">8.108</td>
          <td style="text-align: right">87 MiB</td>
          <td>não</td>
      </tr>
      <tr>
          <td>Ruby</td>
          <td style="text-align: right">64</td>
          <td style="text-align: right">88,0</td>
          <td style="text-align: right">8.081</td>
          <td style="text-align: right">60 MiB</td>
          <td>não</td>
      </tr>
  </tbody>
</table>
<p>No perfil de 8 handlers, as quatro stacks entregaram a mesma vazão, 93 a 95 efeitos por segundo, e drenaram a fila inteira. O gargalo aparente era o coletor compartilhado (um lock em Python, um escritor SQLite), não as linguagens. No perfil de 64 handlers, todas deixaram backlog e estouraram o timeout do cliente em massa, então marquei essas células como não qualificadas: o protocolo forte, com coletor de group-commit e escada de 50 a 800 msg/s, está desenhado e não executado.</p>
<p>A única diferença que sobrou de pé nos números foi <strong>memória</strong>: Rust segurou o pico em 16 MiB onde a BEAM gastou 135. É uma vantagem real do Rust em densidade, com a ressalva de que pico de cgroup não é footprint de linguagem. Em vazão, que era a alegação da thread, empate técnico.</p>
<p>E o empate merece a leitura honesta: ele pode significar só que a minha pressão foi pouca. Com o coletor compartilhado segurando tudo em torno de 95 efeitos por segundo, qualquer stack capaz de mais que isso aparece como &ldquo;igual&rdquo;. O que esse teste mostra é onde estava o gargalo, não onde cada stack quebra. Pra achar o teto de cada uma eu precisaria do protocolo forte, com coletor de group-commit e escada de carga, que está desenhado e não executado. Até lá, &ldquo;todas as stacks performam igual&rdquo; é a conclusão errada; &ldquo;todas ficaram acima do que o meu teste conseguiu medir&rdquo; é a certa.</p>
<p>E a pergunta que interessava mais, &ldquo;o agente trabalha menos pra entregar um consumer de fila confiável em Elixir do que em Rust?&rdquo;, ficou sem resposta de propósito: essas quatro implementações foram escritas pra validar o ambiente, não como tentativa controlada de codificação. Comparar o esforço de IA entre Elixir e Rust exigiria a mesma matriz do ledger rodando na tarefa de fila. Está na lista.</p>
<h2>Afinal, a linguagem importa?<span class="hx:absolute hx:-mt-20" id="afinal-a-linguagem-importa"></span>
    <a href="#afinal-a-linguagem-importa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Com os dados na mesa, dá pra responder as três perguntas da thread:</p>
<p><strong>Existe linguagem melhor pra programar com LLM?</strong> Não apareceu nenhuma. Nos modelos de fronteira, acerto e esforço variaram menos entre linguagens do que entre modelos. Onde houve diferença de acerto, ela seguiu a presença de testes fornecidos, não a sintaxe. &ldquo;Nenhum ranking geral de linguagem se estabelece&rdquo; é a frase oficial do relatório, e é a frase correta.</p>
<p><strong>As teses de economia de token se sustentam?</strong> Nenhuma das duas. Concisão não economizou: Ruby custou tanto quanto Rust, ou mais. Tipagem forte não poupou reparo: não havia reparo de tipo pra poupar. O esforço dos modelos foi pra verificação e entendimento do contrato, e isso não tem linguagem.</p>
<p><strong>O DHH estava certo?</strong> No que ele mediu, ele mediu o que um agente entrega de graça em cada stack, sem ajuste, e chamou isso de veredito sobre linguagem. No meu teste, com carga real e medição honesta, as quatro stacks empataram em vazão no regime estável, e só a memória diferenciou o Rust. Se a thread dele prova alguma coisa, prova que conversão por agente mede o modelo, não a linguagem.</p>
<p>Minhas apostas da introdução saíram de pé: teste e disciplina são a alavanca, o compilador é coadjuvante, e a ferramenta certa depende do problema. Web app novo continua sendo Rails na minha mão, fila pesada continua sendo território Erlang, sistema baixo nível continua sendo Rust, e o LLM escreve qualquer uma delas com a mesma competência. Quem passou a semana brigando pela linguagem favorita no X brigou por nada.</p>
<p>E a minha prática diária conta a mesma história. Eu tenho viés pessoal pra Rust e mesmo assim já publiquei mais de 30 projetos open source em todo tipo de stack: o <a href="https://github.com/akitaonrails/ai-memory"target="_blank" rel="noopener">ai-memory</a> é Rust, o <a href="https://github.com/akitaonrails/FrankMD"target="_blank" rel="noopener">FrankMD</a> é Ruby on Rails, o <a href="https://github.com/akitaonrails/ai-memory-web"target="_blank" rel="noopener">ai-memory-web</a> e o <a href="https://github.com/akitaonrails/ai-jail-web"target="_blank" rel="noopener">ai-jail-web</a> são Node.js. Em nenhum deles eu senti diferença relevante que viesse da stack: os ganhos foram parecidos, os erros também, e os erros eram sempre compreensíveis. Cada erro virou melhoria de invariante, de regra, de skill. Nunca virou troca de linguagem.</p>
<p>Então esquece &ldquo;economia de token&rdquo; e &ldquo;superstição de tipagem&rdquo;. Faz engenharia de software de verdade: escolhe a ferramenta certa pro teu problema específico, aplica técnica de engenharia correta, e qualquer agente razoável vai performar mais ou menos igual. E para de gastar tempo discutindo rage bait de guerra de linguagem na internet. Seja engenheiro de software de verdade e faça engenharia de verdade. É só isso.</p>
<p>Os dados por tentativa, a metodologia completa e os limites de evidência estão no <a href="https://github.com/akitaonrails/vibe-coding-benchmarks"target="_blank" rel="noopener">repositório</a>. Se você rodar a matriz com outra tarefa e achar um ranking que eu não achei, me mostra.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>linguagens-de-programacao</category><category>llms</category><category>elixir-e-erlang</category></item><item><title>Qual modelo de decisão/classificador de IA tipo Jev é melhor?</title><link>https://www.akitaonrails.com/2026/10/10/qual-modelo-de-decisao-classificador-de-ia-tipo-jev-e-melhor/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/10/10/qual-modelo-de-decisao-classificador-de-ia-tipo-jev-e-melhor/</guid><pubDate>Sat, 10 Oct 2026 12:00:00 -0300</pubDate><description>&lt;p&gt;Semana passada publiquei &lt;a href="https://www.akitaonrails.com/2026/10/03/entendendo-o-hype-do-jev-pra-que-serve/"&gt;um texto longo sobre o Jev&lt;/a&gt;, o classificador hospedado da TypeSafe que virou febre em setembro. O resumo daquele texto: o Jev é um classificador, coisa que existe há décadas, e o espanto de &amp;ldquo;193x mais rápido&amp;rdquo; só existe porque muita gente vinha usando LLM de chat como classificador caro e lento. Reproduzi o ensaio &lt;em&gt;O aluno que marca a letra A&lt;/em&gt;, do Paulo Câmara, apresentei as alternativas abertas Clef e Laya, e pra comparar os modelos lado a lado me apoiei no &lt;a href="https://huggingface.co/spaces/multimodalart/jev-decision-index"target="_blank" rel="noopener"&gt;Decision Index&lt;/a&gt;, um ranking público que já existia.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Semana passada publiquei <a href="/2026/10/03/entendendo-o-hype-do-jev-pra-que-serve/">um texto longo sobre o Jev</a>, o classificador hospedado da TypeSafe que virou febre em setembro. O resumo daquele texto: o Jev é um classificador, coisa que existe há décadas, e o espanto de &ldquo;193x mais rápido&rdquo; só existe porque muita gente vinha usando LLM de chat como classificador caro e lento. Reproduzi o ensaio <em>O aluno que marca a letra A</em>, do Paulo Câmara, apresentei as alternativas abertas Clef e Laya, e pra comparar os modelos lado a lado me apoiei no <a href="https://huggingface.co/spaces/multimodalart/jev-decision-index"target="_blank" rel="noopener">Decision Index</a>, um ranking público que já existia.</p>
<p>Ranking de terceiro é útil, mas eu queria pôr a mão na massa. Então montei meu próprio benchmark, com casos meus, metade em português, e rodei os modelos abertos duas vezes: no meu <a href="/2026/03/31/review-minisforum-ms-s1-max-amd-ai-max-395/">home server com Strix Halo</a>, o mesmo Ryzen AI Max+ 395 que uso pra testar LLM local, via ROCm, e de novo numa RTX 5090 via CUDA. Os hospedados (Jev, os dois Clef da Cloudflare, o OpenAI Decisions e o Microsoft Decision-1 via OpenRouter) rodaram pela API deles. Tudo, incluindo os casos, as respostas brutas e os scripts de pontuação, está público no <a href="https://github.com/akitaonrails/jev-docs-benchmarks"target="_blank" rel="noopener">repositório do benchmark</a>.</p>
<blockquote>
  <p><strong>TL;DR:</strong> o topo agora tem dois, ambos de pesos abertos. O <strong>Perplexity Decider 1.1 27B</strong> e o recém-lançado <strong>Decision 3.0</strong> (vLLM Semantic Router) empataram em <strong>99,4%</strong> nos casos compactos, com 100% em português, e rótulos idênticos em todas as 1.024 classificações do benchmark. O preço: uns 49 GB de pesos e mais de um segundo por decisão. Na nuvem, o <strong>Microsoft Decision-1</strong> empatou com o <strong>Jev</strong> em 97,6% custando um terço: é o hospedado mais barato que eu medi, e o primeiro candidato a avaliar. O Jev responde mais rápido e erra diferente. O <strong>OpenAI Decisions</strong> estreou empatado com o melhor 4B local, o Jebadiah, e tem a menor latência hospedada. O <strong>Julia-1</strong>, o menor e mais rápido de todos (12 ms), acertou no nível da moeda: de fábrica, não serve. E a segunda passada, agora numa <strong>RTX 5090</strong>: os modelos até 9B aceleram de 2× a 10×, o Jebadiah 4B cai pra 39 ms, mais rápido que qualquer hospedado, e os dois campeões de 27B, com uns 49 GB de pesos, nem cabem nos 32 GB da placa. Pule pra <a href="#a-tabela-completa">tabela</a>, pro <a href="#quanto-custa-em-e-mails-de-suporte">custo em e-mails de suporte</a>, pra <a href="#qual-modelo-em-qual-situa%c3%a7%c3%a3o">qual usar em qual situação</a>, pra <a href="#qu%c3%a3o-dif%c3%adcil-%c3%a9-rodar-os-melhores-abertos-na-sua-m%c3%a1quina">quão difícil é rodar local</a>, pras <a href="#destaques-e-pegadinhas">pegadinhas</a> ou pras duas cozinhas do <a href="#rocm-x-cuda-a-mesma-receita-em-duas-cozinhas">ROCm x CUDA</a>.</p>

</blockquote>
<h2>Como eu testei<span class="hx:absolute hx:-mt-20" id="como-eu-testei"></span>
    <a href="#como-eu-testei" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A ideia central foi medir mais do que &ldquo;quem acerta mais&rdquo;. Modelo de decisão tem objetivo de projeto, e comparar um encoder de 322 milhões de parâmetros feito pra rodar em dispositivo fraco com um serviço hospedado de tamanho não divulgado só por porcentagem de acerto é injusto com os dois. Então medi acerto, latência, custo e comportamento sob estresse, e no fim separo as recomendações por situação.</p>
<h3>Os dois conjuntos de casos<span class="hx:absolute hx:-mt-20" id="os-dois-conjuntos-de-casos"></span>
    <a href="#os-dois-conjuntos-de-casos" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Montei dois conjuntos de testes, congelados em git antes de qualquer inferência, com o hash do dataset gravado junto com as respostas. Nenhum modelo recebe a resposta esperada, a justificativa ou o identificador do caso. Só o texto, as instruções e as opções.</p>
<p>O <strong>conjunto v1</strong> tem 13 casos de uso operacionais, em inglês, cada um com uma política fictícia explícita:</p>
<ul>
<li>severidade de ticket de suporte</li>
<li>roteamento de suporte</li>
<li>política de reembolso</li>
<li>escalação de incidente</li>
<li>aprovação de ferramenta (um agente pode ou não executar tal ação)</li>
<li>fraude por e-mail</li>
<li>tipo de documento</li>
<li>suporte de evidência</li>
<li>relevância de busca</li>
<li>moderação</li>
<li>roteamento de pedido</li>
<li>qualificação de lead</li>
<li>triagem por limiar numérico</li>
</ul>
<p>São 10 cenários por caso de uso, cada um apresentado de quatro formas: original, opções em ordem invertida, opções com nomes opacos (c0, c1, c2) e original mais um comentário de &ldquo;revisor&rdquo; sugerindo a resposta errada, que a instrução manda ignorar. Dá 520 classificações por modelo. Somam-se 24 sondagens de probabilidade em situações sem informação nenhuma (moeda honesta, dado de seis lados), onde a resposta certa é matemática.</p>
<p>O <strong>conjunto v2</strong> foi feito pra cobrir o que o v1 deixa de fora: semântica comum e português. São 7 tarefas, com 12 cenários cada, e cada cenário escrito em inglês e em português brasileiro com a mesma resposta e a mesma ordem de opções:</p>
<ul>
<li>sentimento (autor versus citação, negação, sarcasmo)</li>
<li>intenção atual (pedido retirado, ações concorrentes, hipótese)</li>
<li>implicação lógica (quantificadores, fato ausente, ordem temporal)</li>
<li>relevância de busca (tudo, parte ou nada do que foi pedido)</li>
<li>tratamento de dados sensíveis (segredo fictício versus menção, redação, revogação)</li>
<li>status atual de incidente (ordem da linha do tempo, verificado versus não verificado)</li>
<li>política por limiar (limites inclusivos, unidades, E/OU com valor faltando)</li>
</ul>
<p>Cada par roda em três condições:</p>
<ul>
<li><strong>compacta</strong>: só o registro e a regra</li>
<li><strong>com exemplos</strong>: um exemplo resolvido por classe, fixo e igual pra todos</li>
<li><strong>com distratores</strong>: dez notas irrelevantes de arquivo antes do registro que importa, pra estressar contexto</li>
</ul>
<p>Dá 504 classificações por modelo.</p>
<blockquote>
  <p>Os casos foram escritos com ajuda de IA e revisados contra as políticas, sem anotação humana independente. É um benchmark sintético e pequeno: 130 famílias de cenário no v1 e 84 no v2. As variantes são correlacionadas, então 520 respostas são 130 cenários vistos de quatro jeitos. Trate os números como fotografia desses casos, e teste com os seus antes de decidir.</p>

</blockquote>
<h3>Os 23 competidores<span class="hx:absolute hx:-mt-20" id="os-23-competidores"></span>
    <a href="#os-23-competidores" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Cinco rodaram na nuvem, pela API oficial: o <strong>Jev</strong> (versão 1.13.0, da TypeSafe), o <strong>Clef</strong> (27B, Cloudflare Workers AI), o <strong>Clef-flash</strong> (9B, idem), o <strong>OpenAI Decisions</strong> (o alias <code>gpt-6-luna</code>, em beta público) e o <strong>Microsoft Decision-1</strong> (9B, pós-treinado do Qwen3.5-9B, servido via OpenRouter em Azure). Os outros dezoito rodaram no Strix Halo, via ROCm, e depois de novo numa RTX 5090, via CUDA, com os pesos fixados por hash de commit no Hugging Face, dentro de container Docker. Os três da primeira leva (Laya, Laya typed e Clef-flash) dividiram um container; os demais rodaram um por vez, com o Julia-1 medido duas vezes, em GPU e em CPU. O servidor via 64 GiB de memória endereçável pela GPU.</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Tamanho nominal</th>
          <th>Origem</th>
          <th>Onde rodou</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Jev 1.13.0</td>
          <td style="text-align: right">não divulgado</td>
          <td>TypeSafe, proprietário</td>
          <td>API</td>
      </tr>
      <tr>
          <td>OpenAI Decisions (<code>gpt-6-luna</code>)</td>
          <td style="text-align: right">não divulgado</td>
          <td>OpenAI, proprietário, beta</td>
          <td>API</td>
      </tr>
      <tr>
          <td>Microsoft Decision-1</td>
          <td style="text-align: right">9B</td>
          <td>Microsoft, proprietário</td>
          <td>API (OpenRouter)</td>
      </tr>
      <tr>
          <td>Clef</td>
          <td style="text-align: right">27B</td>
          <td>Cloudflare, pesos abertos</td>
          <td>API</td>
      </tr>
      <tr>
          <td>Clef-flash</td>
          <td style="text-align: right">9B</td>
          <td>Cloudflare, pesos abertos</td>
          <td>API e local</td>
      </tr>
      <tr>
          <td>Perplexity Decider 1.1 27B</td>
          <td style="text-align: right">27B</td>
          <td>Perplexity, Apache 2.0</td>
          <td>local</td>
      </tr>
      <tr>
          <td>Decision 3.0 (d3)</td>
          <td style="text-align: right">27B</td>
          <td>vLLM Semantic Router, Apache 2.0</td>
          <td>local</td>
      </tr>
      <tr>
          <td>Decision 3.0 Edge</td>
          <td style="text-align: right">0,6B</td>
          <td>vLLM Semantic Router, Apache 2.0</td>
          <td>local</td>
      </tr>
      <tr>
          <td>Jebadiah 4B v2</td>
          <td style="text-align: right">4B</td>
          <td>Frontier Infra, Apache 2.0</td>
          <td>local</td>
      </tr>
      <tr>
          <td>Kev 0.8B / 4B / 9B</td>
          <td style="text-align: right">0,8B / 4B / 9B</td>
          <td>Jared Palmer, Apache 2.0</td>
          <td>local</td>
      </tr>
      <tr>
          <td>Mapika Decider 4B</td>
          <td style="text-align: right">4,2B</td>
          <td>Mapika, Apache 2.0</td>
          <td>local</td>
      </tr>
      <tr>
          <td>Eikos 4B</td>
          <td style="text-align: right">4B</td>
          <td>Caio Vicentino, MIT, treinado em EN e PT</td>
          <td>local</td>
      </tr>
      <tr>
          <td>Simple-Jev + Qwen3.5 4B</td>
          <td style="text-align: right">4B</td>
          <td>Featherless, servidor de leitura de tokens sobre modelo comum</td>
          <td>local</td>
      </tr>
      <tr>
          <td>Laya / Laya typed-decisions</td>
          <td style="text-align: right">421M</td>
          <td>Convai Innovations, encoder ModernBERT</td>
          <td>local</td>
      </tr>
      <tr>
          <td>Laya multilingual</td>
          <td style="text-align: right">322M</td>
          <td>Convai Innovations, encoder mmBERT</td>
          <td>local</td>
      </tr>
      <tr>
          <td>Julia-1</td>
          <td style="text-align: right">144M</td>
          <td>Supersonic Labs, Apache 2.0, encoder mmBERT</td>
          <td>local, GPU e CPU</td>
      </tr>
      <tr>
          <td>GLiNER2.5-Decide / multi-Decide</td>
          <td style="text-align: right">340M / 287M</td>
          <td>Fastino, Apache 2.0</td>
          <td>local</td>
      </tr>
  </tbody>
</table>
<p>A ordem aí em cima é só organizacional, hospedados primeiro e locais por família. O ranking de verdade está na <a href="#a-tabela-completa">tabela de resultados</a>.</p>
<p>Todos receberam exatamente o mesmo texto, as mesmas instruções e as mesmas opções, sem prompt ajustado por modelo e sem nenhum ajuste depois de ver resultado (o Simple-Jev usa a política de prompt fixa do próprio servidor). A exceção é o <strong>GLiNER</strong>, cuja API nativa recebe rótulos em vez de distribuições de probabilidade. Ele entra numa trilha separada, só no v2, com mapeamento explícito e sem métricas de calibração inventadas.</p>
<p>O <strong>Simple-Jev</strong> merece explicação. Ele é um servidor que pega um LLM comum (aqui o Qwen3.5 4B, sem nenhum treino de decisão) e lê a probabilidade dos tokens de resposta em vez de gerar texto. É a linha de base: se um modelo &ldquo;de decisão&rdquo; perde pra isso, o treino especializado não comprou nada.</p>
<p>Duas observações de protocolo. O <strong>OpenAI Decisions</strong> responde por um endpoint nativo de decisões tipadas, e o alias que a API devolveu não é um snapshot imutável: a OpenAI pode trocar o peso por trás do nome, como a Cloudflare faz com o Clef-flash. E o <strong>Perplexity Decider</strong> não é um LLM de chat comum: ele tem uma cabeça de decisão separada, com atenção não-causal e uma temperatura de calibração salva nos pesos. Um servidor de chat genérico não reproduz o comportamento dele. O <strong>Microsoft Decision-1</strong> fala SystemOne nativo pela API de decisões do OpenRouter, e o identificador servido é datado (<code>microsoft-decision-1-20261009</code>), ou seja, também não é peso imutável. Ele não aparece no catálogo de modelos de texto do OpenRouter: pra achar, tem que filtrar pela modalidade <code>decisions</code>. O <strong>Decision 3.0</strong> é a família nova do projeto vLLM Semantic Router, Apache 2.0, derivada de Qwen, com seis checkpoints (d3, flash, mini, nano, lite, edge) e SystemOne nativo. Eu testei o flagship (d3) e o menor (d3-edge); os quatro do meio ficam pra outra rodada.</p>
<h3>O que foi medido<span class="hx:absolute hx:-mt-20" id="o-que-foi-medido"></span>
    <a href="#o-que-foi-medido" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><ul>
<li>Acerto por tarefa, por língua e por condição, sempre em cima das probabilidades por opção que o modelo devolve, ignorando o campo de &ldquo;confiança&rdquo; do fornecedor.</li>
<li>Brier e ECE pra calibração.</li>
<li>Latência mediana e p95 vista pelo cliente, incluindo a rede: WAN pros hospedados, LAN pros locais. Os locais foram medidos nas duas implantações, Strix com ROCm e 5090 com CUDA. São observações de implantação completa, máquina inteira de cada lado; a comparação entre elas não isola o efeito de trocar só o backend.</li>
<li>Tokens de entrada reportados pela API, valorados pela tabela de preços de 10 de outubro, antes de qualquer franquia.</li>
<li>Intervalos de confiança por bootstrap sobre famílias de cenário, em vez de respostas individuais.</li>
</ul>
<p>Custo local eu deixei de medir. Energia, amortização do hardware e manutenção ficaram de fora, então modelo local aparece como &ldquo;não medido&rdquo;, porque &ldquo;zero&rdquo; seria mentira.</p>
<h2>A tabela completa<span class="hx:absolute hx:-mt-20" id="a-tabela-completa"></span>
    <a href="#a-tabela-completa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A coluna principal é o acerto nos 168 casos compactos do v2 (84 em inglês, 84 em português). A coluna do v1 usa os 130 cenários originais. Latências são medianas vistas pelo cliente ao longo das 504 chamadas do v2, nas duas implantações locais: ROCm no Strix Halo, CUDA na RTX 5090. Os hospedados não têm hardware meu pra trocar, e os dois 27B não cabem nos 32 GB da 5090. O custo é o valor de lista por 10 mil decisões compactas, calculado pelos tokens que a API reportou.</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Compacto EN / PT-BR</th>
          <th style="text-align: right">Compacto combinado</th>
          <th style="text-align: right">v1 originais</th>
          <th style="text-align: right">Latência ROCm (Strix)</th>
          <th style="text-align: right">Latência CUDA (5090)</th>
          <th style="text-align: right">10 mil decisões</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Perplexity Decider 27B</td>
          <td style="text-align: right">98,8% / 100,0%</td>
          <td style="text-align: right"><strong>99,4%</strong></td>
          <td style="text-align: right">99,2%</td>
          <td style="text-align: right">1.547 ms (LAN)</td>
          <td style="text-align: right">não cabe (49 GB)</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Decision 3.0 (27B)</td>
          <td style="text-align: right">98,8% / 100,0%</td>
          <td style="text-align: right"><strong>99,4%</strong></td>
          <td style="text-align: right">99,2%</td>
          <td style="text-align: right">1.420 ms (LAN)</td>
          <td style="text-align: right">não cabe (48,6 GB)</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Jev</td>
          <td style="text-align: right">97,6% / 97,6%</td>
          <td style="text-align: right">97,6%</td>
          <td style="text-align: right">96,2%</td>
          <td style="text-align: right">255 ms (WAN)</td>
          <td style="text-align: right">–</td>
          <td style="text-align: right">US$ 0,19</td>
      </tr>
      <tr>
          <td>Microsoft Decision-1</td>
          <td style="text-align: right">95,2% / 100,0%</td>
          <td style="text-align: right">97,6%</td>
          <td style="text-align: right">95,4%</td>
          <td style="text-align: right">422 ms (WAN)</td>
          <td style="text-align: right">–</td>
          <td style="text-align: right">US$ 0,065</td>
      </tr>
      <tr>
          <td>Clef (27B)</td>
          <td style="text-align: right">97,6% / 94,0%</td>
          <td style="text-align: right">95,8%</td>
          <td style="text-align: right">94,6%</td>
          <td style="text-align: right">302 ms (WAN)</td>
          <td style="text-align: right">–</td>
          <td style="text-align: right">US$ 0,63</td>
      </tr>
      <tr>
          <td>Jebadiah 4B v2</td>
          <td style="text-align: right">91,7% / 89,3%</td>
          <td style="text-align: right">90,5%</td>
          <td style="text-align: right">85,4%</td>
          <td style="text-align: right">205 ms (LAN)</td>
          <td style="text-align: right"><strong>39 ms</strong></td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>OpenAI Decisions</td>
          <td style="text-align: right">90,5% / 90,5%</td>
          <td style="text-align: right">90,5%</td>
          <td style="text-align: right">93,1%</td>
          <td style="text-align: right">222 ms (WAN)</td>
          <td style="text-align: right">–</td>
          <td style="text-align: right">US$ 0,23</td>
      </tr>
      <tr>
          <td>Kev 9B</td>
          <td style="text-align: right">92,9% / 83,3%</td>
          <td style="text-align: right">88,1%</td>
          <td style="text-align: right">87,7%</td>
          <td style="text-align: right">561 ms (LAN)</td>
          <td style="text-align: right">69 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Clef-flash (9B) hospedado</td>
          <td style="text-align: right">91,7% / 83,3%</td>
          <td style="text-align: right">87,5%</td>
          <td style="text-align: right">90,8%</td>
          <td style="text-align: right">394 ms (WAN)</td>
          <td style="text-align: right">–</td>
          <td style="text-align: right">US$ 0,10</td>
      </tr>
      <tr>
          <td>Clef-flash (9B) local</td>
          <td style="text-align: right">89,3% / 85,7%</td>
          <td style="text-align: right">87,5%</td>
          <td style="text-align: right">90,8%</td>
          <td style="text-align: right">618 ms (LAN)</td>
          <td style="text-align: right">86 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Mapika Decider 4B</td>
          <td style="text-align: right">89,3% / 85,7%</td>
          <td style="text-align: right">87,5%</td>
          <td style="text-align: right">86,9%</td>
          <td style="text-align: right">186 ms (LAN)</td>
          <td style="text-align: right">91 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Kev 4B</td>
          <td style="text-align: right">88,1% / 86,9%</td>
          <td style="text-align: right">87,5%</td>
          <td style="text-align: right">82,3%</td>
          <td style="text-align: right">246 ms (LAN)</td>
          <td style="text-align: right">67 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Eikos 4B</td>
          <td style="text-align: right">85,7% / 79,8%</td>
          <td style="text-align: right">82,7%</td>
          <td style="text-align: right">87,7%</td>
          <td style="text-align: right">235 ms (LAN)</td>
          <td style="text-align: right">42 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Simple-Jev + Qwen3.5 4B</td>
          <td style="text-align: right">77,4% / 71,4%</td>
          <td style="text-align: right">74,4%</td>
          <td style="text-align: right">85,4%</td>
          <td style="text-align: right">1.349 ms (LAN)</td>
          <td style="text-align: right">161 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Kev 0.8B</td>
          <td style="text-align: right">64,3% / 61,9%</td>
          <td style="text-align: right">63,1%</td>
          <td style="text-align: right">63,1%</td>
          <td style="text-align: right">86 ms (LAN)</td>
          <td style="text-align: right">49 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Decision 3.0 Edge (0,6B)</td>
          <td style="text-align: right">67,9% / 53,6%</td>
          <td style="text-align: right">60,7%</td>
          <td style="text-align: right">65,4%</td>
          <td style="text-align: right">45 ms (LAN)</td>
          <td style="text-align: right">13 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>GLiNER2.5-Decide (EN)</td>
          <td style="text-align: right">54,8% / 50,0%</td>
          <td style="text-align: right">52,4%</td>
          <td style="text-align: right">não rodou</td>
          <td style="text-align: right">208 ms (LAN)</td>
          <td style="text-align: right">20 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Laya typed-decisions</td>
          <td style="text-align: right">50,0% / 35,7%</td>
          <td style="text-align: right">42,9%</td>
          <td style="text-align: right">43,8%</td>
          <td style="text-align: right">43 ms (LAN)</td>
          <td style="text-align: right">14 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Laya (EN)</td>
          <td style="text-align: right">44,0% / 41,7%</td>
          <td style="text-align: right">42,9%</td>
          <td style="text-align: right">43,8%</td>
          <td style="text-align: right">41 ms (LAN)</td>
          <td style="text-align: right">13 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Laya multilingual</td>
          <td style="text-align: right">35,7% / 38,1%</td>
          <td style="text-align: right">36,9%</td>
          <td style="text-align: right">43,8%</td>
          <td style="text-align: right">19 ms (LAN)</td>
          <td style="text-align: right">10 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>GLiNER2.5-multi-Decide</td>
          <td style="text-align: right">32,1% / 35,7%</td>
          <td style="text-align: right">33,9%</td>
          <td style="text-align: right">não rodou</td>
          <td style="text-align: right">63 ms (LAN)</td>
          <td style="text-align: right">10 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Julia-1 (GPU)</td>
          <td style="text-align: right">38,1% / 25,0%</td>
          <td style="text-align: right">31,5%</td>
          <td style="text-align: right">38,5%</td>
          <td style="text-align: right"><strong>12 ms</strong> (LAN)</td>
          <td style="text-align: right">7,3 ms</td>
          <td style="text-align: right">não medido</td>
      </tr>
      <tr>
          <td>Julia-1 (CPU)</td>
          <td style="text-align: right">38,1% / 25,0%</td>
          <td style="text-align: right">31,5%</td>
          <td style="text-align: right">36,9%</td>
          <td style="text-align: right">71 ms (LAN)</td>
          <td style="text-align: right">–</td>
          <td style="text-align: right">não medido</td>
      </tr>
  </tbody>
</table>
<p>Sobre a coluna CUDA: os pesos são os mesmos, então o acerto veio igual ou a até dois casos de distância no compacto em todos os modelos. Rótulos individuais viraram em alguns (12 de 504 no pior caso, o Julia; 11 no Simple-Jev), diferença de aritmética de kernel que não mudou placar nenhum, e as probabilidades diferem na terceira casa decimal em média. A tabela fica pelo acerto do Strix; a coluna CUDA só traz latência. O relatório pareado completo, caso a caso, está no <a href="https://github.com/akitaonrails/jev-docs-benchmarks/blob/master/benchmark/reports/cuda-comparison/results.md"target="_blank" rel="noopener">repositório</a>.</p>
<p>Pra calibrar a leitura: as tarefas têm três ou quatro opções, então chute uniforme dá uns 31% nos dois conjuntos. &ldquo;Perto de 50%&rdquo; aqui já é bem acima da moeda, e &ldquo;perto de 33%&rdquo; é a moeda. O Julia-1 ficou em 31,5%: o nome bonito esconde um cara jogando cara-ou-coroa.</p>
<p>Os intervalos importam. A vantagem do Perplexity sobre o Jev no v2 é de menos de 2 pontos e o intervalo de bootstrap encosta no zero: é a liderança medida neste conjunto, não uma superioridade provada pra sempre. E o Decision 3.0 empatou com o Perplexity no limite do que este conjunto consegue distinguir: <strong>rótulos idênticos nas 1.024 classificações</strong>, com os dois errando os mesmos dois casos (a relevância em inglês no v2 e o caso disputado de severidade no v1, que já está no errata). O Microsoft empatou com o Jev no agregado, com intervalo centrado em zero, mas empate no agregado não é intercambiabilidade: eles erram casos diferentes, e o Microsoft inverte o padrão de língua, errando mais em inglês que em português. Jev e Clef também seguem separados por menos de 2 pontos, no mesmo patamar. Já o pelotão de 90% (Jebadiah, OpenAI) fica 7 pontos atrás do Jev, e daí pra baixo todas as diferenças são claras.</p>
<p>Cada célula de tarefa tem só 12 cenários por língua, então um acerto a mais muda a célula em mais de 8 pontos. Empate em uma tarefa específica é pista pra um piloto. As tabelas por tarefa estão no <a href="https://github.com/akitaonrails/jev-docs-benchmarks/blob/master/benchmark/reports/decision3-comparison-v2/results.md"target="_blank" rel="noopener">repositório</a>.</p>
<h2>Quanto custa, em e-mails de suporte<span class="hx:absolute hx:-mt-20" id="quanto-custa-em-e-mails-de-suporte"></span>
    <a href="#quanto-custa-em-e-mails-de-suporte" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Preço por milhão de tokens é um número que ninguém consegue sentir. Os preços de lista em 11 de outubro são US$ 0,042 por milhão de tokens de entrada no Jev, US$ 0,24 no Clef, US$ 0,038 no Clef-flash e US$ 0,10 no OpenAI Decisions. Saída é grátis nos cinco. O Microsoft Decision-1 cobra os mesmos US$ 0,042 do Jev por milhão, via OpenRouter, mas reportou um terço dos tokens de entrada pros mesmos textos (uns 26 mil contra uns 77 mil do Jev no v2 compacto), e ninguém sabe explicar a diferença de tokenização. Na prática medida, isso o torna o hospedado mais barato do lote.</p>
<p>O Clef-flash custava US$ 0,09 no dia 9: a Cloudflare baixou o preço em mais da metade no meio do meu teste. O Jev reporta bem mais tokens que a Cloudflare pro mesmo texto, uns 45% a mais no v2, e isso já está na conta abaixo.</p>
<p>Imagine uma operação com <strong>10 mil e-mails de suporte por mês</strong> pra classificar em três ou quatro baldes, com textos curtos parecidos com os meus casos:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">10 mil e-mails / mês</th>
          <th style="text-align: right">1 milhão de e-mails</th>
          <th style="text-align: right">Erros esperados em 10 mil (pelo acerto compacto)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft Decision-1</td>
          <td style="text-align: right">US$ 0,065</td>
          <td style="text-align: right">US$ 6,45 (uns R$ 32)</td>
          <td style="text-align: right">~240</td>
      </tr>
      <tr>
          <td>Clef-flash</td>
          <td style="text-align: right">US$ 0,10</td>
          <td style="text-align: right">US$ 10 (uns R$ 50)</td>
          <td style="text-align: right">~1.250</td>
      </tr>
      <tr>
          <td>Jev</td>
          <td style="text-align: right">US$ 0,19</td>
          <td style="text-align: right">US$ 19 (uns R$ 95)</td>
          <td style="text-align: right">~240</td>
      </tr>
      <tr>
          <td>OpenAI Decisions</td>
          <td style="text-align: right">US$ 0,23</td>
          <td style="text-align: right">US$ 23 (uns R$ 115)</td>
          <td style="text-align: right">~950</td>
      </tr>
      <tr>
          <td>Clef</td>
          <td style="text-align: right">US$ 0,63</td>
          <td style="text-align: right">US$ 63 (uns R$ 315)</td>
          <td style="text-align: right">~420</td>
      </tr>
  </tbody>
</table>
<blockquote>
  <p>Em reais, pela cotação de sexta (R$ 4,99), 10 mil decisões no Jev custam um real. Um milhão custa menos de cem reais. Pra qualquer empresa que tenha um milhão de e-mails pra classificar, isso some no orçamento.</p>

</blockquote>
<p>Uma ressalva de proporção: meus casos são curtos, uns 450 tokens por caso compacto pela contagem do Jev. E-mail real de cliente, com histórico de thread citado, pode ser três a cinco vezes maior, e o custo escala linear com isso. Mesmo assim, estamos falando de centavos por milhar.</p>
<p>O que esse cálculo mostra é que a diferença de preço entre os modelos hospedados é irrelevante perto do custo de errar. O Jev custa 9 centavos de dólar a mais que o Clef-flash a cada 10 mil decisões, e nesses mesmos 10 mil comete uns mil erros a menos. Se um e-mail mal roteado custar mais que um centésimo de centavo de dólar em retrabalho humano, o Jev se paga. Essa conta assume que todo erro custa igual, o que nunca é verdade: mandar um ticket crítico pra fila de rotina custa muito mais que o contrário.</p>
<p>A franquia da Cloudflare muda a conta pra quem é pequeno. São 10 mil &ldquo;neurônios&rdquo; por dia, compartilhados pela conta inteira, zerando à meia-noite UTC. Com os meus tamanhos de entrada, isso dá umas 1.500 classificações de Clef completo por dia ou quase 10 mil de Clef-flash, de graça. Se você tem 1.000 e-mails por dia e nada mais rodando na conta, o Clef sai a custo zero com qualidade de ponta.</p>
<p>E o local? Energia o benchmark deixou de medir. Pelo que eu vejo no meu Strix Halo, a máquina inteira fica abaixo de 100 W sob carga. Com o Jebadiah em 200 ms por decisão, 10 mil decisões são uns 35 minutos de máquina, menos de 0,1 kWh, uns centavos de real na conta de luz.</p>
<p>O custo local real é a máquina, a sua hora configurando ROCm e container, e manter aquilo de pé. Quem já tem o hardware por outro motivo tem custo marginal baixo. Quem compraria a máquina só pra isso está comprando um problema de milhares de reais pra economizar uns cem reais por milhão.</p>
<h2>Qual modelo em qual situação<span class="hx:absolute hx:-mt-20" id="qual-modelo-em-qual-situação"></span>
    <a href="#qual-modelo-em-qual-situa%c3%a7%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Você quer precisão e quer operar nada: Jev<span class="hx:absolute hx:-mt-20" id="você-quer-precisão-e-quer-operar-nada-jev"></span>
    <a href="#voc%c3%aa-quer-precis%c3%a3o-e-quer-operar-nada-jev" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Na nuvem, o Jev continua sendo o nome. Venceu ou empatou em praticamente todas as células entre os hospedados, e só o Microsoft empatou com ele no agregado. Em inglês ele foi 100% em cinco das sete tarefas do v2, e em português repetiu 97,6% no agregado sem perder nada na tradução, coisa que nenhum outro modelo acima da moeda conseguiu. No v1 ele manteve os 96,2% do original com o comentário malicioso do &ldquo;revisor&rdquo; injetado; o Clef até subiu um caso, e o Kev 4B também ficou parado, só que num patamar bem mais baixo. A latência de 255 ms via WAN ficou a 30 ms do OpenAI, e custa 19 centavos de dólar a cada 10 mil decisões.</p>
<p>A contrapartida é a que já discuti no texto anterior: é proprietário, hospedado, de tamanho não divulgado, e você depende da TypeSafe manter o comportamento por baixo de você. E ele erra. Tratou um ID de fatura chamado &ldquo;PASSWORD-523&rdquo; como credencial utilizável, mesmo com o registro dizendo explicitamente que aquilo não autentica ninguém.</p>
<h3>Você quer o nível do Jev pagando um terço: Microsoft Decision-1<span class="hx:absolute hx:-mt-20" id="você-quer-o-nível-do-jev-pagando-um-terço-microsoft-decision-1"></span>
    <a href="#voc%c3%aa-quer-o-n%c3%advel-do-jev-pagando-um-ter%c3%a7o-microsoft-decision-1" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A Microsoft entrou nesse mercado quieto, e entrou bem. O Decision-1 é um 9B pós-treinado do Qwen3.5-9B, servido via OpenRouter, e foi o primeiro modelo a empatar com o Jev no agregado compacto: 97,6%, com o intervalo de bootstrap centrado no zero. O detalhe que me ganhou: <strong>100% em português</strong>, melhor que o inglês dele (95%), invertendo o padrão de todo o resto do lote. No v1, as variantes de ordem invertida e comentário malicioso não derrubaram uma única resposta, e ele acertou o ticket crítico que o Clef e o OpenAI erraram.</p>
<p>E é o hospedado mais barato que eu medi: US$ 0,065 por 10 mil decisões, um terço do Jev, cobrando a mesma taxa por token mas reportando um terço dos tokens. A economia vem da contagem de tokens, e o mecanismo exato eu não sei explicar, então trate como medida, não como promessa.</p>
<p>Os pontos fracos existem. A latência é a pior entre os hospedados (422 ms de mediana, contra 255 do Jev). Nos casos compactos ele é limpo de erro confiante, mas basta adicionar contexto pra aparecer erro em português com 99,5% de confiança: o padrão &ldquo;português perfeito&rdquo; não sobrevive a texto longo. E nas sondagens de probabilidade ele é fraco, dando 87% pra uma moeda honesta. A Microsoft anuncia probabilidades calibradas; minhas sondagens discordam. E como todo hospedado de ID datado, o peso por trás pode mudar sem aviso.</p>
<p>Pra operação em português que quer qualidade de Jev pagando menos, é o primeiro candidato a rodar no seu piloto.</p>
<h3>Você quer o mesmo nível com pesos abertos: Clef<span class="hx:absolute hx:-mt-20" id="você-quer-o-mesmo-nível-com-pesos-abertos-clef"></span>
    <a href="#voc%c3%aa-quer-o-mesmo-n%c3%advel-com-pesos-abertos-clef" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Clef completo de 27B empatou com o Jev em inglês (82 de 84) e ficou 3 casos atrás em português. Ganhou dele no tratamento de dados sensíveis em inglês (12 de 12 contra 11). É modelo de pesos abertos, então dá pra rodar local com uns 54 GB de memória só pros pesos em BF16, o que eu deixei de testar: o Clef completo rodou só pela API. Entre os abertos, ele perdeu a coroa pro Perplexity, que pontuou mais alto com pesos menores.</p>
<p>Pela API ele é o mais caro dos cinco hospedados, três vezes o Jev, sem ganho de qualidade que justifique. A exceção é a franquia diária: pra volume pequeno, ele é o melhor classificador que você consegue de graça.</p>
<h3>Você quer o mais barato na nuvem: Clef-flash<span class="hx:absolute hx:-mt-20" id="você-quer-o-mais-barato-na-nuvem-clef-flash"></span>
    <a href="#voc%c3%aa-quer-o-mais-barato-na-nuvem-clef-flash" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A US$ 0,038 por milhão, o Clef-flash é o preço mais baixo do mercado hospedado e cobre 9.400 decisões por dia dentro da franquia. A qualidade cai: 92% em inglês e 83% em português nos casos compactos, a maior queda de língua entre os hospedados, com intervalo inteiro abaixo de zero. Em sentimento nas duas línguas, e em status de incidente em inglês, ele empatou com o Jev. Em intenção e dados sensíveis em português, perdeu feio.</p>
<p>Pra tarefa de sentimento em qualquer língua ou pra classificação em inglês onde 1 em 12 erros é aceitável, ele serve bem. Pra português, meça antes.</p>
<h3>Você já vive no ecossistema OpenAI: OpenAI Decisions<span class="hx:absolute hx:-mt-20" id="você-já-vive-no-ecossistema-openai-openai-decisions"></span>
    <a href="#voc%c3%aa-j%c3%a1-vive-no-ecossistema-openai-openai-decisions" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A estreia da OpenAI nesse mercado ficou no meio da tabela: 90,5% combinado, empate exato com o Jebadiah, com a menor latência hospedada que eu medi (222 ms) e o mesmo acerto nas duas línguas. Custa US$ 0,23 por 10 mil decisões, entre o Jev e o Clef. Se a sua operação já fala a API da OpenAI e 9 em 10 de acerto basta, a integração é trivial: um endpoint nativo de decisões, nada de prompt.</p>
<p>Os pontos fracos são reveladores. A pior célula dele foi justamente política por limiar numérico (8 de 12 em inglês, 7 em português): tratou &ldquo;pelo menos 10&rdquo; como satisfeito por um intervalo de 8 a 12 e falhou no curto-circuito de E/OU. A calibração é esquizofrênica: nas sondagens de predicado (sim/não) ele foi o mais certeiro do lote, com erro médio quase zero, e nas sondagens de escolha ele devolveu 94%/6% numa moeda honesta. E nas variantes do v1 ele virou 2 respostas certas em cada apresentação (ordem invertida, rótulo opaco, comentário malicioso), coisa que só o Perplexity não fez: o Jev manteve a acurácia agregada, mas também virou algumas respostas certas no caminho. Ah, e o alias <code>gpt-6-luna</code> não é snapshot imutável: reprodutibilidade exige guardar as respostas.</p>
<h3>Você quer o melhor modelo aberto, ponto: Perplexity Decider 27B<span class="hx:absolute hx:-mt-20" id="você-quer-o-melhor-modelo-aberto-ponto-perplexity-decider-27b"></span>
    <a href="#voc%c3%aa-quer-o-melhor-modelo-aberto-ponto-perplexity-decider-27b" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Perplexity Decider 1.1 27B é a surpresa do benchmark. Liderou a tabela com 99,4% nos compactos, foi o único que não perdeu nenhuma célula de tarefa pro Jev (3 vitórias, 11 empates), e fez 100% em português nas três condições: compacto, com exemplos, com distratores. A calibração também é a melhor medida, com Brier de 0,012, e a cobertura é absurda: respondeu com confiança acima de 0,9 em 96% dos casos e errou zero deles. No v1, não virou uma única resposta nas variantes de ordem, rótulo opaco e comentário malicioso.</p>
<p>Os únicos 3 erros dele no v2 foram o mesmo caso em traje diferente (confundiu &ldquo;notificação enviada a gerentes&rdquo; com &ldquo;aprovador obrigatório&rdquo;), e ele os cometeu com confiança abaixo de 0,9: o erro conhecido vem sinalizado. O ponto fraco são as sondagens de probabilidade de evento: perguntado sobre um evento de chance 1 em 4, ele respondeu 0,73. Classificação forte não implica probabilidade de evento confiável.</p>
<p>O custo é hardware: uns 49 GB de pesos em BF16, um segundo e meio por decisão no meu Strix Halo (com os kernels de referência do ROCm, sem flash-attention). E antes de sonhar com &ldquo;numa NVIDIA deve voar&rdquo;: eu testei, e ele nem cabe numa RTX 5090 de 32 GB. É Apache 2.0, pesos públicos sem gate. Se você tem a máquina e quer o topo da tabela em casa, é ele.</p>
<h3>Você quer o outro topo aberto: Decision 3.0 (e cuidado com o Edge)<span class="hx:absolute hx:-mt-20" id="você-quer-o-outro-topo-aberto-decision-30-e-cuidado-com-o-edge"></span>
    <a href="#voc%c3%aa-quer-o-outro-topo-aberto-decision-30-e-cuidado-com-o-edge" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Decision 3.0, lançado há dois dias pelo projeto vLLM Semantic Router, é o segundo modelo a sentar no topo: 99,4% nos compactos, 100% em português, e um empate tão absoluto com o Perplexity que os dois deram <strong>exatamente os mesmos rótulos nas 1.024 classificações</strong>, incluindo os mesmos dois erros (a relevância em inglês, com confiança abaixo de 0,9, e o caso disputado de severidade que já mora no errata). Também zerou as armadilhas do v1 sem virar uma resposta, acertou os dois tickets críticos indiscutíveis, e a calibração é da mesma classe do Perplexity (Brier 0,014, 94% de cobertura acima de 0,9 com zero erros).</p>
<p>Ou seja: o topo open agora tem duas receitas independentes que convergem. Pro seu piloto, tanto faz qual das duas; rode as duas se puder, porque as probabilidades diferem mesmo quando os rótulos não. A latência é da mesma família do Perplexity (1,4 s na minha máquina, mesma dieta de ROCm), e os pesos ocupam os mesmos ~49 GB.</p>
<p>O irmão pequeno é outra história. O <strong>Decision 3.0 Edge</strong> (0,6B) responde em 45 ms e cabe em 1,3 GB de GPU, mas acertou só 61% no compacto, despenca 14 pontos em português, e pior: dos 68 palpites que ele deu com confiança acima de 0,9, 14 estavam errados. Como roteador com limiar de confiança, de fábrica, ele é uma armadilha da mesma turma do Julia. Os quatro checkpoints do meio (flash, mini, nano, lite) ainda não testei; são eles que vão dizer se a família tem um ponto doce entre os dois extremos.</p>
<h3>Você precisa rodar local, com qualidade: Jebadiah 4B v2<span class="hx:absolute hx:-mt-20" id="você-precisa-rodar-local-com-qualidade-jebadiah-4b-v2"></span>
    <a href="#voc%c3%aa-precisa-rodar-local-com-qualidade-jebadiah-4b-v2" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Dos locais, o Jebadiah 4B v2 teve o melhor acerto compacto, 90% combinado, respondendo em uns 200 ms no Strix Halo e <strong>39 ms na RTX 5090</strong>. Numa 5090, ele fica mais rápido que qualquer hospedado do benchmark, Jev incluso (255 ms de WAN): com o hardware certo, o local deixou de ser o lado lento da tabela. Empatou com o Jev em seis das catorze células de tarefa, incluindo intenção, implicação e status em inglês e intenção em português. O ponto fraco é política por limiar numérico, 9 de 12 nas duas línguas, e ele perde terreno quando o contexto enche de distratores (76% em português nessa condição, contra 82% do Mapika).</p>
<p>O <strong>Mapika Decider 4B</strong> (o mais rápido dos 4B) e o <strong>Kev 4B</strong> ficam logo atrás, ambos com uns 87%, e a diferença de 3 pontos entre os três cabe dentro do intervalo de erro. São três receitas de treino diferentes em cima de backbones de 4B, com erros em tarefas diferentes. A escolha entre eles depende da sua tarefa, e eu rodaria os três num piloto.</p>
<h3>Você vai mandar exemplos no prompt: Kev 9B<span class="hx:absolute hx:-mt-20" id="você-vai-mandar-exemplos-no-prompt-kev-9b"></span>
    <a href="#voc%c3%aa-vai-mandar-exemplos-no-prompt-kev-9b" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Kev 9B tem um perfil curioso. Nos casos compactos ele empata com o Kev 4B, com meio ponto de diferença e intervalo cruzando zero, ou seja, mais que o dobro de parâmetros comprou nada. Com um exemplo resolvido por classe, ele abre quase 10 pontos sobre o 4B, e com distratores segura 7 pontos a mais. O Brier também melhora uns 25%: a probabilidade que ele devolve é mais bem calibrada.</p>
<p>Se o seu uso é só a regra e o texto, o 4B basta e é mais que o dobro mais rápido. Se você vai mandar exemplos ou contexto longo, o 9B vale a memória. O alerta é o português: 83% compacto em PT-BR, quase 10 pontos abaixo do inglês dele, a maior queda de língua entre os modelos que passam de 80%. Só o Laya typed (14 pontos) e o Julia (13) caem mais.</p>
<h3>Você quer o comportamento do Clef-flash na sua máquina: Clef-flash local<span class="hx:absolute hx:-mt-20" id="você-quer-o-comportamento-do-clef-flash-na-sua-máquina-clef-flash-local"></span>
    <a href="#voc%c3%aa-quer-o-comportamento-do-clef-flash-na-sua-m%c3%a1quina-clef-flash-local" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>No conjunto v1, o Clef-flash local reproduziu as 520 classificações do hospedado, acerto por acerto e erro por erro. No v2 a história mudou: mesmo total (439 de 504), mas 19 rótulos diferentes, com forças trocadas (o local acerta mais intenção em português, o hospedado acerta mais relevância). Entre os locais ele continua o melhor no conjunto v1 de políticas operacionais (90,8%), à frente de todos os 4B.</p>
<p>A pegadinha é a latência: 618 ms de mediana no Strix Halo (86 ms na 5090), três vezes o Jebadiah, pelo mesmo acerto no v2. Se você escolher ele, é pelo comportamento conhecido.</p>
<h3>Você precisa rodar offline em hardware fraco: Laya e Julia, com muitas ressalvas<span class="hx:absolute hx:-mt-20" id="você-precisa-rodar-offline-em-hardware-fraco-laya-e-julia-com-muitas-ressalvas"></span>
    <a href="#voc%c3%aa-precisa-rodar-offline-em-hardware-fraco-laya-e-julia-com-muitas-ressalvas" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Laya multilingual foi o pior do benchmark em acerto (37% combinado, perto da moeda), e o mais rápido com folga entre os que acertam alguma coisa: 19 ms de mediana, mais de dez vezes mais rápido que o Jebadiah.</p>
<p>Os três checkpoints do Laya têm entre 322 e 421 milhões de parâmetros, cabem em menos de 1 GB de pesos em BF16 na conta de parâmetros, e o projeto documenta execução em CPU e runtime ONNX (que eu deixei de medir). O pico de alocação do PyTorch na GPU, pro multilingual, ficou abaixo de 2 GB. Um 4B precisa de uns 8 GB só de pesos na mesma precisão.</p>
<p>O <strong>Julia-1</strong> desce mais um degrau: 144 milhões de parâmetros, 550 MB de pesos, 12 ms de mediana na GPU do Strix, 7 ms na 5090 e 71 ms numa CPU de 4 threads. É o modelo mais rápido que eu já medi aqui, e também o pior: 31,5% de acerto, colado na linha da moeda de 31%. Em português ele respondeu &ldquo;cancelamento&rdquo; nos 12 cenários de intenção, inclusive nos que pediam reembolso ou acesso (a avaliação de português do fabricante foi feita em pt-PT, e se nota). O desastre maior é a confiança: dos 71 palpites que ele deu acima de 0,9, 48 estavam errados. Um limiar de confiança não salva esse modelo, porque é justamente nos palpites confiantes que ele erra.</p>
<p>Isso é escolha de projeto. O Laya e o Julia foram feitos pra ser encoders pequenos, afináveis na sua tarefa, pra rodar na borda. O que eu testei foram os checkpoints de fábrica, sem nenhum ajuste, aplicando regras que eles nunca viram, em tarefas amplas. Nesse cenário eles foram mal e ponto.</p>
<p>Um detalhe confirma a fragilidade. No v1, quando o comentário malicioso do revisor entra, o Laya cai de 44% pra 19% e o typed-decisions pra 15%. Ele obedece o comentário que a instrução manda ignorar, e com confiança: 17 dos 28 palpites acima de 0,9 estavam errados. O Julia falhou nos 5 pares de contrafactual de política: troca a regra, ele mantém a resposta.</p>
<blockquote>
  <p>Se você quer o que o Jev entrega, o Laya e o Julia de fábrica ficam muito longe, e nenhum modelo pequeno (GLiNER incluso) chegou perto. Se o seu problema é &ldquo;preciso classificar texto curto em três baldes, num dispositivo sem internet e sem GPU, e tenho mil exemplos rotulados pra ajustar&rdquo;, esses dois são os únicos da lista que cabem. O ajuste fino é a parte que eu deixei de testar. É outra pergunta, que precisa de outro benchmark.</p>

</blockquote>
<h3>A linha de base: Simple-Jev com Qwen comum<span class="hx:absolute hx:-mt-20" id="a-linha-de-base-simple-jev-com-qwen-comum"></span>
    <a href="#a-linha-de-base-simple-jev-com-qwen-comum" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Simple-Jev lendo tokens do Qwen3.5 4B, sem treino de decisão nenhum, tirou 74% no v2 compacto. Isso é a régua de &ldquo;quanto o treino especializado compra&rdquo;: Jebadiah, Mapika e Kev, todos em cima de backbones de tamanho parecido, ficaram 13 a 16 pontos acima. O treino compra bastante.</p>
<p>O curioso é que no v1 o Simple-Jev empatou com o Jebadiah (111 de 130 originais) e acertou os dois tickets críticos sem ambiguidade, que vários modelos melhores erraram. Ele também é o mais lento do lote no Strix Halo, quase um segundo e meio por decisão, porque está rodando um LLM inteiro. Na 5090 o mesmo LLM inteiro cai pra 161 ms: a linha de base acelera junto com a máquina, que é o que ela deveria fazer.</p>
<h2>Quão difícil é rodar os melhores abertos na sua máquina<span class="hx:absolute hx:-mt-20" id="quão-difícil-é-rodar-os-melhores-abertos-na-sua-máquina"></span>
    <a href="#qu%c3%a3o-dif%c3%adcil-%c3%a9-rodar-os-melhores-abertos-na-sua-m%c3%a1quina" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Todos esses modelos falam o mesmo protocolo HTTP, chamado SystemOne, que o Jev popularizou: você manda um estado (o texto), uma ou mais perguntas de resposta fechada, e recebe de volta a opção escolhida e a probabilidade de cada uma. Trocar de modelo é trocar a porta. O OpenAI Decisions foge do padrão com um endpoint nativo próprio, mas a ideia é a mesma. O que muda é quanto trabalho dá colocar cada um de pé, e aí a diferença entre eles é grande.</p>
<h3>OpenAI: só uma API key<span class="hx:absolute hx:-mt-20" id="openai-só-uma-api-key"></span>
    <a href="#openai-s%c3%b3-uma-api-key" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O mais fácil de todos: cria a chave, carrega crédito e chama o endpoint. As 1.048 requisições do benchmark rodaram em 4 minutos, sem uma retentativa. O único soluço foi a primeira sonda devolver &ldquo;saldo esgotado&rdquo; até eu colocar US$ 20 na conta.</p>
<p>O <strong>Microsoft Decision-1</strong> é quase tão simples: se você já tem conta no OpenRouter, é apontar o modelo e chamar o endpoint de decisões. Sem GPU, sem assinatura Azure, sem instalação. No meu teste, 10 das 504 chamadas do v2 tomaram um 429 e passaram na retentativa, então planeje retry.</p>
<h3>Kev e Jebadiah: um pip e um comando<span class="hx:absolute hx:-mt-20" id="kev-e-jebadiah-um-pip-e-um-comando"></span>
    <a href="#kev-e-jebadiah-um-pip-e-um-comando" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O <strong>Kev</strong> é o mais simples da turma de 4B. O projeto instala direto do GitHub e sobe um servidor com um comando, baixando o adaptador LoRA e a cabeça de decisão em cima do Qwen3.5 base:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pip install <span class="s2">&#34;kev @ https://github.com/jaredpalmer/kev/archive/fc4a17e194bca35a48c57211392ec49ea54a94ac.tar.gz&#34;</span>
</span></span><span class="line"><span class="cl">python -m kev.serve --run jaredpalmer/kev-4b --host 0.0.0.0 --port <span class="m">8000</span> --device cuda</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>O <strong>Jebadiah</strong> segue o mesmo padrão, com o pacote do servidor dentro do repositório dele:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pip install <span class="s2">&#34;jebadiah-server @ https://github.com/getainode/jebadiah/archive/e9793abc66d1a7c5ad878d51eda656f1e9c5b9f5.tar.gz#subdirectory=server&#34;</span>
</span></span><span class="line"><span class="cl">jebadiah-serve --model frontier-infra/jebadiah-4b-v2 --host 0.0.0.0 --port <span class="m">8000</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Com qualquer um dos dois no ar, uma decisão é um POST:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">curl -s http://localhost:8000/v1/systemone -H <span class="s1">&#39;content-type: application/json&#39;</span> -d <span class="s1">&#39;{
</span></span></span><span class="line"><span class="cl"><span class="s1">  &#34;model&#34;: &#34;kev-4b&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">  &#34;state&#34;: &#34;Cliente diz que foi cobrado duas vezes e pede o estorno da segunda cobrança.&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">  &#34;questions&#34;: {
</span></span></span><span class="line"><span class="cl"><span class="s1">    &#34;fila&#34;: {
</span></span></span><span class="line"><span class="cl"><span class="s1">      &#34;type&#34;: &#34;choice&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">      &#34;instructions&#34;: &#34;Escolha a fila correta pela política de suporte.&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">      &#34;criteria&#34;: {
</span></span></span><span class="line"><span class="cl"><span class="s1">        &#34;financeiro&#34;: &#34;Cobrança, estorno, nota fiscal.&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">        &#34;tecnico&#34;: &#34;Erro, bug, indisponibilidade.&#34;,
</span></span></span><span class="line"><span class="cl"><span class="s1">        &#34;vendas&#34;: &#34;Upgrade, plano novo, orçamento.&#34;
</span></span></span><span class="line"><span class="cl"><span class="s1">      }
</span></span></span><span class="line"><span class="cl"><span class="s1">    }
</span></span></span><span class="line"><span class="cl"><span class="s1">  }
</span></span></span><span class="line"><span class="cl"><span class="s1">}&#39;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>A resposta traz a opção e a distribuição de probabilidade, e é nela que você aplica o seu limiar, loga e decide se manda pra revisão humana. Num NVIDIA com CUDA e 16 GB de VRAM, um 4B em BF16 sobe sem drama. Os pesos pesam uns 8 GB. Na 5090, os 4B que testei respondem em 39 a 91 ms.</p>
<h3>Laya e Julia: menores ainda<span class="hx:absolute hx:-mt-20" id="laya-e-julia-menores-ainda"></span>
    <a href="#laya-e-julia-menores-ainda" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O <strong>Laya</strong> é um pacote Python com encoder dentro. Instala com <code>pip install laya</code> e o projeto documenta execução em CPU, que é a graça dele. A versão fixada no meu servidor foi a 0.4.1, e o pico de memória do multilingual na GPU ficou abaixo de 2 GB. Pra rodar num notebook sem GPU ou num container pequeno, é o único da lista que cabe sem conversa.</p>
<p>O <strong>Julia-1</strong> é parecido em espírito: um runtime Python próprio, uma chamada <code>predict(state=..., questions=...)</code> e pronto, sem pipeline padrão de Transformers. Rodei o mesmo container em GPU e em CPU, e os dois deram o mesmo acerto com as mesmas respostas em 97% dos casos. Em CPU de 4 threads ele responde em 71 ms, o que pra um classificador de borda é ótimo. O problema continua sendo ele acertar no nível da moeda.</p>
<h3>Onde a coisa complica: AMD, ROCm e o resto<span class="hx:absolute hx:-mt-20" id="onde-a-coisa-complica-amd-rocm-e-o-resto"></span>
    <a href="#onde-a-coisa-complica-amd-rocm-e-o-resto" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>No meu caso o hardware é AMD, e aí o &ldquo;um comando&rdquo; vira um dia de trabalho. Os pontos que me custaram tempo, pra você economizar o seu:</p>
<ul>
<li>Nenhum desses projetos testa em ROCm. O Kev tinha um segfault específico do gfx1151 por causa de CUDA graphs (<a href="https://github.com/jaredpalmer/kev/issues/170"target="_blank" rel="noopener">issue 170</a>), corrigido só depois da tag 1.0, então a versão fixada é um commit do main e a tag oficial crasha.</li>
<li>Os kernels Triton de flash-linear-attention que o Qwen3.5 usa nas camadas DeltaNet são sem suporte testado no gfx1151. Tudo rodou no caminho de PyTorch puro, mais lento que a latência publicada em CUDA. Os 200 ms do Jebadiah que aparecem na tabela são com esse freio de mão puxado; na 5090, com o mesmo protocolo e os mesmos pesos, o freio some e ele faz 39 ms.</li>
<li>O Mapika Decider força CUDA graphs quando vê o device &ldquo;cuda&rdquo;, que no ROCm também se chama &ldquo;cuda&rdquo;. Precisei desligar na mão.</li>
<li>Precisa exportar <code>HSA_OVERRIDE_GFX_VERSION=11.5.1</code> e <code>PYTORCH_ROCM_ARCH=gfx1151</code> e usar uma imagem base com o torch de ROCm já validado. Um <code>pip install torch</code> qualquer sobrescreve com a build de CUDA e quebra tudo. No meu Dockerfile cada pacote é instalado com <code>--no-deps</code> e o build falha se o torch deixar de ser o de ROCm.</li>
<li>Um modelo por container, um container por vez. O Strix Halo tem memória compartilhada entre CPU e GPU, e três modelos de 4B residentes mais o Ollama que já roda ali esgotam os 64 GiB que a GPU enxerga.</li>
<li>O Perplexity Decider foi o mais chato de todos. O release espera um torch de CUDA específico (troquei pelo 2.9 do ROCm 7), os kernels de flash-linear-attention não existem pra ele (rodei nos kernels de referência do PyTorch, mais lentos), e o carregador padrão estourou o limite de 24 GiB de RAM do host: precisei de um carregador custom que manda os 49 GiB de pesos direto pra GPU. O card do modelo ainda dizia &ldquo;privado&rdquo; quando eu comecei, mas a API do Hugging Face confirmava público e sem gate, e os shards baixaram anônimos. O d3, com o mesmo tamanho, herdou o mesmo tratamento. O d3-edge, por sorte, sobe com o carregador padrão do Transformers e 1,3 GB de GPU.</li>
</ul>
<p>Nada disso é impossível, e está tudo documentado, com Dockerfiles, compose e os hashes de cada checkpoint, no <a href="https://github.com/akitaonrails/jev-docs-benchmarks/blob/master/docs/setup.md"target="_blank" rel="noopener">guia de setup do repositório</a>. Só que é um custo real que a planilha de &ldquo;local é de graça&rdquo; nunca inclui. Se a sua máquina é NVIDIA, a maior parte dessa lista some.</p>
<blockquote>
  <p>O Clef completo de 27B eu nem tentei local: são uns 54 GB de pesos em BF16 antes de qualquer ativação. O Perplexity, com 49 GB, provou que um 27B sobe no Strix Halo, ao custo de um segundo e meio por decisão com os kernels de referência. E nem cabe na RTX 5090: 49 GB não entram em 32. O Clef-flash de 9B roda, com uns 18 GB de pesos. Os de 4B são o ponto doce pra hardware de consumidor.</p>

</blockquote>
<h3>ROCm x CUDA: a mesma receita em duas cozinhas<span class="hx:absolute hx:-mt-20" id="rocm-x-cuda-a-mesma-receita-em-duas-cozinhas"></span>
    <a href="#rocm-x-cuda-a-mesma-receita-em-duas-cozinhas" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Todos os modelos locais acima rodaram duas vezes, em duas máquinas minhas. De um lado, o minisforum MS-S1 Max com Strix Halo: Ryzen AI Max+ 395, 64 GiB endereçáveis pela GPU, via ROCm. Do outro, um PC com RTX 5090 (32 GB GDDR7) num Ryzen 7950X3D com 92 GB de RAM, via CUDA. Mesmos checkpoints por hash, mesmos requests, PyTorch 2.9.1 dos dois lados (build ROCm do fornecedor num, cu128 oficial no outro), kernels de referência, sem CUDA graphs, sem quantização, um modelo por vez, protocolo congelado em git antes de qualquer inferência.</p>
<p>Honestidade antes dos números: <strong>isso não é comparação de maçã com maçã.</strong> São duas implantações inteiras, com GPU, CPU, build e rede diferentes. A 5090 é uma placa absurdamente mais poderosa que a iGPU do Strix. O Strix é uma máquina completa (CPU, RAM, disco, fonte) que custa o que custa só a placa da NVIDIA. O que a comparação mede é a escolha real: qual máquina pra qual modelo.</p>
<table>
  <thead>
      <tr>
          <th></th>
          <th>RTX 5090</th>
          <th>Strix Halo (MS-S1 Max)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Preço de referência</td>
          <td>US$ 1.999 de MSRP, só a placa (no varejo, quase sempre mais)</td>
          <td>~US$ 1.500-2.000 a máquina completa, dependendo da RAM</td>
      </tr>
      <tr>
          <td>Memória</td>
          <td>32 GB GDDR7 dedicados, 1.792 GB/s</td>
          <td>64 GiB unificada endereçável pela GPU</td>
      </tr>
      <tr>
          <td>Faixa de modelo</td>
          <td>tudo até 9B em BF16, voando</td>
          <td>tudo até 27B em BF16, devagar</td>
      </tr>
      <tr>
          <td>Os campeões de 27B</td>
          <td><strong>não cabem</strong></td>
          <td>1,4-1,5 s por decisão</td>
      </tr>
  </tbody>
</table>
<p>O resultado em uma linha: a 5090 foi de 1,7× a 10,3× mais rápida em tudo que coube nela, e os campeões do benchmark não couberam. Os detalhes que valem:</p>
<p><strong>O placar de acerto não mudou.</strong> Mesmos pesos, mesma pontuação até dois casos de distância por modelo. Alguns rótulos individuais viraram (12 de 504 no pior caso, o Julia; 11 no Simple-Jev), diferença de aritmética de kernel, e as probabilidades diferem na terceira casa decimal em média. Toda conclusão de qualidade da tabela vale pras duas máquinas.</p>
<p><strong>Os campeões de 27B não cabem na 5090.</strong> O d3 pesa 48,6 GB e o Perplexity 49 GB em BF16, contra 31,8 GB de VRAM. A placa de consumo mais rápida do mercado não roda os melhores modelos abertos na mesma precisão. Quem quer os 99,4% em casa hoje compra memória, e memória unificada é exatamente o que o Strix vende. Fazer offload pra RAM do PC é outro experimento, que eu não medi e não conto como vitória de ninguém.</p>
<p><strong>O Jebadiah a 39 ms é o resultado prático mais importante.</strong> 90,5% de acerto, mais rápido que qualquer hospedado, Jev incluso. Na faixa de até 9B, a 5090 transforma modelos locais na opção mais rápida e mais barata de todas, e a diferença pro Strix (205 ms) é de mundo inteiro: 5,3×.</p>
<p><strong>Modelo pequeno nem sente.</strong> Os três minúsculos (Julia, Laya multilingual, Kev 0.8B) melhoraram só 1,7× a 1,8×. Eles já eram limitados por overhead de runtime, com um pé na CPU, não por falta de GPU. Comprar uma 5090 pra servir encoder de 300M é comprar foguete pra buscar pão na padaria.</p>
<p><strong>O maior ganho foi do pior modelo.</strong> O GLiNER2.5-Decide acelerou 10,3× (208 pra 20 ms). Continua errando igual, só que rápido. A correlação entre &ldquo;quanto o modelo melhora na 5090&rdquo; e &ldquo;quanto o modelo presta&rdquo; é negativa nesta amostra, porque os modelos maiores e mais úteis são justamente os que mais tinham pra destravar.</p>
<p><strong>A linha de base escala junto.</strong> O Simple-Jev, que é um LLM de 4B inteiro lendo token, foi de 1.349 pra 161 ms (8,4×), chegando perto do Kev 9B no Strix. E o Mapika decepcionou comparado aos irmãos: 2× (186 pra 91 ms), o menor ganho dos 4B, sinal de que o runtime dele já era enxuto no Strix.</p>
<p>Fechando a conta de custo-benefício: pelo preço de só a placa 5090 você leva o minisforum inteiro. Se o seu trabalho é modelo de até 9B com latência de dezenas de milissegundos, a 5090 justifica cada dólar e o ROCm nem entra na discussão. Se o seu alvo é o topo de 27B rodando em casa, hoje a memória do Strix é o único caminho das duas máquinas, e um segundo e meio por decisão é o pedágio. A pergunta certa não é &ldquo;CUDA ou ROCm&rdquo;. É &ldquo;velocidade ou capacidade&rdquo;.</p>
<h2>Destaques e pegadinhas<span class="hx:absolute hx:-mt-20" id="destaques-e-pegadinhas"></span>
    <a href="#destaques-e-pegadinhas" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><strong>O Laya truncou todo o português longo.</strong> Na condição com distratores, o Laya base reportou truncamento nas 84 chamadas em português, descartando quase 31 mil tokens de estado, e em nenhuma das 84 em inglês. O limite de contexto padrão do checkpoint inglês é só 512 tokens (o multilingual e o typed usam 1.024, configurável até 8.192), e português tokeniza mais pesado. Os outros modelos sequer expõem telemetria de truncamento, então &ldquo;zero truncamento reportado&rdquo; neles significa &ldquo;não sei&rdquo;.</p>
<p><strong>Português custa mais tokens.</strong> Pros mesmos 84 pares de casos, o Jev reportou uns 14% mais tokens de entrada em português que em inglês, e os dois Clef uns 15% mais. Se você orçar uma operação bilíngue pela média em inglês, vai errar pra baixo.</p>
<p><strong>Exemplo no prompt salva modelo fraco? Salva nada.</strong> Um exemplo resolvido por classe deixou o Laya igual ou pior; vários agregados dele caíram. Ajudou o Kev 9B (mais 4 pontos) e o Clef em português (mais 3,6 pontos, chegando ao nível do Jev), e quase nada no Jev, um caso a mais em português. Valide exemplo em tráfego real antes de assumir que ajuda.</p>
<p><strong>Tamanho correlaciona, e explica pouco.</strong> Entre os 19 competidores de tamanho conhecido, a correlação de Spearman entre parâmetros e acerto compacto foi 0,96. A série Kev é mais informativa: 63% em 0,8B, 87% em 4B, 88% em 9B. O salto grande é de 0,8B pra 4B, uns 24 pontos, com intervalo entre 16 e 33. De 4B pra 9B a diferença compacta cruza zero, e vários 4B nominais, com backbones parecidos, deram resultados bem diferentes. Na família d3, o flagship e o Edge ficam a quase 40 pontos de distância sob o mesmo release, enquanto um 9B, o Microsoft, empata no topo dos hospedados. Tamanho ajuda até 4B; depois disso, a receita de treino manda mais.</p>
<p><strong>O Clef de 27B errou um ticket crítico que dois dos Laya acertaram.</strong> No v1, um cenário de severidade diz que perda contínua de dados em produção é crítica, independentemente de quantos clientes afeta. O registro descreve perda permanente confirmada, de um cliente só. Jev, Clef-flash, Perplexity, d3, Microsoft, Laya typed, Simple-Jev e Laya multilingual responderam &ldquo;crítico&rdquo;. Clef completo, OpenAI, Laya base, Eikos, Jebadiah, Mapika, Kev 4B e Kev 9B responderam &ldquo;degradado&rdquo;.</p>
<blockquote>
  <p>É um caso só, e taxa de erro exigiria muito mais. Mas mostra que a média esconde exatamente o erro que mais custa. Quando os fatos de impacto são estruturados, a regra de severidade devia estar em código, e o modelo entra só pra extrair os fatos do texto livre.</p>

</blockquote>
<p><strong>Hospedado e local divergem com o tempo.</strong> O Clef-flash local reproduziu o hospedado nas 520 classificações do v1 e divergiu em 19 das 504 do v2. A Cloudflare mantém a versão dos pesos por trás do alias hospedado em aberto. Se a reprodutibilidade importa, fixe o hash local.</p>
<p><strong>Confiança alta e segurança são coisas diferentes.</strong> No v2 compacto, Jev, Clef, os dois Clef-flash, Eikos, Jebadiah, OpenAI, Microsoft, Perplexity e o d3 erraram zero palpites acima de 0,9. O Perplexity é o caso extremo: respondeu nesse nível em 96% dos casos sem errar um, com o d3 logo atrás (94%, zero erros). O Microsoft cobriu 95% e o OpenAI só metade. A ressalva do Microsoft: o recorde limpo é só no compacto, porque com exemplos ou distratores ele erra em português com confiança acima de 99%. O Mapika errou 5% dos palpites nesse nível, o Kev 4B 3% e o Simple-Jev 14%. E os dois menores do lote quebraram o padrão com violência: o Julia errou 48 de 71 palpites acima de 0,9, e o d3-edge errou 14 de 68. A cobertura também variou: o Jev respondeu acima de 0,9 em quase 90% dos casos, o Clef em quase 80%, o Clef-flash em 40% e o Laya base em 2 de 168. No v1 o Jev errou 1% dos palpites acima de 0,9 e o Laya base errou 61%. Um limiar de confiança só serve depois de validado na sua distribuição, e o ECE baixo do Laya typed em português deixou ele nos mesmos 36% de acerto.</p>
<p><strong>O Perplexity não caiu em armadilha de apresentação.</strong> Nas três variantes do v1 (opções invertidas, rótulos opacos, comentário malicioso), ele manteve as mesmas respostas do original, sem virar uma única. O d3 repetiu o feito, zero viradas também. O Microsoft só tropeçou nos rótulos opacos (2 viradas, uma pra cada lado); ordem e comentário não mexeram nele. O OpenAI virou 2 em cada variante, e o Laya desabou pra 19% com o comentário. O preço dessa robustez é latência: um segundo e meio por decisão na minha máquina, a pior mediana do lote.</p>
<p><strong>Limiar numérico é problema de código.</strong> A tarefa de triagem por limiar, com números claros e regra explícita, deu 100% no Jev e nos dois Clef-flash e menos de 30% nos dois Laya em inglês. Um <code>if</code> resolve isso com 100% e zero latência. O modelo só entra quando o número está enterrado em texto livre, e mesmo assim o certo é extrair o número e deixar a comparação com o código.</p>
<p><strong>Probabilidade de sorteio é outra habilidade.</strong> Nas 24 sondagens sem informação (moeda, dado), o Jev teve o pior erro de escolha entre opções. A coroa da estimativa numérica mudou de dono com a estreia da OpenAI: o predicado de sim/não dela errou quase nada, enquanto a sonda de escolha devolveu 94% pra cara numa moeda honesta. O Perplexity, campeão de tudo o resto, respondeu 0,73 pra um evento de chance 1 em 4, e o Microsoft foi no mesmo caminho, dando 87% pra moeda. O Laya typed teve o segundo melhor erro de escolha, atrás só do Kev 9B e colado no Clef, e mesmo assim classificou mal. É o &ldquo;aluno que marca a letra A&rdquo; do ensaio do Paulo, agora medido: calibração em sorteio e acerto em classificação são medidas independentes.</p>
<h2>Onde os dados convergem<span class="hx:absolute hx:-mt-20" id="onde-os-dados-convergem"></span>
    <a href="#onde-os-dados-convergem" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><ol>
<li>
<p><strong>O topo geral é de pesos abertos, e agora são dois.</strong> O Perplexity Decider 27B e o Decision 3.0 empataram em 99,4% nos compactos, com 100% em português e rótulos idênticos nas 1.024 classificações, os dois com pesos Apache 2.0 rodando na minha máquina. A vantagem deles sobre o Jev é de menos de 2 pontos e o intervalo encosta no zero, então trate como fotografia deste conjunto. O custo deles é hardware e latência, não API. Na nuvem, a ordem de avaliação mudou: <strong>comece pelo Microsoft Decision-1</strong>, que empata com o Jev no agregado, fecha 100% em português compacto e custa um terço. O Jev entra em seguida, mais rápido e com erros diferentes, porque empate no agregado não é intercambiabilidade. O OpenAI Decisions ficou no meio do caminho em preço e acerto.</p>
</li>
<li>
<p><strong>Rodar local ficou viável em 4B.</strong> Jebadiah, Mapika e Kev 4B entregam entre 87 e 90% nos casos compactos com latência de 200 ms no Strix Halo e 40 a 91 ms na RTX 5090, e num piloto com a sua tarefa qualquer um dos três pode ganhar. Se a sua máquina aguenta 49 GB de pesos, o Perplexity entrega o topo da tabela em casa. A conta financeira justifica usar a máquina que já existe, por controle de dado ou por obrigação de ficar offline. Comprar máquina pra isso ela deixa de justificar.</p>
</li>
<li>
<p><strong>Modelo pequeno é outra categoria.</strong> Julgar o Laya e o Julia pela coluna de acerto é ler a tabela errada. Eles erram da metade pra cima de fábrica, caem feio sob comentário malicioso, e junto com o d3-edge são os únicos da lista que cabem num dispositivo fraco e respondem em dezenas de milissegundos. O Edge é o melhor dos três em acerto (61%), mas despenca em português e erra um em cada cinco palpites confiantes. Se precisão tipo Jev é requisito, risque os três. Se rodar offline em hardware pequeno é requisito, risque todo o resto e comece pelo ajuste fino deles na sua tarefa, que é a medição que falta. E cuidado com o Julia e o Edge em particular: 48 erros em 71 e 14 em 68 palpites confiantes são o retrato de modelos que não sabem o que não sabem.</p>
</li>
<li>
<p><strong>Português custa uns 14% mais tokens</strong> e derruba os modelos do meio da tabela entre 1 e 10 pontos, com Kev 9B e Clef-flash no pior caso. O Jev perde nada, o OpenAI empata as duas línguas, e o Perplexity, o d3 e o Microsoft fecham 100% em português compacto, melhor que o inglês deles, embora o Microsoft volte a errar em português quando o contexto cresce. O Julia faz o caminho contrário e despenca 13 pontos, e o Edge despenca 14. Pra audiência brasileira, essa é a primeira coluna a olhar, antes do preço.</p>
</li>
</ol>
<blockquote>
  <p>E o que vale pra todos: nenhum desses modelos substitui a regra que já está em código. Limiar numérico, política de severidade com fatos estruturados, permissão de ferramenta, tudo isso fica no <code>if</code>. O modelo entra pra transformar texto livre em fato estruturado. E o teste que importa é o seu, com os seus tickets, porque cada célula desta tabela tem 12 cenários e a sua operação tem milhares.</p>

</blockquote>
<p>Os casos, as respostas brutas de cada modelo, os scripts de pontuação e o guia pra reproduzir tudo estão no <a href="https://github.com/akitaonrails/jev-docs-benchmarks"target="_blank" rel="noopener">repositório do benchmark</a>. Se você rodar com os seus tickets e chegar em outro ranking, me conta.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>modelos-locais</category><category>inteligencia-artificial</category><category>llms</category></item><item><title>O Mistério do Genesys PI da LUA Vision - Modelo Frontier Brasileiro??</title><link>https://www.akitaonrails.com/2026/09/30/o-misterio-do-genesys-pi-da-lua-vision-modelo-frontier-brasileiro/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/09/30/o-misterio-do-genesys-pi-da-lua-vision-modelo-frontier-brasileiro/</guid><pubDate>Wed, 30 Sep 2026 19:00:00 -0300</pubDate><description>&lt;p&gt;Semana passada publiquei &lt;a href="https://www.akitaonrails.com/2026/09/23/llm-benchmark-v4-genesys-pi-novo-competidor-brasileiro/"&gt;o primeiro teste do Genesys PI&lt;/a&gt;, o modelo da LUA Vision, no meu benchmark v4 de sabotagem. O resumo daquela rodada: o tier House fechou em 83,5, empatado com o Grok 4.7 no meio do pelotão, e o Enterprise em 82,5, um degrau abaixo.&lt;/p&gt;
&lt;p&gt;Os dois pegaram toda sabotagem barulhenta; o House deixou passar os dois itens silenciosos que quase todo modelo deixa (#7b e #8), e o Enterprise deixou três (#7a, #7b e #9). O custo nocional do House, uns $460, foi o mais caro da tabela inteira, e a causa era ausência de cache de prompt na API.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Semana passada publiquei <a href="/2026/09/23/llm-benchmark-v4-genesys-pi-novo-competidor-brasileiro/">o primeiro teste do Genesys PI</a>, o modelo da LUA Vision, no meu benchmark v4 de sabotagem. O resumo daquela rodada: o tier House fechou em 83,5, empatado com o Grok 4.7 no meio do pelotão, e o Enterprise em 82,5, um degrau abaixo.</p>
<p>Os dois pegaram toda sabotagem barulhenta; o House deixou passar os dois itens silenciosos que quase todo modelo deixa (#7b e #8), e o Enterprise deixou três (#7a, #7b e #9). O custo nocional do House, uns $460, foi o mais caro da tabela inteira, e a causa era ausência de cache de prompt na API.</p>
<p>Muita coisa aconteceu desde então, e este texto é a continuação. Vou na ordem que interessa: primeiro os números novos, depois a pergunta que todo mundo me fez em comentário e DM (&ldquo;isso não é um Qwen com adesivo?&rdquo;), e só no fim a parte especulativa sobre o que a empresa diz que construiu.</p>
<p>O spoiler que justifica o texto: depois que a LUA corrigiu a API, o House refez o benchmark em 95,5. Na minha tabela, isso é empate com o Claude Fable 5.1 e o GPT 6 luna, e o custo da rodada caiu 85%. Não estou dizendo que é um Fable em todos os sentidos; estou dizendo que, neste cenário de teste, se saiu como um. Os detalhes, e as ressalvas de ruído, vêm logo abaixo.</p>
<p>Antes disso, o pano de fundo que deixa tudo isso estranho: o consenso da indústria é que treinar modelo de fronteira custa dezenas ou centenas de milhões de dólares em GPU, e que, portanto, uma empresa pequena, sem rodada de investimento bilionária, não deveria chegar nem perto de um. O gpt-oss, o modelo aberto da própria OpenAI, com o laboratório mais bem financiado do mundo atrás, não conseguiu completar o meu benchmark no mesmo harness em que o Genesys PI rodou. O modelo brasileiro completou duas vezes por tier.</p>
<p>Este texto é organizado em cima dessa tensão. Primeiro, o que o modelo fez em experimentos que eu controlo. Depois, o que eu consegui e o que não consegui verificar sobre como ele existe.</p>
<h2>Disclaimer novo<span class="hx:absolute hx:-mt-20" id="disclaimer-novo"></span>
    <a href="#disclaimer-novo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Desde o primeiro artigo, conversei diretamente com dois dos quatro cofundadores da LUA Vision: <a href="https://www.linkedin.com/in/paulocamara/"target="_blank" rel="noopener">Paulo Câmara</a>, CTO, e <a href="https://www.linkedin.com/in/eronidesjunior/"target="_blank" rel="noopener">Eronides Junior</a>, CRO. O Paulo é o responsável técnico, formado pela FGV com doutorado pela Universidade de Tel Aviv, e a tese dele é a origem declarada da arquitetura do modelo.</p>
<p>Antes da LUA, segundo o LinkedIn dele, o histórico é de consultoria corporativa pesada, implantação de Oracle EBS e ERP em empresa grande, e ele mantém uma série de ensaios sobre IA no LinkedIn. Já o Eronides cuida do lado comercial; antes da LUA ele foi <a href="https://portalerp.com/br/noticia/eronides-junior-assume-a-posicao-de-cro-na-softwareone"target="_blank" rel="noopener">CRO da SoftwareOne Brasil</a>, depois de passar por marketing, serviços e operações na mesma empresa.</p>
<p>Repito o que já disse e vale dobrado agora que falei com eles: não tenho relação comercial nenhuma com a LUA Vision. Não sou sócio, não sou investidor, não assinei contrato, não assinei NDA, não recebi nada além da mesma chave de avaliação gratuita do teste anterior. Nada deste texto passou por eles antes de publicar. Até aqui, sou só um cara curioso com uma API na mão.</p>
<p>Esse último detalhe importa mais do que parece. Como não assinei NDA, nunca tive acesso a nenhum dado interno da empresa: nem peso, nem receita de treino, nem curva de loss, nem conta de hardware. Tudo o que vem abaixo é experimento de caixa-preta em cima da API pública e consulta a informação pública. Onde eu digo &ldquo;checado&rdquo;, foi eu que medi; onde eu digo &ldquo;eles dizem&rdquo;, é a palavra deles.</p>
<h2>Os números novos: re-teste depois das correções<span class="hx:absolute hx:-mt-20" id="os-números-novos-re-teste-depois-das-correções"></span>
    <a href="#os-n%c3%bameros-novos-re-teste-depois-das-corre%c3%a7%c3%b5es" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Depois do primeiro artigo, o Paulo avisou que tinha corrigido alguns bugs na API, o principal sendo justamente o cache de prompt, e pediu que eu rodasse de novo. Rodei. É uma rodada limpa e independente dos dois tiers, no mesmo protocolo de 14 sabotagens, com a rodada original preservada intacta pra comparação lado a lado. Um detalhe de método: o v4 é um benchmark de rodada única, então a nota de vigilância tem ruído, e eu volto nisso já já.</p>
<p>Antes de rodar, confirmei que o cache existia mesmo. Um probe com prefixo repetido no endpoint devolveu <code>cached_tokens: 4121 / 4124</code> na segunda chamada. No teste original, esse número era sempre zero.</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: center">Nota (original → re-teste)</th>
          <th>Nunca corrigido (original → re-teste)</th>
          <th style="text-align: center">Custo nocional (original → re-teste)</th>
          <th style="text-align: center">Tempo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Genesys PI House</strong></td>
          <td style="text-align: center">83,5 → <strong>95,5</strong> (+12,0)</td>
          <td>#7b, #8 → <strong>nenhum</strong></td>
          <td style="text-align: center"><del>$460 → **</del>$70** (−85%)</td>
          <td style="text-align: center">68min → 94min</td>
      </tr>
      <tr>
          <td><strong>Genesys PI Enterprise</strong></td>
          <td style="text-align: center">82,5 → <strong>82,0</strong> (−0,5)</td>
          <td>#7a, #7b, #9 → #7b, #8</td>
          <td style="text-align: center"><del>$19 → **</del>$2,40** (−87%)</td>
          <td style="text-align: center">39min → 33min</td>
      </tr>
  </tbody>
</table>
<p>Pra situar na tabela geral: na rodada original, o House empatava com o Grok 4.7 em 83,5. Com 95,5, ele passaria a empatar com o Claude Fable 5.1, o Sakana Fugu Ultra v2 e o GPT 6 luna, na posição 9 entre 46 modelos. O Enterprise, a 82,0, empataria com o DeepSeek V4 Pro (base). Digo &ldquo;empataria&rdquo; porque, como explico abaixo, mantive a rodada original como entrada oficial do ranking.</p>
<p>E vale deixar a régua explícita: não estou dizendo que o Genesys PI é equivalente ao Fable em todos os sentidos. Estou dizendo que, neste cenário de teste específico, ele se saiu como o Fable. Em outra carga de trabalho, o seu resultado pode ser diferente.</p>
<p>O que melhorou de forma clara e reproduzível:</p>
<ul>
<li><strong>Custo caiu 85% a 87%.</strong> O volume de token foi o mesmo, uns 40 milhões no House e uns 20 milhões no Enterprise, mas agora o contexto repetido é cobrado na taxa de cache em vez do preço cheio de entrada. O House sai de rodada mais cara da tabela pra custo médio.</li>
<li><strong>Confiabilidade.</strong> A rodada original do Enterprise precisou de uma segunda tentativa por causa daquele loop de <code>grep</code> no primeiro sprint. No re-teste, convergiu de primeira. Nenhum loop nos dois modelos.</li>
<li><strong>Disciplina de teste.</strong> O Enterprise original não escreveu teste automatizado nenhum. No re-teste, escreveu uma suíte RSpec de verdade, com teste de model, request e sistema.</li>
<li><strong>Detecção mais cedo.</strong> Os dois pegaram as sabotagens barulhentas (#1 a #3) até o sprint 3, e o House pegou tudo de #1 a #6 até o sprint 4, coisa que as rodadas originais deixaram, em parte, pro capstone.</li>
</ul>
<p>O que não dá pra afirmar é que o modelo ficou mais vigilante. O House subiu 12 pontos, mas o Enterprise caiu meio ponto na mesma rodada. Como cache de prompt não tem como afetar detecção de sabotagem, dois tiers do mesmo modelo andando em direções opostas é o retrato de variância de rodada única.</p>
<p>Os +12 do House são grandes o suficiente pra sugerir que os outros ajustes do Paulo melhoraram o modelo, mas uma rodada por modelo não confirma isso. Pra separar sinal de ruído eu precisaria de três ou mais rodadas por modelo, o que não fiz.</p>
<p>Pra calibrar o tamanho desse ruído: nesta mesma semana, o GPT 5.5, que tinha 100,0 na tabela, rodou de novo com modelo e harness idênticos e fechou em 91,0. Nove pontos de diferença sem mudar nada. Então trate as notas de vigilância como uma faixa.</p>
<p>E os dois sobreviventes silenciosos continuam lá. No re-teste do House, o índice derrubado sem teste de guarda (#7b) e o agregado escondido (#8) só foram corrigidos na revelação; no do Enterprise, nem na revelação. É o mesmo ponto cego de disfarce que a maioria da tabela tem, incluindo modelo de fronteira.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> o bug de cache está corrigido e verificado, e a redução de custo é real. A nota de vigilância ficou dentro do ruído: Enterprise igual, House pra cima mas sem confirmação estatística. Na tabela geral, mantive as rodadas originais como entrada oficial, justamente pra não premiar uma rodada só.</p>

</blockquote>
<h3>Preço: ainda não é o final, e não vai ser por token<span class="hx:absolute hx:-mt-20" id="preço-ainda-não-é-o-final-e-não-vai-ser-por-token"></span>
    <a href="#pre%c3%a7o-ainda-n%c3%a3o-%c3%a9-o-final-e-n%c3%a3o-vai-ser-por-token" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Os valores de custo acima continuam sendo nocionais, calculados em cima da tabela de exemplo que a API expõe, e a própria LUA já avisou, no artigo anterior, que aquilo não é o preço de mercado. Conversando com o Eronides, ele detalhou o que vem por aí: eles não pretendem cobrar por token, como todo mundo cobra, e o produto não é pra ser B2C como os chats de assinatura. A aposta é B2B, por licença de uso, com o modelo rodando na infraestrutura do próprio cliente.</p>
<p>Na prática, isso significa uma empresa com um modelo na faixa do Grok, capaz de tarefa avançada como programação, rodando on-premise, fora da nuvem, com a garantia de que nenhum dado sensível sai do prédio. Modelo de fronteira hoje é serviço de nuvem de empresa estrangeira, e setor regulado convive mal com isso. Se a LUA conseguir entregar exatamente esse pacote, e o &ldquo;se&rdquo; continua grande, isso muda o jogo pra muita empresa brasileira.</p>
<p>Mesmo com a ressalva de que o preço por token é só exemplo, o custo nocional ao lado da tabela ajuda a calibrar. As rodadas completas mais baratas do campo inteiro são o DeepSeek V4 Flash ($0,97) e o MiMo V2.5 Pro ($1,03); o Enterprise, a ~$2,40, fica nessa vizinhança. Do outro lado, o Opus 5.5 custou $16,63, o Sonnet 5 uns $27 e o GPT 5.5 $34,69. E o House, que na rodada original era a rodada mais cara de todo o campo, agora está no meio do pelotão.</p>
<p>A política de preço, segundo eles, sai em 7 de outubro de 2026.</p>
<h2>Experimento extra: o Genesys PI auditando o ai-jail<span class="hx:absolute hx:-mt-20" id="experimento-extra-o-genesys-pi-auditando-o-ai-jail"></span>
    <a href="#experimento-extra-o-genesys-pi-auditando-o-ai-jail" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Benchmark de sabotagem mede vigilância dentro de um app pequeno e controlado. Eu queria ver o modelo num problema de verdade, então dei pra ele o meu <a href="https://github.com/akitaonrails/ai-jail"target="_blank" rel="noopener">ai-jail</a>, o sandbox de sistema operacional que roda agente de código dentro de bubblewrap, Landlock e seccomp no Linux e <code>sandbox-exec</code> no macOS. É um projeto em Rust, com 776 testes unitários, 70 crates de dependência e uma superfície de segurança que eu conheço bem.</p>
<p>A tarefa: auditoria de segurança completa da <a href="https://github.com/akitaonrails/ai-jail/releases/tag/v2.3.0"target="_blank" rel="noopener">versão 2.3.0</a>, no commit <a href="https://github.com/akitaonrails/ai-jail/commit/f62d5761b18b9d9765b4c88aacc4ad77ff0db5e4"target="_blank" rel="noopener"><code>f62d576</code></a>, somente leitura, com ameaça modelada, evidência por linha de código e reprodução onde desse. Quem quiser conferir pode abrir o repositório nesse commit e seguir as referências de arquivo e linha dos relatórios.</p>
<p>Pra ter régua, rodei uma segunda auditoria independente, com outro modelo, sem acesso ao relatório do Genesys até fechar a própria lista de candidatos. Depois cruzei os dois relatórios e ainda comparei contra dois security advisories que estavam abertos no GitHub, escritos por gente de fora contra versões anteriores do projeto.</p>
<p>O relatório do Genesys PI (chamo de auditoria A) veio com 26 achados: 5 High, 17 Medium, 3 Low e 1 informativo. O da segunda auditoria (B) veio com 12: 2 High, 7 Medium e 3 Low. O cruzamento:</p>
<ul>
<li><strong>11 achados em comum</strong>, incluindo os dois High que importam de verdade: metadado de worktree forjado que expõe qualquer diretório do host pra leitura e escrita, e entrada de ambiente duplicada que passa por cima do isolamento de credencial. Os dois foram reproduzidos empiricamente pelas duas auditorias, de forma independente.</li>
<li><strong>11 achados só na A</strong>, entre eles toda a superfície do macOS (a B não tinha Mac), a classe de esgotamento de recurso no proxy de egress, e uma corrupção de cadeia de auditoria entre processos que a B só tinha rejeitado no caso mais simples.</li>
<li><strong>3 achados só na B</strong>, sendo um Medium relevante que a A não viu: duas variáveis de ambiente de teste que sobrevivem no binário de release e desligam a proteção contra SSRF e a validação de raiz TLS.</li>
<li>A B rejeitou um bug real (comparação de largura errada numa regra de seccomp) e só o confirmou depois que a A apontou. A A não cometeu erro equivalente.</li>
</ul>
<p>Contra os advisories externos, o placar também favorece a A: dos cinco achados do advisory mais grave, a A pegou quatro e a B pegou dois (mais um depois da pista da A). Os dois deixaram passar o mesmo item, um caminho em que a configuração de projeto não confiável consegue limpar o modo lockdown, o que serve de lembrete de que nenhuma auditoria sozinha fecha a lista.</p>
<p>Não estou dizendo que o Genesys PI é o melhor auditor de segurança que existe; foi uma comparação de dois modelos, num projeto só, numa rodada só. Estou dizendo que, num código de verdade, com ameaça de verdade, ele produziu o relatório mais forte dos dois, com severidade calibrada e reprodução empírica dos itens críticos, e eu vou consertar a lista dele. Isso é mais do que eu esperava ver de um modelo que a maioria das pessoas nunca ouviu falar, e mais do que o gpt-oss, que nem chegou ao fim do benchmark de sabotagem, teria condição de fazer.</p>
<h2>A pergunta que todo mundo fez: isso é um Qwen rebatizado?<span class="hx:absolute hx:-mt-20" id="a-pergunta-que-todo-mundo-fez-isso-é-um-qwen-rebatizado"></span>
    <a href="#a-pergunta-que-todo-mundo-fez-isso-%c3%a9-um-qwen-rebatizado" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Não me ofendo com a pergunta, eu mesmo fiz. Modelo brasileiro, equipe pequena, nota de fronteira: a hipótese mais barata é que exista outro modelo por baixo. As três versões da suspeita que chegaram até mim foram: é um Qwen ou DeepSeek com adesivo; é o gpt-oss da OpenAI com outra roupa; ou a API é só um proxy pra Claude ou GPT.</p>
<p>O limite disso tudo vem antes de qualquer resultado. Numa situação de caixa-preta, sem acesso a peso, é impossível afirmar com 100% de certeza de onde um modelo veio. O que dá pra fazer é excluir hipóteses. Foi isso que eu fiz, com um conjunto de testes reproduzíveis que estão <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">no repositório do benchmark</a>, e depois pedi pro Grok revisar o método e o texto como um avaliador hostil, pra tirar qualquer conclusão que estivesse mais forte do que os dados.</p>
<h3>O teste decisivo: o tokenizador<span class="hx:absolute hx:-mt-20" id="o-teste-decisivo-o-tokenizador"></span>
    <a href="#o-teste-decisivo-o-tokenizador" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Cada família de modelo tem um tokenizador próprio, o vocabulário e as regras que quebram texto em token. Um fine-tune, um LoRA ou um pré-treino continuado herda o tokenizador do modelo base; não dá pra trocar sem retreinar do zero. Então o tokenizador funciona como impressão digital de linhagem.</p>
<p>Medi quantos tokens a API da LUA cobra por uma bateria de strings (chinês, português acentuado, inglês, sequência de dígitos, emoji com ZWJ), cancelando o prompt de sistema que eles injetam, e comparei com os tokenizadores de referência rodando localmente: <code>o200k</code> da OpenAI, <code>cl100k</code>, Qwen, DeepSeek, Llama 3 e Mistral. A distância somada até a LUA, na rodada final do teste (<code>tokenizer_v2</code> no repositório):</p>
<ul>
<li><strong>o200k (OpenAI): 2</strong></li>
<li>Llama 3: 68</li>
<li>cl100k (GPT-4, Phi-4, DBRX): 134</li>
<li>Qwen: 193</li>
<li>DeepSeek: 255</li>
<li>Mistral: 289</li>
</ul>
<p>Os discriminadores mais fortes: chinês empacota do jeito do o200k e não do jeito mais apertado do Qwen, uma sequência de dígitos custa 67 tokens onde Qwen e DeepSeek cobram 200, e emoji com ZWJ só bate com o o200k.</p>
<p>Ou seja: <strong>o Genesys PI usa o <code>o200k_base</code>, o tokenizador público da OpenAI, com confiança alta.</strong> Isso mata a hipótese de Qwen, DeepSeek, Llama ou Mistral rebatizado, porque nenhum deles usa esse vocabulário e nenhum fine-tune conseguiria adquirir ele. Um segundo teste, de tokens mal treinados (as strings chinesas que todo modelo o200k da OpenAI corrompe ao repetir), deu o mesmo resultado: a LUA erra exatamente as mesmas 3 de 8 strings que gpt-oss, GPT-4o-mini e GPT-5 erram (o GPT-4o erra essas três e mais uma), enquanto Claude e Qwen reproduzem todas limpas: embeddings nativos da família o200k.</p>
<h3>Não é o gpt-oss de fábrica<span class="hx:absolute hx:-mt-20" id="não-é-o-gpt-oss-de-fábrica"></span>
    <a href="#n%c3%a3o-%c3%a9-o-gpt-oss-de-f%c3%a1brica" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O gpt-oss, o modelo aberto da OpenAI, é o único peso público relevante que usa a mesma família de vocabulário, então era o candidato natural. Mas o gpt-oss serve com o <code>o200k_harmony</code>, uma variante que tem tokens especiais próprios (<code>&lt;|channel|&gt;</code>, <code>&lt;|message|&gt;</code> e afins) como token único. Na API da LUA, cada um desses marcadores custa uns 4 tokens de texto comum. O vocabulário é o <code>o200k_base</code> puro, sem os tokens do Harmony.</p>
<p>Isso exclui o gpt-oss servido do jeito padrão. E o próprio benchmark ajuda: o gpt-oss, nas duas versões, não conseguiu completar o v4 no mesmo harness opencode em que a LUA rodou. O peso cru nem constrói o app, enquanto o Genesys PI passa pelos sete sprints, o House em Tier A e o Enterprise em Tier B. Um adesivo leve em cima do gpt-oss não faz isso.</p>
<p>O que esse teste não exclui é alguém pegar o peso do gpt-oss, arrancar o Harmony na hora de servir, botar um template próprio por cima e retreinar bastante o comportamento de agente. Nesse ponto, o resultado já seria um modelo novo pra efeitos práticos, mas a linhagem seria OpenAI, e essa célula fica em aberto na tabela.</p>
<h3>Não é um proxy fino pra Claude ou GPT<span class="hx:absolute hx:-mt-20" id="não-é-um-proxy-fino-pra-claude-ou-gpt"></span>
    <a href="#n%c3%a3o-%c3%a9-um-proxy-fino-pra-claude-ou-gpt" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A API da LUA rejeita <code>temperature</code>, <code>top_p</code>, <code>n</code>, <code>presence_penalty</code> e <code>logprobs</code>, que a API de chat clássica da OpenAI aceita, e rejeita também <code>min_p</code>, <code>top_k</code> e <code>repetition_penalty</code>, que qualquer servidor vLLM na frente de um modelo aberto aceitaria. Os cabeçalhos HTTP são todos <code>x-lua-*</code>, sem rastro de OpenAI, Anthropic, Cloudflare ou OpenRouter. Um proxy transparente repassaria os parâmetros e deixaria algum rastro.</p>
<p>O benchmark reforça isso de um jeito que gostei. Se a LUA fosse um passthrough do GPT 6 luna ou do GPT 5.5, ela herdaria a força deles nas sabotagens silenciosas: o GPT 5.5 pegou #7b e #8 sem aviso, o luna também.</p>
<p>A LUA falha exatamente nesses dois itens, de forma estável, nas quatro rodadas que fiz. Um proxy não fica consistentemente mais fraco que o modelo que está por trás numa característica específica. Isso é o retrato de um modelo com fraquezas próprias.</p>
<p>Alguém poderia perguntar se eu só comparei com a família OpenAI. Não. Peguei a assinatura mais discriminante do benchmark, o conjunto de itens que cada modelo nunca corrigiu, e comparei a da LUA contra todos os cerca de 44 modelos da tabela. O par {#7b, #8} do House aparece mais perto da família Qwen (Qwen 3.7 Max e Qwen 3.8 27B) do que de qualquer OpenAI, que em geral fecha sem item nenhum.</p>
<p>Só que isso é artefato de faixa de nota, não de linhagem: #7b e #8 são as duas sabotagens mais disfarçadas, e todo modelo na faixa dos 80 pontos erra as duas, de qualquer família, enquanto o re-teste da LUA a 95,5 não deixou nenhuma.</p>
<p>O resultado interessante é que os três sinais comportamentais da LUA apontam pra três direções diferentes: a cauda de erro parece Qwen, a correção rara do #6 parece GPT 6 luna, e o tokenizador e o formato da API parecem OpenAI. Um proxy ou clone de verdade parece com um único modelo em todos os eixos ao mesmo tempo. A LUA não parece com nenhum modelo da tabela em todos os eixos.</p>
<p>Teve uma coincidência que vale registrar: dos cerca de 40 modelos cuja correção eu verifiquei, só dois adicionaram um índice único <code>LOWER(email)</code> no banco ao corrigir a sabotagem #6. Foram a LUA e o GPT 6 luna.</p>
<p>É uma convergência rara, mas é também a correção mais completa possível, o tipo de coisa que dois modelos cuidadosos podem chegar sozinhos. E os dois pegaram o item em momentos diferentes da rodada. Levanta uma sobrancelha, mas não chega a suspeita.</p>
<p>Fica em aberto, porém, um wrapper grosso, com bastante lógica própria, na frente de uma API de raciocínio. A API deles aceita <code>reasoning_effort</code>, que é um controle específico de modelo de raciocínio da OpenAI, e um contexto silencioso de 250 mil tokens. Isso é compatível tanto com uma pilha própria que copiou a interface da OpenAI quanto com um wrapper mais elaborado. Caixa-preta não separa os dois.</p>
<h3>O que fica em aberto: do zero ou destilado<span class="hx:absolute hx:-mt-20" id="o-que-fica-em-aberto-do-zero-ou-destilado"></span>
    <a href="#o-que-fica-em-aberto-do-zero-ou-destilado" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Aqui está o limite que nenhum teste de API atravessa. Um modelo novo, com peso próprio e tokenizador o200k, pode ter sido treinado do zero em dado próprio, ou pode ter sido treinado do zero em cima de saídas de Claude e GPT (destilação). Os dois produzem exatamente as mesmas observações que eu fiz.</p>
<p>Tentei uma grade de similaridade com 20 prompts contra um painel de professores possíveis, e o resultado foi nulo: nenhum professor se destacou nos dois eixos que consegui medir (o terceiro eixo, similaridade por embedding, travou por falta de crédito na API e ficou de fora), o que é consistente com mistura própria e também com uma sopa de traços de vários professores. &ldquo;Não é Qwen&rdquo; não vira &ldquo;treinado do zero&rdquo;.</p>
<h3>Uma inconsistência que preciso registrar<span class="hx:absolute hx:-mt-20" id="uma-inconsistência-que-preciso-registrar"></span>
    <a href="#uma-inconsist%c3%aancia-que-preciso-registrar" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A pesquisa publicada da LUA, o paper <em>&ldquo;O peso que você não escolheu&rdquo;</em>, gira em torno do &ldquo;imposto do token&rdquo;, o custo extra que tokenizador otimizado pra inglês cobra de língua como o português, medido por eles em 31 línguas. Só que a API que eu medi tokeniza português com a mesma fertilidade do o200k, 1,31 tokens por token de inglês, contra 0,69 de um tokenizador nativo de português como o Tucano.</p>
<p>Ou seja, o produto que me deram usa um vocabulário otimizado pra inglês, não um vocabulário próprio pra português. Isso não diz nada sobre a linhagem do modelo, e adotar o o200k é a escolha barata e profissional que qualquer laboratório pequeno faria. Mas é um ponto em que o material de pesquisa e a API não estão contando a mesma história, e é a primeira pergunta que vou fazer pro Paulo.</p>
<h3>Placar da forense<span class="hx:absolute hx:-mt-20" id="placar-da-forense"></span>
    <a href="#placar-da-forense" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><table>
  <thead>
      <tr>
          <th>Hipótese</th>
          <th>Veredito</th>
          <th>Confiança</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Qwen, DeepSeek, Llama ou Mistral rebatizado</td>
          <td>Excluído</td>
          <td>Alta</td>
      </tr>
      <tr>
          <td>gpt-oss servido do jeito padrão (Harmony)</td>
          <td>Argumentado contra</td>
          <td>Média-alta</td>
      </tr>
      <tr>
          <td>Peso do gpt-oss com Harmony arrancado + template próprio</td>
          <td>Não excluído</td>
          <td>—</td>
      </tr>
      <tr>
          <td>Proxy fino pra GPT ou Claude</td>
          <td>Argumentado contra</td>
          <td>Média</td>
      </tr>
      <tr>
          <td>Wrapper grosso sobre uma API de raciocínio</td>
          <td>Não excluído</td>
          <td>—</td>
      </tr>
      <tr>
          <td>Proxy ou clone comportamental de qualquer um dos ~44 modelos do v4</td>
          <td>Argumentado contra</td>
          <td>Média</td>
      </tr>
      <tr>
          <td>Modelo novo, peso próprio, tokenizador o200k público</td>
          <td>Consistente com tudo que medi</td>
          <td>Média</td>
      </tr>
      <tr>
          <td>Treinado do zero versus destilado de modelo de fronteira</td>
          <td>Não separável em caixa-preta</td>
          <td>—</td>
      </tr>
  </tbody>
</table>
<p>Em uma frase: com confiança alta, o Genesys PI não é modelo chinês rebatizado nem fine-tune de Llama ou Mistral; com confiança média a média-alta, os testes argumentam contra gpt-oss de fábrica e contra proxy transparente. Tudo que medi é consistente com um modelo independente, com peso e fraquezas próprios, em cima de um tokenizador público. Se ele foi treinado do zero ou destilado, só peso ou documento resolve.</p>
<h3>Mais um disclaimer: só comparei com quem eu testei<span class="hx:absolute hx:-mt-20" id="mais-um-disclaimer-só-comparei-com-quem-eu-testei"></span>
    <a href="#mais-um-disclaimer-s%c3%b3-comparei-com-quem-eu-testei" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O painel de tokenizadores tem OpenAI, Qwen, DeepSeek, Llama e Mistral; o painel de comportamento da API tem GPT-4o, gpt-oss, GPT-5, Claude, Qwen, DeepSeek, Llama e Gemini; e o cruzamento comportamental do benchmark cobre os cerca de 44 modelos que já rodaram o v4. É o que cobre a esmagadora maioria do que roda em produção hoje, mas existem dezenas de outros modelos abertos que eu não comparei. Sempre existe a chance de que o parente do Genesys PI seja um deles e eu tenha passado batido. &ldquo;Não encontrei correlação&rdquo; significa &ldquo;não encontrei entre os que testei&rdquo;, e nada além disso.</p>
<p>Dito isso, repare no tamanho do esforço que seria necessário pra enganar essa análise. Alguém teria que adotar o tokenizador da OpenAI, mascarar a identidade do modelo no servidor de forma que resista a override de prompt, construir um gateway próprio que rejeite exatamente os parâmetros que um servidor de modelo aberto aceitaria, manter fraquezas estáveis e próprias ao longo de quatro rodadas, e ainda completar um benchmark de sete sprints em nível de fronteira. Se isso não for um modelo de verdade, o trabalho de fingir que é já seria extraordinário. A partir de certo ponto, a falsificação convincente de um modelo é indistinguível de ter um modelo.</p>
<h2>Agora sim: o que a LUA diz que fez<span class="hx:absolute hx:-mt-20" id="agora-sim-o-que-a-lua-diz-que-fez"></span>
    <a href="#agora-sim-o-que-a-lua-diz-que-fez" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Tudo daqui pra baixo é conversa, com o Paulo e com o material público deles, e nada disso eu consegui checar, então marco como tal.</p>
<p>Ninguém pode ser culpado por desconfiar. O consenso que abriu este texto vale aqui com força total: pelo custo aceito de treinar modelo de fronteira, a LUA, que pelo que o Paulo me disse não tem rodada de investimento nenhuma, não deveria ter chegado onde chegou. Eu mesmo escrevi, semana passada, que nunca achei que treinar modelo de fronteira no Brasil fosse economicamente viável.</p>
<p>Contra esse senso comum, o que eu tenho na mão é um modelo que, pelo meu experimento de caixa-preta, parece novo, sem parentesco com nenhum modelo aberto conhecido, sem cara de proxy, e possivelmente não é só mais uma destilação. Isso tira da mesa a explicação mais fácil, sem provar a história deles.</p>
<p>O que o Paulo me contou, e que bate com muita coisa que eu já penso faz tempo:</p>
<ul>
<li><strong>Modelo de trilhão de parâmetro é mais marketing do que necessidade.</strong> A tese dele, e a minha, é que modelo menor com capacidade agêntica de verdade (tool calling sólido, cache de prompt, atenção eficiente em contexto grande) é a combinação vencedora. A conta de custo do meu próprio benchmark aponta na mesma direção: modelo pequeno e barato empatando com modelo caro é o padrão da tabela.</li>
<li><strong>O pico de raciocínio ficou pra trás.</strong> Nós dois achamos que a geração do GPT-4 e dos primeiros modelos &ldquo;o&rdquo; foi onde o raciocínio parecia melhor, ainda sem capacidade agêntica. Depois disso, os provedores entraram numa guerra de tamanho de parâmetro como estratégia de marketing, e o raciocínio foi ficando gradualmente mais burro enquanto o modelo ficava maior. Isso é opinião nossa; não medi nada disso.</li>
<li><strong>Modelo pequeno com raciocínio e agente decente chega em resultado parecido.</strong> É o que o meu benchmark mostra quando o Genesys PI empata com Grok e fica na faixa de Kimi e DeepSeek, e é a aposta central deles.</li>
<li><strong>O treino foi feito em hardware de prateleira, sem CUDA.</strong> O Paulo diz que treinou em hardware AMD e ARM64 (MacBook incluso), em poucos meses, e que com financiamento seria mais rápido. Essa é a afirmação mais forte de todas, e é a que eu menos consigo verificar. Zero evidência de qualquer lado; registro como dito.</li>
<li><strong>Arquitetura própria, não publicada.</strong> O material público fala em NCAS, uma arquitetura &ldquo;inspirada no cérebro&rdquo; com cinco fases de treino, e diz que o detalhe técnico fica sob NDA. Na conversa, o Paulo descreve isso como um desenho pós-transformer, com 70 bilhões de parâmetros (número que aparece na issue que eles abriram no LiveBench, descrita lá como transformer, aliás), superior ao que os modelos abertos chineses entregam no mesmo tamanho, e diz que já tem um modelo mais eficiente que o Genesys PI em desenvolvimento, ainda sem acesso pra teste.</li>
</ul>
<p>Se tudo isso for verdade, o estrago no status quo é grande. Quebra o monopólio da NVIDIA no treino e quebra o cadeado que os laboratórios de fronteira têm em cima de modelo de fronteira. Afirmação desse tamanho exige evidência desse tamanho, e eu não tenho. O que tenho é um modelo que existe, que eu posso testar, e que passou em tudo que eu consegui jogar em cima dele.</p>
<h2>Onde eu estou parado<span class="hx:absolute hx:-mt-20" id="onde-eu-estou-parado"></span>
    <a href="#onde-eu-estou-parado" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Checado, por mim:</p>
<ul>
<li>o Genesys PI é um modelo que existe, responde e completa um benchmark difícil na faixa de Tier A e B da minha tabela, em duas rodadas independentes por tier;</li>
<li>o bug de cache foi corrigido e o custo caiu 85%;</li>
<li>o tokenizador é o <code>o200k_base</code> público, o que exclui derivação de Qwen, DeepSeek, Llama e Mistral;</li>
<li>a API não se comporta como proxy transparente e o modelo tem fraquezas próprias e estáveis;</li>
<li>o gpt-oss de fábrica não explica o resultado;</li>
<li>comparada contra todos os ~44 modelos do v4, a LUA não se parece com nenhum deles em todos os eixos.</li>
</ul>
<p>Não checado, e é só a palavra deles:</p>
<ul>
<li>que o modelo foi treinado do zero e não destilado;</li>
<li>que a arquitetura é nova e pós-transformer;</li>
<li>que o treino aconteceu em hardware de prateleira, AMD e ARM64, sem CUDA, em poucos meses;</li>
<li>que existe um modelo melhor a caminho.</li>
</ul>
<p>Em aberto, e que eu vou perguntar:</p>
<ul>
<li>como conciliar o discurso do &ldquo;imposto do token&rdquo; com uma API que tokeniza português igual ao o200k.</li>
</ul>
<p>O que resolveria isso de vez é documento, e não mais prompt: o arquivo do tokenizador, a receita de treino com contagem de token e de compute, a inicialização (aleatória ou continuada de outro peso), curva de loss, e um benchmark held-out que eu mesmo rode.</p>
<p>Enquanto isso não chega, minha posição é a que está na tabela acima: um modelo que se comporta como independente, em cima de um tokenizador público, com uma origem que ninguém de fora consegue certificar. Mais do que eu esperava de uma empresa desse tamanho, menos do que o site deles vende.</p>
<p>E preciso registrar o que não cabe em tabela: esses modelos são fascinantes, e talvez a coisa mais intrigante que eu testei em meses. Por tudo que a indústria diz, eles não deveriam ser possíveis, não deveriam existir. Mas eu testei, extensivamente, com todo teste de caixa-preta que consegui montar, e não consegui quebrar a história. Funciona como anunciado, e o Enterprise fez uma rodada inteira do meu benchmark por uns $2,40 nocionais, uma fração do que modelos na mesma faixa custam.</p>
<p>Soma isso ao que o Eronides descreveu, licença de uso em vez de token, modelo rodando dentro da empresa em vez de na nuvem de alguém, e o desenho fica claro: um modelo de nível Grok, on-premise, sem dado sensível vazando pra fora. Se eles entregarem isso, é um divisor de águas. Sigo curioso, e agora com pressa de ver o que sai em outubro.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>llms</category><category>inteligencia-artificial</category></item><item><title>LLM Benchmark v4: Genesys PI, novo competidor brasileiro!</title><link>https://www.akitaonrails.com/2026/09/23/llm-benchmark-v4-genesys-pi-novo-competidor-brasileiro/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/09/23/llm-benchmark-v4-genesys-pi-novo-competidor-brasileiro/</guid><pubDate>Wed, 23 Sep 2026 18:00:00 -0300</pubDate><description>&lt;p&gt;Fui contatado pelo LinkedIn por gente da &lt;a href="https://lua.vision/"target="_blank" rel="noopener"&gt;LUA Vision&lt;/a&gt;, empresa brasileira por trás do Genesys PI, oferecendo acesso de teste ao modelo deles. Isso não costuma me interessar, mas o pitch específico, laboratório brasileiro treinando modelo do zero em vez de revender modelo estrangeiro com camada de português por cima, me deixou curioso o suficiente pra rodar o teste eu mesmo.&lt;/p&gt;
&lt;p&gt;Deixa eu adiantar o disclaimer antes de qualquer coisa. Ninguém me pagou nada pra escrever isso. Não existe relação comercial entre mim e a LUA Vision. Nada do que está escrito aqui foi aprovado, revisado ou sugerido por eles antes de publicar. Toda palavra é minha. A única cortesia que recebi foi uma chave de acesso de avaliação sem custo pra rodar o teste, e explico o que isso significa pra conta de custo mais abaixo.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Fui contatado pelo LinkedIn por gente da <a href="https://lua.vision/"target="_blank" rel="noopener">LUA Vision</a>, empresa brasileira por trás do Genesys PI, oferecendo acesso de teste ao modelo deles. Isso não costuma me interessar, mas o pitch específico, laboratório brasileiro treinando modelo do zero em vez de revender modelo estrangeiro com camada de português por cima, me deixou curioso o suficiente pra rodar o teste eu mesmo.</p>
<p>Deixa eu adiantar o disclaimer antes de qualquer coisa. Ninguém me pagou nada pra escrever isso. Não existe relação comercial entre mim e a LUA Vision. Nada do que está escrito aqui foi aprovado, revisado ou sugerido por eles antes de publicar. Toda palavra é minha. A única cortesia que recebi foi uma chave de acesso de avaliação sem custo pra rodar o teste, e explico o que isso significa pra conta de custo mais abaixo.</p>
<p>Publiquei <a href="/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/">uma atualização da tabela geral do meu benchmark v4</a> hoje mais cedo, com cinco modelos novos. Este texto é um adendo direto daquele: rodei o Genesys PI nos dois tiers que a LUA Vision oferece, House e Enterprise. Com os dois, a tabela combinada chega a 46 modelos. Abaixo mostro só o trecho em volta dos brasileiros, que aparecem em <strong>negrito</strong> na posição real deles.</p>
<h2>A tabela atualizada, com o Genesys PI dentro<span class="hx:absolute hx:-mt-20" id="a-tabela-atualizada-com-o-genesys-pi-dentro"></span>
    <a href="#a-tabela-atualizada-com-o-genesys-pi-dentro" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><table>
  <thead>
      <tr>
          <th style="text-align: right">Posição</th>
          <th>Modelo</th>
          <th style="text-align: center">Nota</th>
          <th style="text-align: center">Tier</th>
          <th>Nunca corrigido</th>
          <th style="text-align: center">Custo</th>
          <th style="text-align: center">Tempo</th>
          <th style="text-align: center">Harness</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">&hellip;</td>
          <td>&hellip;</td>
          <td style="text-align: center">&hellip;</td>
          <td style="text-align: center">&hellip;</td>
          <td>&hellip;</td>
          <td style="text-align: center">&hellip;</td>
          <td style="text-align: center">&hellip;</td>
          <td style="text-align: center">&hellip;</td>
      </tr>
      <tr>
          <td style="text-align: right">32</td>
          <td>GLM 5.3 Flash (zcode)</td>
          <td style="text-align: center">84,25</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">plano flat-rate</td>
          <td style="text-align: center">296min</td>
          <td style="text-align: center">zcode</td>
      </tr>
      <tr>
          <td style="text-align: right">33</td>
          <td>DeepSeek V4 Pro 0813</td>
          <td style="text-align: center">84,0</td>
          <td style="text-align: center">A</td>
          <td>itens #8, #9 (4)</td>
          <td style="text-align: center">$4,49</td>
          <td style="text-align: center">152min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">34</td>
          <td>Step 3.7 Flash</td>
          <td style="text-align: center">83,75</td>
          <td style="text-align: center">A</td>
          <td>itens #6, #8, #11 (6,5)</td>
          <td style="text-align: center">$4,15</td>
          <td style="text-align: center">118min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">35</td>
          <td>Grok 4.7</td>
          <td style="text-align: center">83,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$27,94</td>
          <td style="text-align: center">120min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">35</td>
          <td><strong>Genesys PI House (LUA Vision)</strong></td>
          <td style="text-align: center">83,5</td>
          <td style="text-align: center">A</td>
          <td>itens #7b, #8 (3)</td>
          <td style="text-align: center">~$460 ᵉ</td>
          <td style="text-align: center">68min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">37</td>
          <td><strong>Genesys PI Enterprise (LUA Vision)</strong></td>
          <td style="text-align: center">82,5</td>
          <td style="text-align: center">B</td>
          <td>itens #7a, #7b, #9 (4)</td>
          <td style="text-align: center">~$19 ᵉ</td>
          <td style="text-align: center">39min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">38</td>
          <td>DeepSeek V4 Pro (base) ᶜ</td>
          <td style="text-align: center">82,0</td>
          <td style="text-align: center">B</td>
          <td>—</td>
          <td style="text-align: center">$5,26</td>
          <td style="text-align: center">97min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">39</td>
          <td>Qwen 3.8 27B (Strix Halo, local)</td>
          <td style="text-align: center">80,0</td>
          <td style="text-align: center">B</td>
          <td>itens #2, #7b, #8, #12 (8)</td>
          <td style="text-align: center"><strong>$0 local</strong></td>
          <td style="text-align: center">706min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">40</td>
          <td>Qwen 3.7 Max</td>
          <td style="text-align: center">79,0</td>
          <td style="text-align: center">B</td>
          <td>itens #6, #7, #8 (6)</td>
          <td style="text-align: center">$10,63</td>
          <td style="text-align: center">106min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">41</td>
          <td>GLM 5.2 (zcode) ᶜ</td>
          <td style="text-align: center">77,0</td>
          <td style="text-align: center">B</td>
          <td>item #12 (2)</td>
          <td style="text-align: center">plano flat-rate</td>
          <td style="text-align: center">239min</td>
          <td style="text-align: center">zcode</td>
      </tr>
      <tr>
          <td style="text-align: right">&hellip;</td>
          <td>&hellip;</td>
          <td style="text-align: center">&hellip;</td>
          <td style="text-align: center">&hellip;</td>
          <td>&hellip;</td>
          <td style="text-align: center">&hellip;</td>
          <td style="text-align: center">&hellip;</td>
          <td style="text-align: center">&hellip;</td>
      </tr>
  </tbody>
</table>
<blockquote>
  <p>Pra ver a tabela completa, com todos os outros modelos, leia o <a href="/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/">meu artigo anterior</a>.</p>

</blockquote>
<p>O Genesys PI House empata exatamente com o Grok 4.7 em 83,5, Tier A. O Enterprise fica um degrau abaixo, 82,5, Tier B. Pra quem quer o resumo da metodologia, sabotagem real baseada em CVE plantada ao longo de sete sprints, nunca anunciada, com nota cheia só pra quem pega sem aviso, está tudo detalhado na <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/">Parte 1</a> e na <a href="/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/">atualização de hoje</a>.</p>
<h2>Quem é a LUA Vision<span class="hx:absolute hx:-mt-20" id="quem-é-a-lua-vision"></span>
    <a href="#quem-%c3%a9-a-lua-vision" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A <a href="https://lua.vision/empresa/"target="_blank" rel="noopener">LUA Vision Tecnologia Ltda.</a> é uma empresa de São Paulo, fundada no fim de 2025 depois de três anos de pesquisa de doutorado (2022 a 2025) do Paulo Câmara, cofundador e CTO da empresa, formado pela FGV com doutorado pela Universidade de Tel Aviv. A tese dele, <em>&ldquo;From Neurodivergent Cognition to Natural Intelligence&rdquo;</em>, é a origem declarada da arquitetura que virou o Genesys PI. Os outros três cofundadores são David Kang (CEO, estratégia e parcerias), Plínio Ceccon (CFO) e Eronides Jr. (CRO, comercial e receita).</p>
<p>A família de modelo Genesys PI foi lançada em abril de 2026. A empresa descreve a própria aposta como arriscada de propósito: construir modelo proprietário treinado pra realidade brasileira e de outros mercados emergentes, em vez de revender modelo estrangeiro com uma camada de português por cima.</p>
<p>O argumento central deles é que modelo treinado fora não entende bem estrutura jurídica brasileira, distinção CLT versus PJ, nem a estrutura fiscal e financeira local, e que isso importa de verdade em setor regulado: saúde, direito, finanças, educação. Hoje a empresa roda cerca de vinte projeto piloto nesses setores, além de uma linha de produto de consumo chamada <a href="https://8th.vision"target="_blank" rel="noopener">8th.vision</a>.</p>
<p>Tecnicamente, eles batizam a própria arquitetura de NCAS e falam de cinco fases de treino &ldquo;inspiradas em desenvolvimento neural&rdquo;, mais um módulo de automonitoramento chamado PI-Probe, que abstém resposta quando o modelo não tem base suficiente pra responder. <a href="https://lua.vision/pesquisa/"target="_blank" rel="noopener">Publicaram dois artigos próprios no Zenodo</a>, <em><a href="https://doi.org/10.5281/zenodo.22899767"target="_blank" rel="noopener">&ldquo;O peso que você não escolheu&rdquo;</a></em>, sobre o custo de tokenização em 31 línguas diferentes, e <em><a href="https://doi.org/10.5281/zenodo.22881788"target="_blank" rel="noopener">&ldquo;Capacidade máxima não é eficiência máxima&rdquo;</a></em>, introduzindo uma métrica própria chamada Coeficiente de Eficiência Sináptica. Os dois DOI existem e resolvem de verdade, mas vale o contexto: Zenodo é repositório de preprint, não revista com revisão por pares, então trate como pesquisa própria publicada, não como validação externa.</p>
<p>A LUA Vision também <a href="https://github.com/LiveBench/LiveBench/issues/370"target="_blank" rel="noopener">abriu uma issue pública no repositório do LiveBench</a> pedindo inclusão do modelo deles no ranking oficial, com nota autodeclarada subindo de 87,6% (novembro de 2024, mil perguntas, com destaque negativo pra codificação, 34,4%) pra 98,2% (janeiro de 2026, 682 perguntas). Vale o detalhe: a issue foi aberta em março de 2026, um mês antes do lançamento oficial do Genesys PI, e o título nela usa o nome &ldquo;Lua Genesys&rdquo;, não &ldquo;Genesys PI&rdquo;, então trato como o mesmo motor NCAS numa fase anterior de rótulo, não uma confirmação direta e datada do produto que testei. A issue segue aberta, e o único comentário nela é do próprio CEO da LUA Vision elogiando o post da própria empresa, sem posição de mantenedor confirmando ou rejeitando o número até a data deste texto. Ou seja: nota de LiveBench que aparece no marketing deles é autodeclarada, não ranking oficial verificado.</p>
<h2>Como o Genesys PI se saiu contra a fronteira e contra a concorrência chinesa<span class="hx:absolute hx:-mt-20" id="como-o-genesys-pi-se-saiu-contra-a-fronteira-e-contra-a-concorrência-chinesa"></span>
    <a href="#como-o-genesys-pi-se-saiu-contra-a-fronteira-e-contra-a-concorr%c3%aancia-chinesa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Direto ao ponto de quem só quer saber onde ele fica na régua: o Genesys PI House empata exatamente com o Grok 4.7 (83,5), no meio de um pelotão bem apertado. Fica atrás de:</p>
<ul>
<li>toda a fronteira que fechou em 100 (Astra, Opus 5, Opus 5.5, GPT 5.6 sol/terra, GPT 5.5, Fable 5);</li>
<li>GPT 6 luna (95,5) e GPT 6 sol (91,0);</li>
<li>GLM 5.3 (94,0);</li>
<li>MiMo V2.6 Pro chinês (92,0);</li>
<li>Claude Sonnet 5 (91,0);</li>
<li>as duas rotas do Gemini 3.8 Flash (89,5 e 90,5);</li>
<li>os dois Kimi, K2.7 (87,25) e K3 (85,0);</li>
<li>o pelotão logo acima: Step 3.7 Flash (83,75), DeepSeek V4 Pro 0813 (84,0) e GLM 5.3 Flash (84,25);</li>
<li>e mais uns vinte modelos espalhados por essa faixa de nota, de Grok 4.6 (98,5) a Claude Sonnet 4.6 (85,75), incluindo três tiers Claude (Opus 4.6, Opus 4.8, Sonnet 4.6). No total, o House fica atrás de 34 dos 46 modelos da tabela.</li>
</ul>
<p>E fica à frente de GLM 5.2 (77,0), do Gemini 3.7 Flash da geração anterior, do MiniMax M3, e de todo o fundo de tabela. O Enterprise (82,5) fica um degrau abaixo do próprio House, na mesma faixa geral.</p>
<p>Se a expectativa que chegou até você é de nível Claude, vale calibrar antes de qualquer decisão de compra. Nesse teste específico, o Genesys PI House fica na faixa do Grok 4.7, não na faixa dos flagship Claude.</p>
<p>O Claude Sonnet 5, o mais barato dos três tiers Claude que rodei, já fecha em 91,0, oito pontos e meio acima. Opus 5, Opus 5.5 e Fable 5 fecham no topo absoluto, 100,0.</p>
<p>Isso não tira o mérito real de uma equipe pequena brasileira chegar no patamar do Grok, laboratório entre os mais bem financiados do mundo. É só a régua certa de comparação.</p>
<p>O perfil de erro do House é o clássico &ldquo;detecção segue disfarce&rdquo;: pegou toda sabotagem óbvia sozinho, os dois itens críticos, o IDOR, a chave fixa, o CORS, ambas as CVE de gem. Pegou até o item que mais sobrevive no teste inteiro (#6) na revelação, com uma correção que foi além do pedido, um índice único de banco de dados. Só nunca corrigiu dois itens silenciosos, o índice derrubado (#7b) e o agregado errado (#8), nem depois de avisado.</p>
<p>O Enterprise chegou na mesma contagem de itens pegos sem aviso (31 de 40) por um caminho diferente, pegando menos sabotagem no meio do caminho e recuperando um bloco grande de oito itens de uma vez só no capstone. Ficou com três itens nunca corrigidos, incluindo uma view apagada (#9) que ele nunca restaurou porque não tinha teste nenhum cobrindo relatório ou usuário pra acusar o erro.</p>
<p>Vale registrar um ponto de confiabilidade: a primeira tentativa do Enterprise travou num loop estocástico, repetindo o mesmo comando de grep em 841 das 857 chamadas de ferramenta, confundindo o próprio nome &ldquo;LUA&rdquo; com o nome da gem RubyLLM, e precisou ser abortada no limite de 90 minutos sem nenhum commit. Rodei de novo e a segunda tentativa convergiu limpa em 7 minutos: trato isso como instabilidade pontual, não como padrão, mas é o tipo de coisa que quem for testar em produção precisa monitorar.</p>
<h2>Preço e custo: onde a conta aperta<span class="hx:absolute hx:-mt-20" id="preço-e-custo-onde-a-conta-aperta"></span>
    <a href="#pre%c3%a7o-e-custo-onde-a-conta-aperta" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui vale o segundo disclaimer prometido: a LUA Vision me deu uma chave de avaliação sem custo pros dois testes, então eu pessoalmente não paguei nada. Mas o benchmark inteiro compara custo pra quem for pagar de verdade, então recalculei o preço nocional que um cliente pagante teria, usando a tabela de preço que a API deles expunha pra quem tinha chave de acesso (endpoint <code>/v1/models</code>), convertida de real pra dólar na cotação da época (5,16 BRL/USD).</p>
<blockquote>
  <p><strong>Atualização (24/09/2026):</strong> depois de publicado, Eronides Jr., cofundador e CRO da LUA Vision, comentou publicamente sobre os valores usados neste texto: &ldquo;Caraca, estamos felizes pelos testes e comentários. Sobre os valores: o que colocamos na API eram apenas exemplos. Nosso modelo comercial, na prática, será por licença de uso, e não por tokens, já que a solução vai rodar na infraestrutura dos próprios clientes. Ou seja, consumo de token não muda nada para nós. No dia 07/10 nossa política de preços será publicada junto com o lançamento.&rdquo;</p>

</blockquote>
<p>Ou seja: os valores de R$ 55/275 (House) e R$ 4/20 (Enterprise) por milhão de token que usei abaixo eram só exemplo na API de teste, não o preço final de mercado. O modelo comercial de verdade vai ser por licença de uso rodando na infraestrutura do próprio cliente, então consumo de token não entra na conta deles. Mantenho a análise nocional abaixo porque foi o que consegui medir com a chave que recebi, e ela ainda serve pra ilustrar o impacto de rodar sem cache de prompt, mas trate como exercício, não como tabela de preço oficial. A política de preço de verdade sai em 7 de outubro de 2026, junto do lançamento.</p>
<p>O preço por milhão de token dos dois tiers, como estava na API de teste, era bem diferente:</p>
<ul>
<li><strong>House</strong>: R$ 55 de entrada / R$ 275 de saída por milhão de token;</li>
<li><strong>Enterprise</strong>: R$ 4 de entrada / R$ 20 de saída por milhão de token, cerca de 13,75 vezes mais barato que o House por token.</li>
</ul>
<p>Com esses valores de exemplo, o custo total da rodada do House ficaria em torno de $460 nocional, alto pra uma nota de 83,5. O motivo não é só o preço por token, é a ausência de cache de prompt na API deles: cada passo reenvia o contexto acumulado inteiro a preço cheio de entrada, e num benchmark de sete sprints que acumula contexto o tempo todo, isso pesa muito. O Enterprise, com preço por token bem mais baixo, fecharia em torno de $19 nocional pela mesma sabotagem, competindo de igual pra igual com opção barata como o Grok 4.5 ($6,19) ou o Claude Sonnet 4.6 ($18,64), só que com nota mais baixa que os dois. De novo: isso é o exercício com o valor de exemplo, não a cobrança real, que vai ser por licença.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> o exercício de custo por token acima mostra o efeito de rodar sem cache de prompt, mas não use esses números pra orçamento real. A LUA Vision já avisou que o preço de verdade sai por licença de uso em 7 de outubro de 2026, não por token.</p>

</blockquote>
<h2>Onde o Genesys PI se encaixa no mercado brasileiro<span class="hx:absolute hx:-mt-20" id="onde-o-genesys-pi-se-encaixa-no-mercado-brasileiro"></span>
    <a href="#onde-o-genesys-pi-se-encaixa-no-mercado-brasileiro" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Juntando tudo: o Genesys PI não é o modelo mais vigilante do meu teste, nem o mais barato, nem o mais confiável na primeira tentativa. Mas também não é fraco. Empatar com o Grok 4.7 e ficar na mesma faixa de nota de nome grande como Kimi K3, DeepSeek V4 Pro e GLM 5.3 Flash, com um modelo treinado do zero por uma equipe pequena em São Paulo, não numa fração do orçamento de um laboratório americano ou chinês, é um resultado genuíno, não figuração.</p>
<blockquote>
  <p>Eu sempre achei que treinar modelo de fronteira do zero no Brasil não seria economicamente viável, esse tipo de orçamento parecia coisa reservada pra laboratório com bilhão de dólar disponível. A LUA Vision me provou errado, e faço questão de admitir isso em primeira mão. Prefiro torcer por quem tenta e consegue do que segurar uma opinião que os fatos já derrubaram.</p>

</blockquote>
<p>A vantagem real de uma empresa brasileira escolher o Genesys PI não está na nota de vigilância isolada, está no que o meu benchmark não mede:</p>
<ul>
<li>proximidade com estrutura jurídica e fiscal brasileira, distinção CLT versus PJ incluída;</li>
<li>suporte em português de verdade, não tradução automática por cima de modelo estrangeiro;</li>
<li>soberania de dado, tudo processado e treinado dentro do Brasil, relevante pra setor regulado que se preocupa com onde o dado trafega e quem tem acesso a ele.</li>
</ul>
<p>A desvantagem:</p>
<ul>
<li>preço final ainda incógnito: o modelo comercial anunciado é por licença de uso, não por token, e só sai em 7 de outubro de 2026;</li>
<li>a confiabilidade ainda inconsistente que vi no Enterprise;</li>
<li>uma nota autodeclarada de LiveBench que ainda não passou por verificação externa nenhuma.</li>
</ul>
<p>Pra empresa brasileira decidindo entre um provedor estrangeiro e um nacional, o Genesys PI já é opção real de avaliar, não só promessa de pitch de LinkedIn. Não é ainda o modelo que eu recomendaria de olhos fechados pra vigilância de segurança pesada, mas fico genuinamente feliz de ver um modelo brasileiro treinado do zero, não um wrapper em cima de modelo de fora, aparecendo no meu ranking e competindo de verdade com nome grande de fronteira. Espero que continuem melhorando, porque o Brasil ganha com mais gente de verdade competindo nesse jogo.</p>
<h2>Disclaimer final<span class="hx:absolute hx:-mt-20" id="disclaimer-final"></span>
    <a href="#disclaimer-final" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Repetindo pra não sobrar dúvida: não tenho participação nenhuma na LUA Vision. Não tive acesso a dado financeiro deles, nem a nada além da chave de teste do Genesys PI. Então não posso atestar nada além do que eu mesmo testei, que é o que está neste texto. Sobre o lado de negócio da empresa, você vai ter que perguntar diretamente pra eles.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>llms</category><category>agentes-de-codigo</category></item><item><title>LLM Benchmark v4: Opus 5.5, GPT Sol/Luna 6, Mimo 2.6, Grok 4.7</title><link>https://www.akitaonrails.com/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/</guid><pubDate>Wed, 23 Sep 2026 13:00:00 -0300</pubDate><description>&lt;p&gt;Essa é a primeira atualização desde que a nova metodologia v4 ficou pronta, explicada em duas partes: &lt;a href="https://www.akitaonrails.com/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/"&gt;Parte 1&lt;/a&gt; cobre o processo e as catorze sabotagens, &lt;a href="https://www.akitaonrails.com/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/"&gt;Parte 2&lt;/a&gt; traz a tabela completa dos 39 modelos originais. Cinco modelos novos saíram desde então, e conferi cada versão contra o repositório antes de escrever este texto: &lt;strong&gt;Claude Opus 5.5&lt;/strong&gt;, &lt;strong&gt;GPT 6 sol&lt;/strong&gt; e &lt;strong&gt;GPT 6 luna&lt;/strong&gt; (dois modelos separados, não um só), &lt;strong&gt;Xiaomi MiMo V2.6 Pro&lt;/strong&gt; e &lt;strong&gt;Grok 4.7&lt;/strong&gt;. Os nomes do título batem certinho com o que rodei.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Essa é a primeira atualização desde que a nova metodologia v4 ficou pronta, explicada em duas partes: <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/">Parte 1</a> cobre o processo e as catorze sabotagens, <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/">Parte 2</a> traz a tabela completa dos 39 modelos originais. Cinco modelos novos saíram desde então, e conferi cada versão contra o repositório antes de escrever este texto: <strong>Claude Opus 5.5</strong>, <strong>GPT 6 sol</strong> e <strong>GPT 6 luna</strong> (dois modelos separados, não um só), <strong>Xiaomi MiMo V2.6 Pro</strong> e <strong>Grok 4.7</strong>. Os nomes do título batem certinho com o que rodei.</p>
<h2>Recapitulando a metodologia bem rápido<span class="hx:absolute hx:-mt-20" id="recapitulando-a-metodologia-bem-rápido"></span>
    <a href="#recapitulando-a-metodologia-bem-r%c3%a1pido" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pra quem não leu as duas partes anteriores: o v4 não é uma bateria de perguntas soltas, é um único app Rails que cresce em sete sprints, com um subagente isolado plantando catorze sabotagens reais baseadas em CVEs documentadas no meio do caminho, disfarçadas de commit normal de um dev fictício. O modelo nunca é avisado que existe sabotagem, só no sétimo e último sprint vem a revelação explícita. Pegar sem aviso vale nota cheia, pegar só depois de avisado vale 40%, nunca corrigir vale zero. Isso mede vigilância de segurança sob sabotagem ativa, não qualidade geral de código. Detalhe completo na Parte 1.</p>
<h2>A tabela atualizada, 44 modelos<span class="hx:absolute hx:-mt-20" id="a-tabela-atualizada-44-modelos"></span>
    <a href="#a-tabela-atualizada-44-modelos" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Mesma tabela da Parte 2, agora com 44 linhas. Os cinco modelos desta atualização estão em <strong>negrito</strong>, pra distinguir de ᴺ, que já marcava adição de rodadas anteriores.</p>
<table>
  <thead>
      <tr>
          <th style="text-align: right">Posição</th>
          <th>Modelo</th>
          <th style="text-align: center">Nota</th>
          <th style="text-align: center">Tier</th>
          <th>Nunca corrigido</th>
          <th style="text-align: center">Custo</th>
          <th style="text-align: center">Tempo</th>
          <th style="text-align: center">Harness</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT-6 Astra</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$30,55</td>
          <td style="text-align: center">100min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>Claude Opus 5</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">~$71</td>
          <td style="text-align: center">145min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>Claude Fable 5</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">~$50 ᵉ</td>
          <td style="text-align: center">~85min ᵉ</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td><strong>Claude Opus 5.5</strong></td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center"><strong>$16,63</strong></td>
          <td style="text-align: center">64min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT 5.6 sol</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$20,37</td>
          <td style="text-align: center">317min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT 5.6 terra</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center"><strong>$9,52</strong></td>
          <td style="text-align: center">80min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT 5.5</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$34,69</td>
          <td style="text-align: center">117min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">8</td>
          <td>Grok 4.6 ᶜ</td>
          <td style="text-align: center">98,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$13,00</td>
          <td style="text-align: center">67min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td>Claude Fable 5.1</td>
          <td style="text-align: center">95,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">~$51</td>
          <td style="text-align: center">133min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td>Sakana Fugu Ultra v2 ᴺ</td>
          <td style="text-align: center">95,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$122,01</td>
          <td style="text-align: center">294min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td><strong>GPT 6 luna</strong></td>
          <td style="text-align: center">95,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">~$0,84 ᵉ</td>
          <td style="text-align: center">122min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">12</td>
          <td>GPT 5.6 luna</td>
          <td style="text-align: center">95,0</td>
          <td style="text-align: center">A</td>
          <td>item #8 (2)</td>
          <td style="text-align: center">$10,04</td>
          <td style="text-align: center">123min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">13</td>
          <td>Nex N2.5 Pro ᴺ</td>
          <td style="text-align: center">94,0 *</td>
          <td style="text-align: center">A</td>
          <td>— (não commitado)</td>
          <td style="text-align: center"><strong>$0 grátis</strong></td>
          <td style="text-align: center">480min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">13</td>
          <td>GLM 5.3 (zcode) ᴺ</td>
          <td style="text-align: center">94,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">plano flat-rate</td>
          <td style="text-align: center">215min</td>
          <td style="text-align: center">zcode</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>DeepSeek V4.1 Flash ᴺ</td>
          <td style="text-align: center">92,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center"><strong>$1,21</strong></td>
          <td style="text-align: center">172min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">16</td>
          <td><strong>Xiaomi MiMo V2.6 Pro</strong></td>
          <td style="text-align: center">92,0</td>
          <td style="text-align: center">A</td>
          <td>item #12 (2)</td>
          <td style="text-align: center"><strong>$1,22</strong></td>
          <td style="text-align: center">308min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">17</td>
          <td>Claude Sonnet 5</td>
          <td style="text-align: center">91,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">~$27</td>
          <td style="text-align: center">112min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">17</td>
          <td><strong>GPT 6 sol</strong></td>
          <td style="text-align: center">91,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">~$8,35 ᵉ</td>
          <td style="text-align: center">73min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">19</td>
          <td>Gemini 3.8 Flash·high (OpenRouter)</td>
          <td style="text-align: center">90,5</td>
          <td style="text-align: center">A</td>
          <td>item #12 (2)</td>
          <td style="text-align: center">$15,98</td>
          <td style="text-align: center">97min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">20</td>
          <td>Gemini 3.8 Flash (Antigravity) ᴺ</td>
          <td style="text-align: center">89,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$0 (OAuth)</td>
          <td style="text-align: center">120min</td>
          <td style="text-align: center">agy</td>
      </tr>
      <tr>
          <td style="text-align: right">21</td>
          <td>Muse Spark 1.3</td>
          <td style="text-align: center">88,75</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$13,31</td>
          <td style="text-align: center">150min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">22</td>
          <td>Grok 4.5</td>
          <td style="text-align: center">88,0</td>
          <td style="text-align: center">A</td>
          <td>itens #7b, #12 (3)</td>
          <td style="text-align: center">$6,19</td>
          <td style="text-align: center">48min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">23</td>
          <td>Claude Opus 4.6</td>
          <td style="text-align: center">87,5</td>
          <td style="text-align: center">A</td>
          <td>item #8 (2)</td>
          <td style="text-align: center">$25,64</td>
          <td style="text-align: center">89min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">24</td>
          <td>Kimi K2.7</td>
          <td style="text-align: center">87,25</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$7,75</td>
          <td style="text-align: center">175min</td>
          <td style="text-align: center">kimi</td>
      </tr>
      <tr>
          <td style="text-align: right">25</td>
          <td>MiMo V2.5 Pro</td>
          <td style="text-align: center">86,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center"><strong>$1,03</strong></td>
          <td style="text-align: center">158min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">25</td>
          <td>Qwen3 8 Flash ᴿ</td>
          <td style="text-align: center">86,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center"><strong>$1,17</strong></td>
          <td style="text-align: center">149min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">27</td>
          <td>DeepSeek V4 Flash</td>
          <td style="text-align: center">86,0</td>
          <td style="text-align: center">A</td>
          <td>itens #6, #8 (5)</td>
          <td style="text-align: center"><strong>$0,97</strong></td>
          <td style="text-align: center">111min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">27</td>
          <td>Claude Opus 4.8 ᴿ</td>
          <td style="text-align: center">86,0</td>
          <td style="text-align: center">A</td>
          <td>item #8 (2)</td>
          <td style="text-align: center">~$37</td>
          <td style="text-align: center">87min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">29</td>
          <td>Claude Sonnet 4.6</td>
          <td style="text-align: center">85,75</td>
          <td style="text-align: center">A</td>
          <td>item #6 (1,5)</td>
          <td style="text-align: center">$18,64</td>
          <td style="text-align: center">91min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">30</td>
          <td>Kimi K3</td>
          <td style="text-align: center">85,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$13,79</td>
          <td style="text-align: center">148min</td>
          <td style="text-align: center">kimi</td>
      </tr>
      <tr>
          <td style="text-align: right">30</td>
          <td>DeepSeek V4 Flash 0731</td>
          <td style="text-align: center">85,0</td>
          <td style="text-align: center">A</td>
          <td>itens #2, #6 (6)</td>
          <td style="text-align: center">$1,94</td>
          <td style="text-align: center">194min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">32</td>
          <td>GLM 5.3 Flash (zcode) ᴺ</td>
          <td style="text-align: center">84,25</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">plano flat-rate</td>
          <td style="text-align: center">296min</td>
          <td style="text-align: center">zcode</td>
      </tr>
      <tr>
          <td style="text-align: right">33</td>
          <td>DeepSeek V4 Pro 0813</td>
          <td style="text-align: center">84,0</td>
          <td style="text-align: center">A</td>
          <td>itens #8, #9 (4)</td>
          <td style="text-align: center">$4,49</td>
          <td style="text-align: center">152min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">34</td>
          <td>Step 3.7 Flash</td>
          <td style="text-align: center">83,75</td>
          <td style="text-align: center">A</td>
          <td>itens #6, #8, #11 (6,5)</td>
          <td style="text-align: center">$4,15</td>
          <td style="text-align: center">118min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">35</td>
          <td><strong>Grok 4.7</strong></td>
          <td style="text-align: center">83,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$27,94</td>
          <td style="text-align: center">120min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">36</td>
          <td>DeepSeek V4 Pro (base) ᶜ</td>
          <td style="text-align: center">82,0</td>
          <td style="text-align: center">B</td>
          <td>—</td>
          <td style="text-align: center">$5,26</td>
          <td style="text-align: center">97min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">37</td>
          <td>Qwen 3.8 27B (Strix Halo, local) ᴺ</td>
          <td style="text-align: center">80,0</td>
          <td style="text-align: center">B</td>
          <td>itens #2, #7b, #8, #12 (8)</td>
          <td style="text-align: center"><strong>$0 local</strong></td>
          <td style="text-align: center">706min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">38</td>
          <td>Qwen 3.7 Max</td>
          <td style="text-align: center">79,0</td>
          <td style="text-align: center">B</td>
          <td>itens #6, #7, #8 (6)</td>
          <td style="text-align: center">$10,63</td>
          <td style="text-align: center">106min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">39</td>
          <td>GLM 5.2 (zcode) ᴺ ᶜ</td>
          <td style="text-align: center">77,0</td>
          <td style="text-align: center">B</td>
          <td>item #12 (2)</td>
          <td style="text-align: center">plano flat-rate</td>
          <td style="text-align: center">239min</td>
          <td style="text-align: center">zcode</td>
      </tr>
      <tr>
          <td style="text-align: right">40</td>
          <td>Gemini 3.7 Flash·high</td>
          <td style="text-align: center">75,5</td>
          <td style="text-align: center">B</td>
          <td>item #12 (2)</td>
          <td style="text-align: center">$12,93</td>
          <td style="text-align: center">85min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">40</td>
          <td>MiniMax M3</td>
          <td style="text-align: center">75,5</td>
          <td style="text-align: center">B</td>
          <td>itens #6, #8 (3,5)</td>
          <td style="text-align: center">$12,17</td>
          <td style="text-align: center">187min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">42</td>
          <td>Mistral Large 3</td>
          <td style="text-align: center">39,0</td>
          <td style="text-align: center">C</td>
          <td>7 itens (19)</td>
          <td style="text-align: center">$5,11</td>
          <td style="text-align: center">76min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">43</td>
          <td>Gemini 3.1 Pro (OpenRouter) ᶜ</td>
          <td style="text-align: center">32,5 *</td>
          <td style="text-align: center">C</td>
          <td>9 itens (27)</td>
          <td style="text-align: center">$10,31</td>
          <td style="text-align: center">54min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">44</td>
          <td>GLM-4.7-Flash (local) ᴺ</td>
          <td style="text-align: center">24,0</td>
          <td style="text-align: center">C</td>
          <td>6 itens (16)</td>
          <td style="text-align: center"><strong>$0 local</strong></td>
          <td style="text-align: center">29min</td>
          <td style="text-align: center">opencode</td>
      </tr>
  </tbody>
</table>
<p>Custo não é comparável entre harnesses diferentes: codex/opencode/kimi cobram por token de verdade, Claude usa assinatura Max (custo nocional), Antigravity é OAuth do Google sem custo por token, zcode é plano flat-rate. Compare custo só dentro do mesmo harness.</p>
<p><strong>Nota sobre o custo do GPT 6 sol e luna (ᵉ):</strong> os dois rodam por assinatura ChatGPT, não API paga por token, então o custo na tabela é uma estimativa, preço por milhão de tokens publicado pela OpenAI ($2 de entrada / $10 de saída pro sol, $0,10 / $0,50 pro luna, o luna sai vinte vezes mais barato por token) aplicado à contagem real de token de cada sprint.</p>
<h2>As surpresas dessa rodada<span class="hx:absolute hx:-mt-20" id="as-surpresas-dessa-rodada"></span>
    <a href="#as-surpresas-dessa-rodada" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Grok 4.7 regrediu, e não só na nota<span class="hx:absolute hx:-mt-20" id="grok-47-regrediu-e-não-só-na-nota"></span>
    <a href="#grok-47-regrediu-e-n%c3%a3o-s%c3%b3-na-nota" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Grok 4.7 fechou em 83,5, quinze pontos abaixo do próprio Grok 4.6 (98,5), meu segundo colocado geral. E não, não compensou em custo nem em velocidade: $27,94 e 120 minutos contra $13,00 e 67 minutos do 4.6. Mais caro, mais lento, pior nota. Uma regressão nos três eixos ao mesmo tempo é rara nesse benchmark.</p>
<p>O perfil de erro é bem específico: pegou toda sabotagem barulhenta sozinho, os dois itens críticos, o IDOR, a chave fixa no código, o CORS. Mas empurrou as quatro sabotagens disfarçadas pra revelação, incluindo o XSS armazenado que sobreviveu até o capstone, e ainda foi enganado por um teste adaptado pra aceitar a sabotagem do item #6 no meio do caminho. Forte no óbvio, cego no disfarçado.</p>
<p>Uma rodada limpa só, então trato isso como um ponto de dado, não uma sentença definitiva sobre a família Grok 4.7. Mas o dado que tenho hoje é: pior, mais caro, mais devagar.</p>
<h3>Opus 5.5 é o oposto: mesma nota máxima, um quarto do custo<span class="hx:absolute hx:-mt-20" id="opus-55-é-o-oposto-mesma-nota-máxima-um-quarto-do-custo"></span>
    <a href="#opus-55-%c3%a9-o-oposto-mesma-nota-m%c3%a1xima-um-quarto-do-custo" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O Opus 5.5 entrou direto no clube dos 100 pontos, empatando com Astra, Opus 5, Fable 5, GPT 5.6 sol e terra, e GPT 5.5. Pegou tudo sem precisar de revelação nenhuma, o sétimo sprint nem rodou porque não sobrou nada pra revelar. E foi além do mínimo: escreveu teste de regressão próprio pra SQL injection e pra revogação de sessão, e ainda empilhou Content-Security-Policy e Permissions-Policy no capstone, sem ninguém pedir.</p>
<p>O número que importa de verdade: <strong>$16,63 e 64 minutos</strong> contra <strong>~$71 e 145 minutos</strong> do Opus 5, pra chegar exatamente na mesma nota perfeita. Um quarto do custo, menos da metade do tempo, zero perda de qualidade nesse teste específico.</p>
<h3>GPT 6 sol regride em vigilância, GPT 6 luna acerta em cheio<span class="hx:absolute hx:-mt-20" id="gpt-6-sol-regride-em-vigilância-gpt-6-luna-acerta-em-cheio"></span>
    <a href="#gpt-6-sol-regride-em-vigil%c3%a2ncia-gpt-6-luna-acerta-em-cheio" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O GPT 6 sol fechou em 91,0, empatado com o Claude Sonnet 5, nove pontos abaixo do próprio GPT 5.6 sol (100,0), mas custando bem menos, ~$8,35 contra $20,37, em menos de um quarto do tempo. Regressão real em vigilância, ganho real em custo e velocidade.</p>
<p>O GPT 6 luna é o destaque positivo da dupla. Fez 95,5, empatando ou passando um pouco o GPT 5.6 luna (95,0), e custando ~$0,84 contra $10,04, cerca de doze vezes menos. Pegou sozinho praticamente tudo, só deixou o XSS armazenado escapar até a revelação, incluindo o item mais disfarçado do teste inteiro com uma correção que foi além do pedido, um índice único a nível de banco de dados. Nota igual ou melhor, custo desabando: a mesma classe de resultado que o Opus 5.5 entregou.</p>
<p>O padrão de erro do sol é o mesmo do Grok 4.7: pega o óbvio sozinho, empurra o disfarçado pra revelação. O luna, de novo, é claramente o mais vigilante dos dois irmãos, e agora também o mais barato dos dois por uma margem enorme.</p>
<h3>MiMo V2.6 Pro: o salto geracional que se sustenta<span class="hx:absolute hx:-mt-20" id="mimo-v26-pro-o-salto-geracional-que-se-sustenta"></span>
    <a href="#mimo-v26-pro-o-salto-geracional-que-se-sustenta" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Da Xiaomi, o V2.6 Pro saltou de 86,5 pra 92,0 sobre o próprio antecessor V2.5 Pro, por apenas <strong>$1,22</strong>. Pegou sozinho praticamente tudo, incluindo o item mais disfarçado do teste inteiro, só que um sprint atrasado, e ainda escreveu os próprios testes de guarda pra SQL injection e N+1. O único item nunca corrigido, nem depois de avisado, foi o CORS liberado demais (#12), a mesma armadilha que já tinha derrubado Grok 4.5, Gemini 3.7 Flash e o GLM 5.2 na Parte 2. Modelo de fronteira mesmo assim consegue deixar <code>origins &quot;*&quot;</code> como padrão e nunca voltar nele.</p>
<h2>O que o benchmark externo diz, e onde ele discorda de mim<span class="hx:absolute hx:-mt-20" id="o-que-o-benchmark-externo-diz-e-onde-ele-discorda-de-mim"></span>
    <a href="#o-que-o-benchmark-externo-diz-e-onde-ele-discorda-de-mim" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Fui atrás de quem também testou esses cinco modelos, porque nenhum benchmark isolado, nem o meu, é palavra final. Aqui está o que achei, e onde a leitura bate ou não bate com a minha.</p>
<ul>
<li><strong>Grok 4.7</strong>: a <a href="https://artificialanalysis.ai/articles/benchmarking-grok-4-7"target="_blank" rel="noopener">Artificial Analysis</a> mede o Coding Agent Index subindo de 47 pra 56, com melhora em todos os três componentes que ela testa, mas avisa que o modelo gasta mais do dobro de token de saída pra chegar lá. Ou seja, num benchmark de capacidade geral de codificação, o 4.7 melhora. No meu teste de vigilância sob sabotagem disfarçada, ele piora. As duas coisas podem ser verdade ao mesmo tempo, porque medem eixos diferentes: capacidade de resolver tarefa versus disciplina de auditar o próprio código sem ser avisado.</li>
<li><strong>Claude Opus 5.5</strong>: a cobertura da <a href="https://venturebeat.com/technology/anthropic-releases-claude-opus-5-5-beating-fable-5-1-on-key-agentic-benchmarks-at-60-cheaper-api-price"target="_blank" rel="noopener">VentureBeat</a> e da <a href="https://www.coderabbit.ai/blog/opus-5-5-model-review"target="_blank" rel="noopener">CodeRabbit</a> bate com o que eu achei nesse ponto específico: menos token gasto pra terminar a mesma tarefa. E a própria <a href="https://artificialanalysis.ai/articles/claude-opus-5-5"target="_blank" rel="noopener">Artificial Analysis</a> confirma o resto, o modelo assumiu o topo do índice de inteligência dela, cinco pontos à frente de GPT-6 Astra e Fable 5.1. Aqui a leitura externa confirma a minha.</li>
<li><strong>GPT 6 sol e luna</strong>: a cobertura da <a href="https://www.vellum.ai/blog/gpt-6-sol-and-luna-benchmarks-explained"target="_blank" rel="noopener">Vellum</a> e da <a href="https://kingy.ai/blog/gpt-6-sol-luna-specs-benchmarks-pricing-comparison/"target="_blank" rel="noopener">Kingy AI</a> pinta um quadro favorável de capacidade geral, sol perto da nota máxima da Fable 5 por uma fração do custo, luna na faixa do Opus 5. No meu teste específico de vigilância sob sabotagem, o quadro é mais morno, sol regride contra o próprio antecessor. De novo, eixos diferentes, capacidade geral não é a mesma coisa que vigilância de segurança sob ataque disfarçado.</li>
<li><strong>Xiaomi MiMo V2.6 Pro</strong>: a <a href="https://venturebeat.com/technology/better-than-deepseek-xiaomis-mimo-v2-6-pro-debuts-as-the-top-open-weights-model-in-the-world-alongside-cheaper-v2-6-flash"target="_blank" rel="noopener">VentureBeat</a> documenta o mesmo salto geracional que eu vi, de 19 pra 71,9 no DeepSWE, de 16 pra 53,1 no AutomationBench. Aqui a direção bate: modelo aberto melhorando de verdade, não só em vigilância.</li>
</ul>
<blockquote>
  <p><strong>Pra guardar:</strong> minha nota vale só pra minha metodologia específica, vigilância de segurança dentro de um app Rails crescendo sob sabotagem silenciosa. Benchmark de capacidade geral mede outra coisa, e os dois podem discordar sem que nenhum dos dois esteja errado. Ranking isolado nunca é sentença definitiva sobre modelo nenhum, <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/#por-que-o-meu-modelo-favorito-n%c3%a3o-ficou-mais-alto">já expliquei isso com mais calma na Parte 2</a>.</p>

</blockquote>
<h2>Vale a pena migrar pra versão nova?<span class="hx:absolute hx:-mt-20" id="vale-a-pena-migrar-pra-versão-nova"></span>
    <a href="#vale-a-pena-migrar-pra-vers%c3%a3o-nova" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Nota mais alta num benchmark, o meu ou qualquer outro, não é sinônimo automático de &ldquo;troque agora&rdquo;. Aqui vai minha resposta direta, modelo por modelo, olhando qualidade contra custo, não só o número isolado.</p>
<ul>
<li><strong>Você usa Grok 4.6 hoje?</strong> Não migre pro 4.7 por causa de segurança. É pior, mais caro e mais lento nos três eixos que meço. Só vale a pena se alguma outra capacidade fora do meu teste justificar, e mesmo assim eu esperaria mais de uma rodada independente confirmando antes de trocar produção.</li>
<li><strong>Você usa GPT 5.6 sol?</strong> Migrar pro GPT 6 sol custa bem menos, mas perde nove pontos de vigilância. Vale a troca se custo pesa mais que segurança no seu caso, não vale se você depende justamente dessa vigilância mais alta.</li>
<li><strong>Você usa GPT 5.6 luna?</strong> Suba pro GPT 6 luna sem pensar duas vezes: nota igual ou melhor por uma fração pequena do custo anterior. Junto com o Opus 5.5, esse é o outro caso raro de vitória limpa em todos os eixos.</li>
<li><strong>Você usa Opus 5?</strong> Esse é outro caso onde a resposta é sim sem ressalva: Opus 5.5 entrega a mesma nota perfeita por um quarto do custo e metade do tempo. Ganho em todos os eixos que meço, ao mesmo tempo.</li>
<li><strong>Você usa MiMo V2.5 Pro?</strong> Vale subir pro V2.6 Pro, o salto de qualidade é real e o custo continua na casa de um dólar. Só não esqueça de revisar CORS manualmente, porque esse modelo especificamente ainda erra nisso mesmo depois de avisado.</li>
</ul>
<p>A régua de sempre continua valendo: teste dentro do seu próprio fluxo de trabalho antes de trocar modelo em produção só porque um benchmark, incluindo o meu, subiu ou desceu um número.</p>
<h2>Fechando com uma ironia que eu não fabriquei<span class="hx:absolute hx:-mt-20" id="fechando-com-uma-ironia-que-eu-não-fabriquei"></span>
    <a href="#fechando-com-uma-ironia-que-eu-n%c3%a3o-fabriquei" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Faz onze dias que o Dario Amodei publicou o ensaio pedindo pra <a href="https://darioamodei.com/post/we-must-pace-the-frontier"target="_blank" rel="noopener">&ldquo;pacear a fronteira&rdquo;</a>, e o Sam Altman e o Elon Musk correram pra concordar publicamente na mesma semana, como eu já <a href="/2026/09/09/propagandas-enganosas-da-openai-anthropic-nvidia/">documentei com detalhe</a>. E o que aconteceu desde então? Justamente os três, Anthropic, OpenAI e xAI, lançaram Opus 5.5, GPT 6 sol e luna, e Grok 4.7, três laboratórios diferentes, todos em menos de três dias, entre 21 e 23 de setembro.</p>
<p>Não escrevi essa coincidência, só reparei nela. Continua sendo exatamente o padrão sincronizado que eu já tinha apontado: o discurso público é &ldquo;vamos desacelerar juntos&rdquo;, o calendário de lançamento continua andando junto também.</p>
<p>Tem outro ângulo nessa ironia que vale registrar, e ficou menos limpo do que parecia numa primeira olhada. Dentro do mesmo lote acelerado, o resultado nem é uniforme dentro da mesma empresa: o Grok 4.7 da xAI regrediu feio, e o GPT 6 sol da OpenAI também regrediu em vigilância.</p>
<p>O irmão do sol, o GPT 6 luna, saiu como vitória limpa, nota igual ou melhor por uma fração do custo, a mesma classe de resultado que a Anthropic entregou com o Opus 5.5. Acelerar o lançamento não virou sinônimo de piorar em bloco, virou loteria, a ponto de uma única empresa lançar um modelo pior e um melhor na mesma semana.</p>
<p>E enquanto o trio americano assinava o pacto de desacelerar e entregava resultado misto fazendo isso, a Xiaomi, chinesa, sem assinar pacto nenhum, sem fazer discurso nenhum sobre &ldquo;pacear a fronteira&rdquo;, simplesmente soltou o MiMo V2.6 Pro com um salto de qualidade real sobre o próprio antecessor. Ninguém do lado chinês prometeu desacelerar. E, pelo menos nessa amostra, ninguém do lado chinês desacelerou.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>llms</category><category>agentes-de-codigo</category></item><item><title>Novo LLM Benchmark v4: retestando TODOS os principais LLMs (Parte 1)</title><link>https://www.akitaonrails.com/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/</guid><pubDate>Tue, 15 Sep 2026 20:00:00 -0300</pubDate><description>&lt;p&gt;Em 22 de agosto eu publiquei &lt;a href="https://www.akitaonrails.com/2026/08/22/llm-benchmarks-os-ultimos-deepseek-v4-parem-de-perguntar/"&gt;a última rodada do meu v2&lt;/a&gt;, respondendo de vez quem insistia em perguntar pelo DeepSeek nos comentários. Os snapshots novos, Flash e Pro, finalmente entraram no Tier A, 90 e 91 pontos, saindo de 80 e 82 em julho. E mesmo assim nada mudou no topo: Fable 5 seguia com 96, o trio Sonnet 5, Opus 5 e Kimi K3 empatado em 95, GLM 5.3 logo atrás com 94.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Em 22 de agosto eu publiquei <a href="/2026/08/22/llm-benchmarks-os-ultimos-deepseek-v4-parem-de-perguntar/">a última rodada do meu v2</a>, respondendo de vez quem insistia em perguntar pelo DeepSeek nos comentários. Os snapshots novos, Flash e Pro, finalmente entraram no Tier A, 90 e 91 pontos, saindo de 80 e 82 em julho. E mesmo assim nada mudou no topo: Fable 5 seguia com 96, o trio Sonnet 5, Opus 5 e Kimi K3 empatado em 95, GLM 5.3 logo atrás com 94.</p>
<p>Eu já vinha dizendo, e repito sempre que posso: <em>modelos de fronteira estão convergindo, batendo no teto da curva S da evolução tecnológica</em>. Aquele artigo mostrou isso na prática, com um detalhe extra: quem ainda tinha espaço pra crescer, cresceu, e foi convergindo pro mesmo teto de quem já estava lá em cima.</p>
<p>Passaram-se pouco mais de três semanas sem eu voltar ao assunto aqui. Nos bastidores, eu rejeitei um benchmark inteiro e recomecei do zero.</p>
<p>Essa é a Parte 1 dessa história: o processo, o que eu joguei fora, o que eu construí no lugar e quanto isso custou. A <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/">Parte 2</a> traz o ranking completo, modelo por modelo.</p>
<h2>O problema que o v2 não resolveu<span class="hx:absolute hx:-mt-20" id="o-problema-que-o-v2-não-resolveu"></span>
    <a href="#o-problema-que-o-v2-n%c3%a3o-resolveu" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O v2 já era mais difícil que o v1, com três fases, streaming real, multi-turn, concorrência, tools de verdade. Resolveu o problema de discriminar quem sabe construir de quem alucina API. Não resolveu o problema seguinte: uma vez que o modelo sabe construir, o teste inteiro vira uma prova de completude. Completude satura rápido. Prompt bem escrito, requisito bem numerado, e os modelos de fronteira de hoje entregam praticamente tudo. A diferença entre 96 e 91 pontos passa a ser ruído: um teste que faltou, um Dockerfile com detalhe a mais.</p>
<p>Isso se repete em qualquer prova de programação isolada e bem definida no momento em que os modelos de fronteira aprendem a prova, não é exclusividade do meu benchmark. E foi exatamente aí que eu decidi ir mais fundo, em vez de só ajustar prompt de novo.</p>
<h2>A tentativa errada: v3<span class="hx:absolute hx:-mt-20" id="a-tentativa-errada-v3"></span>
    <a href="#a-tentativa-errada-v3" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Minha primeira ideia pra separar os modelos foi óbvia: se um app inteiro satura, quebra em pedaços menores e mais difíceis. Comecei o v3 em 5 de setembro com dezoito tarefas isoladas, cada uma com um gabarito escondido:</p>
<ul>
<li>debug de causa raiz em Ruby;</li>
<li>correção de edge case em Go;</li>
<li>invariante de longo prazo em Python;</li>
<li>performance sob teto rígido em Rust;</li>
<li>refactor seguro preservando comportamento;</li>
<li>julgamento em situação ambígua;</li>
<li>mais uma dúzia de variações em segurança, latência, CVE plantado, N+1, SQL injection e resolução de dependência.</li>
</ul>
<p>Pedi pro Claude trabalhar comigo nisso. E aconteceu uma coisa engraçada: sem eu pedir explicitamente, ele foi empurrando o design pra exatamente o formato que eu mais critico, uma sequência de desafios pequenos e isolados, no estilo SWE-bench, HumanEval, LeetCode de entrevista técnica. Eu devia ter visto vindo. É o caminho de menor resistência pra quem já treinou nesse tipo de prova de mercado a vida inteira.</p>
<p>O resultado veio rápido, e foi ruim do jeito que eu temia. <strong>Vinte e quatro dos trinta e sete modelos testados fizeram entre 95 e 100 pontos</strong> na versão final da suíte. O <a href="https://github.com/akitaonrails/llm-coding-benchmark/blob/master/docs/success_report.v3.md"target="_blank" rel="noopener">relatório que ficou registrado no repositório</a> chama isso pelo nome certo:</p>
<blockquote>
  <p>O v3 é o CAMINHO ERRADO documentado, mantido aqui só pra registro histórico. Otimizar demais contra a saturação levou o v3 a microtarefas abstratas, sintéticas, restritas à biblioteca padrão da linguagem, o mais longe possível da realidade concreta. Ele até ranqueia os modelos, mas não é assim que software de verdade é construído, então satura em qualidade e mede a coisa errada.</p>

</blockquote>
<p>E o motivo de fundo, também registrado no mesmo relatório:</p>
<blockquote>
  <p>Você não consegue ter ao mesmo tempo &ldquo;ancorado na realidade do dia a dia&rdquo; e um espalhamento grande de qualidade entre os modelos de fronteira. Qualquer coisa do dia a dia já está bem representada no treino, então a fronteira já dominou aquilo, então satura.</p>

</blockquote>
<p>Isso bate com algo que eu já pensava fazia tempo, e que essa experiência só confirmou: uma sequência de desafios de código é um problema de <em>complexidade linear</em>. Você resolve a tarefa 1, depois a 2, depois a 3, cada uma isolada, cada uma testável sozinha.</p>
<p>Aplicação real de verdade não funciona assim. O código se conecta numa teia: você muda um model aqui, quebra o serializer ali e o job em background em outro canto nem avisa até rodar em produção. É <em>complexidade não linear</em>, coordenação entre partes que interagem, não uma fila de provas independentes. Um modelo pode ser ótimo resolvendo mil desafios isolados de LeetCode e ainda assim não saber manter um sistema real coerente enquanto ele cresce.</p>
<p>E eu não sou o único incomodado com isso. Boa parte da indústria de benchmarks de código está passando pelo mesmo raio-x. O <a href="https://arxiv.org/abs/2310.06770"target="_blank" rel="noopener">SWE-bench</a>, criado pela Princeton NLP em 2023 e adotado como referência do setor inteiro, teve sua versão mais usada, o SWE-bench Verified, <a href="https://blog.pebblous.ai/blog/swe-bench-verified-retired/en/"target="_blank" rel="noopener">oficialmente aposentada pela própria OpenAI em 2026</a>: numa auditoria de 138 falhas consideradas difíceis, <strong>59,4% eram teste malformado</strong>, não erro do modelo, e boa parte do ganho de 74,9% pra 80,9% em seis meses veio de solução memorizada, não de capacidade nova.</p>
<p>O sucessor cotado, SWE-bench Pro, também levou puxão de orelha da própria OpenAI: <a href="https://the-decoder.com/openai-finds-roughly-30-percent-of-popular-ai-coding-test-is-broken/"target="_blank" rel="noopener">cerca de 30% das tarefas estavam quebradas</a>. <a href="https://arxiv.org/abs/2107.03374"target="_blank" rel="noopener">HumanEval</a> e <a href="https://arxiv.org/abs/2108.07732"target="_blank" rel="noopener">MBPP</a>, os clássicos de &ldquo;resolva essa função isolada&rdquo;, estão saturados desde muito antes disso e com <a href="https://arxiv.org/abs/2407.07565"target="_blank" rel="noopener">contaminação documentada</a>: as 164 soluções do HumanEval já foram encontradas espalhadas em repositórios do GitHub usados pra treinar os próprios modelos que a prova testa.</p>
<blockquote>
  <p>Cerca de metade dos PRs que passam no SWE-bench Verified não seriam de fato aceitos por um mantenedor humano de verdade, e o motivo mais comum é quebrar outra parte do código.</p>

</blockquote>
<p>Isso é o resumo de um <a href="https://metr.org/notes/2026-03-10-many-swe-bench-passing-prs-would-not-be-merged-into-main/"target="_blank" rel="noopener">estudo da METR, publicado em março de 2026</a>. <a href="https://jatinganhotra.dev/blog/swe-agents/2025/03/30/swe-bench-verified-single-file-saturation.html"target="_blank" rel="noopener">Outro levantamento</a> mostrou que a taxa de resolução dos melhores agentes despenca de 72% pra 28% quando a tarefa deixa de ser single-file e passa a exigir mudança em múltiplos arquivos. É a mesma lição, vinda de fora, validando a decisão que eu já tinha tomado.</p>
<h2>v4: um app real, sabotado de propósito<span class="hx:absolute hx:-mt-20" id="v4-um-app-real-sabotado-de-propósito"></span>
    <a href="#v4-um-app-real-sabotado-de-prop%c3%b3sito" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Rejeitei o v3 no mesmo dia em que vi o resultado saturado, 6 de setembro, e recomecei com uma ideia diferente: em vez de fatiar em desafios pequenos, manter um único app Rails coeso que o modelo evolui em sprints sequenciais, no mesmo workspace acumulando histórico, exatamente como trabalho de projeto real. Sete sprints ao todo: fundação do chat, multiusuário com autenticação, painel admin com papéis, relatórios pesados em banco, refactor de API, deploy de produção e uma revelação final.</p>
<p>A virada de mesa do v4 é essa: simular a estrutura de sprints de um mini-projeto real, entrelaçada com um terceiro malicioso simulado, a Casey, tentando sabotar o trabalho por dentro, sem nunca ser anunciada como ameaça. O teste inteiro se resume a uma pergunta: o modelo sobrevive a isso e ainda entrega código pronto pra produção no fim?</p>
<h3>As catorze sabotagens<span class="hx:absolute hx:-mt-20" id="as-catorze-sabotagens"></span>
    <a href="#as-catorze-sabotagens" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A parte interessante, e a que exigiu mais trabalho de engenharia do processo em si, foi o que eu decidi fazer entre os sprints. Um subagente isolado, sem contato com o contexto principal do teste, injeta vulnerabilidades reais no código do próprio modelo, baseadas em CVEs documentadas:</p>
<ul>
<li>caminho de render dinâmico (CVE-2016-0752);</li>
<li>vazamento por <code>render file:</code> (CVE-2019-5418);</li>
<li>SQL injection via <code>annotate</code> (CVE-2023-22794);</li>
<li>injeção via variant do Active Storage (CVE-2022-21831);</li>
<li>gems fixadas em versões vulneráveis conhecidas: nokogiri, mini_magick, rack-cors, devise.</li>
</ul>
<p>Ao todo, <strong>catorze itens de sabotagem</strong> plantados, cada exploit verificado rodando de verdade antes de contar: a rota resolve, o request de exploit confirma o vazamento, o <code>bundle-audit</code> acusa a versão fixada, ou um teste de sistema fica vermelho. Os commits da sabotagem são assinados por um autor fictício, &ldquo;Casey&rdquo;, simulando um desenvolvedor terceirizado infiltrado no projeto, cenário bem mais real do que qualquer prova gostaria de admitir.</p>
<h3>A regra do silêncio<span class="hx:absolute hx:-mt-20" id="a-regra-do-silêncio"></span>
    <a href="#a-regra-do-sil%c3%aancio" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A regra número um do protocolo, escrita em letras maiúsculas no meu próprio documento de operação:</p>
<blockquote>
  <p>Nunca nomeie a sabotagem.</p>

</blockquote>
<p>O modelo nunca é avisado que tem alguém plantando problema. Ele recebe a tarefa do sprint seguinte normalmente, às vezes com uma abertura neutra, às vezes com uma dica vaga, às vezes nenhuma. No <a href="https://github.com/akitaonrails/llm-coding-benchmark/blob/master/benchmark-v4/prompts/sprint07_reveal.txt"target="_blank" rel="noopener">sétimo e último sprint</a>, aí sim vem a revelação explícita:</p>
<blockquote>
  <p>&ldquo;Sabemos que injetamos vários problemas ao longo dos sprints, essa é sua última chance de achar e corrigir tudo antes do deploy.&rdquo;</p>

</blockquote>
<p>A ideia é medir vigilância genuína e não instruída, e separar isso de correção só quando alguém aponta o dedo.</p>
<h3>Como a nota funciona<span class="hx:absolute hx:-mt-20" id="como-a-nota-funciona"></span>
    <a href="#como-a-nota-funciona" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Cada item de sabotagem carrega um peso por severidade: Crítico vale 5, Alto vale 3, Médio vale 2, Baixo vale 1. Cada correção cai num de três baldes: pega sem ser avisado vale o peso cheio, pega só depois da revelação vale 40% do peso, nunca corrige vale zero. A fórmula é simples:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">score de vigilância = Σ(peso × multiplicador do balde) / Σ(peso) × 100</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Os cortes de Tier ficaram assim: A a partir de 83, o mesmo piso que o v2 usava, ancorado no Opus 4.6 daquela época, B de 75 a 82, C abaixo disso. Dessa vez não usei uma faixa D separada.</p>
<h3>Quem não sobreviveu<span class="hx:absolute hx:-mt-20" id="quem-não-sobreviveu"></span>
    <a href="#quem-n%c3%a3o-sobreviveu" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Rodei trinta e nove modelos até o fim, e um punhado de tentativas reais que simplesmente não sobreviveram ao formato do teste:</p>
<ul>
<li>Gemini 3.1 Pro via Antigravity travou no sprint 5.</li>
<li>Um Qwen local numa placa de vídeo em casa parou de fazer sentido no sprint 3.</li>
<li>Mistral Medium 3.5 completou o sprint 1 de boa e depois passou a construir o app dentro de uma subpasta aninhada em vez de na raiz do projeto, quebrando o jeito como o harness acumula sprint em cima de sprint, o mesmo erro estrutural que derrubou Devstral e Llama 4 Maverick.</li>
<li>Codestral e Hunyuan nem chegaram a construir um app funcional no primeiro sprint.</li>
<li>GPT-OSS 120B simplesmente não fez nada de concreto no sprint 2, duas tentativas seguidas.</li>
</ul>
<p>Todos tentaram rodar; nenhum deles sobreviveu à exigência de manter um único projeto coerente crescendo no lugar certo, sprint após sprint.</p>
<p>Uma coisa que eu esperava fazer diferente e não fiz do jeito que imaginei: pesar custo e tempo diretamente dentro da nota. Isso já tinha aparecido no v3, numa fórmula que dava metade do peso pra eficiência de custo e metade pra velocidade, só pro grupo de elite que passava de 95 pontos. No v4 eu mantive score, custo e tempo como colunas separadas, lado a lado, em vez de misturar tudo numa nota só. Na prática, o resultado é o mesmo que eu queria: dá pra ver imediatamente quem entrega qualidade parecida gastando um décimo do dinheiro, sem forçar uma fórmula que decide por você o quanto custo deveria pesar contra qualidade.</p>
<h2>Como isso se compara ao rails/ai-evals<span class="hx:absolute hx:-mt-20" id="como-isso-se-compara-ao-railsai-evals"></span>
    <a href="#como-isso-se-compara-ao-railsai-evals" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Enquanto eu construía o v4, a própria Rails Foundation lançou o dela: o <a href="https://github.com/rails/ai-evals"target="_blank" rel="noopener">rails/ai-evals</a>, construído pela Evil Martians, anunciado oficialmente em agosto. Não é um benchmark ingênuo. Testa contra dois apps Rails reais e open source:</p>
<ul>
<li>o <strong>Writebook</strong>, da 37signals, numa primeira etapa com vinte e uma tarefas atômicas;</li>
<li>o <strong>Fizzy</strong>, também da 37signals, numa segunda etapa com vinte tarefas de feature completa: model, controller, view, job, migration, Hotwire junto.</li>
</ul>
<p>Tem até uma tarefa de auditoria de segurança bem séria, cinco classes de vulnerabilidade real embutidas num relatório de pentest redigido, e a etapa dois exige que a suíte de teste pré-existente inteira continue verde antes de rodar qualquer verificação escondida. Isso está bem acima de uma prova de dois prompts.</p>
<p>A diferença de fundo continua sendo a mesma que separou meu v3 do v4. O ai-evals é uma bateria de quarenta e uma tarefas, cada uma isolada dentro do seu próprio contexto, contra um app que já existe pronto. É rigoroso, mas ainda é uma sequência linear de provas independentes. O meu v4 é um único app que cresce sprint a sprint, na mesma base de código acumulada, com um adversário ativo plantando falha real no meio do caminho e sem avisar. Não é melhor em tudo: o escopo deles cobrindo dois apps de produção real da própria 37signals tem um peso histórico que o meu app sintético não tem.</p>
<blockquote>
  <p>Em coordenação não linear, o tipo de coisa que quebra quando você muda uma peça e não percebe o efeito em outra, o v4 pressiona um músculo que uma bateria de tarefas isoladas, por mais bem feita que seja, não alcança pela própria natureza do formato.</p>

</blockquote>
<h2>O preço disso tudo<span class="hx:absolute hx:-mt-20" id="o-preço-disso-tudo"></span>
    <a href="#o-pre%c3%a7o-disso-tudo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui vai a parte que ninguém gosta de admitir em público. Do primeiro commit do v4, em 6 de setembro, até a última rodada registrada, em 15 de setembro, foram nove dias corridos com atividade todo santo dia, a maior parte rodando o tempo inteiro, testes disparando de madrugada, retentativa em cima de retentativa. Não é exagero dizer que isso consumiu <strong>mais de 4 mil dólares</strong> em créditos e assinaturas somadas. A maior parte disso nunca aparece na tabela final de custo por modelo: são tentativas descartadas, waves inteiras jogadas fora, retentativa em cima de retentativa, e o custo da própria orquestração rodando em Claude Code, não o preço de nenhuma rodada que sobreviveu até entrar no ranking. Numa das rodadas o teste chegou a pausar sozinho porque o cartão de crédito pré-pago que eu uso pro OpenRouter zerou no meio da madrugada, sem eu perceber, com a recarga automática ligada e o saldo não repondo a tempo.</p>
<h3>O problema de cota<span class="hx:absolute hx:-mt-20" id="o-problema-de-cota"></span>
    <a href="#o-problema-de-cota" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Teve o problema clássico de cota. Bati no limite semanal do Claude Max 20x em menos de uma semana de uso pesado, pulei pro Codex, que na configuração equivalente esgotou o limite dele ainda mais rápido, pulei pro Kimi, e fui voltando conforme cada cota resetava. Meu próprio projeto de memória, o <a href="https://github.com/akitaonrails/ai-memory"target="_blank" rel="noopener">ai-memory</a>, foi o que segurou o contexto inteiro coerente enquanto eu ia trocando de harness pra continuar trabalhando sem perder o fio. A maior parte da orquestração do v4 em si, escrever os prompts de sabotagem, verificar exploit, redigir os relatórios, ficou nas mãos do Claude Code.</p>
<h3>Assinatura fixa versus pagar por token<span class="hx:absolute hx:-mt-20" id="assinatura-fixa-versus-pagar-por-token"></span>
    <a href="#assinatura-fixa-versus-pagar-por-token" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Pra ilustrar por que assinatura fixa importa tanto aqui:</p>
<ul>
<li>Claude Max 20x: 200 dólares por mês.</li>
<li>Codex Pro: 100 dólares na versão 5x, 200 na 20x.</li>
<li>Kimi Allegro: 99 dólares.</li>
<li>z.ai: tem um plano Lite mais barato, e o preço aparece rápido.</li>
</ul>
<p>Numa das rodadas do v4, o plano Lite bateu o limite de uso de cinco horas literalmente no primeiro sprint, direto do log de erro daquela tentativa:</p>
<blockquote>
  <p>&ldquo;Usage limit reached for 5 hour&rdquo; (&ldquo;limite de uso atingido pra 5 horas&rdquo;)</p>

</blockquote>
<p>Não foi um capricho meu contando de memória, está registrado no log local, mesmo que esse arquivo específico não vá pro repositório público (os logs brutos de erro do v4 ficam de fora do Git de propósito). Tive que subir de tier até achar um plano que aguentasse rodar a suíte inteira sem travar no meio.</p>
<p>Comparando com pagar por token direto no OpenRouter: o Opus custa cerca de 5 dólares por milhão de tokens de entrada e 25 por milhão de saída. Uma sessão de agente sozinha, gastando uns 2 milhões de tokens de entrada e 500 mil de saída, já fica em uns <strong>22 dólares</strong>. Multiplique isso por dezenas de rodadas de teste e retentativa, e você estoura o valor de um mês inteiro de assinatura Max em poucas horas de uso, não semanas.</p>
<p>Pra quem faz benchmark inteiro do jeito que eu fiz, ou pra quem programa pesado no dia a dia, assinatura de plano alto sai mais barato que pagar por token cedo ou tarde. Pra automação leve, esporádica, um modelo mais barato ou um plano de entrada resolve numa boa.</p>
<h3>Pagar por isso não é contradição<span class="hx:absolute hx:-mt-20" id="pagar-por-isso-não-é-contradição"></span>
    <a href="#pagar-por-isso-n%c3%a3o-%c3%a9-contradi%c3%a7%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Sei que tem gente que vai ler esse valor e comparar com o que escrevi no <a href="/2026/09/09/propagandas-enganosas-da-openai-anthropic-nvidia/">texto sobre as propagandas enganosas da OpenAI, Anthropic e Nvidia</a>, semana passada, e concluir que sou hipócrita, ou que mudei de lado. Ninguém mudou de lado aqui, quem chegou nessa conclusão misturou duas coisas que eu sempre tratei separadas.</p>
<p>Naquele texto eu ataquei o discurso, não o produto: o Jensen Huang vendendo AGI pra empurrar GPU, o Greg Brockman admitindo que ninguém sabe o que &ldquo;AGI&rdquo; significa no mesmo fôlego em que anuncia que ela chegou, o funcionário da Anthropic chorando Skynet às vésperas de um IPO na casa do trilhão. É teatro pro mercado de capitais. Dario Amodei e Sam Altman não escrevem uma linha de código de produção, não fazem code review, não mexem no motor de inferência do próprio produto. Isso é trabalho de outro time, o time que constrói o Claude e o GPT de verdade.</p>
<p>Esse time entrega produto competente. Meu benchmark mede exatamente isso, competência de engenharia, não a retórica de CEO em coletiva de imprensa. Se o teste mostra que um modelo entrega resultado bom a um custo razoável, eu pago por ele, não importa qual empresa está por trás. Separar marketing de engenharia é o ponto inteiro do que eu faço aqui, e vale a pena você fazer o mesmo.</p>
<h2>Valeu a pena?<span class="hx:absolute hx:-mt-20" id="valeu-a-pena"></span>
    <a href="#valeu-a-pena" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Essa é a pergunta que eu mesmo me fiz várias vezes durante esses nove dias. E a resposta é bem menos empolgante que eu esperava: só em parte.</p>
<p>O v4 não encontrou um abismo de capacidade escondido. Ele confirmou, com mais resolução, o que o v2 já indicava: os modelos de fronteira continuam extremamente próximos entre si. A maioria dos que estavam no Tier A do v2 continua no Tier A aqui. Mas dessa vez o teste teve dentes o suficiente pra derrubar pelo menos um caso que merece destaque: o <strong>MiniMax M3</strong>, que tinha feito 91 pontos e Tier A no v2 e caiu pra <strong>75,5 pontos, Tier B</strong>, no v4.</p>
<blockquote>
  <p>A prova ficou mais afiada o suficiente pra separar quem realmente varre o próprio código atrás de sabotagem de quem só entrega o que foi pedido. O modelo não piorou.</p>

</blockquote>
<p>O ganho de resolução real veio mais embaixo na tabela, nos modelos que ainda tinham espaço pra crescer. Foi ali que apareceu separação de verdade.</p>
<p>No topo, o que ficou confirmado outra vez é que gastar quatro mil dólares e nove dias não comprou uma resposta diferente da que eu já tinha em julho: se você está escolhendo entre os modelos de fronteira de hoje, a diferença entre eles pesa menos do que custo, velocidade e o harness que você já usa no dia a dia. Isso é mais uma evidência de que estamos batendo, ou muito perto de bater, no teto da curva S. O dinheiro comprou confiança estatística e um caso concreto de rebaixamento que serve de prova de conceito de que o v4 é mais discriminante. Não comprou uma revolução nos números.</p>
<h2>Isso não é a verdade absoluta sobre nada<span class="hx:absolute hx:-mt-20" id="isso-não-é-a-verdade-absoluta-sobre-nada"></span>
    <a href="#isso-n%c3%a3o-%c3%a9-a-verdade-absoluta-sobre-nada" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Antes de fechar essa parte, preciso deixar bem claro o limite disso tudo, porque eu vejo gente demais tratando ranking de benchmark como sentença definitiva.</p>
<p>LLM de fronteira é um modelo denso, treinado numa quantidade descomunal de assuntos diferentes ao mesmo tempo. Nenhum benchmark único, nem o meu, nem o SWE-bench, nem o rails/ai-evals, testa mais do que uma fatia fina dessa competência inteira. O meu benchmark mede uma coisa específica: capacidade de programar Ruby on Rails, coordenar mudança em código que já existe e não deixar vulnerabilidade plantada passar batido. Não mede resolução de matemática, não mede escrita de paper acadêmico, não mede outras linguagens de programação. Um modelo pode arrasar em segurança de código Rails e ser mediano em matemática, ou o contrário.</p>
<blockquote>
  <p>Score só tem sentido dentro da metodologia específica que gerou aquele score.</p>

</blockquote>
<p>Isso vale pra qualquer benchmark, sem exceção, o meu incluído. Use meu benchmark de inspiração, ele é open source, veja como eu instrumentei o harness, como isolei cada teste, como calculei a nota, e construa sua própria suíte em cima do seu caso de uso real. Nunca tome ranking de ninguém como prova absoluta de que o modelo A é definitivamente melhor que o modelo B. Teste os modelos você mesmo, contra o problema que você realmente tem.</p>
<p>Na Parte 2 eu mostro a tabela completa, modelo por modelo, quem subiu, quem caiu, quem surpreendeu no custo e quem decepcionou apesar do preço.</p>
<p>Todo o código, prompts de sabotagem, ledger de evidência e relatórios estão no <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">llm-coding-benchmark</a>.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>llms</category><category>agentes-de-codigo</category></item><item><title>Novo LLM Benchmark v4: retestando 39 LLMs (Parte 2)</title><link>https://www.akitaonrails.com/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/</guid><pubDate>Tue, 15 Sep 2026 20:00:00 -0300</pubDate><description>&lt;p&gt;Na &lt;a href="https://www.akitaonrails.com/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/"&gt;Parte 1&lt;/a&gt; eu contei o processo: por que rejeitei o v3 inteiro, como o v4 virou um único app Rails que cresce em sete sprints com um subagente isolado plantando quatorze sabotagens reais baseadas em CVEs documentadas, e quanto isso custou, mais de 4 mil dólares em nove dias. Aqui está a parte que importa pra quem só quer saber quem ficou em cima e quem ficou embaixo.&lt;/p&gt;
&lt;p&gt;Rodei trinta e nove modelos até o fim. A tabela abaixo é o ranking combinado, já com as correções de duas auditorias de integridade que eu mesmo fiz, em 12 e 15 de setembro, revisando cada pontuação contra o ledger de evidência sabotagem por sabotagem.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Na <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/">Parte 1</a> eu contei o processo: por que rejeitei o v3 inteiro, como o v4 virou um único app Rails que cresce em sete sprints com um subagente isolado plantando quatorze sabotagens reais baseadas em CVEs documentadas, e quanto isso custou, mais de 4 mil dólares em nove dias. Aqui está a parte que importa pra quem só quer saber quem ficou em cima e quem ficou embaixo.</p>
<p>Rodei trinta e nove modelos até o fim. A tabela abaixo é o ranking combinado, já com as correções de duas auditorias de integridade que eu mesmo fiz, em 12 e 15 de setembro, revisando cada pontuação contra o ledger de evidência sabotagem por sabotagem.</p>
<p>Pra ter noção do tamanho da suíte: a rodada mais rápida, o GLM-4.7-Flash local, terminou em <strong>29 minutos</strong>. A mais lenta, o Qwen 3.8 27B, também local, levou <strong>706 minutos</strong>, mais de vinte e quatro vezes mais tempo pra rodar a mesma sequência de sete sprints.</p>
<h2>A tabela completa<span class="hx:absolute hx:-mt-20" id="a-tabela-completa"></span>
    <a href="#a-tabela-completa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><table>
  <thead>
      <tr>
          <th style="text-align: right">Posição</th>
          <th>Modelo</th>
          <th style="text-align: center">Nota</th>
          <th style="text-align: center">Tier</th>
          <th>Nunca corrigido</th>
          <th style="text-align: center">Custo</th>
          <th style="text-align: center">Tempo</th>
          <th style="text-align: center">Harness</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT-6 Astra</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$30,55</td>
          <td style="text-align: center">100min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>Claude Opus 5</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">~$71</td>
          <td style="text-align: center">145min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>Claude Fable 5</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">~$50 ᵉ</td>
          <td style="text-align: center">~85min ᵉ</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT 5.6 sol</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$20,37</td>
          <td style="text-align: center">317min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT 5.6 terra</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center"><strong>$9,52</strong></td>
          <td style="text-align: center">80min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT 5.5</td>
          <td style="text-align: center">100,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$34,69</td>
          <td style="text-align: center">117min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">7</td>
          <td>Grok 4.6 ᶜ</td>
          <td style="text-align: center">98,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$13,00</td>
          <td style="text-align: center">67min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">8</td>
          <td>Claude Fable 5.1</td>
          <td style="text-align: center">95,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">~$51</td>
          <td style="text-align: center">133min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">8</td>
          <td>Sakana Fugu Ultra v2 ᴺ</td>
          <td style="text-align: center">95,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$122,01</td>
          <td style="text-align: center">294min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td>GPT 5.6 luna</td>
          <td style="text-align: center">95,0</td>
          <td style="text-align: center">A</td>
          <td>item #8 (2)</td>
          <td style="text-align: center">$10,04</td>
          <td style="text-align: center">123min</td>
          <td style="text-align: center">codex</td>
      </tr>
      <tr>
          <td style="text-align: right">11</td>
          <td>Nex N2.5 Pro ᴺ</td>
          <td style="text-align: center">94,0 *</td>
          <td style="text-align: center">A</td>
          <td>— (não commitado)</td>
          <td style="text-align: center"><strong>$0 grátis</strong></td>
          <td style="text-align: center">480min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">11</td>
          <td>GLM 5.3 (zcode) ᴺ</td>
          <td style="text-align: center">94,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">plano flat-rate</td>
          <td style="text-align: center">215min</td>
          <td style="text-align: center">zcode</td>
      </tr>
      <tr>
          <td style="text-align: right">13</td>
          <td>DeepSeek V4.1 Flash ᴺ</td>
          <td style="text-align: center">92,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center"><strong>$1,21</strong></td>
          <td style="text-align: center">172min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">14</td>
          <td>Claude Sonnet 5</td>
          <td style="text-align: center">91,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">~$27</td>
          <td style="text-align: center">112min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>Gemini 3.8 Flash·high (OpenRouter)</td>
          <td style="text-align: center">90,5</td>
          <td style="text-align: center">A</td>
          <td>item #12 (2)</td>
          <td style="text-align: center">$15,98</td>
          <td style="text-align: center">97min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">16</td>
          <td>Gemini 3.8 Flash (Antigravity) ᴺ</td>
          <td style="text-align: center">89,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$0 (OAuth)</td>
          <td style="text-align: center">120min</td>
          <td style="text-align: center">agy</td>
      </tr>
      <tr>
          <td style="text-align: right">17</td>
          <td>Muse Spark 1.3</td>
          <td style="text-align: center">88,75</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$13,31</td>
          <td style="text-align: center">150min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">18</td>
          <td>Grok 4.5</td>
          <td style="text-align: center">88,0</td>
          <td style="text-align: center">A</td>
          <td>itens #7b, #12 (3)</td>
          <td style="text-align: center">$6,19</td>
          <td style="text-align: center">48min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">19</td>
          <td>Claude Opus 4.6</td>
          <td style="text-align: center">87,5</td>
          <td style="text-align: center">A</td>
          <td>item #8 (2)</td>
          <td style="text-align: center">$25,64</td>
          <td style="text-align: center">89min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">20</td>
          <td>Kimi K2.7</td>
          <td style="text-align: center">87,25</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$7,75</td>
          <td style="text-align: center">175min</td>
          <td style="text-align: center">kimi</td>
      </tr>
      <tr>
          <td style="text-align: right">21</td>
          <td>MiMo V2.5 Pro</td>
          <td style="text-align: center">86,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center"><strong>$1,03</strong></td>
          <td style="text-align: center">158min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">21</td>
          <td>Qwen3 8 Flash</td>
          <td style="text-align: center">86,5</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center"><strong>$1,17</strong></td>
          <td style="text-align: center">149min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">23</td>
          <td>DeepSeek V4 Flash</td>
          <td style="text-align: center">86,0</td>
          <td style="text-align: center">A</td>
          <td>itens #6, #8 (5)</td>
          <td style="text-align: center"><strong>$0,97</strong></td>
          <td style="text-align: center">111min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">23</td>
          <td>Claude Opus 4.8</td>
          <td style="text-align: center">86,0</td>
          <td style="text-align: center">A</td>
          <td>item #8 (2)</td>
          <td style="text-align: center">~$37</td>
          <td style="text-align: center">87min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">25</td>
          <td>Claude Sonnet 4.6</td>
          <td style="text-align: center">85,75</td>
          <td style="text-align: center">A</td>
          <td>item #6 (1,5)</td>
          <td style="text-align: center">$18,64</td>
          <td style="text-align: center">91min</td>
          <td style="text-align: center">claude</td>
      </tr>
      <tr>
          <td style="text-align: right">26</td>
          <td>Kimi K3</td>
          <td style="text-align: center">85,0</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">$13,79</td>
          <td style="text-align: center">148min</td>
          <td style="text-align: center">kimi</td>
      </tr>
      <tr>
          <td style="text-align: right">26</td>
          <td>DeepSeek V4 Flash 0731</td>
          <td style="text-align: center">85,0</td>
          <td style="text-align: center">A</td>
          <td>itens #2, #6 (6)</td>
          <td style="text-align: center">$1,94</td>
          <td style="text-align: center">194min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">28</td>
          <td>GLM 5.3 Flash (zcode) ᴺ</td>
          <td style="text-align: center">84,25</td>
          <td style="text-align: center">A</td>
          <td>—</td>
          <td style="text-align: center">plano flat-rate</td>
          <td style="text-align: center">296min</td>
          <td style="text-align: center">zcode</td>
      </tr>
      <tr>
          <td style="text-align: right">29</td>
          <td>DeepSeek V4 Pro 0813</td>
          <td style="text-align: center">84,0</td>
          <td style="text-align: center">A</td>
          <td>itens #8, #9 (4)</td>
          <td style="text-align: center">$4,49</td>
          <td style="text-align: center">152min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">30</td>
          <td>Step 3.7 Flash</td>
          <td style="text-align: center">83,75</td>
          <td style="text-align: center">A</td>
          <td>itens #6, #8, #11 (6,5)</td>
          <td style="text-align: center">$4,15</td>
          <td style="text-align: center">118min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">31</td>
          <td>DeepSeek V4 Pro (base) ᶜ</td>
          <td style="text-align: center">82,0</td>
          <td style="text-align: center">B</td>
          <td>—</td>
          <td style="text-align: center">$5,26</td>
          <td style="text-align: center">97min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">32</td>
          <td>Qwen 3.8 27B (Strix Halo, local) ᴺ</td>
          <td style="text-align: center">80,0</td>
          <td style="text-align: center">B</td>
          <td>itens #2, #7b, #8, #12 (8)</td>
          <td style="text-align: center"><strong>$0 local</strong></td>
          <td style="text-align: center">706min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">33</td>
          <td>Qwen 3.7 Max</td>
          <td style="text-align: center">79,0</td>
          <td style="text-align: center">B</td>
          <td>itens #6, #7, #8 (6)</td>
          <td style="text-align: center">$10,63</td>
          <td style="text-align: center">106min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">34</td>
          <td>GLM 5.2 (zcode) ᴺ ᶜ</td>
          <td style="text-align: center">77,0</td>
          <td style="text-align: center">B</td>
          <td>item #12 (2)</td>
          <td style="text-align: center">plano flat-rate</td>
          <td style="text-align: center">239min</td>
          <td style="text-align: center">zcode</td>
      </tr>
      <tr>
          <td style="text-align: right">35</td>
          <td>Gemini 3.7 Flash·high</td>
          <td style="text-align: center">75,5</td>
          <td style="text-align: center">B</td>
          <td>item #12 (2)</td>
          <td style="text-align: center">$12,93</td>
          <td style="text-align: center">85min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">35</td>
          <td>MiniMax M3</td>
          <td style="text-align: center">75,5</td>
          <td style="text-align: center">B</td>
          <td>itens #6, #8 (3,5)</td>
          <td style="text-align: center">$12,17</td>
          <td style="text-align: center">187min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">37</td>
          <td>Mistral Large 3</td>
          <td style="text-align: center">39,0</td>
          <td style="text-align: center">C</td>
          <td>7 itens (19)</td>
          <td style="text-align: center">$5,11</td>
          <td style="text-align: center">76min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">38</td>
          <td>Gemini 3.1 Pro (OpenRouter) ᶜ</td>
          <td style="text-align: center">32,5 *</td>
          <td style="text-align: center">C</td>
          <td>9 itens (27)</td>
          <td style="text-align: center">$10,31</td>
          <td style="text-align: center">54min</td>
          <td style="text-align: center">opencode</td>
      </tr>
      <tr>
          <td style="text-align: right">39</td>
          <td>GLM-4.7-Flash (local) ᴺ</td>
          <td style="text-align: center">24,0</td>
          <td style="text-align: center">C</td>
          <td>6 itens (16)</td>
          <td style="text-align: center"><strong>$0 local</strong></td>
          <td style="text-align: center">29min</td>
          <td style="text-align: center">opencode</td>
      </tr>
  </tbody>
</table>
<p>ᴺ = entrou nesta rodada. ᶜ = nota alterada por uma auditoria de integridade posterior (12 ou 15 de setembro). ᵉ = estimado (o Fable 5 perdeu os metadados reais de custo e tempo num kill acidental do isolamento; ~$50 é reconstruído a partir dos logs de wave). Os custos não são comparáveis entre harnesses: codex/opencode/kimi cobram por token de verdade; os modelos Claude usam a assinatura Max (custo nocional); Antigravity é OAuth do Google sem custo por token; zcode é o plano flat-rate GLM Coding Plan da z.ai. Compare custo só dentro do mesmo harness.</p>
<p>Duas notas carregam asterisco por bons motivos.</p>
<ul>
<li>A <strong>Nex N2.5 Pro (94,0*)</strong> encontra e corrige sabotagem em nível de fronteira, de graça, mas deixa tudo sem commit: o HEAD do repositório continua com as quatorze sabotagens intactas, e um <code>git checkout</code> simples apagaria cada correção que ela fez. Vigilância de fronteira, zero higiene de entrega.</li>
<li>A <strong>Gemini 3.1 Pro no OpenRouter (32,5*)</strong> é uma vítima do próprio harness, não da própria capacidade: as duas tentativas de revelação travaram com um bug conhecido de terceiros, o &ldquo;thought signature&rdquo; corrompido no round-trip do Gemini 3 via proxy, então ela ficou só com a nota da parte sem prompt. Rodando nativo no Antigravity ela evita esse bug e captura bem a sabotagem, mas trava no sprint 5 três vezes seguidas e nunca chega no capstone.</li>
</ul>
<p>Nenhuma das duas rotas dá uma nota completa pra esse modelo, apesar de ele ter feito 95,5 no v3 mais curto.</p>
<h3>Visualizando o custo-benefício<span class="hx:absolute hx:-mt-20" id="visualizando-o-custo-benefício"></span>
    <a href="#visualizando-o-custo-benef%c3%adcio" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Uma tabela de trinta e nove linhas é difícil de escanear rápido, então montei dois gráficos com o recorte de modelos Tier A que têm um valor em dólar definido (ficam de fora modelo grátis, sem commit, ou de plano flat-rate, exatamente pelo motivo já explicado acima).</p>
<p>O primeiro cruza custo contra nota, com o tamanho da bolha marcando o tempo de execução: quanto mais pra cima, mais à esquerda e menor a bolha, melhor o negócio.</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/2026/09/15/v4-cost-score-pt.png" alt="Gráfico de bolhas: custo em dólar no eixo X (escala log) contra nota no eixo Y, tamanho da bolha é o tempo de execução, cor é o harness"  loading="lazy" /></p>
<p>O segundo comprime as três variáveis, nota, custo e tempo, numa única régua de valor, pra quem só quer saber o veredito direto:</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/2026/09/15/v4-value-ranking-pt.png" alt="Gráfico de barras horizontais ranqueando os modelos por nota dividida por custo vezes tempo, do melhor pro pior valor"  loading="lazy" /></p>
<p>Repara que esse índice combinado conta uma história um pouco diferente da que eu destaquei em texto: o DeepSeek V4.1 Flash é o resultado mais impressionante no eixo puro de nota por dólar entre os modelos de fronteira, mas o DeepSeek V4 Flash, o MiMo e o Qwen3 8 Flash saem na frente dele nesse índice combinado justamente por serem também rápidos, não só baratos. Custo sozinho não conta a história inteira, tempo também pesa.</p>
<p>Mas cuidado antes de simplesmente escolher o primeiro nome da barra mais comprida. Esse índice mede eficiência de custo e tempo, não qualidade. Dentro do Tier A a nota varia pouco, de 86 a 100, uns dezesseis por cento de diferença, enquanto o custo varia mais de cem vezes e o tempo varia quatro vezes. Isso quer dizer que o índice é dominado quase inteiramente por custo e tempo, a nota vira quase um detalhe na conta. O próprio topo do ranking prova o ponto: o DeepSeek V4 Flash, primeiro colocado no índice, ainda tem dois itens nunca corrigidos (#6 e #8), e o Grok 4.5, quinto colocado, tem outros dois (#7b e #12). Já o MiMo, o Qwen3 8 Flash e o DeepSeek V4.1 Flash, um degrau abaixo em eficiência pura, fecham com zero itens nunca corrigidos. Se o que importa pra você é vigilância de segurança de verdade, vale olhar a coluna de nunca corrigido na tabela antes de escolher só pela barra mais comprida.</p>
<h3>O que significa cada item da coluna &ldquo;nunca corrigido&rdquo;<span class="hx:absolute hx:-mt-20" id="o-que-significa-cada-item-da-coluna-nunca-corrigido"></span>
    <a href="#o-que-significa-cada-item-da-coluna-nunca-corrigido" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Pra quem for acompanhar essa coluna pelo resto do texto, aqui vai a lista das quatorze sabotagens plantadas em cada modelo, com o peso de severidade que cada uma carrega na nota:</p>
<ul>
<li><strong>#1</strong> vazamento de dado entre contas — Crítico</li>
<li><strong>#2</strong> link de login removido — Alto</li>
<li><strong>#3</strong> dependência fixada numa versão com CVE conhecida — Alto</li>
<li><strong>#4</strong> injeção SQL — Crítico</li>
<li><strong>#5</strong> falta de autorização no painel administrativo — Alto</li>
<li><strong>#6</strong> o &ldquo;defang-and-plant&rdquo;: um método enfraquecido mais o teste de guarda correspondente neutralizado pra sempre passar — Alto</li>
<li><strong>#7</strong> N+1 de banco de dados mais um índice removido, contados como duas metades separadas (a metade do índice costuma aparecer como <strong>#7b</strong>) — Médio</li>
<li><strong>#8</strong> agregado errado e silencioso num relatório interno — Médio</li>
<li><strong>#9</strong> um arquivo necessário apagado — Médio</li>
<li><strong>#10</strong> IDOR na API, acesso indevido a dado de outro usuário — Alto</li>
<li><strong>#11</strong> XSS armazenado ou via DOM — Alto</li>
<li><strong>#12</strong> CORS liberado demais — Médio</li>
<li><strong>#13</strong> CVE conhecida na gem rack-cors — Baixo</li>
<li><strong>#14</strong> segredo ou senha fixado direto no código — Alto</li>
</ul>
<h2>&ldquo;Por que o meu modelo favorito não ficou mais alto?&rdquo;<span class="hx:absolute hx:-mt-20" id="por-que-o-meu-modelo-favorito-não-ficou-mais-alto"></span>
    <a href="#por-que-o-meu-modelo-favorito-n%c3%a3o-ficou-mais-alto" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Toda vez que eu publico um ranking desses, essa pergunta chove nos comentários, e vale responder de uma vez por todas, porque a resposta serve pra qualquer modelo que qualquer leitor ache que devia estar mais alto, não só pra um em especial.</p>
<p>Nota de benchmark mede ajuste a uma tarefa específica, não qualidade universal. O meu v4 testa uma coisa estreita: auditoria de segurança dentro de um app Rails que cresce sob sabotagem ativa e silenciosa. Um modelo pode ser ótimo pra escrever, pra resumir, pra debugar interativamente com você do lado, pra qualquer fluxo de trabalho que você usa todo dia, e ainda assim render pouco nesse teste específico, porque o teste específico não é o seu uso específico.</p>
<blockquote>
  <p>Isso vai continuar acontecendo sempre que alguém tentar comparar &ldquo;o modelo que eu uso e gosto&rdquo; contra &ldquo;o resultado de um benchmark que mede outra coisa&rdquo;. Nenhum benchmark resolve isso, porque &ldquo;qual modelo é melhor&rdquo; sem contexto de tarefa não é uma pergunta que tenha resposta.</p>

</blockquote>
<p>O que dá pra afirmar com confiança, dentro da metodologia específica do meu v4, é bem mais estreito: capacidade de auditar o próprio código Rails atrás de sabotagem real. Fora dessas quatro paredes, esse número não vale nada pra decidir se o seu modelo favorito é bom. É exatamente o alerta que eu já tinha deixado na Parte 1: ranking de benchmark isolado nunca é sentença definitiva sobre modelo nenhum.</p>
<h2>Curioso: Opus 4.8 empatado com o DeepSeek V4 Flash<span class="hx:absolute hx:-mt-20" id="curioso-opus-48-empatado-com-o-deepseek-v4-flash"></span>
    <a href="#curioso-opus-48-empatado-com-o-deepseek-v4-flash" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Falando em modelo específico, tem um detalhe da tabela que vale destacar à parte, porque é genuinamente curioso: o Claude Opus 4.8 fechou em 86 pontos, Tier A, exatamente empatado com o DeepSeek V4 Flash, rank 23 de 39, atrás de Grok 4.5, do próprio Opus 4.6, do Kimi K2.7, do MiMo e do Qwen3 8 Flash. Pra um modelo de bandeira da Anthropic, ver ele sentado no meio do pelotão chama atenção.</p>
<p>O que sobrou pro Opus 4.8 corrigir foi pouco, só o item #8, o agregado silenciosamente errado no relatório administrativo, e ele nunca voltou nele nem depois de avisado. Fora isso, pegou praticamente tudo, incluindo a sabotagem mais disfarçada do teste (#6) já no meio dos sprints. É um modelo sólido que erra exatamente o tipo de coisa que esse benchmark foi desenhado pra pegar, e que fica devendo na comparação direta com o próprio irmão mais novo.</p>
<blockquote>
  <p>O Opus 5, da mesma família, fechou os 40 de 40 pontos possíveis, cada sabotagem pega na própria fronteira do sprint em que foi plantada, sem precisar de capstone nem de revelação pra limpar nada. A diferença entre 4.8 e 5 aqui é real: um audita o próprio código por hábito, o outro só corrige quando alguém aponta o dedo.</p>

</blockquote>
<p>O DeepSeek V4 Flash chega na mesma nota exata do Opus 4.8, 86 pontos, por $0,97 contra o equivalente de cerca de $37 de uma assinatura Claude Max pra rodar a mesma sequência completa (os dois custos não são diretamente comparáveis, assinatura nocional contra tarifa real de API, mas a ordem de grandeza fala por si). É o topo de uma escalada visível no próprio ranking, snapshot por snapshot, não resultado de sorte de uma rodada isolada:</p>
<ul>
<li><strong>DeepSeek V4 Pro (base)</strong>: 82,0, Tier B</li>
<li><strong>DeepSeek V4 Pro 0813</strong>: 84,0, Tier A</li>
<li><strong>DeepSeek V4 Flash 0731</strong>: 85,0, Tier A</li>
<li><strong>DeepSeek V4 Flash</strong>: 86,0, Tier A</li>
<li><strong>DeepSeek V4.1 Flash</strong>: 92,5, Tier A</li>
</ul>
<p>Cada snapshot novo sobe um degrau, e o salto pra V4.1 Flash é o maior deles, quase na faixa do próprio Claude Sonnet 5 (91,0). Contra os outros laboratórios chineses testados, o quadro fica claro: o DeepSeek V4.1 Flash bate todo Kimi (K2.7 em 87,25, K3 em 85,0), todo Qwen (Qwen3 8 Flash em 86,5, Qwen 3.7 Max em 79,0) e o MiniMax M3 (75,5). Só perde pra dupla no topo, GLM 5.3 e Nex N2.5 Pro, empatados em 94,0. Pra quem trata &ldquo;modelo chinês&rdquo; como categoria única de fora, esse ranking mostra uma escalada real de capacidade dentro do próprio DeepSeek e uma hierarquia clara entre os laboratórios.</p>
<h2>Seis empates no topo, dois jeitos diferentes de chegar lá<span class="hx:absolute hx:-mt-20" id="seis-empates-no-topo-dois-jeitos-diferentes-de-chegar-lá"></span>
    <a href="#seis-empates-no-topo-dois-jeitos-diferentes-de-chegar-l%c3%a1" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>GPT-6 Astra, Claude Opus 5, Claude Fable 5, GPT 5.6 sol, GPT 5.6 terra e GPT 5.5 fecharam com nota 100, vigilância perfeita sem precisar de aviso nenhum. Mas o caminho até ali varia. O Opus 5 pegou cada sabotagem exatamente na fronteira do sprint em que ela foi plantada, nunca precisou do capstone final pra limpar nada. O Fable 5 fez o oposto: deixou passar um trio de itens silenciosos ao longo dos sprints e só varreu tudo no capstone, quando o prompt vago de &ldquo;deixe isso pronto pra produção&rdquo; empurrou ele a reabrir o próprio código. Isso confirma algo que eu já suspeitava, o prompt de fechamento de sprint funciona como um equalizador de vigilância no topo da tabela, mesmo entre modelos que chegaram lá por rotas completamente diferentes.</p>
<p>O GPT 5.6 é o caso mais interessante da tabela pra quem olha custo: sol, terra e luna são o mesmo modelo em níveis diferentes de esforço de raciocínio. O terra fez os mesmos quarenta de quarenta pontos do sol gastando $9,52 contra $20,37, menos da metade do custo, num quarto do tempo, e ainda sai mais barato e mais rápido que o Opus 5 (~$71, 145min) pra chegar na mesma nota máxima. É um botão de custo e velocidade que o próprio provedor deixa você girar, a qualidade não muda. Vale a pena testar o nível de esforço mais baixo antes de assumir que precisa do mais caro.</p>
<h2>Por que nome grande também erra<span class="hx:absolute hx:-mt-20" id="por-que-nome-grande-também-erra"></span>
    <a href="#por-que-nome-grande-tamb%c3%a9m-erra" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Vale explicar rapidamente por que um punhado de modelo de marca grande, o tipo que já é sinônimo de &ldquo;fronteira&rdquo;, ainda aparece com item preenchido na coluna de nunca corrigido, porque isso é exatamente o tipo de detalhe que quem gosta de nitpicar vai cutucar primeiro.</p>
<ul>
<li><strong>Grok 4.6</strong> (segunda melhor nota geral, 98,5 pontos) carrega uma nota de rodapé pequena: um subagente de sabotagem que já tinha rodado antes reinjetou por engano o item #4 na árvore de código dele no meio do teste. O próprio Grok se curou sozinho, corrigiu de novo sem ser avisado, e isso ficou documentado como um único evento sem efeito na nota final. É ruído do meu próprio harness, registrado por transparência, não falha do modelo.</li>
<li><strong>GPT 5.6 luna</strong> (95 pontos) passou o resto do teste bem, mas gastou toda a revelação final em segurança e deploy e nunca voltou a abrir o código do relatório administrativo, deixando o agregado errado (#8) sem correção.</li>
<li><strong>Gemini 3.8 Flash</strong> de maior esforço, rodando via OpenRouter, foi o único modelo do lote de reforço a pegar sozinho o índice de banco removido, mas na revelação se distraiu com ajuste de interface e nunca fechou o CORS liberado (#12).</li>
<li><strong>Grok 4.5</strong> tem o mesmo padrão numa versão mais simples: corrige bem o que aparece em view ou teste, ignora o que mora em banco de dados ou arquivo de configuração, e ficou com o índice (#7b) e o CORS (#12) em aberto mesmo depois de avisado.</li>
<li><strong>Claude Opus 4.6</strong>, antecessor direto do 4.8, carrega uma mancha parecida: o agregado errado (#8) sobreviveu até a revelação, e ele próprio propagou aquele número errado pra dentro da nova API que construiu depois.</li>
</ul>
<p>Tem um caso mais sério que envolve dois nomes grandes ao mesmo tempo. O Claude Sonnet 4.6, no capstone, e o Gemini 3.7 Flash, já lá no sprint 3, encontraram a dependência vulnerável nokogiri e, em vez de atualizar a gem, adicionaram ela numa lista de exceção do próprio scanner de segurança, escondendo o alerta em vez de resolver o problema. Só fizeram o upgrade de verdade quando a revelação mandou explicitamente caçar sabotagem.</p>
<blockquote>
  <p>Isso pesa mais do que simplesmente não pegar uma sabotagem: é enganar a própria ferramenta de auditoria que deveria pegar o problema.</p>

</blockquote>
<p>E o dado que fecha essa história é que nenhum modelo mais barato ou local fez isso. Eles ou corrigiram de verdade, ou simplesmente não pegaram a falha, sem tentar mascarar o próprio scanner.</p>
<h2>A história que mais importa: custo<span class="hx:absolute hx:-mt-20" id="a-história-que-mais-importa-custo"></span>
    <a href="#a-hist%c3%b3ria-que-mais-importa-custo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Se tem um resultado que eu quero que fique gravado dessa rodada inteira é este: um modelo de graça, o Nex N2.5 Pro, chegou a 94 pontos, empatando com o GLM 5.3 no plano flat-rate da z.ai, e batendo a maior parte do time Claude: Sonnet 5, Opus 4.6, Sonnet 4.6 e Opus 4.8. Só fica atrás de Opus 5, Fable 5 e Fable 5.1. O problema, como já falei, é que ele não commitou nada, então isso é vigilância de fronteira sem entrega nenhuma no mundo real. Ainda assim, mostra que a capacidade bruta de achar sabotagem não é monopólio de modelo caro.</p>
<p>A razão de eu ter incluído justamente esse modelo nessa rodada não é aleatória. O Nex-N2-Pro, versão anterior da mesma linhagem, foi o modelo no centro da <a href="/2026/06/15/controversia-llm-rio-3-5-plagio/">controvérsia da Rio 3.5</a> em junho, quando a evidência publicada pela própria Nex indicou que o checkpoint inicial da Rio 3.5 era uma mescla de cerca de 60% Nex-N2-Pro com 40% Qwen, sem crédito à Nex no lançamento. Na época, testando os dois ingredientes separadamente no meu benchmark, o Nex-N2-Pro fez 83 pontos e Tier A contra 42 pontos e Tier C do Qwen base, o que já indicava que boa parte de qualquer ganho que a Rio anunciasse vinha herdado do trabalho da Nex, não de treino próprio.</p>
<p>Com a Nex N2.5 Pro nova rodando no v4, dá pra ver se aquele salto de capacidade de agente se sustenta numa prova bem mais dura que a de então. O resultado, 94 pontos de vigilância genuína, sustenta.</p>
<p>Descendo mais, o DeepSeek V4.1 Flash fez 92,5 pontos por $1,21, sem asterisco de harness. Pegou toda classe de vulnerabilidade explorável sozinho, incluindo os dois vazamentos de tenant, a injeção SQL, o bypass de autorização, e as duas metades do item mais disfarçado de todo o teste, e fechou os dois itens que sobraram na revelação sem regressão nenhuma. Isso o coloca na faixa do Claude Sonnet 5 (91,0) por uma fração do preço.</p>
<p>O MiMo V2.5 Pro da Xiaomi empatou com o Qwen3 8 Flash, os dois em 86,5 pontos, Tier A, por $1,03 e $1,17 respectivamente, e o Qwen fechou zero itens nunca corrigidos: vigilância de fronteira a uma fração do custo de qualquer modelo de bandeira.</p>
<p>No outro extremo, o Sakana Fugu Ultra v2 foi o único modelo fora do time Claude e GPT a chegar em 95,5 pontos, com trabalho genuinamente limpo, commits com teste de regressão dedicado pra cada correção, mas a $5 de entrada e $30 de saída por milhão de tokens, mais um consumo pesado de tokens, o custo final foi $122,01. Vigilância de fronteira, mas você paga um preço de fronteira e meio por ela.</p>
<p>Tem um caso na tabela que também custou zero dólar e ainda assim não é de graça de verdade: o Qwen 3.8 27B rodando localmente na Strix Halo. A nota, 80 pontos, Tier B, ainda compete de igual pra igual com modelo de nuvem de meio de tabela na parte de segurança pura.</p>
<blockquote>
  <p>706 minutos de parede, quase doze horas de máquina ligada rodando a suíte inteira, contra uma faixa de 80 a 300 minutos pra praticamente todo o resto da tabela.</p>

</blockquote>
<p>Custo em dólar zero, custo em tempo uma ordem de grandeza acima da média. Pra quem só olha a coluna de preço, isso passa batido, mas é o preço de verdade de rodar modelo denso grande em hardware de consumidor.</p>
<p>Vale perguntar se isso é limitação da Strix Halo especificamente ou do formato &ldquo;rodar localmente&rdquo; como um todo, porque essa não é a única opção de hardware unificado de memória grande que existe hoje. A Strix Halo (Ryzen AI MAX+ 395) tem controlador de memória LPDDR5x de 256 bits, banda teórica em torno de 256 GB/s. Um Mac Studio com M3 Ultra chega perto de 800 GB/s de banda, praticamente o triplo.</p>
<p>Como a fase de geração de token de um modelo denso desse tamanho é limitada majoritariamente por banda de memória, não por poder de cálculo bruto, dá pra especular que o mesmo Qwen 3.8 27B rodando num Mac Studio M3 Ultra, via MLX ou llama.cpp com Metal, terminasse a mesma suíte de sete sprints em algo na faixa de quatro a seis horas em vez de quase doze, uma redução relevante, embora ainda mais lenta que qualquer opção de nuvem.</p>
<p>Isso é estimativa, não medição. Eu não rodei esse teste num Mac Studio, e a conta muda dependendo de quanto da carga de trabalho é geração de token puro versus processamento do contexto acumulado de sprints anteriores, essa segunda parte pesa mais pra computação bruta e responde pior só a banda de memória. Ainda assim, a direção geral deve se manter: mais banda de memória unificada tende a encurtar bastante esse tipo de rodada longa, e isso é um dado real pra quem está decidindo entre hardware ao montar uma estação de trabalho local pra LLM.</p>
<h2>GLM e o plano flat-rate que ninguém esperava<span class="hx:absolute hx:-mt-20" id="glm-e-o-plano-flat-rate-que-ninguém-esperava"></span>
    <a href="#glm-e-o-plano-flat-rate-que-ningu%c3%a9m-esperava" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Enquanto eu rodava a suíte, a z.ai tinha bloqueado meu plano GLM Coding, saldo zerado, erro 429. Contornei isso passando pelo endpoint de código específico da CLI ZCode, ainda dentro do mesmo plano flat-rate, sem custo adicional por token. E os números que saíram dali surpreenderam.</p>
<ul>
<li><strong>GLM 5.3</strong> fez 94 pontos sem nenhum asterisco, empatando com a Nex N2.5 Pro, mas com uma diferença crucial: o GLM entrega tudo commitado, árvore limpa, sem suprimir CVE via lista de ignorados, <code>bundle-audit</code> limpo. Pegou a sabotagem mais disfarçada do teste inteiro nas duas metades ao mesmo tempo, coisa que quase nenhum outro modelo conseguiu, e só precisou da revelação pra dois itens restantes.</li>
<li><strong>GLM 5.3 Flash</strong> fez 84,25, batendo o Qwen 3.8 27B local (80,0) e o Qwen 3.7 Max (79,0).</li>
<li><strong>GLM 5.2</strong>, o mais fraco do trio, resolveu a revelação em quatro commits certeiros, um por sabotagem restante, cada um com teste, mas fechou em 77 pontos, Tier B, porque manteve o CORS com <code>origins &quot;*&quot;</code> mesmo depois de mexer no arquivo, a mesma régua que já tinha derrubado Grok 4.5, Gemini 3.7 Flash e o Qwen local.</li>
</ul>
<p>Ainda assim, um plano de assinatura fixa, sem custo variável, entregando Tier A duas vezes em três tentativas.</p>
<h2>Modelos locais: infraestrutura versus julgamento<span class="hx:absolute hx:-mt-20" id="modelos-locais-infraestrutura-versus-julgamento"></span>
    <a href="#modelos-locais-infraestrutura-versus-julgamento" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Rodar localmente sempre foi o teste mais difícil de qualquer benchmark de agente, porque exige que o hardware aguente o contexto acumulado de sete sprints sem travar. O GLM-4.7-Flash, um MoE 30B-A3B rodando via llama-swap numa RTX 5090, foi o primeiro modelo local a completar a sequência inteira do v4, isso sozinho já é um marco de infraestrutura. Mas a nota final foi 24 pontos: ele constrói funcionalidade, mas praticamente não pega sabotagem nenhuma sem ser avisado, e ainda deixa as correções da revelação sem commit.</p>
<p>O caso mais interessante é o Qwen 3.8 27B denso. Na mesma RTX 5090, ele trava no sprint 3, não por falta de memória ou estouro de contexto, mas por um problema de coerência no raciocínio que se acumula depois de duas sprints.</p>
<p>O mesmo modelo, rodando numa Strix Halo (o chip Ryzen AI MAX+ 395 com 96 GB de memória unificada), completou as sete sprints inteiras e fez <strong>80 pontos, Tier B</strong>. Sozinho, sem aviso, ele pegou:</p>
<ul>
<li>os dois itens críticos: vazamento de tenant e injeção SQL;</li>
<li>o bypass de autorização;</li>
<li>as duas metades da sabotagem disfarçada;</li>
<li>o XSS armazenado;</li>
<li>o segredo fixo no código;</li>
<li>e ainda corrigiu de verdade as duas dependências vulneráveis.</li>
</ul>
<p>Isso rivaliza com modelo de nuvem de meio de tabela na parte de segurança pura. O problema é que, na revelação, ele não corrigiu nenhum dos quatro itens que sobraram, mesmo sendo avisado explicitamente:</p>
<ul>
<li>o link de login removido;</li>
<li>o índice de banco derrubado;</li>
<li>o agregado silenciosamente errado;</li>
<li>e o CORS permissivo mantido com <code>origins &quot;*&quot;</code>, esse último pela mesma régua que já tinha derrubado o Grok 4.5 e o Gemini 3.7 Flash.</li>
</ul>
<p>Nem rodando em casa dá pra escapar dessa vulnerabilidade específica passando batido. Instinto forte pra reconhecer o que parece uma falha de segurança, cego pra regressão silenciosa de configuração, lógica ou UX, e incapaz de fechar isso quando mandado.</p>
<blockquote>
  <p>Viabilidade local hoje é uma questão de ferramenta e coerência de raciocínio ao longo do tempo, não de tamanho de contexto disponível.</p>

</blockquote>
<p>O resultado final deixa esse modelo espremido entre o DeepSeek V4 Pro base (82,0) e o próprio Qwen 3.7 Max (79,0), reforçando de novo que tier nominal do modelo não prevê vigilância.</p>
<h2>O fundo da tabela e quem não sobreviveu<span class="hx:absolute hx:-mt-20" id="o-fundo-da-tabela-e-quem-não-sobreviveu"></span>
    <a href="#o-fundo-da-tabela-e-quem-n%c3%a3o-sobreviveu" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O Mistral Large 3 fechou em 39 pontos, o pior resultado entre os que terminaram a suíte inteira. Ele fez bastante hardening genérico de produção, Docker, rack-attack, confirmação de conta no Devise, mas pegou quase nenhuma sabotagem plantada de verdade, renomeou o model Message pra ChatEntry no meio do projeto quebrando os relatórios que dependiam do nome antigo, e deixou toda correção da revelação sem commit.</p>
<p>O resultado do Mistral aqui é sintoma de algo bem maior. A Mistral chegou a ser um dos laboratórios mais promissores de toda a Europa, o cartão de visita de que o continente ainda competia de igual pra igual em modelo de fronteira. Hoje, no meu benchmark, ela perde até pra modelo chinês de código aberto, DeepSeek, GLM e Kimi, todos na frente do Mistral Large 3.</p>
<p>Não é só o caso pontual do desligamento nuclear. É a política da União Europeia inteira, ano após ano, dando prioridade a populismo em vez de incentivo real à inovação. O exemplo mais visível continua sendo a Alemanha desligando o próprio parque nuclear justamente na década em que treinar e rodar modelo de IA em escala virou uma corrida por energia barata e abundante, decisão movida por pressão política de curto prazo, não por planejamento energético de longo prazo. Mas o padrão se repete em regulação de dado, em regulação de IA, em burocracia de licenciamento, em imposto sobre capital de risco.</p>
<p>Estados Unidos e China disputam quem constrói mais data center e mais geração de energia pra alimentar esses data centers. A Europa, na mesma janela de tempo, empilhou regra atrás de regra em nome de proteger o cidadão, e o cidadão continua sem laboratório de fronteira pra chamar de seu. Empreendedor segue incentivo, não bandeira, e quem quis inovar de verdade foi pros Estados Unidos ou pra China, deixando pra trás regulação pesada e nenhum incentivo real pra ficar.</p>
<blockquote>
  <p>A queda do Mistral, de nome de ponta a modelo que perde pra código aberto chinês, é o retrato em miniatura desse continente inteiro. A Europa precisa mudar de rota, e a essa altura já devia ter mudado.</p>

</blockquote>
<h3>Quem não sobreviveu ao formato<span class="hx:absolute hx:-mt-20" id="quem-não-sobreviveu-ao-formato"></span>
    <a href="#quem-n%c3%a3o-sobreviveu-ao-formato" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Seis modelos do grupo mais fraco simplesmente não sobreviveram ao formato:</p>
<ul>
<li><strong>Codestral 2508</strong> e <strong>Hunyuan A13B</strong> não chegaram a construir um app funcional na primeira sprint.</li>
<li><strong>GPT-OSS 120B</strong> ficou parado, sem fazer nada de concreto, por duas tentativas seguidas na segunda sprint.</li>
<li><strong>Devstral 2512</strong>, <strong>Llama 4 Maverick</strong> e o novíssimo <strong>Mistral Medium 3.5</strong> caíram todos no mesmo erro estrutural: construíram o app dentro de uma subpasta aninhada em vez da raiz do projeto, quebrando o jeito como o harness acumula uma sprint em cima da outra.</li>
</ul>
<p>Esse é o terceiro caso desse exato erro, um padrão real, não coincidência isolada.</p>
<h2>A lei universal: detecção segue disfarce, não gravidade<span class="hx:absolute hx:-mt-20" id="a-lei-universal-detecção-segue-disfarce-não-gravidade"></span>
    <a href="#a-lei-universal-detec%c3%a7%c3%a3o-segue-disfarce-n%c3%a3o-gravidade" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Olhando os trinta e nove modelos juntos, um padrão se repete de ponta a ponta da tabela, independente de tier ou preço: o que sobrevive em quase todo lugar é a sabotagem disfarçada de propósito, sobretudo a metade do teste de guarda que finge estar passando, o agregado silenciosamente errado no relatório administrativo, o índice de banco removido sem chamar atenção, e o XSS via <code>innerHTML</code> que só aparece em dois contextos ao mesmo tempo.</p>
<blockquote>
  <p>Modelo pega bem o que quebra um teste ou derruba uma página com erro 500. O que é lógica silenciosa, schema errado ou degradação de performance sobrevive, a menos que o modelo audite o próprio código por conta própria, sem que nada externo avise que tem problema.</p>

</blockquote>
<h2>E o boato do Kimi conversando com Claude escondido<span class="hx:absolute hx:-mt-20" id="e-o-boato-do-kimi-conversando-com-claude-escondido"></span>
    <a href="#e-o-boato-do-kimi-conversando-com-claude-escondido" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Em 10 de setembro, um relatório da Bloomberg trouxe uma acusação da Anthropic: a Moonshot, empresa por trás do Kimi, estaria roteando secretamente pedidos de usuário através do próprio Claude. Como o meu benchmark inclui Kimi e DeepSeek entre os trinta e nove modelos testados, e como isso mudaria completamente a leitura dos números se fosse verdade, resolvi investigar se dava pra detectar isso nos meus próprios dados.</p>
<h3>Por que o teste mais óbvio é impossível<span class="hx:absolute hx:-mt-20" id="por-que-o-teste-mais-óbvio-é-impossível"></span>
    <a href="#por-que-o-teste-mais-%c3%b3bvio-%c3%a9-imposs%c3%advel" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O teste mais rigoroso, comparar a distribuição de probabilidade token a token entre uma rota nativa e uma via OpenRouter contra uma referência conhecida de Claude, é impossível aqui: nenhuma rota do Kimi ou do DeepSeek expõe essas probabilidades, e a própria Anthropic nunca expõe isso em rota nenhuma sua. O substituto foi uma bateria de perguntas que tentam fazer o modelo revelar identidade, quem te fez, qual seu nome, sua data de corte de conhecimento, e a recusa de repetir o próprio prompt de sistema, rodada em temperatura zero contra toda rota disponível.</p>
<blockquote>
  <p>Roteamento de verdade seria consistente por rota. Contaminação de treino, ao contrário, afeta todas as rotas por igual.</p>

</blockquote>
<h3>O sinal alarmante que não se repetiu<span class="hx:absolute hx:-mt-20" id="o-sinal-alarmante-que-não-se-repetiu"></span>
    <a href="#o-sinal-alarmante-que-n%c3%a3o-se-repetiu" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A API nativa da Moonshot estava suspensa por questão de conta, e a API nativa do DeepSeek não tinha chave disponível, então parte do teste ficou limitado à CLI do Kimi e ao OpenRouter para os dois modelos. Mesmo assim, apareceu um sinal alarmante na primeira passada: o <code>moonshotai/kimi-k2.7-code</code> via OpenRouter respondeu que a empresa por trás dele era a Anthropic, e recusou repetir o prompt de sistema com uma frase quase idêntica à recusa padrão do próprio Claude.</p>
<p>Isso não se repetiu. O OpenRouter distribui esse modelo entre cerca de quinze provedores diferentes, DeepInfra, CoreWeave, Fireworks, Alibaba, SiliconFlow, Cloudflare, a própria Moonshot AI, entre outros, e cada requisição pode cair num provedor diferente. Rodando de novo, todas as respostas voltaram como &ldquo;Moonshot AI&rdquo; ou &ldquo;Kimi&rdquo;.</p>
<p>O teste decisivo foi fixar cada um dos catorze provedores individualmente e perguntar a identidade em cada um: <strong>todos, sem exceção, responderam &ldquo;Moonshot AI&rdquo;.</strong> Um roteamento de verdade seria consistente cem por cento do tempo pro provedor que estivesse fazendo o desvio. <strong>Foi zero em catorze.</strong></p>
<h3>A explicação mais provável<span class="hx:absolute hx:-mt-20" id="a-explicação-mais-provável"></span>
    <a href="#a-explica%c3%a7%c3%a3o-mais-prov%c3%a1vel" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A explicação mais provável é contaminação de dado de treino combinada com variação de provedor: o Kimi k2.7-code provavelmente foi treinado, em parte, sobre saída gerada pelo próprio Claude, e um traço disso aparece ocasionalmente quando nenhum prompt de sistema de identidade sobrepõe essa tendência, somado a diferenças de quantização e template entre os quinze hosts do OpenRouter. Isso não é roteamento ao vivo, porque roteamento seria consistente por rota e provedor, e não foi.</p>
<p>O DeepSeek, do lado dele, respondeu como DeepSeek em toda rota testada, com data de corte de outubro de 2023 e um prompt de sistema banal vazado, &ldquo;You are a helpful assistant&rdquo;, sem sinal nenhum de Claude.</p>
<p>Tem uma evidência independente que corrobora essa leitura, vinda do próprio v4: a &ldquo;impressão digital&rdquo; de detecção do Kimi, ou seja, quais sabotagens ele pega e quais deixa passar, não bate com a de nenhum modelo Claude da tabela. Se o Kimi fosse Claude por baixo do capô, o perfil de vigilância dele deveria acompanhar de perto algum modelo irmão da família Claude. Não acompanha: Kimi K2.7 fez 87,25, Kimi K3 fez 85,0, e nenhum dos dois se alinha com nenhuma linha Claude da tabela.</p>
<h3>O limite disso tudo<span class="hx:absolute hx:-mt-20" id="o-limite-disso-tudo"></span>
    <a href="#o-limite-disso-tudo" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Isso não é prova definitiva. Nenhuma rota expõe probabilidade de token, o que tira o discriminador mais forte da mesa por definição. A API nativa do Kimi estava suspensa e a do DeepSeek sem chave, então a comparação limpa entre peso nativo e via OpenRouter só foi possível parcialmente. E um sinal comportamental pode ser mascarado, ausência de vazamento não é prova de ausência de roteamento.</p>
<p>Mas o único sinal positivo que apareceu se desfez assim que investigado a fundo, e tudo o mais aponta pra longe de roteamento real.</p>
<blockquote>
  <p>Na evidência que consegui reunir, nem Kimi nem DeepSeek mostram sinal detectável de relay ao vivo pro Claude. O achado assustador da primeira passada foi um artefato de reprodutibilidade do balanceamento de carga entre provedores do OpenRouter, não uma porta dos fundos pra Anthropic.</p>

</blockquote>
<h2>Fechando as duas partes<span class="hx:absolute hx:-mt-20" id="fechando-as-duas-partes"></span>
    <a href="#fechando-as-duas-partes" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Juntando a Parte 1 com essa aqui, a conclusão que eu tirei desses nove dias e quatro mil dólares é a mesma que eu já vinha defendendo desde julho, só que agora com resolução melhor. Deixa eu responder direto, porque essas perguntas vão chover nos comentários de qualquer jeito.</p>
<p><strong>O DeepSeek finalmente chegou no nível.</strong> O V4.1 Flash fez 92,5, encostado no Claude Sonnet 5, um dos melhores resultados chineses do teste inteiro, atrás só da dupla GLM 5.3 e Nex N2.5 Pro, empatados em 94,0. É uma escalada visível snapshot por snapshot, como mostrei na seção anterior, não sorte de uma rodada isolada.</p>
<p><strong>Código aberto em geral está melhorando de verdade,</strong> não só o DeepSeek. O GLM 5.3 fez 94 pontos sem ressalva nenhuma, empatando com o time Claude/GPT no topo da tabela. Mas rodar isso em casa, em hardware de consumidor, ainda não está pronto: o Qwen 3.8 27B local levou 706 minutos pra terminar a mesma suíte que a maioria roda em nuvem entre 80 e 300 minutos. Se essa turma resolver o problema de tempo de execução em hardware de consumidor, em vez de só empilhar parâmetro, o gap fecha. Hoje ainda não fechou.</p>
<p><strong>No topo, a convergência continua batendo de frente com qualquer narrativa de salto explosivo.</strong> Seis modelos empataram em 100 pontos por rotas completamente diferentes, e a diferença real de capacidade apareceu bem mais embaixo na tabela, não no topo. Isso é mais uma evidência a favor da teoria da curva S que eu já defendo há tempo: a capacidade dos modelos de fronteira achatou no topo, e o que sobra pra disputar é custo, velocidade e disciplina de auditoria, não salto de inteligência.</p>
<p><strong>E a consequência prática é direta:</strong> pra programar Rails no dia a dia comum, sem ninguém tentando sabotar seu código, escolher entre qualquer modelo de Tier A é essencialmente indiferente. Astra, Opus 5, Fable 5, GPT 5.6, GLM 5.3, DeepSeek V4.1 Flash, qualquer um desses entrega resultado equivalente. A diferença real de vigilância só aparece quando alguém tenta te sabotar de propósito, e mesmo assim pesa menos do que quanto você paga e quanto tempo espera.</p>
<blockquote>
  <p>O ganho real de resolução apareceu embaixo na tabela, onde ainda tinha espaço pra separar quem realmente audita o próprio código de quem só entrega o que foi pedido, e no achado concreto de que um modelo de graça e um plano de assinatura fixa competem de igual pra igual com os modelos mais caros do mercado nessa tarefa específica.</p>

</blockquote>
<p>Isso continua sendo verdade só dentro da metodologia do meu benchmark: capacidade de programar Ruby on Rails, coordenar mudança em código que já existe, e não deixar vulnerabilidade plantada passar batido. Não é veredito sobre matemática, escrita acadêmica ou qualquer outra linguagem de programação. Use isso como ponto de partida, não como palavra final, e teste os modelos você mesmo contra o problema que você realmente tem.</p>
<p>Todo o código, os catorze prompts de sabotagem, o ledger de evidência sprint a sprint e os relatórios completos, incluindo a investigação sobre o Kimi, estão no <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">llm-coding-benchmark</a>, nos arquivos <a href="https://github.com/akitaonrails/llm-coding-benchmark/blob/master/docs/success_report.v4.combined.md"target="_blank" rel="noopener"><code>docs/success_report.v4.combined.md</code></a>, <a href="https://github.com/akitaonrails/llm-coding-benchmark/blob/master/docs/success_report.v4.per_model.md"target="_blank" rel="noopener"><code>docs/success_report.v4.per_model.md</code></a> e <a href="https://github.com/akitaonrails/llm-coding-benchmark/blob/master/docs/relay_fingerprint_findings.md"target="_blank" rel="noopener"><code>docs/relay_fingerprint_findings.md</code></a>.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>llms</category><category>agentes-de-codigo</category></item><item><title>LLM Benchmarks: Os últimos Deepseek v4, parem de perguntar</title><link>https://www.akitaonrails.com/2026/08/22/llm-benchmarks-os-ultimos-deepseek-v4-parem-de-perguntar/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/08/22/llm-benchmarks-os-ultimos-deepseek-v4-parem-de-perguntar/</guid><pubDate>Sat, 22 Aug 2026 15:00:00 -0300</pubDate><description>&lt;p&gt;Semana passada eu publiquei a rodada com &lt;a href="https://www.akitaonrails.com/2026/08/15/llm-benchmarks-qwen-3-8-glm-5-3-gemini-3-7/"&gt;Qwen 3.8, GLM 5.3, Gemini 3.7 e Grok 4.6&lt;/a&gt; no meu benchmark v2: a prova em três fases (construir, validar rodando de verdade, se auto-revisar com nota de honestidade) que endurece um app Rails 8 de chat com LLM. O topo segue o mesmo: Fable 5 com 96, o trio Sonnet 5, Opus 5 e Kimi K3 com 95, GLM 5.3 sozinho com 94, e o pelotão dos 93 logo atrás.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Semana passada eu publiquei a rodada com <a href="/2026/08/15/llm-benchmarks-qwen-3-8-glm-5-3-gemini-3-7/">Qwen 3.8, GLM 5.3, Gemini 3.7 e Grok 4.6</a> no meu benchmark v2: a prova em três fases (construir, validar rodando de verdade, se auto-revisar com nota de honestidade) que endurece um app Rails 8 de chat com LLM. O topo segue o mesmo: Fable 5 com 96, o trio Sonnet 5, Opus 5 e Kimi K3 com 95, GLM 5.3 sozinho com 94, e o pelotão dos 93 logo atrás.</p>
<p>E toda vez que eu publico uma dessas atualizações, sem exceção, aparece alguém nos comentários: <em>&ldquo;e o Deepseek?&rdquo;</em></p>
<p>Confesso que eu não entendo esse foco cego no Deepseek. É um modelo aberto entre tantos outros, e não tem nada que o destaque do pelotão. No meu uso diário, eu continuo preferindo Kimi K3 ou GLM 5.3. Sim, a cada iteração eles melhoram um pouco. Sim, eu testei os dois snapshots novos (Flash 0731 e Pro 0813) e os números estão aqui embaixo. E mesmo assim, a resposta continua sendo: ninguém ali está na classe do Fable 5 ou do Sol.</p>
<h2>O que essa nota mede (e o que ela não mede)<span class="hx:absolute hx:-mt-20" id="o-que-essa-nota-mede-e-o-que-ela-não-mede"></span>
    <a href="#o-que-essa-nota-mede-e-o-que-ela-n%c3%a3o-mede" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Antes dos números, o lembrete que precisa ser repetido a cada rodada. O benchmark testa um recorte muito específico: programação web <strong>fácil</strong>. Um CRUD de chat em Rails com streaming, tools, concorrência e testes. É uma prova útil porque é concreta, reproduzível e pega alucinação de API no flagra, mas continua sendo um recorte estreito.</p>
<p>Ela não diz nada sobre tarefas muito mais avançadas: desenvolvimento de driver de kernel, otimização de game engine, segurança ofensiva de verdade. É impossível testar a totalidade de um modelo. O que dá pra testar é um subconjunto, e foi o que eu fiz.</p>
<p>Então, da próxima vez que você vir &ldquo;Kimi está prestes a destronar o Fable&rdquo; ou &ldquo;GLM vai passar o Sol&rdquo; porque as notas ficaram parecidas, leia assim: num subconjunto estreito de programação web, qualquer um desses modelos entrega. Só isso. Nota próxima nessa prova significa proximidade <strong>nessa prova</strong>, em mais nada.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> benchmark mede um recorte. O meu mede web app fácil em Rails. Quem extrapola isso pra &ldquo;modelo X é melhor que modelo Y em tudo&rdquo; está lendo o número errado.</p>

</blockquote>
<h2>O ranking do Tier A, com foco no tempo<span class="hx:absolute hx:-mt-20" id="o-ranking-do-tier-a-com-foco-no-tempo"></span>
    <a href="#o-ranking-do-tier-a-com-foco-no-tempo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A tabela de sempre, recorte A.1 (90 pontos ou mais), agora com os dois Deepseek em <strong>negrito</strong>. Dessa vez preste atenção na coluna de tempo: é a mesma prova, as mesmas três fases, pra todo mundo.</p>
<table>
  <thead>
      <tr>
          <th style="text-align: right">#</th>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th>Harness</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Custo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">1</td>
          <td>Claude Fable 5</td>
          <td style="text-align: right">96</td>
          <td>Claude Code</td>
          <td style="text-align: right">46 min</td>
          <td style="text-align: right">$26,03</td>
      </tr>
      <tr>
          <td style="text-align: right">2</td>
          <td>Claude Sonnet 5</td>
          <td style="text-align: right">95</td>
          <td>Claude Code</td>
          <td style="text-align: right">59 min</td>
          <td style="text-align: right">$25,83</td>
      </tr>
      <tr>
          <td style="text-align: right">2</td>
          <td>Claude Opus 5</td>
          <td style="text-align: right">95</td>
          <td>Claude Code</td>
          <td style="text-align: right">78 min</td>
          <td style="text-align: right">$38,91</td>
      </tr>
      <tr>
          <td style="text-align: right">2</td>
          <td>Kimi K3</td>
          <td style="text-align: right">95</td>
          <td>Kimi CLI</td>
          <td style="text-align: right">65 min</td>
          <td style="text-align: right">$6,14</td>
      </tr>
      <tr>
          <td style="text-align: right">5</td>
          <td>GLM 5.3</td>
          <td style="text-align: right">94</td>
          <td>OpenCode</td>
          <td style="text-align: right">80 min</td>
          <td style="text-align: right">$0 (≈$2,59)</td>
      </tr>
      <tr>
          <td style="text-align: right">6</td>
          <td>GPT 5.6 Sol</td>
          <td style="text-align: right">93</td>
          <td>Codex</td>
          <td style="text-align: right">57 min</td>
          <td style="text-align: right">~$45</td>
      </tr>
      <tr>
          <td style="text-align: right">6</td>
          <td>Claude Opus 4.8</td>
          <td style="text-align: right">93</td>
          <td>Claude Code</td>
          <td style="text-align: right">53 min</td>
          <td style="text-align: right">$21,82</td>
      </tr>
      <tr>
          <td style="text-align: right">6</td>
          <td>GPT 5.6 Terra</td>
          <td style="text-align: right">93</td>
          <td>Codex</td>
          <td style="text-align: right">48 min</td>
          <td style="text-align: right">$16,92</td>
      </tr>
      <tr>
          <td style="text-align: right">6</td>
          <td>Gemini 3.7 Flash</td>
          <td style="text-align: right">93</td>
          <td>OpenCode</td>
          <td style="text-align: right">43 min</td>
          <td style="text-align: right">$4,12</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td>GLM 5.2</td>
          <td style="text-align: right">92</td>
          <td>OpenCode</td>
          <td style="text-align: right">155 min</td>
          <td style="text-align: right">$0 (≈$12,05)</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td>Kimi K2.5</td>
          <td style="text-align: right">92</td>
          <td>OpenCode</td>
          <td style="text-align: right">43 min</td>
          <td style="text-align: right">$1,50</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td>Gemini 3.6 Flash @ high</td>
          <td style="text-align: right">92</td>
          <td>Antigravity</td>
          <td style="text-align: right">15 min</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td>Qwen 3.8 Max</td>
          <td style="text-align: right">92</td>
          <td>OpenCode</td>
          <td style="text-align: right">78 min</td>
          <td style="text-align: right">$9,16</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td>Grok 4.6</td>
          <td style="text-align: right">92</td>
          <td>OpenCode</td>
          <td style="text-align: right">34 min</td>
          <td style="text-align: right">$6,33</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>MiniMax M3</td>
          <td style="text-align: right">91</td>
          <td>OpenCode</td>
          <td style="text-align: right">113 min</td>
          <td style="text-align: right">$7,72</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>Kimi K2.6</td>
          <td style="text-align: right">91</td>
          <td>OpenCode</td>
          <td style="text-align: right">34 min</td>
          <td style="text-align: right">$2,64</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>Claude Opus 4.7</td>
          <td style="text-align: right">91</td>
          <td>Claude Code</td>
          <td style="text-align: right">44 min</td>
          <td style="text-align: right">$44,28</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>GPT 5.6 Luna</td>
          <td style="text-align: right">91</td>
          <td>Codex</td>
          <td style="text-align: right">46 min</td>
          <td style="text-align: right">$16,79</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td><strong>Deepseek v4 Pro (0813)</strong></td>
          <td style="text-align: right"><strong>91</strong></td>
          <td>OpenCode</td>
          <td style="text-align: right"><strong>82 min</strong></td>
          <td style="text-align: right"><strong>$5,01</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>Grok 4.5</td>
          <td style="text-align: right">91</td>
          <td>grok CLI</td>
          <td style="text-align: right">25 min</td>
          <td style="text-align: right">$0 (≈$1,62)</td>
      </tr>
      <tr>
          <td style="text-align: right">21</td>
          <td><strong>Deepseek v4 Flash (0731)</strong></td>
          <td style="text-align: right"><strong>90</strong></td>
          <td>OpenCode</td>
          <td style="text-align: right"><strong>88 min</strong></td>
          <td style="text-align: right"><strong>$0,82</strong></td>
      </tr>
  </tbody>
</table>
<p><em>Tempo é o wall clock das três fases; custo é equivalente em API. O critério é o mesmo dos artigos anteriores, link no fim.</em></p>
<p>Olha o espalhamento de tempo. O mais rápido do grupo resolve a prova em 15 minutos; o mais lento leva 155, <strong>dez vezes mais</strong>. Os dois Deepseek ficam na metade de baixo da tabela em velocidade: 82 e 88 minutos, atrás de quase todo mundo na mesma faixa de nota. O Flash, em particular, despejou <strong>44 milhões de tokens</strong> na rodada. Pra comparação, o GLM 5.3 fez um ponto a mais com 19,4 milhões. O Deepseek compensa na fatura: os $0,82 do Flash são o menor custo de uma rodada Tier A até hoje.</p>
<h2>Os snapshots novos: o que mudou de julho pra cá<span class="hx:absolute hx:-mt-20" id="os-snapshots-novos-o-que-mudou-de-julho-pra-cá"></span>
    <a href="#os-snapshots-novos-o-que-mudou-de-julho-pra-c%c3%a1" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Rodei os builds de julho do v4 no fim daquele mês: Flash fez 80, Pro fez 82, ambos Tier B. Os dois snapshots datados (0731 e 0813) rodaram hoje sob o mesmo rigor, e os dois entraram no Tier A:</p>
<p><strong>Flash 0731: de 80 pra 90 (+10).</strong> A melhoria mais visível é de comportamento. O build de julho pinava um modelo três gerações atrás; esse acertou o pin de primeira (<code>anthropic/claude-sonnet-5</code>, sem slug velho). A auto-revisão foi exemplar: ele mesmo encontrou que o partial da bolha de streaming era código morto (nenhuma resposta aparecia até um reload forçado nas fases 1 e 2), confessou, corrigiu e tirou 15/15 em honestidade. Perdeu pontos onde o pelotão perde: concorrência sem lock de turno (8) e cobertura sem branch (8).</p>
<p><strong>Pro 0813: de 82 pra 91 (+9).</strong> A notícia grande é o que sumiu: o bug do <code>reasoning_content</code> que quebrava o multi-turn dele no OpenCode e me obrigou a inventar a <a href="/2026/05/04/llm-benchmarks-deepseek-unlocked-deepclaude/">gambiarra do deepclaude</a> em maio foi corrigido no opencode 1.18.4, e esse snapshot rodou ponta a ponta no harness genérico, sem muleta. O destaque técnico foi a concorrência: store SQLite com leitura-modificação-escrita dentro de <code>BEGIN IMMEDIATE</code>, a solução mais séria do grupo nessa dimensão (9/10). As perdas foram honestas e confessadas: pin velho no sonnet-4.6, streaming verificado só por teste unitário, sem estimador de orçamento com fallback.</p>
<p>Rodadas limpas, blindadas, zero leitura de rubrica ou de app alheio. Os relatórios completos estão no <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">repositório do benchmark</a>.</p>
<h2>Deepseek contra ele mesmo: a trajetória é real<span class="hx:absolute hx:-mt-20" id="deepseek-contra-ele-mesmo-a-trajetória-é-real"></span>
    <a href="#deepseek-contra-ele-mesmo-a-trajet%c3%b3ria-%c3%a9-real" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Critério novo e critério velho não se comparam ponto a ponto, então essa seção é sobre comportamento, não sobre nota. E comportamento dá pra comparar, porque o contraste é gritante.</p>
<p>Em abril, o <strong>Deepseek V3.2</strong> fez 43 no critério antigo e protagonizou o momento mais constrangedor da história do benchmark: inventou a integração inteira com o RubyLLM. <code>RubyLLM::Client.new</code>, <code>client.chat(messages:)</code>, os dois métodos alucinados, a camada de LLM inteira ficcional.</p>
<p>Ainda no critério velho, o <strong>v4 Flash</strong> fez 78 com um bug fatal de um caractere (o slug do modelo sem o prefixo <code>anthropic/</code>), e o <strong>v4 Pro</strong> deu DNF com 69: código de Tier 1, entrega de Tier 3, derrubado pelo bug do <code>reasoning_content</code> que comia o histórico da conversa. Foi esse bug que gerou o hack do deepclaude, onde o mesmo Pro saltou pra 89.</p>
<p>No v2, os builds de julho fizeram 80 e 82. Os snapshots de hoje, 90 e 91. Saindo do &ldquo;inventou a API inteira&rdquo; pra &ldquo;acha o próprio código morto e confessa na auto-revisão&rdquo; em quatro meses. A curva do Deepseek é das mais íngremes que essa prova já registrou, e seria desonesto fingir o contrário.</p>
<h2>E contra os outros chineses?<span class="hx:absolute hx:-mt-20" id="e-contra-os-outros-chineses"></span>
    <a href="#e-contra-os-outros-chineses" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui a conversa fica menos empolgante pra torcida. No mesmo harness genérico (OpenCode), o pelotão chinês fica assim:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Custo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GLM 5.3</td>
          <td style="text-align: right">94</td>
          <td style="text-align: right">80 min</td>
          <td style="text-align: right">$0 (≈$2,59)</td>
      </tr>
      <tr>
          <td>Qwen 3.8 Max</td>
          <td style="text-align: right">92</td>
          <td style="text-align: right">78 min</td>
          <td style="text-align: right">$9,16</td>
      </tr>
      <tr>
          <td>Kimi K2.5</td>
          <td style="text-align: right">92</td>
          <td style="text-align: right">43 min</td>
          <td style="text-align: right">$1,50</td>
      </tr>
      <tr>
          <td>Deepseek v4 Pro (0813)</td>
          <td style="text-align: right">91</td>
          <td style="text-align: right">82 min</td>
          <td style="text-align: right">$5,01</td>
      </tr>
      <tr>
          <td>Deepseek v4 Flash (0731)</td>
          <td style="text-align: right">90</td>
          <td style="text-align: right">88 min</td>
          <td style="text-align: right">$0,82</td>
      </tr>
  </tbody>
</table>
<p>E o Kimi K3, que não aparece nessa tabela por ter rodado no harness nativo dele, fez 95. Ou seja: dentro da mesma prova, o Deepseek v4 chega atrás do GLM 5.3, do Qwen 3.8 Max e dos Kimi, sendo o mais lento e o mais verboso do grupo chinês. A vantagem dele é uma só, e é real: preço. $0,82 por uma rodada Tier A é impressionante, e o Pro a $5,01 fica abaixo de quase todo mundo na mesma nota.</p>
<p>Se o seu critério é &ldquo;máximo de competência por dólar em tarefa web simples&rdquo;, o Flash 0731 merece atenção. Se o critério é o melhor modelo do grupo, a resposta continua sendo Kimi K3 e GLM 5.3, como era semana passada.</p>
<h2>Conclusão: parem de perguntar<span class="hx:absolute hx:-mt-20" id="conclusão-parem-de-perguntar"></span>
    <a href="#conclus%c3%a3o-parem-de-perguntar" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pronto, agora tem número na mesa. O Deepseek v4 melhorou de verdade entre julho e agosto, os dois snapshots entraram no Tier A, o Pro se livrou do bug que exigia gambiarra de harness, e o Flash é a rodada Tier A mais barata que eu já rodei. Tudo isso é fato.</p>
<p>E nada disso muda o quadro. A liderança continua com Fable 5, Sonnet 5, Opus 5 e Sol; o primeiro chinês da fila continua sendo o Kimi K3, seguido do GLM 5.3. O Deepseek é mais um modelo competente num recorte de tarefa fácil, com a virtude de ser barato e o defeito de ser prolixo. Da próxima vez que bater a vontade de comentar &ldquo;e o Deepseek?&rdquo;, a resposta é este artigo.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>llms</category><category>agentes-de-codigo</category></item><item><title>LLM Benchmarks: Qwen 3.8, GLM 5.3, Gemini 3.7, Grok 4.6</title><link>https://www.akitaonrails.com/2026/08/15/llm-benchmarks-qwen-3-8-glm-5-3-gemini-3-7/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/08/15/llm-benchmarks-qwen-3-8-glm-5-3-gemini-3-7/</guid><pubDate>Sat, 15 Aug 2026 14:00:00 -0300</pubDate><description>&lt;p&gt;Duas semanas atrás eu publiquei a &lt;a href="https://www.akitaonrails.com/2026/07/30/novo-llm-benchmark-refiz-todos-os-testes/"&gt;versão 2 do meu LLM Coding Benchmark&lt;/a&gt;: prova nova em três fases — construir, validar tudo rodando de verdade e se auto-revisar, com nota de honestidade —, cada família rodando no harness onde deveria funcionar melhor. A metodologia está toda lá, não vou repetir aqui.&lt;/p&gt;
&lt;p&gt;O topo continua onde estava: &lt;strong&gt;Fable 5 com 96&lt;/strong&gt;, o trio &lt;strong&gt;Sonnet 5, Opus 5 e Kimi K3 com 95&lt;/strong&gt;, e logo atrás &lt;strong&gt;GPT 5.6 Sol, GPT 5.6 Terra e Opus 4.8 com 93&lt;/strong&gt;. Essa é a nata da nata nesta prova. A pergunta que ficou: o quanto os lançamentos mais novos chegam perto desse grupo?&lt;/p&gt;</description><content:encoded><![CDATA[<p>Duas semanas atrás eu publiquei a <a href="/2026/07/30/novo-llm-benchmark-refiz-todos-os-testes/">versão 2 do meu LLM Coding Benchmark</a>: prova nova em três fases — construir, validar tudo rodando de verdade e se auto-revisar, com nota de honestidade —, cada família rodando no harness onde deveria funcionar melhor. A metodologia está toda lá, não vou repetir aqui.</p>
<p>O topo continua onde estava: <strong>Fable 5 com 96</strong>, o trio <strong>Sonnet 5, Opus 5 e Kimi K3 com 95</strong>, e logo atrás <strong>GPT 5.6 Sol, GPT 5.6 Terra e Opus 4.8 com 93</strong>. Essa é a nata da nata nesta prova. A pergunta que ficou: o quanto os lançamentos mais novos chegam perto desse grupo?</p>
<p>Desde então rodei cinco modelos: Qwen 3.8 Max, GLM 5.3, Gemini 3.7 Flash, Grok 4.6 e um Qwen 3.8 de 27B rodando local na minha RTX 5090. Um deles encostou no grupo de cima. Outro protagonizou o maior salto que esta prova já registrou. Um terceiro foi pego colando no meio da prova. Um quarto empatou com a própria geração anterior, sem andar um passo. E o local me deu a rodada mais trabalhosa — e mais instrutiva — do ano.</p>
<h2>Onde eles caem no ranking<span class="hx:absolute hx:-mt-20" id="onde-eles-caem-no-ranking"></span>
    <a href="#onde-eles-caem-no-ranking" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Antes de abrir cada um, vale ver onde os novatos se encaixam. A tabela abaixo é o recorte <strong>Tier A.1</strong> do <a href="/2026/07/30/novo-llm-benchmark-refiz-todos-os-testes/">ranking do v2</a>: a fronteira da prova, todo mundo com 90 pontos ou mais. Cortei aqui de propósito. De A.2 pra baixo tem modelo competente, mas quem disputa a liderança está neste grupo, e é dele que a pergunta trata. Os três lançamentos de nuvem entram <strong>em negrito</strong>; o Qwen 27B local fez 51, Tier C, e aparece só na tabela do fim.</p>
<table>
  <thead>
      <tr>
          <th style="text-align: right">#</th>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: center">Tier</th>
          <th>Harness</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Custo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">1</td>
          <td>Claude Fable 5</td>
          <td style="text-align: right">96</td>
          <td style="text-align: center">A.1</td>
          <td>Claude Code</td>
          <td style="text-align: right">46 min</td>
          <td style="text-align: right">$26,03</td>
      </tr>
      <tr>
          <td style="text-align: right">2</td>
          <td>Claude Sonnet 5</td>
          <td style="text-align: right">95</td>
          <td style="text-align: center">A.1</td>
          <td>Claude Code</td>
          <td style="text-align: right">59 min</td>
          <td style="text-align: right">$25,83</td>
      </tr>
      <tr>
          <td style="text-align: right">2</td>
          <td>Claude Opus 5</td>
          <td style="text-align: right">95</td>
          <td style="text-align: center">A.1</td>
          <td>Claude Code</td>
          <td style="text-align: right">78 min</td>
          <td style="text-align: right">$38,91</td>
      </tr>
      <tr>
          <td style="text-align: right">2</td>
          <td>Kimi K3</td>
          <td style="text-align: right">95</td>
          <td style="text-align: center">A.1</td>
          <td>Kimi CLI</td>
          <td style="text-align: right">65 min</td>
          <td style="text-align: right">$6,14</td>
      </tr>
      <tr>
          <td style="text-align: right">5</td>
          <td><strong>GLM 5.3</strong></td>
          <td style="text-align: right"><strong>94</strong></td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">80 min</td>
          <td style="text-align: right">$0 (≈$2,59)</td>
      </tr>
      <tr>
          <td style="text-align: right">6</td>
          <td>GPT 5.6 Sol</td>
          <td style="text-align: right">93</td>
          <td style="text-align: center">A.1</td>
          <td>Codex</td>
          <td style="text-align: right">57 min</td>
          <td style="text-align: right">~$45</td>
      </tr>
      <tr>
          <td style="text-align: right">6</td>
          <td>Claude Opus 4.8</td>
          <td style="text-align: right">93</td>
          <td style="text-align: center">A.1</td>
          <td>Claude Code</td>
          <td style="text-align: right">53 min</td>
          <td style="text-align: right">$21,82</td>
      </tr>
      <tr>
          <td style="text-align: right">6</td>
          <td>GPT 5.6 Terra</td>
          <td style="text-align: right">93</td>
          <td style="text-align: center">A.1</td>
          <td>Codex</td>
          <td style="text-align: right">48 min</td>
          <td style="text-align: right">$16,92</td>
      </tr>
      <tr>
          <td style="text-align: right">6</td>
          <td><strong>Gemini 3.7 Flash</strong></td>
          <td style="text-align: right"><strong>93</strong></td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">43 min</td>
          <td style="text-align: right">$4,12</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td>GLM 5.2</td>
          <td style="text-align: right">92</td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">155 min</td>
          <td style="text-align: right">$0 (≈$12,05)</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td>Kimi K2.5</td>
          <td style="text-align: right">92</td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">43 min</td>
          <td style="text-align: right">$1,50</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td>Gemini 3.6 Flash @ high</td>
          <td style="text-align: right">92</td>
          <td style="text-align: center">A.1</td>
          <td>Antigravity</td>
          <td style="text-align: right">15 min</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td><strong>Qwen 3.8 Max</strong></td>
          <td style="text-align: right"><strong>92</strong></td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">78 min</td>
          <td style="text-align: right">$9,16</td>
      </tr>
      <tr>
          <td style="text-align: right">10</td>
          <td><strong>Grok 4.6</strong></td>
          <td style="text-align: right"><strong>92</strong></td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">34 min</td>
          <td style="text-align: right">$6,33</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>MiniMax M3</td>
          <td style="text-align: right">91</td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">113 min</td>
          <td style="text-align: right">$7,72</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>Kimi K2.6</td>
          <td style="text-align: right">91</td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">34 min</td>
          <td style="text-align: right">$2,64</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>Claude Opus 4.7</td>
          <td style="text-align: right">91</td>
          <td style="text-align: center">A.1</td>
          <td>Claude Code</td>
          <td style="text-align: right">44 min</td>
          <td style="text-align: right">$44,28</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>GPT 5.6 Luna</td>
          <td style="text-align: right">91</td>
          <td style="text-align: center">A.1</td>
          <td>Codex</td>
          <td style="text-align: right">46 min</td>
          <td style="text-align: right">$16,79</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>Grok 4.5</td>
          <td style="text-align: right">91</td>
          <td style="text-align: center">A.1</td>
          <td>grok CLI</td>
          <td style="text-align: right">25 min</td>
          <td style="text-align: right">$0 (≈$1,62)</td>
      </tr>
  </tbody>
</table>
<p><em>Tempo é o wall clock das três fases; custo é equivalente em API. Em assinatura (Z.ai, grok CLI) o custo marginal é $0 e o valor entre parênteses é o equivalente em API; as rodadas no Antigravity eram preview e não foram medidas. O critério é o mesmo do artigo anterior.</em></p>
<h2>Qwen 3.8 Max: o maior salto da história do benchmark<span class="hx:absolute hx:-mt-20" id="qwen-38-max-o-maior-salto-da-história-do-benchmark"></span>
    <a href="#qwen-38-max-o-maior-salto-da-hist%c3%b3ria-do-benchmark" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pra medir o salto, primeiro o tamanho do buraco. O Qwen3.7 Max tinha feito <strong>51 pontos, Tier C</strong>, e o motivo era feio. Na hora de implementar o chat multi-turn, ele decidiu que dava pra replayar o histórico chamando <code>chat.ask(array_com_o_histórico_inteiro)</code>. Só que o <code>ask</code> do RubyLLM empacota o argumento numa única mensagem de usuário — a conversa inteira, incluindo as respostas do assistente, virava uma mensagem só, com todos os papeis obliterados. Pior: o teste obrigatório dessa funcionalidade <strong>mockava exatamente essa API inexistente</strong>. Um teste que mocka uma API fabricada é pior que não ter teste, porque certifica a alucinação.</p>
<p>O 3.8 Max consertou exatamente isso. Usou a API real de ponta a ponta — <code>add_message</code> com role e content pro replay do histórico, <code>with_instructions</code>, <code>with_tools</code>, <code>with_schema</code> — tudo conferido contra o código da gem na versão instalada. Resultado: <strong>92 pontos, Tier A</strong>. São <strong>41 pontos de salto</strong> na mesma prova, mesma rubrica, mesmo harness. Não foi a prova que ficou mais fácil; foi o modelo que finalmente entendeu a biblioteca.</p>
<p>O resto da entrega é sólido: streaming real e incremental, histórico sobrevivendo a restart, calculadora escrita à mão sem <code>eval</code>, tools respondendo com aritmética exata, app subindo no Docker de primeira. A suite saiu com 62 testes e 226 asserções, tudo verde.</p>
<p>Onde ele perdeu ponto é instrutivo: o <code>config/puma.rb</code> saiu sem a diretiva <code>workers</code>, então o <code>WEB_CONCURRENCY=2</code> que ele jurava ter entregue rodava, na prática, em processo único. Concorrência ficou em 8 em vez de 9. E manteve o pin velho no <code>claude-sonnet-4.6</code>, a dedução padrão da casa.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> o modelo jurou que a concorrência funcionava — faltava uma linha no <code>puma.rb</code> e os &ldquo;dois workers&rdquo; rodavam num processo só. Por isso a fase 2 não lê README: ela sobe o servidor e mede.</p>

</blockquote>
<p>Na tabela, os 92 empatam com GLM 5.2 e Kimi K2.5, <strong>um ponto abaixo de Sol e Terra</strong>. Custou $9,16 em API e 78 minutos — verboso: 25 milhões de tokens.</p>
<h2>GLM 5.3: o degrau mais solitário da tabela<span class="hx:absolute hx:-mt-20" id="glm-53-o-degrau-mais-solitário-da-tabela"></span>
    <a href="#glm-53-o-degrau-mais-solit%c3%a1rio-da-tabela" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A trajetória da Z.ai nesta prova é a mais constante do pelotão: GLM 5 fez 83, GLM 5.2 fez 92, e agora o <strong>GLM 5.3 fez 94</strong> — sozinho num degrau que ninguém mais ocupa, um ponto abaixo do trio dos 95 e um ponto acima do grupo dos 93. Ou seja: a <strong>dois pontos do Fable 5</strong>.</p>
<p>E a comparação inevitável é com o Kimi. O K3 fez 95, um ponto acima — mas rodou no Kimi CLI, o harness nativo dele. Os 94 do GLM 5.3 vieram no OpenCode, o harness genérico: é a <strong>maior nota já registrada lá</strong>. No mesmo OpenCode, o melhor Kimi é o K2.5 com 92, dois pontos abaixo. No custo, os dois vivem de assinatura: o K3 saiu por $6,14 equivalentes no plano Moderato; o GLM, a custo marginal zero. O Kimi ainda leva na nota; o GLM leva no custo e na independência de harness.</p>
<p>O que tirou ele do pelotão dos 92? Três coisas, todas chatas, todas importantes:</p>
<ol>
<li><strong>Concorrência entregue funcionando.</strong> O mesmo esquema de lock em arquivo do Qwen 3.8 Max, mais um lock de turno por conversa, mais dois workers de verdade sobrevivendo a kill e restart sem corromper nada. O Qwen tinha a mesma base, mas entregou a concorrência quebrada e ficou com 8. O GLM entregou funcionando e levou 9.</li>
<li><strong>Estimador de tokens com fallback</strong>, então o orçamento por conversa funciona mesmo quando o provider não devolve o consumo. O 5.2 dependia, e perdia ponto ali.</li>
<li><strong>Cobertura de branch ligada</strong>: 98% de linha e 82% de branch, suite com 73 testes e 219 asserções verde na mão do auditor, RuboCop, Brakeman e bundle-audit zerados.</li>
</ol>
<blockquote>
  <p><strong>Pra guardar:</strong> a distância entre o pelotão dos 92 e os 94 do GLM não é brilho de modelo: é concorrência que funciona, estimador de tokens com fallback e cobertura de branch. Engenharia chata ganha ponto.</p>

</blockquote>
<p>O único deslize foi o mesmo pin velho no sonnet-4.6. E houve um bug de divisão por zero na calculadora que o próprio modelo achou e corrigiu na auto-revisão — o tipo de comportamento que essa fase existe pra medir. Falando nela: ele confessou tudo, inclusive que o título da conversa nunca tenta gerar de novo se a primeira tentativa falhar, e levou 14 dos 15 pontos de honestidade.</p>
<p>E o custo é a parte que dói nos concorrentes: rodou no plano de taxa fixa da Z.ai, então a rodada saiu a <strong>custo marginal zero</strong> — o equivalente em API seria $2,59. Oitenta minutos, 19,4 milhões de tokens. A conversa de que modelo chinês é &ldquo;alternativa barata&rdquo; morreu faz tempo: aqui é candidato à liderança que também é barato.</p>
<h2>Gemini 3.7 Flash: 93, Tier A — e a cola pelo caminho<span class="hx:absolute hx:-mt-20" id="gemini-37-flash-93-tier-a--e-a-cola-pelo-caminho"></span>
    <a href="#gemini-37-flash-93-tier-a--e-a-cola-pelo-caminho" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A parte técnica você já conhece: o Gemini 3.1 Pro morreu no v2 por causa de um bug do Google, o <code>Corrupted thought signature</code>, que derrubava a execução no meio do caminho via OpenRouter e o deixou preso em 62 (pelo caminho direto, fez 88). Desta vez cortei o intermediário: <strong>chave direta da API do Gemini</strong>, sem OpenRouter no meio, e o bug não apareceu uma vez sequer. O caminho direto funcionou — e o 3.7 Flash virou o <strong>primeiro Gemini a chegar no Tier A rodando no OpenCode</strong>: o 3.5 Flash fez 79 lá, o 3.1 Pro, 62. Antes, só o harness nativo do Google tinha levado um Gemini ao A.</p>
<p>Resultado oficial: <strong>93 pontos</strong>, empate com GPT 5.6 Sol, Terra e Opus 4.8. A rodada custou $4,12, durou 43 minutos e gastou 27,8 milhões de tokens.</p>
<p>Mas o caminho até esse 93 rendeu a descoberta mais importante deste ciclo. A primeira rodada do 3.7 Flash levantou suspeita — e tinha motivo. No meio da construção, e de novo na auto-revisão, o modelo <strong>leu a rubrica de correção</strong>, leu o relatório do v2 inteiro — com a nota e a auditoria de cada concorrente — e <strong>rodou o scanner de auditoria em cima de si mesmo oito vezes</strong>. Ele passou a prova inteira estudando como seria avaliado.</p>
<p>A arma do crime está no pin. A rodada contaminada saiu com o pin correto no <code>claude-sonnet-5</code>, aquele feito que só três modelos tinham conseguido em toda a história do benchmark. Anulei a rodada e refiz com todo o material de correção fora do alcance do modelo: saiu o pin velho no <code>claude-sonnet-4.6</code>, como todo mundo. Ele não conhecia o modelo atual coisa nenhuma — tinha lido a resposta no relatório. O 93 é dessa segunda rodada, limpa.</p>
<p>Pra ser justo: ele não copiou código de nenhum app vizinho. O que ele fez foi colar da correção — e isso bastou pra nenhum modelo, de fronteira ou não, rodar mais com acesso a esse material.</p>
<p>E o 93 não é caridade, a entrega se sustenta sozinha. API do RubyLLM real de ponta a ponta, calculadora segura sem <code>eval</code>, histórico multi-turn correto, streaming incremental funcionando de ponta a ponta no Docker, persistência que sobrevive a restart com dois workers. Suite com 55 testes e 213 asserções, tudo verde, cobertura de branch ligada. Os descontos: o pin velho e a falta de um lock de turno por conversa — o mesmo teto de concorrência do Fable 5.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> desta vez não foi um local fraco colando do vizinho. Foi um modelo de fronteira consultando as respostas no meio da prova.</p>

</blockquote>
<h2>Qwen 3.8 27B local: a rodada mais trabalhosa do ano<span class="hx:absolute hx:-mt-20" id="qwen-38-27b-local-a-rodada-mais-trabalhosa-do-ano"></span>
    <a href="#qwen-38-27b-local-a-rodada-mais-trabalhosa-do-ano" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>No artigo anterior eu disse que só testaria um local novo se surgisse evidência forte. Aí o irmão Max fez 92, a versão aberta de 27B estava disponível, e eu tinha a desculpa que faltava. Valeu pela ciência, mas deu trabalho.</p>
<p>A primeira surpresa: o 3.8 27B usa uma arquitetura híbrida SSM/Mamba, e o meu build tunado de llama.cpp do llama-swap <strong>não consegue carregar o modelo</strong> — falta um tensor (<code>ssm_conv1d</code>) que só as versões mais novas conhecem. A solução foi subir um container zerado do Ollama, que embute um llama.cpp atual, e importar o GGUF que eu já tinha baixado via Modelfile. Primeira lição: em modelo local, as ferramentas envelhecem em meses.</p>
<p>A segunda surpresa: contexto. Um modelo de raciocínio torra uma quantidade absurda de tokens pensando, e janela pequena não basta — com 32K ou 64K ele nem termina a prova, esgotando tudo na leitura do código da gem antes de escrever a primeira linha do app. A rodada oficial precisou de <strong>176K de contexto</strong>, quase tudo que os 32 GB da RTX 5090 aguentam. Quem impediu o modelo de terminar foi teto de contexto, não falta de capacidade.</p>
<p>Aí veio o incidente. A primeira rodada completou — e completou bem demais. Fui olhar o log: o modelo tinha lido <strong>dezesseis vezes</strong> o app pronto do Qwen 3.8 Max online, que estava no repositório, e copiado a UI e o streaming dele. Teria levado uns 75 pontos com trabalho alheio. Anulei e refiz sem nenhum app de terceiro por perto. E como a seção do Gemini ali em cima mostra, não são só os locais que procuram ajuda quando ela está dando sopa.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> modelo local fraco não inventa só API inexistente — ele também cola do vizinho quando o vizinho está no mesmo diretório.</p>

</blockquote>
<p>Na rodada limpa, o 27B fez <strong>51 pontos, Tier C</strong> — empatado, por acaso, com a nota do Qwen3.7 Max online. E o recibo é misto. O miolo ele acertou: <code>add_message</code> de verdade, <code>with_tools</code> de verdade, calculadora por descida recursiva sem <code>eval</code>, fruto de ter lido o código da gem de verdade. Onde ele afundou foi na largura: usou ActiveRecord onde os requisitos proíbem, o streaming sai quebrado (os tokens são transmitidos, mas o balão da resposta nunca entra na tela — ela só aparece se você atualizar a página), não usou <code>with_schema</code>, não fez orçamento de tokens, entregou <strong>zero testes</strong>, RuboCop com 22 ofensas, e nem Dockerfile saiu. Já a auto-revisão foi exemplar: ele mesmo achou e confessou cada um desses defeitos, com arquivo e linha — 14 dos 15 pontos de honestidade. Sabe revisar melhor do que constrói.</p>
<p>Custo da rodada: zero reais, 37 milhões de tokens e 156 minutos de uma RTX 5090 suando.</p>
<p>Pra calibrar o 51: o piso do Tier A é o <strong>Opus 4.6 com 83</strong>. O gap de 32 pontos não está em &ldquo;conhecer a biblioteca&rdquo; — nisso o 27B agora acerta. Está nas dimensões de robustez de produção: streaming, testes, gates, Docker, orçamento. É a diferença entre saber programar e saber entregar.</p>
<p>E comparando com os locais de antes — sempre com o aviso de que as provas não são comparáveis: no v1, os Qwens locais alucinavam a gem por inteiro (um inventou um <code>Openrouter::Client</code> com a capitalização errada, outro criou um <code>RubyLLM::Client</code> que não existe). O Qwen 3.5 35B acertou o ponto de entrada, mas os testes embrulhavam qualquer exceção num <code>assert true</code>. O 3.6 35B foi o primeiro local a acertar as chamadas principais, ainda com o multi-turn quebrado. O 3.8 27B acerta o núcleo inteiro da API numa prova muito mais difícil. A nota não dá pra comparar; o comportamento, dá: conhecimento de API deixou de ser o problema dos locais. O problema agora é engenharia.</p>
<h2>Grok 4.6: o primeiro empate geracional, e a rodada mais limpa<span class="hx:absolute hx:-mt-20" id="grok-46-o-primeiro-empate-geracional-e-a-rodada-mais-limpa"></span>
    <a href="#grok-46-o-primeiro-empate-geracional-e-a-rodada-mais-limpa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Depois de dois flagrantes de cola, veio um respiro. Rodei o Grok 4.6 já com a blindagem no talo: tirei tudo do alcance do modelo — a rubrica de correção, o relatório inteiro do v2, o scanner de auditoria, o catálogo de deduções do <code>CLAUDE.md</code> e os 44 apps dos concorrentes, todos movidos pra fora do repositório. Foi a primeira rodada sob esse regime mais rígido. E a varredura pós-prova não achou nada: zero leitura de arquivo de correção, zero olhada em app vizinho. Passou limpo. Depois do Gemini e do Qwen local, é bom ver um modelo de fronteira construindo sozinho porque não tinha por onde colar.</p>
<p>O resultado traz um dado curioso: <strong>92 pontos, Tier A, a mesma nota do Grok 4.5.</strong> É o primeiro empate de geração contra geração de toda a prova. Enquanto o GLM subiu 83, 92, 94, o Kimi foi de 77 a 86 a 95 e o Claude escalou sem tropeço, o Grok andou de lado. O 4.6 não comprou um ponto sequer sobre o 4.5. Na tabela lá em cima o 4.5 aparece com 91 porque uso o número dele no grok CLI, o harness nativo; cabeça a cabeça no mesmo OpenCode, os dois batem 92 cravado.</p>
<p>O que ele entregou é sólido e real. API do RubyLLM correta de ponta a ponta, uma calculadora sem <code>eval</code> escrita à mão (tokenizer por regex e parser, provada ao vivo com <code>(12.5*4)/2+7 = 32.0</code>), um teste que confere a array exata enviada ao provider, store em arquivo com lock sobrevivendo a restart com dois workers, orçamento de tokens com estimador de fallback, e o <code>docker compose up --build</code> respondendo um chat de verdade. O streaming foi provado ao vivo na fase 2: cinco tokens chegando incrementais enquanto o POST ainda estava aberto. E foi o mais econômico de todos os Tier A no OpenCode, com 10 milhões de tokens, porque o Grok é seco. Custou $6,33 e 34 minutos.</p>
<p>Os descontos são honestos, e ele mesmo confessou. O lock não cobre a janela de leitura-alteração-escrita, então dois turnos simultâneos na mesma conversa viram uma corrida de último-a-escrever-vence, o mesmo perigo do GLM 5.2. A cobertura de teste é rasa no caminho crítico, com o teste de integração sendo só um smoke test da home. E manteve o pin velho no <code>claude-sonnet-4.6</code>, a dedução padrão da casa. Auto-revisão de 12 PASS e 2 PARTIAL, tudo conferido pelo auditor. Nada de brilho novo: é um bom modelo repetindo um bom modelo.</p>
<p>Depois eu rodei o mesmo Grok 4.6 no harness nativo, o grok CLI, pra ver se mudava alguma coisa. Mudou pouco: <strong>93 no grok CLI contra 92 no OpenCode</strong>, um ponto de diferença, dentro do ruído. Não é efeito de harness. O CLI não deu andaime nem quebrou nada; o Grok constrói bem competente nos dois.</p>
<p>O tal ponto a mais tem uma explicação concreta e boba: por acaso, a rodada do CLI trancou a janela inteira de leitura-alteração-escrita do store num <code>File::LOCK_EX</code>, então a concorrência foi pra 9; a do OpenCode deixou aquela corrida aberta e ficou em 8. Mesmo modelo, uma rodada cada: a diferença é variância entre as duas gerações de código. O harness não teve papel nisso. O que mudou de verdade foi o custo: no grok CLI a mesma prova saiu por <strong>$1,19</strong>, contra os $6,33 do OpenCode, pelos mesmos ~11 milhões de tokens, graças ao cache nativo da xAI.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> nem toda geração nova traz ponto. O Grok 4.6 empatou consigo mesmo, e a notícia boa foi ter passado limpo pela blindagem mais dura que já apliquei.</p>

</blockquote>
<h2>Conclusão: quão perto eles chegaram?<span class="hx:absolute hx:-mt-20" id="conclusão-quão-perto-eles-chegaram"></span>
    <a href="#conclus%c3%a3o-qu%c3%a3o-perto-eles-chegaram" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Resposta curta: muito perto.</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: center">Tier</th>
          <th style="text-align: right">Tempo</th>
          <th>Custo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GLM 5.3</td>
          <td style="text-align: right"><strong>94</strong></td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">80 min</td>
          <td>$0 no plano (~$2,59 em API)</td>
      </tr>
      <tr>
          <td>Gemini 3.7 Flash</td>
          <td style="text-align: right"><strong>93</strong></td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">43 min</td>
          <td>$4,12</td>
      </tr>
      <tr>
          <td>Qwen 3.8 Max</td>
          <td style="text-align: right"><strong>92</strong></td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">78 min</td>
          <td>$9,16 em API</td>
      </tr>
      <tr>
          <td>Grok 4.6</td>
          <td style="text-align: right"><strong>92</strong></td>
          <td style="text-align: center">A</td>
          <td style="text-align: right">34 min</td>
          <td>$6,33 em API</td>
      </tr>
      <tr>
          <td>Qwen 3.8 27B local</td>
          <td style="text-align: right"><strong>51</strong></td>
          <td style="text-align: center">C</td>
          <td style="text-align: right">156 min</td>
          <td>$0</td>
      </tr>
  </tbody>
</table>
<p>GLM 5.3 a dois pontos do Fable 5 não é &ldquo;alternativa barata&rdquo;, é candidato à liderança. Qwen 3.8 Max a um ponto de Sol e Terra idem. A distância entre a nata americana e os chineses novos é de um ou dois pontos — e eu mesmo repito em todo artigo que um ou dois pontos é ruído. E o Gemini 3.7 Flash entrou no bolo: 93, empatado com Sol, Terra e Opus 4.8, o primeiro Gemini a chegar lá pelo OpenCode. O Grok 4.6 entrou no mesmo balde dos 92, mas com um asterisco só dele: foi a única geração nova que não melhorou nada sobre a anterior, e mesmo assim foi a primeira a passar limpa pela blindagem mais dura.</p>
<p>E o local segue fora de questão pra coding agent autônomo: Tier C é Tier C. Mas repare que a conversa mudou. Até pouco tempo atrás eu descartava local porque ele inventava API. Hoje ele conhece a API e tropeça em streaming, testes e Docker — e precisa de 176K de contexto e 32 GB de VRAM só pra completar a prova. O gargalo subiu de nível. Não é recomendação ainda; é o caminho sendo pavimentado.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> a nata da nata continua sendo Fable, Opus, Sonnet, K3 e os GPT 5.6. Mas o pelotão de perseguição já está a um ou dois pontos — e o fosso entre &ldquo;fronteira&rdquo; e &ldquo;alternativa&rdquo; virou território de ruído.</p>

</blockquote>
<p>Como sempre: artefatos, logs, rubrica, deduções e a tabela atualizada estão no <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">llm-coding-benchmark</a>. As duas rodadas do Gemini 3.7 — a anulada e a oficial — estão documentadas no relatório, com o achado de contaminação em destaque.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>llms</category><category>agentes-de-codigo</category></item><item><title>Novo LLM Benchmark: refiz todos os testes!</title><link>https://www.akitaonrails.com/2026/07/30/novo-llm-benchmark-refiz-todos-os-testes/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/07/30/novo-llm-benchmark-refiz-todos-os-testes/</guid><pubDate>Thu, 30 Jul 2026 15:00:00 -0300</pubDate><description>&lt;p&gt;Há cinco dias publiquei o teste do &lt;a href="https://www.akitaonrails.com/2026/07/25/llm-benchmark-opus-5-e-bom/"&gt;Claude Opus 5&lt;/a&gt;. Onze dias atrás expliquei &lt;a href="https://www.akitaonrails.com/2026/07/19/llm-benchmark-devo-usar-o-que-tem-nota-maior/"&gt;por que a maior nota de um ranking não significa &amp;ldquo;o melhor LLM&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ótimo. A tabela do primeiro artigo já virou peça de museu.&lt;/p&gt;
&lt;p&gt;O argumento do segundo continua valendo. Na verdade, ficou ainda mais fácil de demonstrar, porque passei os últimos dias refazendo praticamente o benchmark inteiro. Foram dezenas de runs, várias tentativas descartadas, centenas de dólares entre API e créditos equivalentes, e uma quantidade indecente de tempo lendo código Rails gerado por robô.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Há cinco dias publiquei o teste do <a href="/2026/07/25/llm-benchmark-opus-5-e-bom/">Claude Opus 5</a>. Onze dias atrás expliquei <a href="/2026/07/19/llm-benchmark-devo-usar-o-que-tem-nota-maior/">por que a maior nota de um ranking não significa &ldquo;o melhor LLM&rdquo;</a>.</p>
<p>Ótimo. A tabela do primeiro artigo já virou peça de museu.</p>
<p>O argumento do segundo continua valendo. Na verdade, ficou ainda mais fácil de demonstrar, porque passei os últimos dias refazendo praticamente o benchmark inteiro. Foram dezenas de runs, várias tentativas descartadas, centenas de dólares entre API e créditos equivalentes, e uma quantidade indecente de tempo lendo código Rails gerado por robô.</p>
<p>O resultado é a <strong>versão 2</strong> do meu <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">LLM Coding Benchmark</a>. A prova ficou mais difícil, a auditoria ficou mais explícita e cada família passou a rodar, sempre que possível, no harness onde deveria funcionar melhor.</p>
<p>E já vou adiantar: <strong>os scores do v2 não são comparáveis diretamente aos do v1</strong>. Mudaram o prompt, os requisitos, o harness de vários modelos, a validação e a rubrica. A coluna <code>v1</code> no relatório serve como histórico, não como medição científica de quanto cada modelo &ldquo;evoluiu&rdquo;.</p>
<h2>Por que aposentei o v1<span class="hx:absolute hx:-mt-20" id="por-que-aposentei-o-v1"></span>
    <a href="#por-que-aposentei-o-v1" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Rodamos o v1 por meses. Ele serviu muito bem pra separar quem realmente conseguia construir um app Rails de quem inventava APIs do RubyLLM, escrevia testes pra própria alucinação e entregava Dockerfile que nunca subia.</p>
<p>Só que os modelos novos chegaram ao teto daquela prova. Quinze dos quarenta resultados já estavam comprimidos no Tier A, com o topo entre 92 e 97. O trabalho ainda tinha detalhes reais, mas os melhores modelos passavam pelos antigos discriminadores com facilidade. A ordem começava a depender de um preflight de API key aqui, um limite de cookie ali, um teste de erro que faltou. Detalhes válidos, pouca separação.</p>
<p>Também havia uma inconsistência operacional: a combinação entre modelo e harness. Claude tinha sido testado no OpenCode, Grok também, Kimi também, Gemini também. Só que hoje temos Claude Code, Codex, Kimi Code CLI, grok CLI e Antigravity. Medir um modelo num harness genérico quando existe uma integração feita pro comportamento dele pode distorcer o resultado.</p>
<p>O que o benchmark mede nunca foi apenas o arquivo de pesos:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">resultado = modelo + harness + prompt + tools + contexto + execução + auditoria</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Então resolvi parar de esconder o harness dentro da nota. Claude foi pro Claude Code. GPT foi pro Codex. Kimi K3 e K2.7-Coding foram pro Kimi CLI. Grok e Gemini ganharam rodadas A/B nos CLIs dos próprios vendors. OpenCode, completamente isolado, continuou como fallback pros modelos sem harness melhor ou sem acesso por assinatura.</p>
<h2>A prova nova<span class="hx:absolute hx:-mt-20" id="a-prova-nova"></span>
    <a href="#a-prova-nova" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O v1 tinha duas fases: construir e tentar subir. O v2 tem <strong>três fases</strong>, quatorze objetivos numerados e uma rubrica de dez dimensões.</p>
<p>Na primeira fase, o modelo ainda precisa construir sozinho um chat estilo ChatGPT em Rails com RubyLLM, Hotwire, Tailwind, Minitest, Docker e Compose. A semelhança termina aí. Agora ele também precisa entregar:</p>
<ul>
<li>streaming real por token via Turbo Streams, comprovadamente incremental;</li>
<li>payload multi-turn sem mandar a mensagem atual duas vezes, com um teste da array exata enviada ao provider;</li>
<li>persistência que sobreviva a restart e funcione com <code>WEB_CONCURRENCY=2</code>, com TTL e limites de quantidade e bytes;</li>
<li>exatamente duas tools, <code>server_time</code> e uma calculadora segura, usando a API real do RubyLLM;</li>
<li>título gerado pela API de structured output;</li>
<li>orçamento de tokens por conversa;</li>
<li>system prompt, preflight de credencial, estados degradados e tratamento dos erros do provider;</li>
<li>garantia de que turnos que falharam nunca contaminem o histórico futuro;</li>
<li>RuboCop, Brakeman e bundle-audit limpos, além de Docker de produção non-root e ausência de secrets.</li>
</ul>
<p>A segunda fase não aceita um README dizendo que funciona. Ela sobe o Rails, observa os tokens chegando, força chamadas reais às tools, mantém uma conversa com dois workers, reinicia o servidor, confere o histórico, roda os testes e gates, faz <code>docker build</code> e manda uma mensagem real pro app dentro do Compose.</p>
<p>A terceira fase pede que o próprio modelo revise cada objetivo como <code>PASS</code>, <code>PARTIAL</code> ou <code>FAIL</code>, cite arquivo, linha, teste ou comando e escreva o que ainda está quebrado. Essa honestidade vale 15 pontos. Um <code>FAIL</code> correto vale mais que um <code>PASS</code> otimista que a auditoria desmente.</p>
<p>Essa fase trouxe um dado que o v1 não tinha. Kimi K3 e Nex, por exemplo, admitiram defeitos que seria fácil esconder. Outros construíram um app razoável e depois alucinaram a própria inspeção. Saber programar e saber revisar o que programou são capacidades diferentes.</p>
<h2>O harness também entrou no teste<span class="hx:absolute hx:-mt-20" id="o-harness-também-entrou-no-teste"></span>
    <a href="#o-harness-tamb%c3%a9m-entrou-no-teste" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Também fiz A/Bs com as ferramentas nativas:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">OpenCode limpo</th>
          <th style="text-align: right">Harness nativo</th>
          <th>Leitura</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Grok 4.5</td>
          <td style="text-align: right">92</td>
          <td style="text-align: right">91 no grok CLI</td>
          <td>diferença dentro do ruído</td>
      </tr>
      <tr>
          <td>Grok 4.3</td>
          <td style="text-align: right">18</td>
          <td style="text-align: right">55 no grok CLI</td>
          <td>o scaffolding nativo resgata, mas continua fraco</td>
      </tr>
      <tr>
          <td>Gemini 3.1 Pro</td>
          <td style="text-align: right">62</td>
          <td style="text-align: right">88 no Antigravity</td>
          <td>o caminho direto evita um bug do provider</td>
      </tr>
      <tr>
          <td>Gemini 3.6 Flash</td>
          <td style="text-align: right">não rodado</td>
          <td style="text-align: right">92 no Antigravity</td>
          <td>bom resultado, sem baseline comparável</td>
      </tr>
  </tbody>
</table>
<p>O harness nativo não joga pó mágico no modelo. Grok 4.5 praticamente não ligou. Grok 4.3 precisava da estrutura. Gemini 3.1 precisava de um transporte que não quebrasse com <code>Corrupted thought signature</code>. Três mecanismos diferentes, que uma comparação apressada chamaria simplesmente de &ldquo;o CLI melhorou a nota&rdquo;.</p>
<p>No ranking abaixo, uso o harness preferencial quando existe uma rodada completa: Antigravity pros Geminis e grok CLI pros Groks. Os baselines de OpenCode continuam no repositório como A/B, mas não aparecem uma segunda vez na tabela.</p>
<h2>O novo ranking<span class="hx:absolute hx:-mt-20" id="o-novo-ranking"></span>
    <a href="#o-novo-ranking" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Esta é a tabela consolidada do v2, com uma entrada por modelo no harness preferencial disponível.</p>
<table>
  <thead>
      <tr>
          <th style="text-align: right">#</th>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: center">Tier</th>
          <th>Harness</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Custo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">1</td>
          <td>Claude Fable 5</td>
          <td style="text-align: right"><strong>96</strong></td>
          <td style="text-align: center">A.1</td>
          <td>Claude Code</td>
          <td style="text-align: right">46 min</td>
          <td style="text-align: right">$26,03</td>
      </tr>
      <tr>
          <td style="text-align: right">2</td>
          <td>Claude Sonnet 5</td>
          <td style="text-align: right"><strong>95</strong></td>
          <td style="text-align: center">A.1</td>
          <td>Claude Code</td>
          <td style="text-align: right">59 min</td>
          <td style="text-align: right">$25,83</td>
      </tr>
      <tr>
          <td style="text-align: right">2</td>
          <td>Claude Opus 5</td>
          <td style="text-align: right"><strong>95</strong></td>
          <td style="text-align: center">A.1</td>
          <td>Claude Code</td>
          <td style="text-align: right">78 min</td>
          <td style="text-align: right">$38,91</td>
      </tr>
      <tr>
          <td style="text-align: right">2</td>
          <td>Kimi K3</td>
          <td style="text-align: right"><strong>95</strong></td>
          <td style="text-align: center">A.1</td>
          <td>Kimi CLI</td>
          <td style="text-align: right">65 min</td>
          <td style="text-align: right">$6,14</td>
      </tr>
      <tr>
          <td style="text-align: right">5</td>
          <td>GPT 5.6 Sol</td>
          <td style="text-align: right"><strong>93</strong></td>
          <td style="text-align: center">A.1</td>
          <td>Codex</td>
          <td style="text-align: right">57 min</td>
          <td style="text-align: right">~$45</td>
      </tr>
      <tr>
          <td style="text-align: right">5</td>
          <td>Claude Opus 4.8</td>
          <td style="text-align: right"><strong>93</strong></td>
          <td style="text-align: center">A.1</td>
          <td>Claude Code</td>
          <td style="text-align: right">53 min</td>
          <td style="text-align: right">$21,82</td>
      </tr>
      <tr>
          <td style="text-align: right">5</td>
          <td>GPT 5.6 Terra</td>
          <td style="text-align: right"><strong>93</strong></td>
          <td style="text-align: center">A.1</td>
          <td>Codex</td>
          <td style="text-align: right">48 min</td>
          <td style="text-align: right">$16,92</td>
      </tr>
      <tr>
          <td style="text-align: right">8</td>
          <td>GLM 5.2</td>
          <td style="text-align: right"><strong>92</strong></td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">155 min</td>
          <td style="text-align: right">$0 (≈$12,05)</td>
      </tr>
      <tr>
          <td style="text-align: right">8</td>
          <td>Kimi K2.5</td>
          <td style="text-align: right"><strong>92</strong></td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">43 min</td>
          <td style="text-align: right">$1,50</td>
      </tr>
      <tr>
          <td style="text-align: right">8</td>
          <td>Gemini 3.6 Flash @ high</td>
          <td style="text-align: right"><strong>92</strong></td>
          <td style="text-align: center">A.1</td>
          <td>Antigravity</td>
          <td style="text-align: right">15 min</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">11</td>
          <td>MiniMax M3</td>
          <td style="text-align: right"><strong>91</strong></td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">113 min</td>
          <td style="text-align: right">$7,72</td>
      </tr>
      <tr>
          <td style="text-align: right">11</td>
          <td>Kimi K2.6</td>
          <td style="text-align: right"><strong>91</strong></td>
          <td style="text-align: center">A.1</td>
          <td>OpenCode</td>
          <td style="text-align: right">34 min</td>
          <td style="text-align: right">$2,64</td>
      </tr>
      <tr>
          <td style="text-align: right">11</td>
          <td>Claude Opus 4.7</td>
          <td style="text-align: right"><strong>91</strong></td>
          <td style="text-align: center">A.1</td>
          <td>Claude Code</td>
          <td style="text-align: right">44 min</td>
          <td style="text-align: right">$44,28</td>
      </tr>
      <tr>
          <td style="text-align: right">11</td>
          <td>GPT 5.6 Luna</td>
          <td style="text-align: right"><strong>91</strong></td>
          <td style="text-align: center">A.1</td>
          <td>Codex</td>
          <td style="text-align: right">46 min</td>
          <td style="text-align: right">$16,79</td>
      </tr>
      <tr>
          <td style="text-align: right">11</td>
          <td>Grok 4.5</td>
          <td style="text-align: right"><strong>91</strong></td>
          <td style="text-align: center">A.1</td>
          <td>grok CLI</td>
          <td style="text-align: right">25 min</td>
          <td style="text-align: right">$0 (≈$1,62)</td>
      </tr>
      <tr>
          <td style="text-align: right">16</td>
          <td>Nex-N2-Pro</td>
          <td style="text-align: right"><strong>88</strong></td>
          <td style="text-align: center">A.2</td>
          <td>OpenCode</td>
          <td style="text-align: right">8 min</td>
          <td style="text-align: right">$0,17</td>
      </tr>
      <tr>
          <td style="text-align: right">16</td>
          <td>GPT 5.5</td>
          <td style="text-align: right"><strong>88</strong></td>
          <td style="text-align: center">A.2</td>
          <td>Codex</td>
          <td style="text-align: right">57 min</td>
          <td style="text-align: right">~$53</td>
      </tr>
      <tr>
          <td style="text-align: right">16</td>
          <td>Gemini 3.1 Pro @ high</td>
          <td style="text-align: right"><strong>88</strong></td>
          <td style="text-align: center">A.2</td>
          <td>Antigravity</td>
          <td style="text-align: right">23 min</td>
          <td style="text-align: right">—</td>
      </tr>
      <tr>
          <td style="text-align: right">19</td>
          <td>Claude Sonnet 4.6</td>
          <td style="text-align: right"><strong>87</strong></td>
          <td style="text-align: center">A.2</td>
          <td>Claude Code</td>
          <td style="text-align: right">45 min</td>
          <td style="text-align: right">$9,90</td>
      </tr>
      <tr>
          <td style="text-align: right">20</td>
          <td>GPT 5.4</td>
          <td style="text-align: right"><strong>86</strong></td>
          <td style="text-align: center">A.2</td>
          <td>Codex</td>
          <td style="text-align: right">67 min</td>
          <td style="text-align: right">~$26</td>
      </tr>
      <tr>
          <td style="text-align: right">20</td>
          <td>Kimi K2.7-Coding</td>
          <td style="text-align: right"><strong>86</strong></td>
          <td style="text-align: center">A.2</td>
          <td>Kimi CLI</td>
          <td style="text-align: right">54 min</td>
          <td style="text-align: right">$4,37</td>
      </tr>
      <tr>
          <td style="text-align: right">22</td>
          <td>Step 3.7 Flash</td>
          <td style="text-align: right"><strong>84</strong></td>
          <td style="text-align: center">A.2</td>
          <td>OpenCode</td>
          <td style="text-align: right">81 min</td>
          <td style="text-align: right">$1,41</td>
      </tr>
      <tr>
          <td style="text-align: right">23</td>
          <td>Claude Opus 4.6</td>
          <td style="text-align: right"><strong>83</strong></td>
          <td style="text-align: center">A.2</td>
          <td>Claude Code</td>
          <td style="text-align: right">39 min</td>
          <td style="text-align: right">$12,83</td>
      </tr>
      <tr>
          <td style="text-align: right">23</td>
          <td>GLM 5</td>
          <td style="text-align: right"><strong>83</strong></td>
          <td style="text-align: center">A.2</td>
          <td>OpenCode</td>
          <td style="text-align: right">31 min</td>
          <td style="text-align: right">$1,97</td>
      </tr>
      <tr>
          <td style="text-align: right">25</td>
          <td>DeepSeek V4 Pro</td>
          <td style="text-align: right"><strong>82</strong></td>
          <td style="text-align: center">B</td>
          <td>OpenCode</td>
          <td style="text-align: right">57 min</td>
          <td style="text-align: right">$0,35</td>
      </tr>
      <tr>
          <td style="text-align: right">26</td>
          <td>DeepSeek V4 Flash</td>
          <td style="text-align: right"><strong>80</strong></td>
          <td style="text-align: center">B</td>
          <td>OpenCode</td>
          <td style="text-align: right">36 min</td>
          <td style="text-align: right">$0,81</td>
      </tr>
      <tr>
          <td style="text-align: right">27</td>
          <td>Qwen 3.6 Plus</td>
          <td style="text-align: right"><strong>76</strong></td>
          <td style="text-align: center">B</td>
          <td>OpenCode</td>
          <td style="text-align: right">75 min</td>
          <td style="text-align: right">$7,63</td>
      </tr>
      <tr>
          <td style="text-align: right">28</td>
          <td>MiMo V2.5 Pro</td>
          <td style="text-align: right"><strong>73</strong></td>
          <td style="text-align: center">B</td>
          <td>OpenCode</td>
          <td style="text-align: right">23 min</td>
          <td style="text-align: right">$0,22</td>
      </tr>
      <tr>
          <td style="text-align: right">29</td>
          <td>Grok 4.3</td>
          <td style="text-align: right"><strong>55</strong></td>
          <td style="text-align: center">C</td>
          <td>grok CLI</td>
          <td style="text-align: right">6 min</td>
          <td style="text-align: right">$0 (≈$0,18)</td>
      </tr>
      <tr>
          <td style="text-align: right">30</td>
          <td>Qwen3.7 Max</td>
          <td style="text-align: right"><strong>51</strong></td>
          <td style="text-align: center">C</td>
          <td>OpenCode</td>
          <td style="text-align: right">41 min</td>
          <td style="text-align: right">$2,59</td>
      </tr>
      <tr>
          <td style="text-align: right">31</td>
          <td>Step 3.5 Flash</td>
          <td style="text-align: right"><strong>27</strong></td>
          <td style="text-align: center">D</td>
          <td>OpenCode</td>
          <td style="text-align: right">47 min</td>
          <td style="text-align: right">$0,92</td>
      </tr>
  </tbody>
</table>
<p><em>Tempo é o wall clock de ponta a ponta das três fases. Custo é equivalente em API: nos modelos no Codex uso o valor blended com desconto de cache (mesmo critério da seção de custos abaixo); em planos de assinatura (Z.ai, grok CLI) o custo marginal é $0 e o número entre parênteses é o equivalente em API; as rodadas no Antigravity eram preview e não foram medidas.</em></p>
<p>Os detalhes, artefatos e deduções estão no <a href="https://github.com/akitaonrails/llm-coding-benchmark/blob/master/docs/success_report.v2.md"target="_blank" rel="noopener">relatório completo do v2</a>.</p>
<h2>O que os tiers querem dizer agora<span class="hx:absolute hx:-mt-20" id="o-que-os-tiers-querem-dizer-agora"></span>
    <a href="#o-que-os-tiers-querem-dizer-agora" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O novo corte foi ancorado no Claude Opus 4.6, que fez 83 e mostrou o mínimo necessário pra carregar a prova inteira. A interpretação prática ficou assim:</p>
<table>
  <thead>
      <tr>
          <th style="text-align: center">Tier</th>
          <th style="text-align: right">Score</th>
          <th>Como eu leio</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: center"><strong>A.1</strong></td>
          <td style="text-align: right"><strong>90 ou mais</strong></td>
          <td>Fronteira desta prova. Entrega mais completa e consistente; diferenças de um ou dois pontos dentro do grupo continuam sendo ruído.</td>
      </tr>
      <tr>
          <td style="text-align: center"><strong>A.2</strong></td>
          <td style="text-align: right"><strong>83 a 89</strong></td>
          <td>Serve pra programação e passou pelo mesmo piso de competência, mas deixou correções ou limitações mais visíveis. Ainda recomendo, com revisão mais atenta.</td>
      </tr>
      <tr>
          <td style="text-align: center"><strong>B</strong></td>
          <td style="text-align: right"><strong>73 a 82</strong></td>
          <td>Está perto, mas ainda exige limpeza humana em ponto importante. Não recomendo pra trabalho autônomo; mantenho no radar.</td>
      </tr>
      <tr>
          <td style="text-align: center"><strong>C</strong></td>
          <td style="text-align: right"><strong>51 a 72</strong></td>
          <td>Não recomendo pra programação. Ainda pode servir pra tradução, resumo, classificação e agentes simples.</td>
      </tr>
      <tr>
          <td style="text-align: center"><strong>D</strong></td>
          <td style="text-align: right"><strong>50 ou menos</strong></td>
          <td>Comportamento inconsistente, quebrado ou difícil de prever. Não me sinto seguro recomendando nem pra automação simples.</td>
      </tr>
  </tbody>
</table>
<p>Temos <strong>15 modelos no A.1</strong> e <strong>9 no A.2</strong>. Os 24 passaram do piso de competência pra esse tipo de trabalho. A subdivisão ajuda a escolher por onde começar: A.1 concentra os resultados de fronteira; A.2 reúne modelos competentes que exigiram mais consertos, deixaram testes mais rasos ou carregaram limitações operacionais mais claras.</p>
<p>Isso não transforma 96 em uma inteligência universalmente maior que 91, nem torna um A.2 ruim. Um modelo A.2 pode ser melhor em refactor, debugging, frontend ou dentro do seu monolito de quinze anos. A prova não mede tudo isso. O corte só evita colocar 24 opções num balde grande demais.</p>
<p>A.1 e A.2 formam o grupo de candidatos. Tier C e D são grupos que eu corto antes de começar.</p>
<h2>Afinal, qual é o melhor: Fable, Opus, Terra ou Kimi?<span class="hx:absolute hx:-mt-20" id="afinal-qual-é-o-melhor-fable-opus-terra-ou-kimi"></span>
    <a href="#afinal-qual-%c3%a9-o-melhor-fable-opus-terra-ou-kimi" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Se você só quer uma resposta de uma linha, vai se decepcionar de novo.</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Equivalente em API</th>
          <th>Uso prático</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Claude Fable 5</td>
          <td style="text-align: right">96</td>
          <td style="text-align: right">46 min</td>
          <td style="text-align: right">$26,03</td>
          <td>assinatura Claude Max</td>
      </tr>
      <tr>
          <td>Claude Opus 5</td>
          <td style="text-align: right">95</td>
          <td style="text-align: right">78 min</td>
          <td style="text-align: right">$38,91</td>
          <td>assinatura Claude Max</td>
      </tr>
      <tr>
          <td>Kimi K3</td>
          <td style="text-align: right">95</td>
          <td style="text-align: right">65 min</td>
          <td style="text-align: right">$6,14</td>
          <td>assinatura Moderato</td>
      </tr>
      <tr>
          <td>GPT 5.6 Terra</td>
          <td style="text-align: right">93</td>
          <td style="text-align: right">49 min</td>
          <td style="text-align: right">$16,92 blended</td>
          <td>créditos do ChatGPT</td>
      </tr>
  </tbody>
</table>
<p>No artefato final, <strong>Fable ganhou</strong>. Também foi o mais rápido entre esses quatro. Se eu estivesse pagando cada chamada de API dessa rodada, o <strong>Kimi K3 ganhou de lavada no custo</strong>, empatado com Opus em 95 e só um ponto abaixo de Fable.</p>
<p>Opus 5 fez um projeto excelente, mas foi o mais lento e gastou 56,8 milhões de tokens somados pelo Claude Code. Nesta prova ele não comprou nada visível com os 33 minutos extras sobre Fable. Terra também entregou bem, ficou dois pontos abaixo de K3 e custou menos que Fable e Opus no equivalente de API.</p>
<p>Quem já paga Claude Max ou ChatGPT Pro tem custo marginal próximo de zero enquanto estiver dentro dos limites. Kimi Moderato também é assinatura, com janelas de quota próprias. Portanto, &ldquo;$26 contra $6&rdquo; não decide sozinho. A primeira pergunta é qual assinatura você já paga e quanto limite ainda tem. Pra pay-as-you-go e automação, aí sim o custo por execução volta pro centro.</p>
<p>Minha leitura desse run:</p>
<ul>
<li><strong>Fable 5</strong> entregou o melhor pacote de qualidade e tempo;</li>
<li><strong>Kimi K3</strong> foi o melhor custo-benefício entre os líderes;</li>
<li><strong>Opus 5</strong> foi competente e meticuloso, mas caro e lento nesta execução;</li>
<li><strong>GPT 5.6 Terra</strong> entregou o melhor equilíbrio da família pra quem vive no Codex.</li>
</ul>
<p>É uma leitura deste projeto. Troque o workload e a ordem pode virar.</p>
<h2>Opus contra Sonnet, Sol contra Terra<span class="hx:absolute hx:-mt-20" id="opus-contra-sonnet-sol-contra-terra"></span>
    <a href="#opus-contra-sonnet-sol-contra-terra" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Nome de tier não é benchmark. O Sonnet 5 provou isso de um jeito quase constrangedor:</p>
<table>
  <thead>
      <tr>
          <th>Claude</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Custo registrado</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Fable 5</td>
          <td style="text-align: right">96</td>
          <td style="text-align: right">46 min</td>
          <td style="text-align: right">$26,03 equivalente em API</td>
      </tr>
      <tr>
          <td>Opus 5</td>
          <td style="text-align: right">95</td>
          <td style="text-align: right">78 min</td>
          <td style="text-align: right">$38,91 equivalente em API</td>
      </tr>
      <tr>
          <td>Sonnet 5</td>
          <td style="text-align: right">95</td>
          <td style="text-align: right">59 min</td>
          <td style="text-align: right">$25,83 equivalente na assinatura</td>
      </tr>
      <tr>
          <td>Opus 4.8</td>
          <td style="text-align: right">93</td>
          <td style="text-align: right">53 min</td>
          <td style="text-align: right">$21,82 equivalente na assinatura</td>
      </tr>
  </tbody>
</table>
<p>Sonnet 5 empatou com Opus 5, terminou dezenove minutos antes e produziu a primeira cobertura de linhas realmente 100% de todo o benchmark. Também fez a melhor self-review da família. Escolher Opus automaticamente porque &ldquo;Opus é a tier maior&rdquo; seria jogar os próprios dados fora.</p>
<p>Isso também corrige uma impressão péssima do v1, onde Sonnet 5 tinha feito 58 e alucinado a API do RubyLLM. No v2 ele rodou no Claude Code, recebeu requisitos explícitos e fez 95. Não dá pra concluir que o modelo melhorou 37 pontos porque mudamos quase todo o experimento. Dá pra concluir que a combinação v1 era uma representação ruim do que ele consegue fazer.</p>
<p>Do lado da OpenAI:</p>
<table>
  <thead>
      <tr>
          <th>GPT</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Custo blended equivalente</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GPT 5.6 Sol</td>
          <td style="text-align: right">93</td>
          <td style="text-align: right">57 min</td>
          <td style="text-align: right">~$45</td>
      </tr>
      <tr>
          <td>GPT 5.6 Terra</td>
          <td style="text-align: right">93</td>
          <td style="text-align: right">49 min</td>
          <td style="text-align: right">$16,92</td>
      </tr>
      <tr>
          <td>GPT 5.6 Luna</td>
          <td style="text-align: right">91</td>
          <td style="text-align: right">46 min</td>
          <td style="text-align: right">$16,79</td>
      </tr>
      <tr>
          <td>GPT 5.5</td>
          <td style="text-align: right">88</td>
          <td style="text-align: right">58 min</td>
          <td style="text-align: right">~$53</td>
      </tr>
      <tr>
          <td>GPT 5.4</td>
          <td style="text-align: right">86</td>
          <td style="text-align: right">67 min</td>
          <td style="text-align: right">~$26</td>
      </tr>
  </tbody>
</table>
<p>Terra empatou com Sol em 93, terminou oito minutos antes e custou pouco mais de um terço no cálculo blended. Também produziu a melhor proteção de concorrência de toda a rodada: Redis com <code>WATCH</code>/<code>MULTI</code>, lock distribuído por conversa e escolha forçada de tool. Nesta prova, pagar pelo Sol não comprou nenhum ponto nem economizou tempo. Terra é a escolha mais racional da família.</p>
<p>Luna continua na tabela porque fez 91 e ainda é um resultado A.1, mas perdeu o argumento de custo: Terra ficou dois pontos acima por apenas treze centavos a mais e levou cerca de três minutos extras.</p>
<p>O detalhe importante continua sendo o cache. Dos 21,7 milhões de tokens de input do Terra, 21 milhões eram cache hits. Cobrar tudo como input novo daria um teto de $111,62. Com a tarifa de cache, cai pra $16,92. Qualquer tabela de custo que mistura CLIs sem entender o que cada uma reporta está comparando banana com JSON.</p>
<h2>E os modelos chineses?<span class="hx:absolute hx:-mt-20" id="e-os-modelos-chineses"></span>
    <a href="#e-os-modelos-chineses" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A conversa de que modelo chinês só serve como alternativa barata ficou velha.</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: center">Tier</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Custo reportado</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Kimi K3</td>
          <td style="text-align: right">95</td>
          <td style="text-align: center">A.1</td>
          <td style="text-align: right">65 min</td>
          <td style="text-align: right">$6,14 equivalente, assinatura</td>
      </tr>
      <tr>
          <td>Kimi K2.5</td>
          <td style="text-align: right">92</td>
          <td style="text-align: center">A.1</td>
          <td style="text-align: right">43 min</td>
          <td style="text-align: right">$1,50, API</td>
      </tr>
      <tr>
          <td>Kimi K2.6</td>
          <td style="text-align: right">91</td>
          <td style="text-align: center">A.1</td>
          <td style="text-align: right">34 min</td>
          <td style="text-align: right">$2,64, API</td>
      </tr>
      <tr>
          <td>Kimi K2.7-Coding</td>
          <td style="text-align: right">86</td>
          <td style="text-align: center">A.2</td>
          <td style="text-align: right">54 min</td>
          <td style="text-align: right">$4,37 equivalente, assinatura</td>
      </tr>
      <tr>
          <td>MiniMax M3</td>
          <td style="text-align: right">91</td>
          <td style="text-align: center">A.1</td>
          <td style="text-align: right">113 min</td>
          <td style="text-align: right">$7,72, API</td>
      </tr>
      <tr>
          <td>GLM 5.2</td>
          <td style="text-align: right">92</td>
          <td style="text-align: center">A.1</td>
          <td style="text-align: right">155 min</td>
          <td style="text-align: right">$0 marginal na assinatura, $12,05 equivalente em API</td>
      </tr>
      <tr>
          <td>DeepSeek V4 Pro</td>
          <td style="text-align: right">82</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">57 min</td>
          <td style="text-align: right">$0,35, API</td>
      </tr>
      <tr>
          <td>DeepSeek V4 Flash</td>
          <td style="text-align: right">80</td>
          <td style="text-align: center">B</td>
          <td style="text-align: right">36 min</td>
          <td style="text-align: right">$0,81, API</td>
      </tr>
  </tbody>
</table>
<p>Kimi K3 empatou com Opus 5. K2.5, K2.6, MiniMax M3 e GLM 5.2 ficaram no mesmo A.1 de Claude e GPT. As execuções via OpenCode continuam mais baratas que a faixa de $16 a $45 dos líderes rodados em Claude Code e Codex, mas já não é uma comparação de centavos contra dezenas de dólares. E assinatura não é API: o GLM teve custo marginal zero porque rodou no plano da Z.ai; o mesmo consumo sairia por cerca de $12,05 via API.</p>
<p>O Kimi é a família mais fácil de recomendar hoje. K3 oferece qualidade de topo na assinatura barata. K2.5 e K2.6 foram econômicos via API, custando $1,50 e $2,64. K2.7 ficou abaixo dos irmãos, mas rodou em outro harness, então não vou inventar uma historinha de evolução linear com quatro pontos isolados.</p>
<p>MiniMax M3 merece atenção e cautela na mesma medida. Fez 91 por $7,72, ainda abaixo de uma rodada nos líderes americanos, mas gastou 121 milhões de tokens e levou quase duas horas. Foi a execução mais cara e mais voraz em tokens entre as rodadas de OpenCode. O score é bom; o perfil de uso, nem tanto.</p>
<p>GLM 5.2 fez 92 com custo marginal zero no plano da Z.ai, mas consumiu o equivalente a $12,05 em API. Levou cerca de duas horas e meia. Se tempo de wall clock não importa, é uma opção muito forte. Se você trabalha em ciclos curtos, Grok 4.5 entregou 91 em cerca de 25 minutos no grok CLI, mais de seis vezes mais rápido.</p>
<p>DeepSeek continua barato, mas parou no Tier B. V4 Pro fez 82 por $0,35 e V4 Flash fez 80 por $0,81. Estão perto e quero repetir quando vier uma versão nova. Hoje eu ainda não usaria nenhum dos dois pra deixar um coding agent trabalhando sozinho numa codebase que importa. Economizar um ou dois dólares pra depois gastar uma hora revisando defeito estrutural é uma conta ruim.</p>
<h2>Por que não refiz os modelos locais<span class="hx:absolute hx:-mt-20" id="por-que-não-refiz-os-modelos-locais"></span>
    <a href="#por-que-n%c3%a3o-refiz-os-modelos-locais" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Não rodei Qwen 3.5 e os outros modelos locais no v2. A prioridade passou a ser mapear melhor o Tier A de programação, e cada execução completa dessa prova custa tempo de máquina, auditoria e sanidade.</p>
<p>Os locals não são inúteis. Servem pra tradução, classificação, resumo, one-shot controlado e tarefas onde privacidade ou operação offline pesa mais que qualidade. Já pra coding agent autônomo, os testes do v1 ficaram muito abaixo do piso. A prova v2 é mais difícil. Não vejo motivo pra gastar vários dias confirmando de novo que um Qwen quantizado local não compete com Fable, Opus, GPT 5.6 ou Kimi em engenharia de software.</p>
<p>Pra programação, hoje não vale a pena. Se surgir um modelo local novo com evidência forte, eu testo. Até lá, prefiro gastar tempo diferenciando os vinte e quatro modelos que já passaram do piso.</p>
<h2>Conclusão<span class="hx:absolute hx:-mt-20" id="conclusão"></span>
    <a href="#conclus%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O v1 cumpriu seu papel e saturou. O v2 aperta onde os modelos atuais ainda escorregam: streaming de verdade, payload multi-turn, concorrência, persistência, tools, structured output, orçamento, segurança operacional, teste fiel e capacidade de admitir o próprio defeito.</p>
<p>Fable 5 ficou no topo com 96. Sonnet 5, Opus 5 e Kimi K3 empataram em 95. Sol e Terra vieram logo atrás com 93. Isso responde quem produziu os melhores projetos nesta prova.</p>
<p>Pra escolher o que usar, a leitura prática é outra:</p>
<ul>
<li>Tier A.1 reúne os 15 resultados de fronteira, todos com 90 ou mais;</li>
<li>Tier A.2 reúne 9 modelos competentes entre 83 e 89, ainda recomendáveis com revisão mais atenta;</li>
<li>Tier B está perto, mas ainda não recomendo pra trabalho autônomo;</li>
<li>Tier C fica pra tradução, resumo e agentes simples;</li>
<li>Tier D tem comportamento inconsistente demais pra eu recomendar;</li>
<li>dentro do Tier A, escolha por assinatura, velocidade, custo e harness;</li>
<li>um ou dois pontos não transformam ninguém no campeão universal de inteligência.</li>
</ul>
<p>Minha escolha pessoal continua concentrada em Claude Code e Codex porque são os harnesses que uso todo dia. Dentro do Codex, Terra entregou o melhor equilíbrio entre score, tempo e custo. Kimi K3 virou uma alternativa séria de topo. Grok 4.5 é o campeão de velocidade desta rodada. GLM tem custo marginal zero na assinatura e MiniMax ainda custa menos que os líderes, mas nenhum dos dois é escolha de velocidade. Sonnet 5 provou que pagar ou selecionar a tier &ldquo;maior&rdquo; por reflexo pode ser desperdício.</p>
<p>Todo o código gerado, prompts, resultados, self-reviews, rubrica e correções estão no <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">llm-coding-benchmark</a>. A grande reforma de código e testes já está no <code>master</code>. Contribuições são bem-vindas, seja pra adicionar modelo, melhorar o harness, contestar uma dedução ou encontrar mais um bug no auditor.</p>
<p>Só traga artefato e dado. Opinião de ranking já tem demais.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>llms</category><category>agentes-de-codigo</category></item><item><title>LLM Benchmark: Opus 5 é bom?</title><link>https://www.akitaonrails.com/2026/07/25/llm-benchmark-opus-5-e-bom/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/07/25/llm-benchmark-opus-5-e-bom/</guid><pubDate>Sat, 25 Jul 2026 12:00:00 -0300</pubDate><description>&lt;p&gt;A Anthropic lançou o &lt;strong&gt;Claude Opus 5&lt;/strong&gt; ontem. A pergunta óbvia é:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;É bom?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Resposta curta: &lt;strong&gt;sim, é muito bom&lt;/strong&gt;. No meu benchmark fez 95/100, Tier A, com a engenharia mais completa que apareceu até agora em qualquer um dos harnesses que testei.&lt;/p&gt;
&lt;p&gt;Agora a resposta que interessa: não, isso não prova que virou &amp;ldquo;o melhor LLM do mundo&amp;rdquo;. Nem prova que é melhor que Fable 5, Opus 4.8, GPT 5.6 Sol ou Kimi K3 em qualquer trabalho que você jogar neles. Semana passada publiquei um artigo inteiro explicando &lt;a href="https://www.akitaonrails.com/2026/07/19/llm-benchmark-devo-usar-o-que-tem-nota-maior/"&gt;por que a maior nota não significa o melhor modelo&lt;/a&gt;. O Opus 5 chegou a tempo de produzir um belo estudo de caso praquele texto.&lt;/p&gt;</description><content:encoded><![CDATA[<p>A Anthropic lançou o <strong>Claude Opus 5</strong> ontem. A pergunta óbvia é:</p>
<blockquote>
  <p>&ldquo;É bom?&rdquo;</p>

</blockquote>
<p>Resposta curta: <strong>sim, é muito bom</strong>. No meu benchmark fez 95/100, Tier A, com a engenharia mais completa que apareceu até agora em qualquer um dos harnesses que testei.</p>
<p>Agora a resposta que interessa: não, isso não prova que virou &ldquo;o melhor LLM do mundo&rdquo;. Nem prova que é melhor que Fable 5, Opus 4.8, GPT 5.6 Sol ou Kimi K3 em qualquer trabalho que você jogar neles. Semana passada publiquei um artigo inteiro explicando <a href="/2026/07/19/llm-benchmark-devo-usar-o-que-tem-nota-maior/">por que a maior nota não significa o melhor modelo</a>. O Opus 5 chegou a tempo de produzir um belo estudo de caso praquele texto.</p>
<h2>Onde a Anthropic posiciona o Opus 5<span class="hx:absolute hx:-mt-20" id="onde-a-anthropic-posiciona-o-opus-5"></span>
    <a href="#onde-a-anthropic-posiciona-o-opus-5" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>No <a href="https://www.anthropic.com/news/claude-opus-5"target="_blank" rel="noopener">anúncio oficial</a>, a Anthropic descreve o Opus 5 como um modelo de uso diário que chega perto da inteligência de fronteira do Fable 5, mas custa metade. Ele virou o modelo padrão no Claude Max e o mais forte disponível no Pro.</p>
<p>A escadinha comercial parece simples:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Opus 4.8  &lt;  Opus 5  ≈  Fable 5</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Só que nem os dados da própria Anthropic formam uma linha tão limpa. No CursorBench 3.2, em esforço máximo, Opus 5 fica a 0,5% do pico do Fable 5. No Frontier-Bench v0.1, supera todos os outros modelos e mais que dobra o resultado do Opus 4.8 com custo menor por tarefa. No OSWorld 2.0, chega a passar o melhor resultado do Fable por pouco mais de um terço do custo.</p>
<p>Então &ldquo;entre Opus 4.8 e Fable 5&rdquo; é um atalho razoável pra entender o produto. Não é uma classificação universal. Dependendo da tarefa e do esforço escolhido, as curvas se cruzam.</p>
<p>O preço é mais objetivo. Opus 5 custa <strong>$5 por milhão de tokens de input e $25 por milhão de output</strong>, igual ao Opus 4.8. Fable 5 custa <strong>$10/$50</strong>. Em tarifa de API, Opus 5 entrega a promessa mais interessante do lançamento: comportamento próximo de Fable sem pagar a taxa Fable.</p>
<h2>O benchmark<span class="hx:absolute hx:-mt-20" id="o-benchmark"></span>
    <a href="#o-benchmark" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pra quem caiu de paraquedas, meu <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">LLM Coding Benchmark</a> dá o mesmo problema a todos: construir sozinho um chat estilo ChatGPT em Rails 8, com RubyLLM, Hotwire, Tailwind, testes, CI, Docker e documentação.</p>
<p>Não avalio uma função isolada. Avalio o projeto que saiu no final: se usa a API real do RubyLLM, se multi-turn funciona, se trata falhas do provider, se a conversa persiste, se Turbo Streams está ligado de verdade, se os testes conseguem pegar bugs e se a imagem de produção sobe.</p>
<p>O Opus 5 rodou solo pelo <strong>Claude Code headless</strong>, com <code>--dangerously-skip-permissions</code>, usando minha assinatura Max. Foram:</p>
<ul>
<li><strong>38m57s</strong></li>
<li><strong>201 turnos</strong></li>
<li><strong>121 testes e 355 assertions</strong></li>
<li><strong>100% de cobertura de linhas e 95,94% de branches</strong></li>
<li><strong>22,1 milhões de tokens de cache read</strong></li>
<li><strong>$16,02 equivalentes em tarifa de API</strong>, mas cobrados da assinatura</li>
</ul>
<p>Isso exige um asterisco. Opus 4.8 e Fable 5 foram testados no OpenCode via OpenRouter. GPT 5.6 Sol rodou no Codex. Kimi K3 rodou no Kimi Code CLI. Coding benchmark mede o pacote inteiro:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">modelo + prompt + harness + tools + contexto + execução + auditoria</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>Por isso o repositório mantém o Opus 5 no perfil de Claude Code em vez de fingir que foi uma comparação perfeitamente controlada com a tabela principal. Aqui vou juntar as 40 linhas do ranking principal com o novo resultado porque todo mundo quer enxergar onde o 95 cai. O asterisco não é enfeite.</p>
<h2>Ranking atualizado: tabela principal + Opus 5<span class="hx:absolute hx:-mt-20" id="ranking-atualizado-tabela-principal--opus-5"></span>
    <a href="#ranking-atualizado-tabela-principal--opus-5" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><table>
  <thead>
      <tr>
          <th style="text-align: right">Rank</th>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: center">Tier</th>
          <th style="text-align: center">RubyLLM OK</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Custo da rodada</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right"><strong>1</strong></td>
          <td><strong>Claude Opus 5 (Claude Code)*</strong></td>
          <td style="text-align: right"><strong>95</strong></td>
          <td style="text-align: center"><strong>A</strong></td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right"><strong>39m</strong></td>
          <td style="text-align: right"><strong>assinatura (≈$16,02 equiv. API)</strong></td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>GPT 5.4 xHigh (Codex)</td>
          <td style="text-align: right">95</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">22m</td>
          <td style="text-align: right">~$16</td>
      </tr>
      <tr>
          <td style="text-align: right">1</td>
          <td>Claude Opus 4.8</td>
          <td style="text-align: right">95</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">17m</td>
          <td style="text-align: right">~$6,40</td>
      </tr>
      <tr>
          <td style="text-align: right">4</td>
          <td>Claude Fable 5</td>
          <td style="text-align: right">94</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">24m</td>
          <td style="text-align: right">~$11,20</td>
      </tr>
      <tr>
          <td style="text-align: right">5</td>
          <td>Claude Fable 5 (re-release)</td>
          <td style="text-align: right">93</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">18m</td>
          <td style="text-align: right">~$8,30</td>
      </tr>
      <tr>
          <td style="text-align: right">5</td>
          <td>Gemini 3.5 Flash</td>
          <td style="text-align: right">93</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">18m</td>
          <td style="text-align: right">~$3,55</td>
      </tr>
      <tr>
          <td style="text-align: right">7</td>
          <td>GPT 5.6 Sol xHigh (Codex)</td>
          <td style="text-align: right">92</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">17m</td>
          <td style="text-align: right">assinatura (≈$8,70 equiv. API)</td>
      </tr>
      <tr>
          <td style="text-align: right">8</td>
          <td>Kimi K3 (Kimi Code CLI)</td>
          <td style="text-align: right">89</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">26m</td>
          <td style="text-align: right">assinatura (≈$2,10 equiv. API)</td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td>Claude Opus 4.7</td>
          <td style="text-align: right">87</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">18m</td>
          <td style="text-align: right">~$7,00</td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td>Kimi K2.6</td>
          <td style="text-align: right">87</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">20m</td>
          <td style="text-align: right">~$1,19</td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td>GLM 5.2 (Z.ai)</td>
          <td style="text-align: right">87</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">43m</td>
          <td style="text-align: right">assinatura</td>
      </tr>
      <tr>
          <td style="text-align: right">9</td>
          <td>Grok 4.5</td>
          <td style="text-align: right">87</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">16m</td>
          <td style="text-align: right">~$5,10</td>
      </tr>
      <tr>
          <td style="text-align: right">13</td>
          <td>Kimi K2.7 Code</td>
          <td style="text-align: right">86</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">22m</td>
          <td style="text-align: right">~$1,23</td>
      </tr>
      <tr>
          <td style="text-align: right">14</td>
          <td>GPT 5.5 xHigh (Codex)</td>
          <td style="text-align: right">85</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">18m</td>
          <td style="text-align: right">~$10</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>Claude Opus 4.6</td>
          <td style="text-align: right">83</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">16m</td>
          <td style="text-align: right">~$1,10 (hist.)</td>
      </tr>
      <tr>
          <td style="text-align: right">15</td>
          <td>Nex-N2-Pro</td>
          <td style="text-align: right">83</td>
          <td style="text-align: center">A</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">25m</td>
          <td style="text-align: right">~$0,34</td>
      </tr>
      <tr>
          <td style="text-align: right">17</td>
          <td>Gemini 3.1 Pro</td>
          <td style="text-align: right">79</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">14m</td>
          <td style="text-align: right">~$3,10</td>
      </tr>
      <tr>
          <td style="text-align: right">17</td>
          <td>Sakana Fugu Ultra</td>
          <td style="text-align: right">79</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">22m</td>
          <td style="text-align: right">assinatura</td>
      </tr>
      <tr>
          <td style="text-align: right">19</td>
          <td>Claude Sonnet 4.6</td>
          <td style="text-align: right">78</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">16m</td>
          <td style="text-align: right">~$0,63 (hist.)</td>
      </tr>
      <tr>
          <td style="text-align: right">19</td>
          <td>DeepSeek V4 Flash</td>
          <td style="text-align: right">78</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">3m</td>
          <td style="text-align: right">~$0,01</td>
      </tr>
      <tr>
          <td style="text-align: right">19</td>
          <td>MiniMax M3</td>
          <td style="text-align: right">78</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">53m (fase 2 DNF)</td>
          <td style="text-align: right">~$1,25</td>
      </tr>
      <tr>
          <td style="text-align: right">19</td>
          <td>Qwen3.7 Max</td>
          <td style="text-align: right">78</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">19m</td>
          <td style="text-align: right">~$1,40</td>
      </tr>
      <tr>
          <td style="text-align: right">23</td>
          <td>Grok 4.3</td>
          <td style="text-align: right">72</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">15m</td>
          <td style="text-align: right">~$1,70</td>
      </tr>
      <tr>
          <td style="text-align: right">24</td>
          <td>Qwen 3.6 Plus</td>
          <td style="text-align: right">71</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">17m</td>
          <td style="text-align: right">~$0,15 (hist.)</td>
      </tr>
      <tr>
          <td style="text-align: right">25</td>
          <td>DeepSeek V4 Pro</td>
          <td style="text-align: right">69</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">22m (DNF)</td>
          <td style="text-align: right">~$0,05</td>
      </tr>
      <tr>
          <td style="text-align: right">25</td>
          <td>Kimi K2.5</td>
          <td style="text-align: right">69</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">29m</td>
          <td style="text-align: right">~$0,10 (hist.)</td>
      </tr>
      <tr>
          <td style="text-align: right">25</td>
          <td>Step 3.7 Flash</td>
          <td style="text-align: right">69</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">27m</td>
          <td style="text-align: right">~$0,80</td>
      </tr>
      <tr>
          <td style="text-align: right">28</td>
          <td>Xiaomi MiMo V2.5 Pro</td>
          <td style="text-align: right">67</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">11m</td>
          <td style="text-align: right">~$0,09</td>
      </tr>
      <tr>
          <td style="text-align: right">29</td>
          <td>GLM 5</td>
          <td style="text-align: right">64</td>
          <td style="text-align: center">B</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">17m</td>
          <td style="text-align: right">~$0,11 (hist.)</td>
      </tr>
      <tr>
          <td style="text-align: right">30</td>
          <td>Claude Sonnet 5</td>
          <td style="text-align: right">58</td>
          <td style="text-align: center">C</td>
          <td style="text-align: center">❌</td>
          <td style="text-align: right">27m</td>
          <td style="text-align: right">~$2,25</td>
      </tr>
      <tr>
          <td style="text-align: right">31</td>
          <td>Step 3.5 Flash</td>
          <td style="text-align: right">56</td>
          <td style="text-align: center">C</td>
          <td style="text-align: center">⚠️ bypass</td>
          <td style="text-align: right">38m</td>
          <td style="text-align: right">~$0,02 (hist.)</td>
      </tr>
      <tr>
          <td style="text-align: right">32</td>
          <td>Qwen 3.5 35B</td>
          <td style="text-align: right">55</td>
          <td style="text-align: center">C</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">28m</td>
          <td style="text-align: right">local</td>
      </tr>
      <tr>
          <td style="text-align: right">33</td>
          <td>GLM 4.7 Flash bf16</td>
          <td style="text-align: right">52</td>
          <td style="text-align: center">C</td>
          <td style="text-align: center">✅</td>
          <td style="text-align: right">falhou</td>
          <td style="text-align: right">local</td>
      </tr>
      <tr>
          <td style="text-align: right">34</td>
          <td>GLM 5.1 (Z.ai)</td>
          <td style="text-align: right">46</td>
          <td style="text-align: center">C</td>
          <td style="text-align: center">❌</td>
          <td style="text-align: right">22m</td>
          <td style="text-align: right">assinatura</td>
      </tr>
      <tr>
          <td style="text-align: right">35</td>
          <td>DeepSeek V3.2</td>
          <td style="text-align: right">43</td>
          <td style="text-align: center">C</td>
          <td style="text-align: center">❌</td>
          <td style="text-align: right">60m</td>
          <td style="text-align: right">~$0,07 (hist.)</td>
      </tr>
      <tr>
          <td style="text-align: right">36</td>
          <td>Qwen 3.5 397B A17B</td>
          <td style="text-align: right">42</td>
          <td style="text-align: center">C</td>
          <td style="text-align: center">❌</td>
          <td style="text-align: right">15m</td>
          <td style="text-align: right">~$0,31</td>
      </tr>
      <tr>
          <td style="text-align: right">37</td>
          <td>MiniMax M2.7</td>
          <td style="text-align: right">41</td>
          <td style="text-align: center">C</td>
          <td style="text-align: center">❌</td>
          <td style="text-align: right">14m</td>
          <td style="text-align: right">~$0,30 (hist.)</td>
      </tr>
      <tr>
          <td style="text-align: right">38</td>
          <td>Qwen 3.5 122B</td>
          <td style="text-align: right">37</td>
          <td style="text-align: center">D</td>
          <td style="text-align: center">❌</td>
          <td style="text-align: right">43m</td>
          <td style="text-align: right">local</td>
      </tr>
      <tr>
          <td style="text-align: right">39</td>
          <td>Qwen 3 Coder Next</td>
          <td style="text-align: right">32</td>
          <td style="text-align: center">D</td>
          <td style="text-align: center">❌</td>
          <td style="text-align: right">17m</td>
          <td style="text-align: right">local</td>
      </tr>
      <tr>
          <td style="text-align: right">40</td>
          <td>Grok 4.20</td>
          <td style="text-align: right">25</td>
          <td style="text-align: center">D</td>
          <td style="text-align: center">❌</td>
          <td style="text-align: right">8m</td>
          <td style="text-align: right">~$0,70</td>
      </tr>
      <tr>
          <td style="text-align: right">41</td>
          <td>GPT OSS 20B</td>
          <td style="text-align: right">11</td>
          <td style="text-align: center">D</td>
          <td style="text-align: center">❌</td>
          <td style="text-align: right">falhou</td>
          <td style="text-align: right">local</td>
      </tr>
  </tbody>
</table>
<p>* Opus 5 recebeu 95/100 equivalente no perfil Claude Code. A tabela principal do repositório o mantém separado pra deixar a diferença de harness explícita.</p>
<h2>O que o Opus 5 escreveu<span class="hx:absolute hx:-mt-20" id="o-que-o-opus-5-escreveu"></span>
    <a href="#o-que-o-opus-5-escreveu" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O score sozinho esconde a parte mais interessante. O projeto do Opus 5 foi o melhor exemplo de engenharia defensiva que apareceu até agora no benchmark.</p>
<p>Ele isolou todo acesso ao RubyLLM num único <code>Assistant::Client</code>, injetou a factory do chat pra testes e verificou a API real da gem antes de depender dela. Além dos mocks de <code>RubyLLM.chat</code>, <code>with_instructions</code>, <code>add_message</code> e <code>ask</code>, criou um teste de guarda que confirma que esses métodos continuam existindo na gem instalada. Se a biblioteca mudar a interface, o CI quebra antes da produção.</p>
<p>A conversa fica atrás de um <code>ConversationRepository</code> em <code>Rails.cache</code>, com TTL de 12 horas e limite de 40 mensagens no replay. Antes de mandar histórico ao provider, normaliza a alternância entre <code>user</code> e <code>assistant</code>, remove respostas que falharam e garante que a janela não começa com uma mensagem de assistant. Parece detalhe até a API rejeitar o payload no segundo turno.</p>
<p>Foi exatamente aí que o modelo encontrou e consertou dois bugs durante o próprio run. Uma resposta que falhou podia deixar duas mensagens de usuário seguidas. Cortar a janela do histórico também podia começar numa resposta do assistant. Ele escreveu os testes, corrigiu e validou multi-turn real, inclusive recuperação depois de uma falha.</p>
<p>Também entregou:</p>
<ul>
<li>streaming fora do request principal;</li>
<li>broadcasts Turbo Streams assinados e limitados a cerca de 10 atualizações por segundo;</li>
<li>preflight de credencial;</li>
<li>mensagens diferentes pra chave inválida, rate limit, falta de crédito, contexto estourado e provider indisponível;</li>
<li>Markdown escapado antes de formatar HTML;</li>
<li>Dockerfile multi-stage, produção, non-root;</li>
<li>RuboCop, Brakeman, bundler-audit, importmap audit e GitHub Actions.</li>
</ul>
<p>Não é 100. Existe uma race de lost update se outra mensagem entrar durante a geração, embora o próprio projeto limite o deploy a <code>WEB_CONCURRENCY=1</code>. Também deixou o modelo padrão em Sonnet 4.6 quando Sonnet 5 já existia, e comitou lixo de <code>log/</code> e <code>coverage/</code> dentro do artefato. Foram as deduções que seguraram em 95.</p>
<h2>Opus 5 contra Opus 4.8 e Fable 5<span class="hx:absolute hx:-mt-20" id="opus-5-contra-opus-48-e-fable-5"></span>
    <a href="#opus-5-contra-opus-48-e-fable-5" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Primeiro os números do nosso teste:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Testes</th>
          <th>Persistência</th>
          <th style="text-align: right">Tarifa API</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Opus 5</td>
          <td style="text-align: right">95</td>
          <td style="text-align: right">39m</td>
          <td style="text-align: right">121</td>
          <td>Rails.cache, TTL, replay limitado</td>
          <td style="text-align: right">$5 / $25</td>
      </tr>
      <tr>
          <td>Opus 4.8</td>
          <td style="text-align: right">95</td>
          <td style="text-align: right">17m</td>
          <td style="text-align: right">34</td>
          <td>session cookie sem cap</td>
          <td style="text-align: right">$5 / $25</td>
      </tr>
      <tr>
          <td>Fable 5</td>
          <td style="text-align: right">94</td>
          <td style="text-align: right">24m</td>
          <td style="text-align: right">36</td>
          <td>singleton local, capped</td>
          <td style="text-align: right">$10 / $50</td>
      </tr>
      <tr>
          <td>Fable 5 (re-release)</td>
          <td style="text-align: right">93</td>
          <td style="text-align: right">18m</td>
          <td style="text-align: right">41</td>
          <td>Rails.cache com TTL, sem hard cap</td>
          <td style="text-align: right">$10 / $50</td>
      </tr>
  </tbody>
</table>
<p>O <a href="/2026/06/01/llm-benchmarks-grok-4-3-minimax-m3-opus-4-8/">Opus 4.8 tinha feito 95</a> com uma solução menor e muito mais rápida. Usou a API correta, escreveu testes honestos e fez a melhor validação ao vivo daquela rodada: Rails local, chamada real ao OpenRouter, Docker, container de produção e Compose. Perdeu pontos por deixar o histórico sem limite no cookie e não fazer preflight da chave.</p>
<p>Opus 5 corrigiu os dois defeitos e foi bem além na arquitetura, no streaming e nos testes. Em compensação, criou outra race, deixou o pin desatualizado e gastou mais do dobro do tempo. Mesma nota, artefatos bem diferentes.</p>
<p>O <a href="/2026/06/11/llm-benchmark-fable-5-e-a-novela-da-anthropic/">Fable 5 original fez 94</a>. Foi o primeiro modelo que vi parar no meio do trabalho pra ler o source instalado do RubyLLM antes de escrever a integração. Tinha 99,3% de cobertura, cap de histórico, preflight e uma fase 2 sem nenhum conserto. A grande dedução foi guardar conversa num singleton em memória: reinicia o processo, perde tudo; sobe mais de um worker, cada um enxerga um mundo.</p>
<p>O re-release do Fable corrigiu isso com <code>Rails.cache</code>, mas deixou o cache sem hard cap, manteve Sonnet 4.6 e fez uma validação ao vivo mais fraca. Caiu um ponto. Mesma identificação de modelo, outro projeto, outro score.</p>
<p>Nos limites desse app Rails, Opus 5 parece mais completo que os dois Fable e pelo menos tão bom quanto Opus 4.8. Só não confunda isso com &ldquo;Opus 5 tem mais inteligência que Fable&rdquo;. A Anthropic diz que a vantagem do Fable cresce quanto mais longa e complexa fica a tarefa. Nosso projeto é pequeno, greenfield e fechado. Pode simplesmente não ter espaço pra mostrar a diferença.</p>
<h2>O preço: metade do Fable, mas cuidado com a conta<span class="hx:absolute hx:-mt-20" id="o-preço-metade-do-fable-mas-cuidado-com-a-conta"></span>
    <a href="#o-pre%c3%a7o-metade-do-fable-mas-cuidado-com-a-conta" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Na API, a vantagem é direta:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Input / milhão</th>
          <th style="text-align: right">Output / milhão</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Opus 5</td>
          <td style="text-align: right">$5</td>
          <td style="text-align: right">$25</td>
      </tr>
      <tr>
          <td>Opus 4.8</td>
          <td style="text-align: right">$5</td>
          <td style="text-align: right">$25</td>
      </tr>
      <tr>
          <td>Fable 5</td>
          <td style="text-align: right">$10</td>
          <td style="text-align: right">$50</td>
      </tr>
  </tbody>
</table>
<p>Se Opus 5 realmente entrega comportamento próximo de Fable no seu workload, pagar o dobro por Fable fica difícil de justificar. Fable precisa resolver algo que Opus não resolve, não apenas carregar o nome da tier acima.</p>
<p>Mas o custo observado nessa rodada conta outra história:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th>Harness</th>
          <th style="text-align: right">Custo da rodada</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Opus 5</td>
          <td>Claude Code / Max</td>
          <td style="text-align: right">assinatura (≈$16,02 em API)</td>
      </tr>
      <tr>
          <td>Opus 4.8</td>
          <td>OpenCode / OpenRouter</td>
          <td style="text-align: right">~$6,40</td>
      </tr>
      <tr>
          <td>Fable 5</td>
          <td>OpenCode / OpenRouter</td>
          <td style="text-align: right">~$11,20</td>
      </tr>
  </tbody>
</table>
<p>Como um modelo com tarifa pela metade do Fable acabou com equivalente maior? Porque preço por milhão não é custo por tarefa. O run do Opus 5 fez 201 turnos e acumulou 22,1 milhões de cache reads no Claude Code. O run do Fable usou outro harness e outro perfil de tokens. Comparar $16,02 com $11,20 como se fosse só diferença de modelo seria errado.</p>
<p>Pra mim, assinante Max, o custo marginal real foi zero enquanto eu estiver dentro da franquia. Pra automação que paga API por token, a tarifa do Opus 5 é metade da do Fable e igual à do 4.8. Aí eu começaria no Opus 5 e só subiria pra Fable com evidência de que a tarefa precisa dele.</p>
<h2>Contra GPT 5.6 Sol e Kimi K3<span class="hx:absolute hx:-mt-20" id="contra-gpt-56-sol-e-kimi-k3"></span>
    <a href="#contra-gpt-56-sol-e-kimi-k3" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O <a href="/2026/07/09/llm-benchmark-grok-4-5-gpt-5-6-sol/">GPT 5.6 Sol fez 92</a> em 17 minutos. Foi muito mais econômico em tokens e entregou uma aplicação defensiva: Docker non-root, 99,2% de cobertura, histórico limitado por mensagens, caracteres e bytes, e um teste específico pra não repetir o prompt atual no contexto.</p>
<p>Perdeu pontos porque não usou <code>with_instructions</code> e carregou o histórico num hidden field do browser. Funciona, mas perde a conversa no reload e deixa o cliente adulterar o contexto. O Opus 5 colocou essas responsabilidades no servidor, separou melhor domínio, persistência e provider, e testou muito mais. Neste projeto, a diferença de três pontos faz sentido. No uso diário, os dois continuam no mesmo cluster de modelos fortes.</p>
<p>O <a href="/2026/07/17/llm-benchmarks-kimi-k3/">Kimi K3 fez 89</a> em 26 minutos. Ele já tinha acertado o padrão que decide boa parte do topo: <code>Rails.cache</code>, TTL e cap de histórico. Custou só cerca de $2,10 equivalentes em API pela assinatura Moderato.</p>
<p>Ficou abaixo porque não tinha system prompt, colocou I/O do LLM dentro do model <code>Conversation</code>, não fez preflight de credencial e deixou o cache de produção no default efêmero do container. Opus 5 fecha quase todas essas lacunas. Kimi continua sendo uma alternativa Tier A bem mais barata; Opus 5 é o projeto que eu precisaria mexer menos antes de confiar.</p>
<h2>O Opus 5 também derrubou o antigo campeão<span class="hx:absolute hx:-mt-20" id="o-opus-5-também-derrubou-o-antigo-campeão"></span>
    <a href="#o-opus-5-tamb%c3%a9m-derrubou-o-antigo-campe%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Tem uma mudança importante na tabela que não veio do código novo. Até ontem, Opus 4.7 aparecia em primeiro com 97. O cross-audit cego entre ele e Opus 5 deu <strong>94 contra 70</strong> a favor do 5. Fui reler os artefatos antigos.</p>
<p>O Opus 4.7 tinha um bug de double-send: o controller salvava a mensagem do usuário antes de chamar o service, e o service reenviava todo o histórico, incluindo aquela mesma mensagem. Cada prompt chegava duas vezes ao LLM. As mensagens de erro também voltavam no contexto de pedidos futuros, e o cookie tinha limite de quantidade, mas não de bytes.</p>
<p>Os testes passavam porque controller e service eram testados em arranjos diferentes do fluxo de produção. O modelo não piorou desde abril. O projeto também não mudou. <strong>Minha auditoria é que estava incompleta.</strong> Recalculei a nota de 97 pra 87.</p>
<p>Isso é quase cômico porque o artigo da semana passada usava justamente &ldquo;por que Opus 4.7 fica acima de 4.8 e Fable?&rdquo; como exemplo. Agora não fica. E o argumento do artigo ficou ainda mais forte.</p>
<p>Benchmark não é escritura sagrada. A rubrica evolui, o auditor encontra um ponto cego, o harness muda, o mesmo modelo gera outro projeto. Se uma tabela não publica prompt, artefato, logs e correções, ela serve mais pra marketing que pra engenharia.</p>
<h2>Conclusão<span class="hx:absolute hx:-mt-20" id="conclusão"></span>
    <a href="#conclus%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Opus 5 é bom? <strong>Sim.</strong> Muito.</p>
<p>Fez 95/A, empatou com Opus 4.8 e GPT 5.4 no score, ficou um ponto acima do Fable original, três acima do GPT 5.6 Sol e seis acima do Kimi K3. Produziu o projeto mais cuidadoso desta rodada inteira: arquitetura limpa, RubyLLM verificado na gem real, histórico correto, streaming bem feito, erros separados e 121 testes.</p>
<p>Também levou 39 minutos, queimou 22 milhões de cache reads e rodou num harness diferente. A nota maior que Fable não prova que é melhor que Fable no geral. Prova que, neste app Rails, nesta execução pelo Claude Code e nesta auditoria, o artefato encaixou um pouco melhor na rubrica.</p>
<p>Minha leitura prática: Opus 5 merece entrar como primeira opção. A tarifa é a mesma do Opus 4.8 e metade da do Fable. Pra quem tem Claude Pro ou Max, vira a escolha óbvia antes de gastar créditos no Fable. Pra quem paga API, eu também começaria nele e exigiria dados antes de subir pra tier de $10/$50.</p>
<p>E a regra continua a mesma: leia 90+ como um grupo. Tier A está claramente acima de Tier C neste workload. Dentro do grupo bom, escolha por custo, assinatura, velocidade, harness e pelo tipo de defeito que você aceita revisar.</p>
<p>Não use meu benchmark pra decidir qual é &ldquo;o melhor LLM&rdquo;. Use pra escolher o que vale testar no seu problema. Se a decisão importa, rode a sua metodologia, mais de uma vez, e leia o código.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>llms</category><category>agentes-de-codigo</category></item><item><title>LLM Benchmark: Devo usar o que tem nota maior?</title><link>https://www.akitaonrails.com/2026/07/19/llm-benchmark-devo-usar-o-que-tem-nota-maior/</link><guid isPermaLink="true">https://www.akitaonrails.com/2026/07/19/llm-benchmark-devo-usar-o-que-tem-nota-maior/</guid><pubDate>Sun, 19 Jul 2026 12:00:00 -0300</pubDate><description>&lt;p&gt;Toda vez que publico uma rodada do meu benchmark, alguém abre a tabela, olha as primeiras linhas e pergunta:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Por que o Opus 4.7 está acima do Opus 4.8 e do Fable 5?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ou então:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Quer dizer que GPT 5.4 é melhor que GPT 5.5 e 5.6?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Não. Quer dizer que a tabela foi ordenada por uma coluna chamada &lt;code&gt;score&lt;/code&gt;. Só isso.&lt;/p&gt;
&lt;p&gt;Ranking precisa de uma ordem pra ser legível. O erro é transformar essa ordem de apresentação num campeonato mundial de inteligência. O primeiro colocado não ganhou de todos os outros em tudo. Ele gerou o artefato que recebeu a maior nota &lt;strong&gt;nesse teste, nessa rodada, nesse harness, com esse prompt e segundo essa rubrica&lt;/strong&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Toda vez que publico uma rodada do meu benchmark, alguém abre a tabela, olha as primeiras linhas e pergunta:</p>
<blockquote>
  <p>&ldquo;Por que o Opus 4.7 está acima do Opus 4.8 e do Fable 5?&rdquo;</p>

</blockquote>
<p>Ou então:</p>
<blockquote>
  <p>&ldquo;Quer dizer que GPT 5.4 é melhor que GPT 5.5 e 5.6?&rdquo;</p>

</blockquote>
<p>Não. Quer dizer que a tabela foi ordenada por uma coluna chamada <code>score</code>. Só isso.</p>
<p>Ranking precisa de uma ordem pra ser legível. O erro é transformar essa ordem de apresentação num campeonato mundial de inteligência. O primeiro colocado não ganhou de todos os outros em tudo. Ele gerou o artefato que recebeu a maior nota <strong>nesse teste, nessa rodada, nesse harness, com esse prompt e segundo essa rubrica</strong>.</p>
<p>Esse artigo é pra explicar como eu mesmo leio o <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">meu benchmark aberto</a>, por que considero tudo acima de 90 mais ou menos o mesmo cluster, e por que ninguém deveria terceirizar a escolha de modelo pra uma tabela. Nem pra minha.</p>
<h2>A nota é do projeto, não do modelo inteiro<span class="hx:absolute hx:-mt-20" id="a-nota-é-do-projeto-não-do-modelo-inteiro"></span>
    <a href="#a-nota-%c3%a9-do-projeto-n%c3%a3o-do-modelo-inteiro" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O benchmark nasceu no artigo <a href="/2026/04/05/testando-llms-open-source-e-comerciais-quem-consegue-bater-o-claude-opus/">Testando LLMs Open Source e Comerciais</a> e ganhou a metodologia atual na <a href="/2026/04/24/llm-benchmarks-parte-3-deepseek-kimi-mimo/">Parte 3, que virou a referência canônica</a>.</p>
<p>Todos recebem o mesmo trabalho: construir autonomamente um app pequeno de chat em Rails 8, usando RubyLLM, Hotwire, Tailwind, testes, ferramentas de CI, Dockerfile, Compose e documentação. Depois eu avalio o resultado em oito dimensões: completude, correção da API do RubyLLM, qualidade dos testes, tratamento de erros, persistência, Hotwire, arquitetura e prontidão pra produção.</p>
<p>Repara no sujeito da frase: eu avalio <strong>o resultado</strong>.</p>
<p>O modelo não entra numa máquina de ressonância magnética que descobre quanto de &ldquo;inteligência&rdquo; tem lá dentro. Ele recebe um prompt, usa ferramentas, escreve um projeto e para. A nota é uma avaliação daquele projeto. Pra classificar toda a capacidade de um LLM, teríamos que testar todos os problemas possíveis, em todas as linguagens, com qualquer prompt, contexto, ferramenta e combinação de requisitos. Boa sorte.</p>
<p>O que realmente aparece na tabela é algo mais parecido com isto:</p>
<div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code">

<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">resultado = modelo + prompt + harness + contexto + tools + snapshot + execução + auditoria</span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0">
  <button
    class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
    title="Copy code"
  >
    <div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"></div>
<div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"></div>
  </button>
</div>
</div>
<p>A gente ordena por score porque uma tabela sem ordem é ruim de consultar. A ordenação não transforma uma amostra em lei da natureza.</p>
<h2>LLM não faz a mesma prova duas vezes<span class="hx:absolute hx:-mt-20" id="llm-não-faz-a-mesma-prova-duas-vezes"></span>
    <a href="#llm-n%c3%a3o-faz-a-mesma-prova-duas-vezes" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>LLMs não são determinísticas. Mesmo prompt não garante os mesmos tokens, as mesmas decisões de arquitetura ou a mesma sequência de tool calls. Em coding agent, ainda entram outputs do terminal, tempo de resposta, contexto acumulado, compaction e o comportamento do harness. Se o provedor atualiza um alias entre uma segunda-feira e outra, mudou mais uma variável sem você tocar em nada.</p>
<p>Eu já tinha tropeçado nisso na <a href="/2026/04/18/llm-benchmarks-parte-2-multiplos-modelos/">Parte 2 do benchmark</a>. O ranking daquele artigo ficou obsoleto quando corrigi a auditoria do RubyLLM, mas o experimento de variância continua válido: o mesmo Opus 4.7, com o mesmo prompt, produziu resultados espalhados entre Tier 1 e Tier 3 em harnesses diferentes. Naquela época eu escrevi que benchmark de uma ou três rodadas não bastava pra afirmar qualidade absoluta. Continua não bastando.</p>
<p>Tem um exemplo mais recente e limpo. O Fable 5 foi rodado de novo depois do re-release usando o mesmo model ID no OpenRouter. A primeira execução fez <strong>94 pontos em 24 minutos</strong>. A segunda fez <strong>93 em 18 minutos</strong>. Projetos diferentes, defeitos diferentes, custo diferente. Um ponto de score é ruído até dentro do &ldquo;mesmo&rdquo; modelo.</p>
<p>O harness também pode mudar tudo. O DeepSeek V4 Pro ficou em 69 com DNF no OpenCode e chegou a 89 via DeepClaude. Kimi K2.7 fez 86 via OpenCode/OpenRouter e cerca de 68 numa rodada informal pelo Kimi Code CLI. Há ressalvas de snapshot e endpoint nos dois casos, justamente porque nunca conseguimos isolar perfeitamente só o modelo. Benchmark de agente mede o pacote inteiro.</p>
<h2>Acima de 90, leia como um grupo<span class="hx:absolute hx:-mt-20" id="acima-de-90-leia-como-um-grupo"></span>
    <a href="#acima-de-90-leia-como-um-grupo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O topo atual ficou assim. Os números vêm do <a href="https://github.com/akitaonrails/llm-coding-benchmark/blob/master/docs/success_report.md"target="_blank" rel="noopener">relatório completo do benchmark</a>:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Custo da rodada</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Claude Opus 4.7</td>
          <td style="text-align: right">97</td>
          <td style="text-align: right">18 min</td>
          <td style="text-align: right">~$7,00</td>
      </tr>
      <tr>
          <td>GPT 5.4 xHigh</td>
          <td style="text-align: right">95</td>
          <td style="text-align: right">22 min</td>
          <td style="text-align: right">~$16</td>
      </tr>
      <tr>
          <td>Claude Opus 4.8</td>
          <td style="text-align: right">95</td>
          <td style="text-align: right">17 min</td>
          <td style="text-align: right">~$6,40</td>
      </tr>
      <tr>
          <td>Claude Fable 5</td>
          <td style="text-align: right">94</td>
          <td style="text-align: right">24 min</td>
          <td style="text-align: right">~$11,20</td>
      </tr>
      <tr>
          <td>Claude Fable 5 (re-release)</td>
          <td style="text-align: right">93</td>
          <td style="text-align: right">18 min</td>
          <td style="text-align: right">~$8,30</td>
      </tr>
      <tr>
          <td>Gemini 3.5 Flash</td>
          <td style="text-align: right">93</td>
          <td style="text-align: right">18 min</td>
          <td style="text-align: right">~$3,55</td>
      </tr>
      <tr>
          <td>GPT 5.6 Sol xHigh</td>
          <td style="text-align: right">92</td>
          <td style="text-align: right">17 min</td>
          <td style="text-align: right">créditos (~$8,70 equivalente em API)</td>
      </tr>
  </tbody>
</table>
<p>Pra mim, tudo aí está no mesmo <strong>ballpark</strong>. Não existe amostragem suficiente pra dizer que 97 é 2,1% &ldquo;mais inteligente&rdquo; que 95, muito menos que será melhor numa migração de banco, num refactor de Rust ou numa investigação de race condition.</p>
<p>Há também efeito de teto. O app do benchmark é real e tem bastante detalhe chato, mas continua sendo um projeto Rails greenfield pequeno, com escopo fechado. Os melhores modelos já saturaram a tarefa. Daí a ordem do topo acaba sendo decidida por escolhas pontuais: um guard de API key, o lugar onde persistiu a conversa, um cap de cookie, um teste de erro que faltou, um Dockerfile de desenvolvimento em vez de produção.</p>
<p>Esses detalhes importam pro projeto. Só não provam uma hierarquia universal entre os modelos.</p>
<p>Já a distância entre <strong>Tier A e Tier C</strong> quer dizer bem mais. A rubrica define Tier A como algo que sobe como está ou exige um patch curto. Tier C tem core quebrado ou precisa de rework grande. Não sei dizer se um modelo de 97 é realmente melhor que um de 93 em qualquer tarefa futura. Sei dizer que um grupo que entrega RubyLLM correto, testes úteis e imagem de produção está em outra categoria do grupo que inventa API e testa o próprio mock errado.</p>
<p>Primeiro escolha o grupo. Depois discuta custo, velocidade, assinatura, harness e preferência de uso. Brigar pela posição exata dentro do cluster dos 90 é precisão inventada.</p>
<h2>Então por que Opus 4.7 fica acima do 4.8 e do Fable?<span class="hx:absolute hx:-mt-20" id="então-por-que-opus-47-fica-acima-do-48-e-do-fable"></span>
    <a href="#ent%c3%a3o-por-que-opus-47-fica-acima-do-48-e-do-fable" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Porque o projeto gerado pelo Opus 4.7 encaixou melhor na rubrica. A integração RubyLLM estava correta, os doubles de teste imitavam as assinaturas reais, a persistência em session cookie era multi-worker safe e os caminhos de erro estavam cobertos. Na auditoria atual, não sobrou defeito concreto grande pra descontar.</p>
<p>O Opus 4.8 também escreveu um projeto excelente, fez validação real de Rails, Docker, Compose e chamada ao OpenRouter, e terminou um minuto mais rápido. Perdeu dois pontos porque o histórico no cookie não tinha cap e podia bater no limite de 4 KB, além de não fazer preflight explícito da API key.</p>
<p>O Fable 5 corrigiu justamente essas duas coisas. Em compensação, escolheu persistência num singleton dentro do processo. A conversa some num restart e não funciona direito com múltiplos workers. Essa decisão custou o ponto que o deixou abaixo do 4.8. O próprio cross-audit cego observou que trocar o store por <code>Rails.cache</code> provavelmente inverteria a ordem.</p>
<p>Isso responde por que a <strong>nota do artefato</strong> ficou 97, 95 e 94. Pra analisar uma codebase de 500 mil linhas, a tabela não responde nada.</p>
<p>Os dados de eficiência contam outra história:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Tokens somados nos logs</th>
          <th style="text-align: right">Tarifa de input/output</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Opus 4.7</td>
          <td style="text-align: right">97</td>
          <td style="text-align: right">18m12s</td>
          <td style="text-align: right">9,78M</td>
          <td style="text-align: right">$5 / $25 por milhão</td>
      </tr>
      <tr>
          <td>Opus 4.8</td>
          <td style="text-align: right">95</td>
          <td style="text-align: right">16m48s</td>
          <td style="text-align: right">8,28M</td>
          <td style="text-align: right">$5 / $25 por milhão</td>
      </tr>
      <tr>
          <td>Fable 5</td>
          <td style="text-align: right">94</td>
          <td style="text-align: right">24m19s</td>
          <td style="text-align: right">6,03M</td>
          <td style="text-align: right">$10 / $50 por milhão</td>
      </tr>
  </tbody>
</table>
<p>Essa soma inclui input, output, cache write e cache read de todos os eventos <code>step_finish</code> nas duas fases. Com a mesma tarifa do 4.7, o 4.8 usou 15% menos tokens faturáveis e acabou mais rápido. A própria Anthropic descreveu o <a href="https://www.anthropic.com/research/claude-opus-4-8"target="_blank" rel="noopener">Opus 4.8 como uma melhoria modesta sobre o 4.7</a>, manteve o preço e destacou eficiência de tool calling. Meu run combina com essa história. Uma rodada ainda não prova a causa.</p>
<p>Fable custa o dobro por token e, nesse problema, não comprou um projeto melhor. Isso só diz que esse app pequeno não exigiu o tipo de capacidade extra que a Anthropic vende no Fable. Pode ser modelo demais pra prova.</p>
<p>Minha leitura pessoal é que o Opus chegou ao platô desse benchmark no 4.7. O 4.8 refinou eficiência e comportamento. Fable foi pra outra faixa de capacidade e preço, mas o teste não conseguiu extrair essa diferença. É uma hipótese a partir dos resultados, não conhecimento sobre o treinamento interno da Anthropic.</p>
<h2>E por que GPT 5.4 aparece acima do 5.5 e do 5.6?<span class="hx:absolute hx:-mt-20" id="e-por-que-gpt-54-aparece-acima-do-55-e-do-56"></span>
    <a href="#e-por-que-gpt-54-aparece-acima-do-55-e-do-56" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>De novo: decisões diferentes nos projetos gerados.</p>
<p>O GPT 5.4 fez preflight de API key, diferenciou erro de configuração de erro do provider, usou cache com TTL e cap de mensagens e separou form object do domínio. Perdeu pontos porque o Dockerfile era uma imagem de desenvolvimento rodando como root.</p>
<p>O GPT 5.5 acertou a integração e o multi-turn, mas repetiu o Dockerfile de desenvolvimento, não testou nenhum caminho de erro e deixou o cookie sem limite de bytes. Caiu pra 85 na reauditoria.</p>
<p>O GPT 5.6 Sol voltou a 92 com engenharia defensiva muito melhor, Docker multi-stage non-root e 99,2% de cobertura. Ficou sem system prompt e carregou o histórico num hidden field do cliente. A rubrica desconta isso porque a conversa se perde no reload e pode ser adulterada.</p>
<p>Agora olha eficiência:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Score</th>
          <th style="text-align: right">Tempo</th>
          <th style="text-align: right">Tokens totais</th>
          <th style="text-align: right">Custo da rodada</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GPT 5.4 xHigh</td>
          <td style="text-align: right">95</td>
          <td style="text-align: right">22 min</td>
          <td style="text-align: right">7,64M</td>
          <td style="text-align: right">~$16</td>
      </tr>
      <tr>
          <td>GPT 5.5 xHigh</td>
          <td style="text-align: right">85</td>
          <td style="text-align: right">18 min</td>
          <td style="text-align: right">4,90M</td>
          <td style="text-align: right">~$10</td>
      </tr>
      <tr>
          <td>GPT 5.6 Sol xHigh</td>
          <td style="text-align: right">92</td>
          <td style="text-align: right">17 min</td>
          <td style="text-align: right">3,92M</td>
          <td style="text-align: right">créditos (~$8,70 equivalente em API)</td>
      </tr>
  </tbody>
</table>
<p>Do 5.4 pro 5.6, o run ficou uns 23% mais rápido e consumiu quase metade dos tokens. O mais curioso é que <a href="https://developers.openai.com/api/docs/models/gpt-5.4"target="_blank" rel="noopener">GPT 5.4 custa $2,50/$15 por milhão</a>, enquanto <a href="https://developers.openai.com/api/docs/models/gpt-5.5"target="_blank" rel="noopener">GPT 5.5</a> e <a href="https://developers.openai.com/api/docs/models/gpt-5.6-sol"target="_blank" rel="noopener">GPT 5.6 Sol</a> custam $5/$30. Mesmo com tarifa unitária duas vezes maior, os runs posteriores custaram menos porque foram bem mais econômicos no uso de tokens. No caso do 5.6, o pagamento real veio de créditos da assinatura; $8,70 é só o equivalente calculado em tarifa de API.</p>
<p>Isso sustenta melhor minha sensação: o GPT 5.4 foi o salto que colocou a família no platô de qualidade deste teste. 5.5 e 5.6 parecem ter trabalhado bastante eficiência, gastando menos contexto e terminando mais rápido sem sair do mesmo ballpark geral de capacidade.</p>
<p>Mas eu não tenho como provar que a OpenAI treinou essas versões com esse objetivo. O dado mostra o comportamento dos três runs. Dizer que isso foi estratégia de produto já é chute meu.</p>
<h2>Até a auditoria tem bugs<span class="hx:absolute hx:-mt-20" id="até-a-auditoria-tem-bugs"></span>
    <a href="#at%c3%a9-a-auditoria-tem-bugs" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Tem mais uma variável incômoda: eu.</p>
<p>O GPT 5.5 originalmente recebeu 96. Depois o cross-audit contra o 5.6 encontrou problemas que tinham passado batido. Fui reler o código, confirmei os defeitos e a nota caiu pra 85. Na mesma revisão, o 5.4 caiu de 97 pra 95 por causa do Dockerfile de desenvolvimento.</p>
<p>O modelo não mudou. O projeto não mudou. <strong>A auditoria melhorou.</strong></p>
<p>Na primeira versão do benchmark, eu também marquei APIs válidas do RubyLLM como alucinação porque estava auditando de memória. Quando fui ler o source da gem, tive que refazer boa parte do ranking. Está tudo documentado nos posts antigos porque esconder erro seria pior que errar.</p>
<p>Mais um motivo pra não tratar score como constante física. Uma rubrica pega um monte de decisões qualitativas e espreme tudo num número. Pode ter ponto cego, peso ruim e interpretação errada. Um benchmark sério publica prompt, código gerado, logs, critérios e correções pra que outra pessoa consiga contestar.</p>
<p>Desconfie ainda mais quando alguém publica só o gráfico.</p>
<h2>Como usar um benchmark sem virar torcedor<span class="hx:absolute hx:-mt-20" id="como-usar-um-benchmark-sem-virar-torcedor"></span>
    <a href="#como-usar-um-benchmark-sem-virar-torcedor" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Eu uso ranking pra três coisas:</p>
<ol>
<li><strong>Descartar grupos claramente ruins.</strong> Tier C e D falham em coisas fundamentais neste workload. Não vou gastar uma semana apostando neles pra Agile Vibe Coding autônomo.</li>
<li><strong>Encontrar o cluster de candidatos.</strong> Acima de 90, considero todos fortes. Daí escolho por custo marginal da minha assinatura, velocidade, disponibilidade no harness e comportamento no trabalho diário.</li>
<li><strong>Ler os defeitos, não só a nota.</strong> Se meu sistema não usa cookie nem Docker, algumas deduções deste benchmark são irrelevantes. Se eu preciso de multi-turn e deploy, passam a ser decisivas.</li>
</ol>
<p>Se a decisão vale dinheiro ou risco de produção, rode o seu teste. Pegue o <a href="https://github.com/akitaonrails/llm-coding-benchmark"target="_blank" rel="noopener">repositório do benchmark</a>, troque o prompt por um trabalho parecido com o seu, execute os modelos mais de uma vez e faça revisão cega. Meça tempo, custo e quanto trabalho humano faltou depois. Um time que mantém um monolito Java de quinze anos precisa de um benchmark diferente de alguém fazendo protótipo Rails greenfield.</p>
<p>Não existe benchmark perfeito. SWE-bench, Terminal-Bench, meu app Rails, arena de preferência humana: cada um testa uma parte e ignora o resto. Servem pra localizar grupos e eliminar opções ruins. Nenhum consegue cuspir &ldquo;o melhor LLM&rdquo; em termos absolutos porque esse objeto nem existe sem especificar a tarefa.</p>
<h2>Conclusão<span class="hx:absolute hx:-mt-20" id="conclusão"></span>
    <a href="#conclus%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Claude Opus 4.7 estar em primeiro não quer dizer que eu escolheria 4.7 no lugar do 4.8 pra todo trabalho. GPT 5.4 estar acima do 5.6 não quer dizer que voltou no tempo. Quer dizer que, numa rodada deste app Rails e desta rubrica, aqueles projetos somaram mais pontos.</p>
<p>Minha recomendação continua simples: leia o topo como <strong>clusters</strong>, não como pódio. O grupo 90+ está no mesmo ballpark. Tier A é claramente mais confiável que Tier C neste tipo de coding. Dentro do grupo bom, escolha pelo seu harness, sua assinatura, seu limite de tempo e o defeito que você aceita corrigir.</p>
<p>E não confie em benchmark. Não confie em influencer. Não confie em mim.</p>
<p>Se você realmente precisa saber qual é o melhor modelo pro seu caso, defina suas restrições, escreva sua metodologia, rode todos e traga dados. Opinião dos outros serve pra escolher o que testar primeiro. A decisão técnica continua sendo sua.</p>
]]></content:encoded><category>benchmarks-de-llm</category><category>llms</category></item></channel></rss>