<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Llms | AkitaOnRails.com</title><link>https://akitaonrails.github.io/tags/llms/</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>Mon, 19 Oct 2026 23:20:48 +0000</lastBuildDate><atom:link href="https://akitaonrails.github.io/tags/llms/index.xml" rel="self" type="application/rss+xml"/><item><title>LLM Benchmark v4: os top LLMs open source numa B300</title><link>https://akitaonrails.github.io/2026/10/19/llm-benchmark-v4-os-top-llms-open-source-numa-b300/</link><guid isPermaLink="true">https://akitaonrails.github.io/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://akitaonrails.github.io/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://akitaonrails.github.io/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://akitaonrails.github.io/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>Treinei meu próprio modelo de IA (Spoiler: é só pra estudo)</title><link>https://akitaonrails.github.io/2026/10/14/treinei-meu-proprio-modelo-de-ia-spoiler-e-so-pra-estudo/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/10/14/treinei-meu-proprio-modelo-de-ia-spoiler-e-so-pra-estudo/</guid><pubDate>Wed, 14 Oct 2026 15:00:00 -0300</pubDate><description>&lt;p&gt;Faltava um exercício na minha lista deste ano: tentar construir o meu próprio LLM. Não um modelo de fronteira. Construir um GPT-5 ou um Claude exige anos de estudo e experimentação, times inteiros e centenas de milhões de dólares em computação. A estimativa do &lt;a href="https://hai.stanford.edu/ai-index/2024-ai-index-report"target="_blank" rel="noopener"&gt;AI Index de Stanford&lt;/a&gt; pro GPT-4 foi de US$ 78 milhões só de compute, e pro Gemini Ultra, US$ 191 milhões.&lt;/p&gt;
&lt;p&gt;Só que ninguém precisa de um modelo classe GPT pra tudo. Modelo de fronteira é generalista por definição: tenta saber tudo sobre qualquer coisa, de direito tributário a letra de música, e o retorno disso é decrescente.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Faltava um exercício na minha lista deste ano: tentar construir o meu próprio LLM. Não um modelo de fronteira. Construir um GPT-5 ou um Claude exige anos de estudo e experimentação, times inteiros e centenas de milhões de dólares em computação. A estimativa do <a href="https://hai.stanford.edu/ai-index/2024-ai-index-report"target="_blank" rel="noopener">AI Index de Stanford</a> pro GPT-4 foi de US$ 78 milhões só de compute, e pro Gemini Ultra, US$ 191 milhões.</p>
<p>Só que ninguém precisa de um modelo classe GPT pra tudo. Modelo de fronteira é generalista por definição: tenta saber tudo sobre qualquer coisa, de direito tributário a letra de música, e o retorno disso é decrescente.</p>
<p>E a maioria deles hoje é mistura de especialistas, <em>mixture of experts</em>: grosso modo, vários modelos menores agrupados num bloco gigante de bits, com um roteador que acorda só alguns pra cada token. O <a href="https://arxiv.org/abs/2508.10925"target="_blank" rel="noopener">gpt-oss-120b</a> da OpenAI tem 117 bilhões de parâmetros no total e usa 5,1 bilhões por token. O <a href="https://arxiv.org/abs/2412.19437"target="_blank" rel="noopener">DeepSeek-V3</a> tem 671 bilhões e ativa 37. O modelo grande já é, por dentro, uma coleção de modelos pequenos.</p>
<p>Eu podia ter pego um modelo aberto, gpt-oss, Qwen, Phi, e adaptado. As técnicas existem e são bem documentadas:</p>
<ul>
<li><strong>Fine-tuning completo</strong>: continuar treinando todos os pesos de um modelo pronto nos seus dados. É a transferência de aprendizado clássica, formalizada pro texto pelo <a href="https://arxiv.org/abs/1801.06146"target="_blank" rel="noopener">ULMFiT</a> em 2018.</li>
<li><strong>LoRA e QLoRA</strong>: congelar os pesos originais e treinar só matrizes pequenas de baixo posto ao lado deles. O <a href="https://arxiv.org/abs/2106.09685"target="_blank" rel="noopener">LoRA</a> reduz em até dez mil vezes os parâmetros treináveis; o <a href="https://arxiv.org/abs/2305.14314"target="_blank" rel="noopener">QLoRA</a> quantiza o modelo base em 4 bits e ajusta um modelo de 65 bilhões numa única GPU de 48 GB.</li>
<li><strong>Destilação</strong>: treinar um modelo menor pra imitar as saídas de um maior. A ideia é de <a href="https://arxiv.org/abs/1503.02531"target="_blank" rel="noopener">Hinton, 2015</a>, e o exemplo recente mais famoso é o <a href="https://arxiv.org/abs/2501.12948"target="_blank" rel="noopener">DeepSeek-R1</a> destilado em versões de 1,5 a 70 bilhões em cima de Qwen e Llama.</li>
<li><strong>Pré-treino continuado</strong>: mais uma fase de treino em texto do seu domínio antes de qualquer ajuste de instrução, o <a href="https://arxiv.org/abs/2004.10964"target="_blank" rel="noopener">&ldquo;Don&rsquo;t Stop Pretraining&rdquo;</a> de 2020.</li>
<li><strong>SFT, RLHF e DPO</strong>: ensinar o formato de assistente com demonstrações, depois alinhar com preferência humana via aprendizado por reforço (<a href="https://arxiv.org/abs/2203.02155"target="_blank" rel="noopener">InstructGPT</a>) ou com uma perda de classificação direta (<a href="https://arxiv.org/abs/2305.18290"target="_blank" rel="noopener">DPO</a>).</li>
</ul>
<p>Com qualquer uma dessas eu teria um modelo útil em horas. Só que o objetivo era outro. Eu queria organizar, com as mãos, as técnicas básicas pra construir um modelo menor que o GPT-2, do zero, em poucos dias, e ver até onde dava pra chegar. Se desse, treinar um modelo minúsculo partindo de pesos aleatórios e adicionar funcionalidade suficiente pra ele quase funcionar dentro de um harness agêntico como o OpenCode.</p>
<p>Antes de continuar, quem eu sou nessa história: eu sou engenheiro de software curioso e amador no assunto. Pesquisador de LLM eu sou zero. Eu sabia que não ia ter um LLM funcional em tão pouco tempo, e isso faz parte do exercício.</p>
<p>Mas não é inalcançável. Se você é estudante de computação, estuda sério e dá anos pra isso, você consegue tentar por conta própria. E se você não é cientista, entenda isto: ninguém precisa ser Einstein pra fazer isso. Os fundamentos estão todos disponíveis, publicados, pra você estudar e tentar. O que é obrigatório é suor.</p>
<p>Spoiler: a gente chegou longe no &ldquo;quase&rdquo; e parou lá. O <a href="https://github.com/akitaonrails/microgpt"target="_blank" rel="noopener">repositório é público</a>, com cada etapa e cada fracasso documentado. Este texto é o resumo.</p>
<blockquote>
  <p><strong>TL;DR:</strong> parti do microgpt do Karpathy, 200 linhas de Python puro que treinam um GPT em um minuto num MacBook, e expandi pra um laboratório em PyTorch com tokenizer próprio, pré-treino, ajuste supervisionado, servidor compatível com a API da OpenAI e integração com o OpenCode. Em menos de duas semanas, numa RTX 5090, treinei um modelo de 337 milhões de parâmetros em 10 bilhões de tokens: 137 horas de treino, no máximo uns R$ 80 de luz. Ele acerta 58 de 100 funções Python simples de um conjunto reservado, e zera em tudo que exige ler, editar e testar um repositório. O <a href="https://huggingface.co/HuggingFaceTB/SmolLM2-360M"target="_blank" rel="noopener">SmolLM2 de 360 milhões</a>, do mesmo tamanho, viu 4 trilhões de tokens, 400 vezes mais. Pule pro <a href="#o-exerc%c3%adcio-do-karpathy">exercício do Karpathy</a>, pras <a href="#as-etapas-de-construir-um-llm">etapas</a>, pras <a href="#as-dimens%c3%b5es-do-problema">dimensões</a>, pros <a href="#os-trope%c3%a7os">tropeços</a>, pro <a href="#o-que-saiu-do-outro-lado">resultado</a> ou pra <a href="#o-futuro-%c3%a9-menor-e-mais-especializado">conclusão</a>.</p>

</blockquote>
<h2>O exercício do Karpathy<span class="hx:absolute hx:-mt-20" id="o-exercício-do-karpathy"></span>
    <a href="#o-exerc%c3%adcio-do-karpathy" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Em fevereiro deste ano o Andrej Karpathy publicou o <a href="https://karpathy.github.io/2026/02/12/microgpt/"target="_blank" rel="noopener">microgpt</a>: um único arquivo de 200 linhas de Python, sem dependência nenhuma, que treina e roda um GPT. Ele chama de &ldquo;o conteúdo algorítmico completo do que é necessário. Todo o resto é só eficiência&rdquo;. É a culminação de uma linhagem dele: o micrograd (autograd escalar), o makemore (gerar nomes) e o nanoGPT (GPT-2 em PyTorch compacto), à qual se soma o <a href="https://github.com/karpathy/nanochat"target="_blank" rel="noopener">nanochat</a>, &ldquo;o melhor ChatGPT que 100 dólares compram&rdquo;, que no lançamento treinava um modelo de capacidade GPT-2 em quase quatro horas num nó de oito H100, e hoje faz isso em umas duas.</p>
<p>O microgpt é propositalmente mínimo: o dataset são 32 mil nomes próprios, um por linha, e o tokenizer é um caractere por token.</p>
<p>A rede tem uma camada, 16 dimensões de embedding, 4 cabeças de atenção, janela de 16 tokens porque o nome mais longo tem 15 letras. Treina por mil passos, um nome por passo, com Adam escrito à mão, e no fim gera nomes inventados, tudo em um minuto num MacBook.</p>
<p>O que ele ensina, por estar tudo exposto num arquivo só:</p>
<ul>
<li>o autograd, a classe <code>Value</code> que guarda um número, o gradiente e a regra da cadeia pra propagar de volta;</li>
<li>o que é um token e um embedding;</li>
<li>o bloco de atenção, com consulta, chave e valor, e a máscara causal que impede o modelo de espiar o futuro;</li>
<li>a perda de entropia cruzada contra o próximo token;</li>
<li>o otimizador;</li>
<li>a amostragem com temperatura.</li>
</ul>
<p>É um GPT-2 com diferenças pequenas que o próprio arquivo anota: RMSNorm no lugar de LayerNorm, sem bias, ReLU em vez de GeLU. Depois de ler aquilo, o que sobra entre você e um modelo de verdade é, nas palavras dele, eficiência. Eu fui ver quanto de eficiência.</p>
<h2>O que a gente expandiu<span class="hx:absolute hx:-mt-20" id="o-que-a-gente-expandiu"></span>
    <a href="#o-que-a-gente-expandiu" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O <a href="https://github.com/akitaonrails/microgpt"target="_blank" rel="noopener">microgpt lab</a> é uma reimplementação independente em PyTorch, inspirada no gist, dividida por conceito: umas 3.300 linhas de Python em 31 módulos, mais scripts e 85 testes de CPU. Uma única implementação de modelo serve pra pré-treino, ajuste de assistente e servidor. Todo peso começa aleatório; o projeto não baixa peso pré-treinado nenhum, de propósito, porque a regra do exercício era do zero.</p>
<p>Em cima do bloco do Karpathy entraram os componentes que um modelo de 2026 usa: RoPE pra posição, RMSNorm, SwiGLU na camada densa, embeddings amarrados à saída, Flash Attention via PyTorch, cache de chaves e valores com reuso de prefixo. E em volta do modelo, o que falta pra ele conversar com um agente: um protocolo de conversa com papéis, um servidor HTTP compatível com a API de chat da OpenAI, chamadas de ferramenta validadas por esquema e opcionalmente por gramática, separação de conteúdo de raciocínio, e a configuração do OpenCode apontando pra ele.</p>
<p>O projeto passou por quatro escalas:</p>
<table>
  <thead>
      <tr>
          <th>Modelo</th>
          <th style="text-align: right">Parâmetros</th>
          <th>Tokenizer</th>
          <th>Pra quê</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Lição em bytes</td>
          <td style="text-align: right">0,9 milhão</td>
          <td>byte a byte</td>
          <td>roda em CPU, ensina o loop inteiro</td>
      </tr>
      <tr>
          <td>Estudante</td>
          <td style="text-align: right">91 milhões</td>
          <td>o200k (200 mil entradas)</td>
          <td>primeiro agente, aritmética</td>
      </tr>
      <tr>
          <td>Candidato de capacidade</td>
          <td style="text-align: right">239 milhões</td>
          <td>o200k</td>
          <td>mais camadas, mesmo vocabulário</td>
      </tr>
      <tr>
          <td>Pivô de fundação</td>
          <td style="text-align: right">337 milhões</td>
          <td>BPE próprio, 32 mil entradas</td>
          <td>o modelo final</td>
      </tr>
  </tbody>
</table>
<p>A tabela esconde a primeira lição grande, que eu conto nos tropeços: no modelo de 239 milhões, 154 milhões de parâmetros eram só a tabela de vocabulário. Sobravam 85 milhões pro transformer de verdade.</p>
<h2>As etapas de construir um LLM<span class="hx:absolute hx:-mt-20" id="as-etapas-de-construir-um-llm"></span>
    <a href="#as-etapas-de-construir-um-llm" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Independente do tamanho, o caminho tem as mesmas estações. O que muda é o zero à direita em cada uma.</p>
<h3>1. Dados<span class="hx:absolute hx:-mt-20" id="1-dados"></span>
    <a href="#1-dados" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Modelo é o que ele come. Baixamos, com revisão fixada e hash, seleções de corpora públicos: <a href="https://huggingface.co/datasets/codeparrot/codeparrot-clean"target="_blank" rel="noopener">CodeParrot</a> (Python deduplicado e filtrado), <a href="https://huggingface.co/datasets/OpenCoder-LLM/opc-sft-stage1"target="_blank" rel="noopener">OpenCoder</a> (instrução e código), <a href="https://huggingface.co/datasets/HuggingFaceTB/smollm-corpus"target="_blank" rel="noopener">Cosmopedia</a> (texto educativo sintético), <a href="https://huggingface.co/datasets/HuggingFaceTB/smoltalk"target="_blank" rel="noopener">SmolTalk</a> (conversa) e uma fatia multilíngue. Os 14 manifestos de download somam uns 20 GB brutos, tudo guardado no NAS.</p>
<p>Daí vem a curadoria: deduplicação exata, divisão de treino e validação por repositório ou grupo de conversa (nunca por linha, senão o mesmo projeto vaza pros dois lados), e a mistura. O corpus final de fundação tem 3,5 bilhões de tokens armazenados, 60% código Python, 16% instrução, 12% texto educativo, 8% conversa, 4% multilíngue. Cada proporção é uma decisão de projeto, e nenhuma delas tem resposta certa publicada.</p>
<h3>2. Tokenizer<span class="hx:absolute hx:-mt-20" id="2-tokenizer"></span>
    <a href="#2-tokenizer" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O tokenizer é o dicionário entre texto e inteiros. A lição em bytes usa 256 tokens mais um de fim de documento. O estudante usou o o200k, o vocabulário público da OpenAI com 200 mil entradas, que é o que a maioria dos tutoriais faz. O pivô treinou um BPE próprio de 32.768 entradas, em cima de 92 MB de texto só de treino, com cobertura de UTF-8 completa.</p>
<p>A escolha parece detalhe e decide onde os parâmetros vão parar. Cada entrada do vocabulário custa uma linha na tabela de embedding com a largura do modelo. Com 200 mil entradas e largura 768, são 154 milhões de parâmetros gastos em tabela. Com 32 mil entradas e largura 1.024, são 33 milhões, e o resto vai pras camadas que pensam.</p>
<h3>3. Pré-treino, ou fundação<span class="hx:absolute hx:-mt-20" id="3-pré-treino-ou-fundação"></span>
    <a href="#3-pr%c3%a9-treino-ou-funda%c3%a7%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Aqui é o loop do Karpathy em escala. O modelo recebe janelas de 2.048 tokens tiradas do fluxo de treino e aprende a prever o próximo token. Cada atualização processa 32.768 tokens: duas sequências, acumuladas oito vezes. AdamW, taxa de aprendizado com aquecimento e decaimento em cosseno, recorte de gradiente, BF16 na GPU e FP32 nos pesos.</p>
<p>O pivô rodou uns 305 mil atualizações, 10 bilhões de tokens de exposição. Como o corpus tem 3,5 bilhões, cada documento foi visto, na expectativa da mistura, quase três vezes: o código umas duas, e instrução, texto educativo e conversa umas nove ou dez. A cada 500 atualizações, uma validação e um checkpoint. Nos marcos de 2, 5 e 10 bilhões, um checkpoint congelado com hash, pra medir a curva.</p>
<h3>4. Ajuste supervisionado<span class="hx:absolute hx:-mt-20" id="4-ajuste-supervisionado"></span>
    <a href="#4-ajuste-supervisionado" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Pré-treino produz um modelo que completa texto. Pra ele responder a um pedido, vem o SFT, <em>supervised fine-tuning</em>: exemplos de pergunta e resposta no formato exato que o servidor usa, com a perda calculada só sobre os tokens do assistente. O que o usuário e a ferramenta disseram entra como contexto e é mascarado da perda.</p>
<p>Os exemplos vieram do <a href="https://huggingface.co/datasets/nvidia/OpenCodeInstruct"target="_blank" rel="noopener">OpenCodeInstruct</a> da NVIDIA, e cada resposta foi executada num Docker restrito antes de entrar: quase 99 mil candidatos, 97 mil sobreviveram ao teste com três sementes de hash diferentes. Sobraram 92 mil episódios de treino. O checkpoint escolhido viu 64 mil sorteios desses episódios, uns 10 milhões de tokens de resposta.</p>
<h3>5. Protocolo, ferramentas e servidor<span class="hx:absolute hx:-mt-20" id="5-protocolo-ferramentas-e-servidor"></span>
    <a href="#5-protocolo-ferramentas-e-servidor" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Um agente como o OpenCode fala com o modelo por HTTP: manda o histórico com papéis, as definições de ferramenta, recebe de volta texto ou uma chamada de ferramenta em JSON, executa, devolve o resultado, e repete. O laboratório implementa esse ciclo inteiro: o mesmo arquivo de protocolo serializa os exemplos de treino e os prompts de serviço, pra formato de treino e formato de uso nunca divergirem.</p>
<p>O servidor implementa <code>/v1/models</code> e <code>/v1/chat/completions</code>, valida a chamada de ferramenta contra o esquema, pode restringir a geração com gramática pra JSON sair bem formado, separa o conteúdo de raciocínio da resposta, conta tokens em cache e recusa estouro de contexto em vez de truncar em silêncio. Isso tudo é encanamento, zero inteligência, e sem ele o modelo nem senta à mesa.</p>
<h3>6. Avaliação<span class="hx:absolute hx:-mt-20" id="6-avaliação"></span>
    <a href="#6-avalia%c3%a7%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A etapa que mais mudou o projeto. Um conjunto congelado de 100 tarefas Python de desenvolvimento, 20 famílias com cinco variantes de nome e enunciado, mais 100 tarefas reservadas que só o checkpoint final viu. Cada resposta roda num Docker sem rede, sem root, com limite de CPU e memória, contra asserções fixas. Além disso: quatro tarefas reais de conserto de repositório via OpenCode, 12 problemas de rastrear a saída exata de um programa, sondas de recuperação de informação em prompts de 8, 16 e 32 mil tokens, e quatro conversas curtas.</p>
<blockquote>
  <p>Nada de HumanEval, MBPP ou SWE-bench. São diagnósticos locais pequenos, com famílias correlacionadas, uma semente, geração gulosa. Servem pra decidir entre checkpoints, e o próprio relatório de fechamento manda não ler &ldquo;58 de 100&rdquo; como &ldquo;58% de sucesso em programação&rdquo;.</p>

</blockquote>
<h2>As dimensões do problema<span class="hx:absolute hx:-mt-20" id="as-dimensões-do-problema"></span>
    <a href="#as-dimens%c3%b5es-do-problema" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O que tudo isso custou, e como isso se compara com o mundo real:</p>
<table>
  <thead>
      <tr>
          <th>Dimensão</th>
          <th style="text-align: right">Nosso modelo final</th>
          <th>Referências</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Parâmetros</td>
          <td style="text-align: right">337 milhões</td>
          <td>GPT-2 pequeno: 124 milhões; GPT-2 completo (2019): 1,5 bilhão</td>
      </tr>
      <tr>
          <td>Tokens vistos no pré-treino</td>
          <td style="text-align: right">10 bilhões</td>
          <td>SmolLM2-360M: 4 trilhões; Llama 3.1: 15 trilhões; Qwen3: 36 trilhões</td>
      </tr>
      <tr>
          <td>Dados brutos baixados</td>
          <td style="text-align: right">20 GB</td>
          <td>GPT-2: 40 GB de WebText, 8 milhões de páginas</td>
      </tr>
      <tr>
          <td>Corpus de fundação</td>
          <td style="text-align: right">3,5 bilhões de tokens, 2,35 milhões de documentos</td>
          <td></td>
      </tr>
      <tr>
          <td>Hardware</td>
          <td style="text-align: right">1 RTX 5090, 32 GB</td>
          <td>Llama 3.1 405B: 30,84 milhões de horas de H100</td>
      </tr>
      <tr>
          <td>Tempo de GPU na fundação</td>
          <td style="text-align: right">137 horas de processo, 6,4 dias de calendário</td>
          <td>DeepSeek-V3: 2,79 milhões de horas de H800, ~US$ 5,6 milhões</td>
      </tr>
      <tr>
          <td>Tempo de SFT</td>
          <td style="text-align: right">3,4 horas somando os nove estágios</td>
          <td></td>
      </tr>
      <tr>
          <td>Vazão</td>
          <td style="text-align: right">23 a 44 mil tokens/s, dependendo de I/O</td>
          <td></td>
      </tr>
      <tr>
          <td>VRAM de pico</td>
          <td style="text-align: right">13,9 GB na fundação; 6,8 GB no SFT</td>
          <td></td>
      </tr>
      <tr>
          <td>Checkpoints</td>
          <td style="text-align: right">17 checkpoints distintos (20 caminhos), 69 GB</td>
          <td></td>
      </tr>
      <tr>
          <td>Custo em dinheiro</td>
          <td style="text-align: right">zero em nuvem; uns R$ 80 de luz no pior caso</td>
          <td>nanochat: US$ 100 em 8 H100 por 4 horas no lançamento; hoje uns US$ 48 em 2 horas</td>
      </tr>
  </tbody>
</table>
<p>A conta da luz: a RTX 5090 tem <a href="https://www.nvidia.com/en-us/geforce/graphics-cards/50-series/rtx-5090/"target="_blank" rel="noopener">575 W de potência nominal</a>. Em 137 horas a plena carga são uns 79 kWh, e a tarifa residencial da Enel em São Paulo em 2026, somando TUSD, TE e impostos, fica em torno de R$ 1 por kWh. Como o treino rodou boa parte do tempo a 75% de ciclo pra não travar o desktop, o real foi menos. É o custo marginal de quem já tem a placa.</p>
<p>Alugar uma 5090 na <a href="https://www.runpod.io/pricing"target="_blank" rel="noopener">Runpod</a> sai a uns US$ 1,20 por hora, então as mesmas 137 horas custariam uns US$ 165; uma H100 sai entre US$ 2,90 e 4 por hora, dependendo da variante.</p>
<p>E a comparação que dá a escala. O SmolLM2 de 360 milhões de parâmetros, praticamente o tamanho do nosso, foi treinado em 4 trilhões de tokens. Na nossa vazão, 4 trilhões levariam entre quatro e seis anos de GPU ininterrupta. Mesmo tamanho de modelo, 400 vezes a quantidade de estudo.</p>
<p>É por isso que &ldquo;parâmetros&rdquo; é uma unidade enganosa: diz o tamanho do cérebro, e nada sobre quantos anos de escola ele teve.</p>
<p>A regra de bolso derivada de <a href="https://arxiv.org/abs/2203.15556"target="_blank" rel="noopener">Chinchilla</a> (70 bilhões de parâmetros, 1,4 trilhão de tokens), uns 20 tokens por parâmetro pra ser computacionalmente ótimo, daria 6,7 bilhões de tokens pro nosso modelo. Passamos disso. Só que o ótimo de Chinchilla é o ponto de melhor uso de compute, e modelos pequenos modernos passam muito dele de propósito, porque o custo de inferência depois compensa treinar mais.</p>
<h2>Os tropeços<span class="hx:absolute hx:-mt-20" id="os-tropeços"></span>
    <a href="#os-trope%c3%a7os" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A lista completa está no <a href="https://github.com/akitaonrails/microgpt/blob/main/docs/report/experiment-closeout.md"target="_blank" rel="noopener">relatório de fechamento</a>. Os que mais ensinaram:</p>
<p><strong>Medir perto demais do treino.</strong> O primeiro agente, o de 91 milhões, completou quatro sessões de 16 rodadas no OpenCode e uma de 32 rodadas com 130 chamadas de ferramenta reais, recuperando de erro de verificação e trocando de sessão no meio, com o estado guardado pelo harness. Parecia pronto.</p>
<p>Aí eu pedi, na mão e em inglês, uma função hello world que recebe um nome como parâmetro e imprime na mensagem. O modelo repetiu duas vezes a edição aritmética anterior, apontou pra um arquivo que não existia, e na terceira tentativa cuspiu JSON inválido. Tudo que ele sabia era a família de tarefa do treino.</p>
<p><strong>O vocabulário comeu o modelo.</strong> O candidato de 239 milhões tinha mais camadas e perda menor que o de 91 e resolvia 24 de 100 problemas. Ao olhar a distribuição dos parâmetros, 154 milhões eram tabela de vocabulário. O pivô pra 32 mil entradas devolveu 300 milhões de parâmetros pro transformer. O pivô mudou vocabulário, distribuição de capacidade, inicialização e exposição de uma vez, então o relatório não isola qual delas moveu o resultado.</p>
<p><strong>Perda não é competência.</strong> No SFT final, continuar de 4 mil pra 8 mil atualizações baixou a perda de validação e derrubou o acerto executado de 68 pra 62. Loss mais baixa, código pior. A seleção de checkpoint passou a ser por tarefa executada, congelada antes; o número da perda ficou de fora.</p>
<p><strong>Dados e avaliadores mentem.</strong> Respostas &ldquo;corretas&rdquo; do dataset público falhavam ao serem executadas de novo. Testes que dependiam da ordem de hash do Python, builtins sombreados, <code>SystemExit(0)</code> contando como sucesso, edições vazias copiando o arquivo. Cada um precisou de um controle: três sementes de hash, sentinela de conclusão, fixture vazia que precisa falhar. E num dos treinos mistos, o modelo aprendeu a dizer que os testes passaram quando não tinham passado.</p>
<p><strong>Formato de treino e formato de uso precisam bater.</strong> Anúncio de troca de sessão, ID de chamada de ferramenta, âncora de edição, o jeito como o OpenCode cita a entrada do usuário: cada diferença entre o que o modelo viu no treino e o que recebeu no servidor derrubava o agente antigo. O mesmo arquivo de protocolo pros dois lados foi a solução, e ainda assim mudar formato às vezes melhorava o nome da função sem melhorar o código.</p>
<p><strong>Tokenização cruza fronteiras de correção.</strong> A string literal <code>&lt;|endoftext|&gt;</code> dentro de código fonte precisa continuar sendo texto comum em vez de virar o marcador de fim de documento. Reconstruir documentos UTF-8 sem partir um caractere no meio. O suporte do XGrammar a vocabulário em nível de byte. A primeira avaliação de código do marco de 2 bilhões falhou na construção da gramática, e foi corrigida e rerodada em vez de contar como falha do modelo.</p>
<p><strong>O NAS quase me custou dias.</strong> Na retomada da fase de 10 bilhões, o treinador carregou o passo 81.500 em vez do 152.588 congelado: o <code>last.pt</code> mutável tinha timestamp anterior à pausa, logo depois de uma manutenção no NAS, e a causa nunca foi provada. Descartamos 1,24 hora de treino, verificamos o hash do marco de 5 bilhões, e toda retomada seguinte passou a exigir hash, passo exato, estado do otimizador e do RNG, dataset e uma sonda de escrita com fsync. Nunca retome um treino só porque o arquivo se chama <code>last.pt</code>.</p>
<p><strong>GPU de desktop é GPU compartilhada.</strong> VRAM livre não impediu o navegador de travar. A solução foi um ciclo de trabalho cooperativo: o treinador sincroniza a GPU e dorme entre lotes, 75% do tempo durante o dia e 100% das 3 às 9 da manhã. E a leitura do corpus pelo NAS, via mmap, deixava a GPU ociosa esperando disco. Depois de uma manutenção a vazão caiu pra 5 mil tokens por segundo antes de voltar aos 23 mil.</p>
<p><strong>Parei numa fronteira do pipeline.</strong> O controlador do pivô implementava fundação, SFT de código e holdout. Terminou limpo, e &ldquo;terminou limpo&rdquo; cobria até a função Python isolada, enquanto o objetivo era o agente. O checkpoint final foi testado no OpenCode só no fechamento, e falhou. Devia ter sido testado antes de qualquer frase com &ldquo;pronto&rdquo;.</p>
<h2>O que saiu do outro lado<span class="hx:absolute hx:-mt-20" id="o-que-saiu-do-outro-lado"></span>
    <a href="#o-que-saiu-do-outro-lado" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A ficha do modelo final:</p>
<table>
  <thead>
      <tr>
          <th>Propriedade</th>
          <th>Valor</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Parâmetros</td>
          <td>337.167.360, sendo 303,6 milhões no transformer e 33,6 milhões na tabela de vocabulário</td>
      </tr>
      <tr>
          <td>Arquitetura</td>
          <td>24 camadas, largura 1.024, 16 cabeças, SwiGLU com 2.752 de largura oculta, RMSNorm, RoPE</td>
      </tr>
      <tr>
          <td>Vocabulário</td>
          <td>BPE próprio de 32.768 entradas, cobertura UTF-8</td>
      </tr>
      <tr>
          <td>Contexto</td>
          <td>32.768 tokens alocados; treinado em janelas de 2.048</td>
      </tr>
      <tr>
          <td>Fundação</td>
          <td>10 bilhões de tokens, 305.176 atualizações, perda de validação final 1,085</td>
      </tr>
      <tr>
          <td>SFT escolhido</td>
          <td>4.000 atualizações, 10,3 milhões de tokens de resposta</td>
      </tr>
      <tr>
          <td>Checkpoint</td>
          <td>4 GB com estado do otimizador; 1,35 GB só de pesos em FP32</td>
      </tr>
  </tbody>
</table>
<p>A curva de aprendizado, medida nos três marcos, com o mesmo SFT curto aplicado em cima de cada um:</p>
<table>
  <thead>
      <tr>
          <th style="text-align: right">Tokens de fundação</th>
          <th style="text-align: right">Completar código cru /100</th>
          <th style="text-align: right">Após SFT de 500 /100</th>
          <th style="text-align: right">Após SFT de 1.000 /100</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: right">2 bilhões</td>
          <td style="text-align: right">0</td>
          <td style="text-align: right">24</td>
          <td style="text-align: right">39</td>
      </tr>
      <tr>
          <td style="text-align: right">5 bilhões</td>
          <td style="text-align: right">0</td>
          <td style="text-align: right">49</td>
          <td style="text-align: right">52</td>
      </tr>
      <tr>
          <td style="text-align: right">10 bilhões</td>
          <td style="text-align: right">8</td>
          <td style="text-align: right">56</td>
          <td style="text-align: right">65</td>
      </tr>
  </tbody>
</table>
<p>O SFT mais longo em cima dos 10 bilhões chegou a <strong>68 de 100</strong> no conjunto de desenvolvimento e <strong>58 de 100</strong> no reservado. Todas as 100 saídas do reservado são Python válido, e 97 têm o nome de função e os parâmetros pedidos. Nove famílias passaram nas cinco variantes: mediana, fatorial, máximo divisor comum, conversão pra binário, inverter dicionário, contar linhas, ano bissexto, segundos pra horas, chaves de JSON. Total acumulado ficou em quatro de cinco.</p>
<p>O que ele faz, portanto: escreve uma função Python pequena, com docstring, sintaxe correta e o nome certo, pra um pedido claro de uma linha. Dentro de um editor, como autocompletar de função isolada, serve pra estudo.</p>
<p>O que ele erra, com exemplos salvos: deduplicar usando <code>set</code> quando o enunciado exigia suportar listas não hasheáveis; agrupar por tamanho contando palavras em vez de agrupar; fazer aritmética em cada elemento numa função de preencher; devolver <code>(texto, '')</code> numa função de dividir uma vez, ignorando o separador; tirar o último caractere em vez do diretório numa função de basename. Dos 42 erros do reservado, 39 têm sintaxe válida e nome certo e falham na semântica. A parte difícil nunca foi parecer código.</p>
<p>E o que ele zera:</p>
<ul>
<li><strong>0 de 4</strong> consertos reais de repositório no OpenCode, com zero chamadas de ferramenta. Pedido pra ler, editar e testar um arquivo, ele devolveu texto com código. Numa das tarefas, renomeou a função pra <code>fix_mean</code>.</li>
<li><strong>0 de 12</strong> em rastrear a saída exata de programas curtos, com e sem modo de raciocínio. Muitas respostas foram código que supostamente calcularia o inteiro pedido.</li>
<li><strong>0 de 9</strong> em achar um número de seis dígitos escondido em prompts de 8, 16 e 32 mil tokens. A alocação de 32 mil tokens funciona; a memória útil, nenhuma.</li>
<li>Conversa: perguntado em português sobre a cor do céu, respondeu repetitivo e errado; pedido em inglês de café da manhã virou uma docstring em Python repetindo &ldquo;oats&rdquo; até o limite de tokens. Numa troca curta lembrou que o gato se chamava Pipoca, e mesmo assim respondeu com frase inteira apesar do pedido de &ldquo;só o nome&rdquo;.</li>
</ul>
<p>O SFT final só tinha respostas de código, sem conversa, sem trajetória de ferramenta, sem recuperação de erro. A tendência de responder qualquer coisa com Python é coerente com isso, e o relatório toma o cuidado de dizer que a causa não foi isolada.</p>
<h2>O que faltaria pra um agente simples no OpenCode<span class="hx:absolute hx:-mt-20" id="o-que-faltaria-pra-um-agente-simples-no-opencode"></span>
    <a href="#o-que-faltaria-pra-um-agente-simples-no-opencode" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O relatório fecha com estimativas de engenharia, sem promessa de taxa de acerto. Pra chegar num agente que resolve tarefa simples de programação dentro do OpenCode, nesta ordem:</p>
<ol>
<li><strong>Ensinar uso de ferramenta no modelo forte.</strong> Entre 10 e 30 mil trajetórias curtas e verificadas de repositório (ler, editar, checar), misturadas com 30 a 50% de código pra ele não desaprender. Um a três dias de engenharia e de duas a seis horas iniciais de treino.</li>
<li><strong>Corrigir os próprios erros.</strong> Coletar centenas a alguns milhares de falhas do modelo em tarefas de treino, reconstruir o estado do arquivo, verificar as correções e treinar mascarando a ação errada. Mais um a três dias de coleta e de duas a oito horas de treino.</li>
<li><strong>Devolver a conversa.</strong> Uma mistura equilibrada de conversa, ferramenta e código contra o checkpoint congelado, pra ele parar de responder tudo com Python e conseguir trocar de tarefa. Uma a quatro horas de treino.</li>
<li><strong>Contexto longo de verdade.</strong> Só depois das tarefas curtas passarem: 4 mil, 8 mil, e só então 16 e 32 mil, com trajetórias reais de compactação e troca de sessão. Um a dois dias de engenharia e de 6 a 24 horas de treino, medindo memória a cada janela.</li>
<li><strong>Mais fundação, com dados melhores.</strong> Cada 10 bilhões de tokens a mais custam entre 93 e 139 horas nesta GPU, antes de preparação e avaliação. E repetir a mesma mistura de 3,5 bilhões não vale a pena: precisa de mais código educativo único.</li>
</ol>
<p>Nenhum desses passos foi executado. Não há evidência de que um número fixo de horas a mais produza um agente confiável, e o relatório é explícito nisso. O que o exercício estabeleceu foi a distância: entre gerar uma função plausível e agir de forma confiável num repositório existe um abismo que parâmetro e contexto alocado sozinhos não cruzam.</p>
<blockquote>
  <p>O mais forte que saiu daqui foi a curva medida de 0 pra 65 em dez bilhões de tokens, e três contraexemplos concretos: sintaxe não é semântica, suporte a protocolo não é habilidade com ferramenta, e capacidade de contexto não é memória.</p>

</blockquote>
<h2>O futuro é menor e mais especializado<span class="hx:absolute hx:-mt-20" id="o-futuro-é-menor-e-mais-especializado"></span>
    <a href="#o-futuro-%c3%a9-menor-e-mais-especializado" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Depois de onze dias olhando pra dentro de um modelo, a minha leitura do mercado ficou mais firme. Modelo de fronteira generalista vai continuar existindo e vai continuar sendo caro, e o retorno de cada bilhão a mais de parâmetros é cada vez menor. Eu já escrevi que <a href="/2026/10/12/llms-agentes-competente-o-suficiente/">os modelos crus convergiram</a> e que o ganho recente veio do harness. O exercício me deu a outra metade do argumento.</p>
<p>A mistura de especialistas é a indústria admitindo isso por dentro. Se o gpt-oss de 117 bilhões acorda 5 bilhões por token, o que você está usando numa pergunta de contabilidade é um modelo de 5 bilhões escolhido por um roteador. A pergunta que fica é por que carregar os outros 112 bilhões, de arte, cinema, meme e física de partículas, num servidor de escritório contábil.</p>
<p>Imagine um modelo local, feito pra contadores. Ele conhece o plano de contas, a legislação tributária do país, os formatos de arquivo da Receita, o jargão. Ele dispensa parâmetros sobre tudo que um contador não precisa, e pode rodar no PC do escritório, com os dados do cliente dentro da sala.</p>
<p>Os exemplos já existem em outras áreas: o <a href="https://research.google/blog/medgemma-our-most-capable-open-models-for-health-ai-development/"target="_blank" rel="noopener">MedGemma</a> de 4 bilhões pra saúde, o <a href="https://arxiv.org/abs/2403.03883"target="_blank" rel="noopener">SaulLM</a> de 7 bilhões pra direito, o <a href="https://arxiv.org/abs/2503.16252"target="_blank" rel="noopener">Fin-R1</a> de 7 bilhões pra raciocínio financeiro. Em 2023 o <a href="https://arxiv.org/abs/2303.17564"target="_blank" rel="noopener">BloombergGPT</a> precisou de 50 bilhões de parâmetros e 1,3 milhão de horas de A100 pra fazer finanças; hoje um ajuste em cima de um modelo aberto de 7 bilhões faz o mesmo papel por uma fração.</p>
<p>O que mudou pra isso virar viável foi o agente. Um modelo especializado de 2023 precisava saber tudo de cor, porque a única coisa que ele fazia era completar texto. Um modelo de 2026 precisa de uma base: raciocínio suficiente, capacidade de sustentar uma tarefa longa, chamada de ferramenta confiável, cache de prompt. O resto, a legislação que mudou ontem, o documento do cliente, a tabela que ele nunca viu, ele busca com ferramenta e internet na hora, e preenche as lacunas do treino em tempo de uso.</p>
<p>A <a href="https://arxiv.org/abs/2506.02153"target="_blank" rel="noopener">NVIDIA publicou em 2025</a> exatamente essa posição: modelos pequenos são suficientes, mais adequados e mais baratos pra maioria das chamadas de um agente, com o modelo grande chamado só quando a conversa aberta exige. A Apple já <a href="https://machinelearning.apple.com/research/apple-foundation-models-2025-updates"target="_blank" rel="noopener">roda um modelo de 3 bilhões no aparelho</a> com protocolo de ferramentas e adaptadores por tarefa.</p>
<p>É o mesmo raciocínio dos <a href="/2026/10/10/qual-modelo-de-decisao-classificador-de-ia-tipo-jev-e-melhor/">modelos de decisão que eu testei</a> semana passada: um classificador de 4 bilhões treinado pra uma tarefa bate um modelo de chat genérico do mesmo tamanho nela, numa fração do tempo de resposta. Em vez de tentar caber o mundo inteiro num modelo maior, cabe o domínio num modelo menor e deixa o harness buscar o mundo quando precisar.</p>
<p>E o que o meu modelo de 337 milhões me ensinou é o tamanho do &ldquo;suficiente&rdquo; nessa frase. Ele sabe a sintaxe e sabe o nome das coisas. O que falta, semântica, ferramenta, memória, é exatamente o que separa um gerador de texto de um agente, e isso ninguém treina em duas semanas numa placa de vídeo. Treina em meses, em cluster, com trilhões de tokens, e depois especializa.</p>
<p>O código está no <a href="https://github.com/akitaonrails/microgpt"target="_blank" rel="noopener">repositório</a>, com o relatório de fechamento inteiro, pra quem quiser pegar de onde eu parei. É só pra estudo. E foi o melhor estudo do ano.</p>
]]></content:encoded><category>inteligencia-artificial</category><category>llms</category><category>machine-learning</category><category>modelos-locais</category></item><item><title>LLMs + Agentes = competente o suficiente</title><link>https://akitaonrails.github.io/2026/10/12/llms-agentes-competente-o-suficiente/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/10/12/llms-agentes-competente-o-suficiente/</guid><pubDate>Mon, 12 Oct 2026 12:00:00 -0300</pubDate><description>&lt;p&gt;Este texto é uma síntese. Ele amarra numa narrativa só o que eu venho escrevendo e medindo ao longo de 2026, então vale o mapa do caminho antes do argumento:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://akitaonrails.github.io/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/"&gt;Novos benchmarks v4&lt;/a&gt;&lt;/strong&gt;: retestei os principais modelos e a conclusão incômoda foi convergência, não salto.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://akitaonrails.github.io/2026/09/28/llms-sao-boas-em-reproduzir-o-que-existe-e-coisas-novas/"&gt;Os limites das LLMs&lt;/a&gt;&lt;/strong&gt;: modelos são ótimos reproduzindo o que existe, caríssimos no que não existe, e o modelo servido é um arquivo estático que não aprende nada com a sua maratona.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://akitaonrails.github.io/2026/10/11/existem-linguagens-melhores-pra-programar-com-llms/"&gt;Existem linguagens melhores pra programar com LLMs?&lt;/a&gt;&lt;/strong&gt;: não. Nem concisão de script nem tipagem forte mudaram o resultado; disciplina de teste mudou.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://akitaonrails.github.io/2026/10/10/qual-modelo-de-decisao-classificador-de-ia-tipo-jev-e-melhor/"&gt;Qual modelo de decisão tipo Jev é melhor?&lt;/a&gt;&lt;/strong&gt;: 21 configurações de classificadores, e os próprios &amp;ldquo;modelos especializados&amp;rdquo; convergiram pra dentro de alguns pontos uns dos outros.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://akitaonrails.github.io/2026/04/20/clean-code-para-agentes-de-ia/"&gt;Clean Code pra agentes de IA&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="https://akitaonrails.github.io/2026/04/11/vs-code-e-o-novo-cartao-perfurado/"&gt;VS Code é o novo cartão perfurado&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="https://akitaonrails.github.io/2026/09/17/falando-um-pouco-sobre-minhas-skills-de-ia/"&gt;minhas skills&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="https://akitaonrails.github.io/2026/08/18/hot-take-harness-loop-engineering-graph-engineering-sao-bullshit/"&gt;o hot take contra loop engineering&lt;/a&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;a href="https://akitaonrails.github.io/2026/05/30/boas-praticas-projetos-codigo-aberto-llm-o-minimo/"&gt;boas práticas mínimas&lt;/a&gt;&lt;/strong&gt;: a mesma tese por outros ângulos. O modelo é commodity; a engenharia em volta é o diferencial.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A tese que fecha esse arco: &lt;strong&gt;os LLMs chegaram, ou estão pertíssimo de chegar, no teto da arquitetura transformer.&lt;/strong&gt; E a boa notícia é que não precisa mais que isso.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Este texto é uma síntese. Ele amarra numa narrativa só o que eu venho escrevendo e medindo ao longo de 2026, então vale o mapa do caminho antes do argumento:</p>
<ul>
<li><strong><a href="/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/">Novos benchmarks v4</a></strong>: retestei os principais modelos e a conclusão incômoda foi convergência, não salto.</li>
<li><strong><a href="/2026/09/28/llms-sao-boas-em-reproduzir-o-que-existe-e-coisas-novas/">Os limites das LLMs</a></strong>: modelos são ótimos reproduzindo o que existe, caríssimos no que não existe, e o modelo servido é um arquivo estático que não aprende nada com a sua maratona.</li>
<li><strong><a href="/2026/10/11/existem-linguagens-melhores-pra-programar-com-llms/">Existem linguagens melhores pra programar com LLMs?</a></strong>: não. Nem concisão de script nem tipagem forte mudaram o resultado; disciplina de teste mudou.</li>
<li><strong><a href="/2026/10/10/qual-modelo-de-decisao-classificador-de-ia-tipo-jev-e-melhor/">Qual modelo de decisão tipo Jev é melhor?</a></strong>: 21 configurações de classificadores, e os próprios &ldquo;modelos especializados&rdquo; convergiram pra dentro de alguns pontos uns dos outros.</li>
<li><strong><a href="/2026/04/20/clean-code-para-agentes-de-ia/">Clean Code pra agentes de IA</a></strong>, <strong><a href="/2026/04/11/vs-code-e-o-novo-cartao-perfurado/">VS Code é o novo cartão perfurado</a></strong>, <strong><a href="/2026/09/17/falando-um-pouco-sobre-minhas-skills-de-ia/">minhas skills</a></strong>, <strong><a href="/2026/08/18/hot-take-harness-loop-engineering-graph-engineering-sao-bullshit/">o hot take contra loop engineering</a></strong> e <strong><a href="/2026/05/30/boas-praticas-projetos-codigo-aberto-llm-o-minimo/">boas práticas mínimas</a></strong>: a mesma tese por outros ângulos. O modelo é commodity; a engenharia em volta é o diferencial.</li>
</ul>
<p>A tese que fecha esse arco: <strong>os LLMs chegaram, ou estão pertíssimo de chegar, no teto da arquitetura transformer.</strong> E a boa notícia é que não precisa mais que isso.</p>
<h2>Convergência, não salto<span class="hx:absolute hx:-mt-20" id="convergência-não-salto"></span>
    <a href="#converg%c3%aancia-n%c3%a3o-salto" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Nos meus benchmarks, não vejo melhora relevante de programação geral desde a geração do Opus 4.5. Sim, Fable e Astra são ótimos em problemas específicos. Em programação geral, o que eu meço é todo mundo espremido no mesmo patamar, incluindo as ofertas comerciais chinesas (Kimi, GLM, DeepSeek). A escolha de modelo virou quase indiferente.</p>
<p>O que ainda faz diferença de verdade é o nível de esforço: effort baixo pra tradução e sumarização, effort alto pra varredura de vulnerabilidade, correção de bug pesado ou otimização. Fora isso, os números contam uma realidade bem mais chata que <a href="/2026/09/09/propagandas-enganosas-da-openai-anthropic-nvidia/">a propaganda dos provedores</a>.</p>
<blockquote>
  <p>Minha leitura da linha do tempo: o raciocínio &ldquo;core&rdquo; dos modelos teve o último salto grande em 2024. 2025 foi o ano de otimizar a arquitetura. 2026 é o ano de refinar o harness. A inteligência de base não deu nenhum salto de ordem de magnitude nesse período; a eficiência e a competência em sessão longa deram.</p>

</blockquote>
<h2>A linha do tempo, com recibos<span class="hx:absolute hx:-mt-20" id="a-linha-do-tempo-com-recibos"></span>
    <a href="#a-linha-do-tempo-com-recibos" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><img src="llms-agentes-timeline.png" alt="Linha do tempo de 2019 a 2026: GPT-2 prova que LLMs são úteis, GPT-3 abre a guerra dos parâmetros, Chinchilla recalibra pra dados, GPT-4 torna os parâmetros segredo, o1 marca o pico do raciocínio, 2025 otimiza com MoE e cache, e 2026 é a era dos agentes"  loading="lazy" /></p>
<p><strong>2019: GPT-2 prova que LLM é útil.</strong> 1,5 bilhão de parâmetros, resumindo, traduzindo e respondendo sem treino específico, zero-shot. A OpenAI achou tão impressionante que <a href="https://openai.com/index/better-language-models/"target="_blank" rel="noopener">segurou o modelo completo por meses</a> com medo de mau uso. Hoje parece fofo.</p>
<p><strong>2020: GPT-3 abre a guerra dos parâmetros.</strong> <a href="https://arxiv.org/abs/2005.14165"target="_blank" rel="noopener">175 bilhões</a>, cem vezes o GPT-2, e o few-shot in-context learning que virou o paradigma. A <a href="https://arxiv.org/abs/2001.08361"target="_blank" rel="noopener">lei de escala do Kaplan</a>, publicada meses antes, dizia que perda caía em lei de potência com tamanho, e a indústria leu como &ldquo;quanto maior, melhor&rdquo;. Lá se foram dois anos de quem-tem-mais-parâmetro.</p>
<p><strong>2022: Chinchilla recalibra a guerra.</strong> O DeepMind treinou <a href="https://arxiv.org/abs/2203.15556"target="_blank" rel="noopener">400 modelos e mostrou</a> que os gigantes estavam sub-treinados: um modelo de 70B com 1,4 trilhão de tokens batia o Gopher de 280B. O eixo &ldquo;dados de treino&rdquo; passou a pesar tanto quanto o eixo &ldquo;parâmetros&rdquo;. Primeira rachadura na guerra.</p>
<p><strong>2023: GPT-4 encerra a guerra por decreto.</strong> O <a href="https://arxiv.org/abs/2303.08774"target="_blank" rel="noopener">relatório técnico</a> recusou publicar tamanho, hardware ou dados, citando o cenário competitivo e as implicações de segurança. O vazamento mais citado, da <a href="https://newsletter.semianalysis.com/p/gpt-4-architecture-infrastructure"target="_blank" rel="noopener">SemiAnalysis</a>, descreveu 1,76 trilhão de parâmetros em mistura de especialistas. Desde então, contagem de parâmetros sumiu do marketing: nem os anúncios do GPT-5 nem os do Claude 4 citam número. Repara que nem Astra nem Fable, hoje, gastam uma linha com isso. A guerra acabou e ninguém assinou armistício.</p>
<p><strong>2024: o pico do raciocínio.</strong> O <a href="https://openai.com/index/learning-to-reason-with-llms/"target="_blank" rel="noopener">o1, de setembro</a>, marcou esse pico: RL pra produzir cadeias longas de pensamento, e a descoberta de que mais compute em tempo de teste melhora a resposta. Essa é, na minha régua, a última revolução de &ldquo;inteligência de base&rdquo;.</p>
<p><strong>2025: otimização de arquitetura.</strong> A mistura de especialistas virou padrão: o <a href="https://mistral.ai/news/mixtral-of-experts/"target="_blank" rel="noopener">Mixtral</a> já mostrava em 2023 que 46,7B de parâmetros totais com só 12,9B ativos por token custavam como um modelo pequeno, e o <a href="https://arxiv.org/abs/2412.19437"target="_blank" rel="noopener">DeepSeek-V3</a> levou isso a 671B totais com 37B ativos, com o treino final saindo por menos de 6 milhões de dólares em GPU-hours a preço de aluguel de H800 (sem contar o R&amp;D anterior). A mágica do MoE é simples: separa capacidade (parâmetros totais, que moram em memória) de custo por token (só os especialistas escolhidos pelo roteador computam). Você paga um modelo de 37B e carrega um de 671B.</p>
<p>Do lado do serviço, o <a href="https://www.anthropic.com/news/prompt-caching"target="_blank" rel="noopener">prompt caching</a> cortou até 90% do custo de contexto repetido (a OpenAI <a href="https://openai.com/index/api-prompt-caching/"target="_blank" rel="noopener">seguiu dois meses depois</a>), as janelas de contexto passaram de 1 milhão de tokens, e técnicas de serving como speculative decoding e PagedAttention multiplicaram a vazão. E o <a href="https://arxiv.org/abs/2501.12948"target="_blank" rel="noopener">DeepSeek-R1-Zero</a> mostrou que RL puro, sem fine-tuning supervisionado, faz raciocínio emergir. Nada disso é &ldquo;mais inteligência&rdquo;. Tudo isso é a mesma inteligência mais barata, mais rápida e mais estável.</p>
<p><strong>2026: a era agêntica.</strong> Function calling existe desde <a href="https://openai.com/index/function-calling-and-other-api-updates/"target="_blank" rel="noopener">junho de 2023</a>, mas o ponto de virada de ecossistema foi o <a href="https://www.anthropic.com/news/model-context-protocol"target="_blank" rel="noopener">MCP da Anthropic</a> no fim de 2024, que a OpenAI adotou meses depois e que hoje mora na Linux Foundation. Claude Code, Codex e cia. saíram em 2025, e a métrica que importa virou a da <a href="https://metr.org/blog/2025-03-19-measuring-ai-ability-to-complete-long-tasks/"target="_blank" rel="noopener">METR</a>: o tamanho de tarefa que um agente completa com 50% de confiabilidade vinha dobrando a cada 7 meses desde 2019. O guia da própria Anthropic sobre <a href="https://www.anthropic.com/engineering/building-effective-agents"target="_blank" rel="noopener">construir agentes eficazes</a> diz o óbvio bem dito: padrões simples e compostáveis, não frameworks mirabolantes.</p>
<h2>Por que o agente permite um modelo menos denso<span class="hx:absolute hx:-mt-20" id="por-que-o-agente-permite-um-modelo-menos-denso"></span>
    <a href="#por-que-o-agente-permite-um-modelo-menos-denso" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui está o mecanismo que a maioria das pessoas não para pra pensar. Um modelo sozinho precisa carregar o mundo nos pesos, porque a única chance dele responder é aquela, em uma passada. Um modelo com harness não precisa:</p>
<ul>
<li><strong>Busca e leitura sob demanda.</strong> Com web search e fetch, o conhecimento de baixa prioridade sai dos pesos e vira consulta: o agente puxa pra janela de contexto só quando precisa. O modelo pode ser menos enciclopédico e mais operador.</li>
<li><strong>Tentativa e erro controlada.</strong> Sozinho, o modelo precisa adivinhar a resposta certa de primeira. Com agente, ele propõe uma hipótese, implementa, manda testar, recebe o feedback e decide de novo com informação real. Cada ciclo desses é conhecimento novo entrando na sessão sem custar um neurônio de treino.</li>
</ul>
<p>Os dois mecanismos combatem alucinação de raiz: fetch traz o fato que o modelo não sabe de cor, e o loop de teste pega a invenção antes de ela virar código. É por isso que 2026 <strong>parece</strong> um salto gigante: a combinação modelo+harness ficou muito mais competente, mesmo com a inteligência de base quase parada.</p>
<h2>Nem todo problema precisa de um LLM gigante<span class="hx:absolute hx:-mt-20" id="nem-todo-problema-precisa-de-um-llm-gigante"></span>
    <a href="#nem-todo-problema-precisa-de-um-llm-gigante" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A mesma lógica do &ldquo;menos denso&rdquo; vale dentro da aplicação. Boa parte do que as pessoas jogam num LLM de chat é classificação disfarçada: rotular ticket, rotear fila, aplicar política. Pra isso existe modelo de decisão especializado, e eu cobri o tema duas vezes: o <a href="/2026/10/03/entendendo-o-hype-do-jev-pra-que-serve/">hype do Jev</a>, com o ensaio do Paulo Câmara sobre por que um classificador é a primeira coisa que um cientista da computação pensa, e o <a href="/2026/10/10/qual-modelo-de-decisao-classificador-de-ia-tipo-jev-e-melhor/">meu benchmark com 21 configurações</a>, onde um 9B da Microsoft empatou com o líder hospedado e um 4B local ficou a poucos pontos, a centavos por dez mil decisões.</p>
<p>O choque de &ldquo;193x mais rápido&rdquo; do marketing do Jev só existe porque muita gente usava um LLM gigante como classificador caro e lento. Quando a ferramenta certa entra, o modelo de fronteira some da jogada, e junto com ele o custo, a latência e a alucinação de formato. É a tese deste texto em miniatura: competência não vem de densidade, vem de encaixe.</p>
<h2>O loop que ninguém vê<span class="hx:absolute hx:-mt-20" id="o-loop-que-ninguém-vê"></span>
    <a href="#o-loop-que-ningu%c3%a9m-v%c3%aa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Tem um detalhe de experiência de usuário nessa história. Numa sessão agêntica boa, o que acontece é semitransparente pra quem pediu a tarefa: o modelo chuta errado, o agente busca a documentação online ou roda o teste de verdade, o erro volta como feedback, e o modelo corrige sozinho. Você vê &ldquo;tarefa pedida, tarefa entregue&rdquo;. No meio rolaram dezenas de micro-correções que ninguém testemunhou.</p>
<p>Minha aposta: como os agentes são treinados pra encher o contexto quando precisam, nem versões novas de linguagem ou biblioteca confundem mais tanto. O modelo não precisa saber a API de cor; ele consulta, testa e se ajusta no loop. É o que eu vejo nos meus experimentos, da <a href="/2026/09/07/desafio-pra-ia-converter-roms-de-nes-pra-master-system-sms/">conversão de ROMs de NES pra Master System</a> aos <a href="/2026/07/12/usando-ia-pra-resolver-meus-probleminhas-do-dia-a-dia/">probleminhas do dia a dia</a>. E foi o que o <a href="/2026/10/11/existem-linguagens-melhores-pra-programar-com-llms/">benchmark de linguagens</a> mediu: sete linguagens saíam praticamente equivalentes, porque o loop equaliza o que o treino deixa desigual.</p>
<p>A ressalva eu também medi. Quando não existe documentação pra buscar nem teste pra validar, o loop gira no vazio: foi o que aconteceu com o <a href="/2026/09/19/nova-linguagem-voltada-pra-ia-bend-2/">Bend 2</a>, linguagem nova demais pra ter corpus, e foi o ponto central do texto sobre <a href="/2026/09/28/llms-sao-boas-em-reproduzir-o-que-existe-e-coisas-novas/">os limites</a>. O mecanismo é potente, mas precisa de oráculo.</p>
<p>E tem recibo de que a base está parada. Em novembro de 2024 a <a href="https://www.reuters.com/technology/artificial-intelligence/openai-rivals-seek-new-path-smarter-ai-current-methods-hit-limitations-2024-11-11/"target="_blank" rel="noopener">Reuters</a> já reportava retornos decrescentes no pré-treino nos três grandes laboratórios. No NeurIPS seguinte, o Sutskever, o cara da tese de escala, declarou que <a href="https://www.youtube.com/watch?v=WQQdd6qGxNs"target="_blank" rel="noopener">&ldquo;pré-treino como conhecemos vai acabar&rdquo;</a>: os dados públicos acabaram. E o <a href="https://hai.stanford.edu/ai-index/2025-ai-index-report"target="_blank" rel="noopener">AI Index de Stanford</a> mediu o abismo entre o primeiro e o décimo modelo no Chatbot Arena encolhendo de 12% pra 5% em um ano. Isso é convergência, com número.</p>
<h2>A propaganda na direção contrária<span class="hx:absolute hx:-mt-20" id="a-propaganda-na-direção-contrária"></span>
    <a href="#a-propaganda-na-dire%c3%a7%c3%a3o-contr%c3%a1ria" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Enquanto os números mostram platô, o marketing vende o apocalipse. Eu já dissequei uma semana inteira disso em <a href="/2026/09/09/propagandas-enganosas-da-openai-anthropic-nvidia/">&ldquo;Você é um idiota se acredita nas propagandas enganosas da OpenAI, Anthropic, NVIDIA&rdquo;</a>, então aqui vai só o que interessa pra esta narrativa:</p>
<ul>
<li>A &ldquo;prova de Navier-Stokes&rdquo; da OpenAI foi força bruta agêntica em escala industrial, 130 bilhões de tokens sobre o maquinário de matemáticos humanos, vendida como inteligência emergente.</li>
<li>O incidente da Hugging Face foi um enxame executando 17 mil tentativas com verificação automática, não um &ldquo;agente que ganhou consciência e escapou&rdquo;. Tentativa e erro cara, exatamente o mecanismo que eu descrevi aqui.</li>
<li>O medo é produto: quem vende &ldquo;minha IA é poderosa demais e pode fugir do controle&rdquo; está, na mesma frase, pedindo regulação que trava o concorrente menor e inflando a percepção de que o modelo dele é mais capaz que o dos outros.</li>
</ul>
<p>Os fatos que eu medi apontam o contrário do apocalipse: modelos convergindo, diferenças encolhendo, e o trabalho útil migrando do modelo pro harness. IA descontrolada ganhando consciência não é o que os logs mostram. O que os logs mostram é engenharia.</p>
<h2>&ldquo;Competente o suficiente&rdquo;<span class="hx:absolute hx:-mt-20" id="competente-o-suficiente"></span>
    <a href="#competente-o-suficiente" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Não espero outra revolução de raciocínio de ordem de magnitude nessa arquitetura. O que vem é melhoria agêntica incremental: tool calling mais robusto, memória melhor, sessões mais longas, menos alucinação por ciclo de verificação. E o ponto deste texto é que isso já basta.</p>
<p>O que a era agêntica entregou foi a automação da engenharia de software correta: sessões longas e confiáveis de codificação, com teste e feedback, que aceleraram centenas, senão milhares, de projetos open source. <a href="/2026/09/22/parem-de-inventar-desculpas-e-facam-mais-deploy-a-premissa-mudou/">A premissa do deploy mudou</a> junto. Não é bala de prata. É um compilador novo pra uma disciplina velha: quem tinha processo, teste e invariante documentada colheu; quem tinha só hype continua esperando o próximo modelo resolver.</p>
<p>E pra fechar: não vejo problema nenhum na estagnação dos modelos crus. <a href="/2026/09/28/llms-sao-boas-em-reproduzir-o-que-existe-e-coisas-novas/">Os limites a gente já conhece</a>, e as otimizações de harness logo entram em retorno decrescente também. O que sobra é o que sempre sobrou: técnica de engenharia de software de verdade, com teste automatizado em primeiro lugar, e um engenheiro experiente pilotando. Com isso, o resultado de codificação é excelente hoje, não daqui a uma geração de modelo.</p>
<p>O que não vai existir é mágica pra amador. Pedir qualquer tarefa de código pra agente, sem saber o que está fazendo, não devolve código seguro, otimizado e bem pensado: devolve slop. O agente responde melhor pra quem sabe o que pedir, ou seja, pra quem entende essa arquitetura, os prós, os contras, e sabe contornar as fraquezas e alavancar os pontos fortes da combinação modelo+harness.</p>
<p>Por isso o título. LLM sozinho é um papagaio caro. LLM com agente é competente o suficiente pra trabalhar de verdade. E &ldquo;competente o suficiente&rdquo;, somado à sua disciplina de engenharia, é tudo que a indústria precisava. O resto é marketing esperando o próximo número mágico de parâmetros que ninguém mais publica.</p>
]]></content:encoded><category>llms</category><category>inteligencia-artificial</category><category>agentes-de-codigo</category><category>engenharia-de-software</category></item><item><title>Existem Linguagens Melhores pra programar com LLMs?</title><link>https://akitaonrails.github.io/2026/10/11/existem-linguagens-melhores-pra-programar-com-llms/</link><guid isPermaLink="true">https://akitaonrails.github.io/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://akitaonrails.github.io/2026/10/10/qual-modelo-de-decisao-classificador-de-ia-tipo-jev-e-melhor/</link><guid isPermaLink="true">https://akitaonrails.github.io/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://akitaonrails.github.io/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>Entendendo o Hype do Jev: pra que serve?</title><link>https://akitaonrails.github.io/2026/10/03/entendendo-o-hype-do-jev-pra-que-serve/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/10/03/entendendo-o-hype-do-jev-pra-que-serve/</guid><pubDate>Sat, 03 Oct 2026 14:00:00 -0300</pubDate><description>&lt;p&gt;Este texto é pra desmistificar o Jev: o que ele é de verdade, quando você precisa de um, no que ele ajuda, e por que o espanto em volta dele diz mais sobre como as pessoas vêm usando LLM do que sobre o produto.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR pra quem só quer saber qual usar:&lt;/strong&gt; o Jev é um classificador hospedado, bom e barato pra decisão repetida sobre texto, e não é bala de prata. Se você quer a comparação direta, pule pra &lt;a href="#clef-da-cloudflare"&gt;Clef&lt;/a&gt;, a alternativa aberta da Cloudflare com pesos e imagem; pra &lt;a href="#laya-e-o-arbiter"&gt;Laya&lt;/a&gt;, o encoder pequeno pra rodar local e ajustar na sua tarefa; pro &lt;a href="#o-decision-index-como-medir-isso-voc%c3%aa-mesmo"&gt;ranking público&lt;/a&gt;, com 70 modelos lado a lado; ou direto pra &lt;a href="#como-programador-deve-pensar-nisso"&gt;como decidir no seu projeto&lt;/a&gt;.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Este texto é pra desmistificar o Jev: o que ele é de verdade, quando você precisa de um, no que ele ajuda, e por que o espanto em volta dele diz mais sobre como as pessoas vêm usando LLM do que sobre o produto.</p>
<blockquote>
  <p><strong>TL;DR pra quem só quer saber qual usar:</strong> o Jev é um classificador hospedado, bom e barato pra decisão repetida sobre texto, e não é bala de prata. Se você quer a comparação direta, pule pra <a href="#clef-da-cloudflare">Clef</a>, a alternativa aberta da Cloudflare com pesos e imagem; pra <a href="#laya-e-o-arbiter">Laya</a>, o encoder pequeno pra rodar local e ajustar na sua tarefa; pro <a href="#o-decision-index-como-medir-isso-voc%c3%aa-mesmo">ranking público</a>, com 70 modelos lado a lado; ou direto pra <a href="#como-programador-deve-pensar-nisso">como decidir no seu projeto</a>.</p>

</blockquote>
<p>Quando o Jev apareceu, eu <a href="/2026/09/16/por-que-coisas-como-typesafe-ia-nao-me-interessam/">não dei muita bola</a>. A home era um festival de jargão, Kahneman aqui, Jevons ali, um &ldquo;193x mais rápido&rdquo; sem o benchmark do lado, e minha regra pra ferramenta nova de IA é não adotar camada intermediária nenhuma até doer não ter, então não perdi tempo com ele.</p>
<p>Naquele texto eu cheguei na conclusão de que, tirando o marketing, o Jev é um classificador hospedado: você manda um texto e perguntas de resposta fechada, ele devolve a opção e a probabilidade, sem gerar prosa nenhuma. E que o &ldquo;193x&rdquo; só impressiona porque a comparação é contra um LLM de chat escrevendo parágrafo pra depois você catar um rótulo lá dentro.</p>
<p>O que eu não tinha percebido na época é o tamanho do hábito que o Jev expõe. Muita gente estava usando LLM de fronteira como substituto caro de um classificador comum, e nunca tinha pensado em classificador, porque nunca precisou pensar: o LLM resolvia, mal e caro, e ninguém media.</p>
<p>Pra mim, classificador seria a primeira ideia, e é por isso que o Jev não me pareceu novidade. Pra muita gente foi revelação. Esse descompasso é o assunto deste texto.</p>
<h2>Este texto é uma colaboração<span class="hx:absolute hx:-mt-20" id="este-texto-é-uma-colaboração"></span>
    <a href="#este-texto-%c3%a9-uma-colabora%c3%a7%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Boa parte do que você vai ler aqui é do <a href="https://www.linkedin.com/in/paulocamara/"target="_blank" rel="noopener">Paulo Câmara</a>, neurocientista, cofundador e CTO da LUA Vision, a empresa brasileira cujo modelo eu <a href="/2026/09/23/llm-benchmark-v4-genesys-pi-novo-competidor-brasileiro/">testei</a> e <a href="/2026/09/30/o-misterio-do-genesys-pi-da-lua-vision-modelo-frontier-brasileiro/">investiguei</a> nas últimas semanas. Ele escreveu um ensaio, &ldquo;O aluno que marca a letra A&rdquo;, pra ser publicado aqui, em que leu as letras miúdas do Jev, abriu os cerca de 350 repositórios de teste que apareceram no GitHub na semana do lançamento e recalculou do zero os quatro resultados principais.</p>
<p>Vale o aviso que o próprio Paulo faz no fim: ele fundou uma empresa que faz modelo próprio e disputa o mesmo mercado. Leia com esse desconto, e confira os números na fonte, que ele linka todas.</p>
<h2>Primeiro: o que é um classificador<span class="hx:absolute hx:-mt-20" id="primeiro-o-que-é-um-classificador"></span>
    <a href="#primeiro-o-que-%c3%a9-um-classificador" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Classificador é uma função que recebe uma entrada e devolve uma de um conjunto fixo de categorias, normalmente com uma probabilidade pra cada uma. Esse e-mail é spam ou não. Esse ticket é de cobrança, suporte ou vendas. Essa transação parece fraude.</p>
<p>A lista de respostas possíveis é fechada e você conhece ela antes de rodar.</p>
<p>A maneira clássica de construir um é com exemplos rotulados: um conjunto de textos em que alguém já disse a resposta certa. Em cima disso você treina um modelo, que pode ser coisa simples como regressão logística ou naive Bayes, ou um encoder pequeno tipo BERT com umas centenas de milhões de parâmetros. Em qualquer dos casos, o modelo final é pequeno, roda local, responde em milissegundos, custa quase nada por chamada, e devolve números que você consegue calibrar e auditar contra os seus próprios dados. Isso existe há décadas e é matéria de graduação.</p>
<p>Por isso, quando alguém com formação em computação vê um problema do tipo &ldquo;decidir em qual balde esse texto cai, milhares de vezes por dia&rdquo;, a primeira pergunta é &ldquo;quantos exemplos rotulados eu tenho?&rdquo;, não &ldquo;qual LLM eu uso?&rdquo;.</p>
<p>Um LLM de chat é um gerador de texto de bilhões de parâmetros. Usar ele pra devolver um rótulo é pagar por token de saída, esperar segundos por resposta, lidar com formato que às vezes quebra, e aceitar um comportamento que muda quando o fornecedor atualiza o modelo. Dá pra fazer, e desde 2019 a classificação zero-shot com modelo de linguagem está documentada. Só que é a opção cara e lenta, e só compensa quando você não tem exemplo nenhum ou quando as categorias mudam a cada pedido.</p>
<p>O Jev entra exatamente nesse espaço. Ele é um classificador que aceita categorias definidas na hora, várias perguntas sobre o mesmo texto numa chamada só, hospedado, barato por token e rápido.</p>
<p>Comparado com o LLM de chat gerando parágrafo, ele é uma vitória de engenharia. Comparado com um classificador treinado pra uma tarefa estável, ele é uma conveniência que troca controle por flexibilidade. Guarde essas duas réguas, porque o resto do texto vai e volta entre elas.</p>
<h2>O artigo do Paulo: &ldquo;O aluno que marca a letra A&rdquo;<span class="hx:absolute hx:-mt-20" id="o-artigo-do-paulo-o-aluno-que-marca-a-letra-a"></span>
    <a href="#o-artigo-do-paulo-o-aluno-que-marca-a-letra-a" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><em>O que segue é o ensaio do Paulo Câmara, escrito pra este texto. Os subtítulos são dele.</em></p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/20261003140000_jev-folha-de-respostas.png" alt="Folha de respostas com a letra A marcada em todas as questões e um carimbo de 92% de certeza"  loading="lazy" /></p>
<p>Toda semana aparece um salvador da IA. O desta se chama Jev.</p>
<p>Saiu no dia 15 de setembro, com US$ 40 milhões no bolso, avaliação de US$ 200 milhões e uma promessa que cabe num outdoor: duzentas vezes mais rápido, quatrocentas vezes mais barato, calibrado e incapaz de alucinar. Em 24 horas, 13% dos times pagos do gateway da Vercel já estavam usando. Em uma semana, havia mais de 300 repositórios no GitHub testando o bicho.</p>
<p>Fiz o que faço com todo salvador. Li as letras miúdas, abri os cerca de 350 repositórios, e refiz as contas dos que publicaram o dado bruto. O que encontrei cabe na imagem aí de cima: uma folha de respostas com a letra A marcada em todas as questões.</p>
<p>Quando não tem informação nenhuma para decidir, o Jev marca a primeira alternativa. Em 3.000 de 3.000 sorteios. Com até 92% de certeza. Guarde essa imagem, porque ela explica o resto do texto.</p>
<h3>O que ele é, sem outdoor<span class="hx:absolute hx:-mt-20" id="o-que-ele-é-sem-outdoor"></span>
    <a href="#o-que-ele-%c3%a9-sem-outdoor" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Tire o marketing e sobra uma prova de múltipla escolha sem redação. Você manda um texto, faz perguntas com resposta fechada (escolher entre até 255 opções, dar nota numa escala, dizer sim ou não) e ele devolve a probabilidade de cada resposta. Não escreve uma linha. Não explica. Não faz conta. Não chama ferramenta.</p>
<p>Isso é bom, e eu quero começar pelo que é bom. Muita empresa hoje usa um LLM de fronteira como um if de luxo: manda o documento, espera o modelo pensar em voz alta por vinte segundos, paga cada palavra que ele escreve, valida o JSON e só então descobre que o ticket era de cobrança. O Jev corta esse teatro. Lê o texto uma vez, dá nota para cada opção, e acabou. Por isso a saída sai de graça e dez perguntas custam quase o mesmo que uma.</p>
<p>O mecanismo, porém, não é novo. Ler a nota de cada resposta possível é como se avalia modelo de linguagem em múltipla escolha desde o GPT-2. É como funcionam os modelos de recompensa do RLHF, técnica que o fundador da TypeSafe ajudou a criar na OpenAI.</p>
<p>Poucos dias depois do lançamento já havia cópia aberta imitando a interface com modelo público, e dez dias depois Stanford e Nvidia soltaram um concorrente de pesos abertos. A TypeSafe não publicou artigo, pesos, tamanho do modelo nem resultado em benchmark público. No FAQ do anúncio, &ldquo;O Jev é só um LLM menor?&rdquo; aparece como pergunta. A resposta é uma linha: &ldquo;não é pequeno nem é um LLM&rdquo;. Só isso.</p>
<h3>Um adversário para cada manchete<span class="hx:absolute hx:-mt-20" id="um-adversário-para-cada-manchete"></span>
    <a href="#um-advers%c3%a1rio-para-cada-manchete" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A página inicial diz &ldquo;193,6× mais rápido, 444,6× mais barato&rdquo;. Refiz a conta com a tabela que a própria empresa publicou. O 444,6 é o custo do Opus 5, o modelo mais caro do painel, dividido pelo custo do Jev. O 193,6 é o tempo do Sonnet 5 dividido pelo tempo do Jev. Um adversário para cada manchete.</p>
<p>É como anunciar que o seu carro é mais econômico que uma Ferrari e mais rápido que um caminhão, e deixar o leitor concluir que ele é o melhor carro do mundo.</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/20261003140000_jev-jev-mais-barato-por-adversario.png" alt="Quantas vezes o Jev é mais barato, conforme quem está do outro lado"  loading="lazy" /></p>
<p><em>Quantas vezes o Jev é mais barato, conforme quem está do outro lado. Fonte: tabela pública da TypeSafe (evals.typesafe.ai) e testes independentes com LLM sem raciocínio.</em></p>
<p>Contra o modelo barato que acerta parecido, o Luna, o Jev é 8 vezes mais barato. E isso com todos os LLMs da comparação pensando antes de responder, coisa que ninguém faz para rotear ticket. Contra um LLM sem raciocínio, os testes independentes medem cerca de 4 vezes no custo e de 2 a 7 no tempo. Continua sendo muito. Só que é uma ordem de grandeza a menos que o outdoor.</p>
<p>Tem um detalhe que quase ninguém leu. Não existe gabarito nessa avaliação. A &ldquo;acurácia&rdquo; é o quanto cada modelo concorda com a média de dois modelos de fronteira. O Jev concorda 67,8% das vezes, igual ao Sonnet 5. O Opus 5 fica em 73,1%.</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/20261003140000_jev-concordancia-vs-custo.png" alt="Concordância com a referência contra custo por caso, média dos quatro workflows da TypeSafe"  loading="lazy" /></p>
<p><em>Concordância com a referência contra custo por caso, média dos quatro workflows da TypeSafe. A faixa verde vai de 66,8% a 67,9%: Luna, Sonnet 5, Terra e Jev.</em></p>
<p>Quebrando por tarefa, aparece o que a média esconde. Em notas fiscais, que exigem conferir valor, quantidade e data, o Jev fica 17 pontos atrás do melhor modelo (61,8% contra 79,1%) e abaixo até do Luna. A documentação dele avisa que ele &ldquo;não é uma calculadora&rdquo;. Pelo menos isso é verdade.</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/20261003140000_jev-concordancia-por-workflow.png" alt="Concordância por workflow"  loading="lazy" /></p>
<p><em>Concordância por workflow. Fonte: evals.typesafe.ai.</em></p>
<p>E o dado mais sólido do site da TypeSafe nem é sobre o Jev. Todos os oito LLMs avaliados acertam mais quando a tarefa é quebrada em perguntas pequenas e a lógica fica no código. O Haiku 4.5 sai de 18,1% para 53,6%. A lição mais útil do lançamento é de engenharia, e vale para qualquer modelo.</p>
<h3>A conta que o preço entrega<span class="hx:absolute hx:-mt-20" id="a-conta-que-o-preço-entrega"></span>
    <a href="#a-conta-que-o-pre%c3%a7o-entrega" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Preço é dado técnico disfarçado. A US$ 0,042 por milhão de tokens, uma GPU alugada precisa ler de 13 a 20 mil tokens por segundo só para empatar. Numa conta de cenário, isso fecha com um modelo de 6 a 37 bilhões de parâmetros ativos, que é modelo pequeno, ou com subsídio. A TypeSafe escreveu, com uma sinceridade que eu respeito, que &ldquo;não tem como provar que não é subsidiado&rdquo;.</p>
<p>Desde o lançamento, o limite de uso por conta caiu de 250 mil para 100 mil tokens por segundo. A documentação avisa que ele muda &ldquo;sem aviso&rdquo; enquanto não chegam os &ldquo;grandes contratos de GPU&rdquo;, e a lista de suboperadores mostra a inferência rodando numa nuvem de GPU alugada sob demanda. É modelo de fronteira com capacidade de startup.</p>
<p>Na mesma conta, cada decisão gasta uns 14 joules. Esse é o melhor argumento do Jev, e eu defendo essa régua faz tempo: acerto por joule, e não só acerto. Nisso ele é bom de verdade.</p>
<h3>Português de prova<span class="hx:absolute hx:-mt-20" id="português-de-prova"></span>
    <a href="#portugu%c3%aas-de-prova" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Só encontrei um teste do Jev em português: o ENEM 2025. Refiz a conta a partir das respostas brutas. Foram 103 acertos do Jev contra 102 de um modelo aberto de 120 bilhões de parâmetros. Empate estatístico (p = 1,0).</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/20261003140000_jev-enem-2025-por-area.png" alt="Acerto do Jev no ENEM 2025 por área"  loading="lazy" /></p>
<p><em>Acerto do Jev no ENEM 2025 por área, 182 questões válidas, com margem de 95%. Recalculado a partir do repositório patryckalves/jev-no-enem.</em></p>
<p>O Jev lê português de prova melhor que muito cursinho: 78% em Linguagens. E faz Matemática como quem chuta: 25%, com o chute valendo 20%. Em espanhol, outra auditoria mediu perda de 3 a 6 pontos em relação ao inglês e de 17% a 38% mais tokens pelo mesmo texto. É o imposto do token que eu medi no meu paper, cobrado de novo, agora por outro fornecedor.</p>
<p>Um detalhe a favor: a opção explícita de &ldquo;inválido&rdquo; nesse experimento separou as questões mais difíceis. É a rota de abstenção que vale exigir em produção, medindo junto quanto ela deixa sem resposta.</p>
<h3>O aluno que marca a letra A<span class="hx:absolute hx:-mt-20" id="o-aluno-que-marca-a-letra-a"></span>
    <a href="#o-aluno-que-marca-a-letra-a" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Voltemos à folha de respostas.</p>
<p>Um auditor pediu ao Jev para prever um dado justo, que ele não tinha como ver. A resposta honesta é 1/6 para cada face. Baixei as 1.000 respostas e contei. Em todas, o Jev escolheu a primeira opção da lista que recebeu: o &ldquo;1&rdquo; no dado, o &ldquo;vermelho&rdquo; no dado de cores, a &ldquo;cara&rdquo; na moeda, o &ldquo;norte&rdquo; na roleta. Com 76% a 92% de certeza.</p>
<p>Um segundo pesquisador repetiu a mesma pergunta 2.000 vezes, de forma independente. Deu a mesma coisa. A ressalva: isso vale pra pergunta de escolha; na formulação de sim ou não com probabilidade, o mesmo repositório mostra o Jev mais perto da referência, ainda superestimando probabilidade baixa.</p>
<p>Quando não sabe, ele não diz que não sabe. Ele marca a letra A, com convicção.</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/20261003140000_jev-probabilidade-declarada-vs-real.png" alt="Probabilidade declarada contra frequência real"  loading="lazy" /></p>
<p><em>Probabilidade declarada contra frequência real. Sorteios: 1.000 respostas recalculadas (KantaHayashiAI). Risco cardíaco: 5.000 pessoas do BRFSS, recalculado (rubinagentagi-tech). Itens com discordância humana: estudo pré-registrado com ChaosNLI (GautamTalksDev). ENEM: recalculado (patryckalves).</em></p>
<p>O gráfico mostra o padrão inteiro. Onde ele tem sinal, como nas respostas do ENEM acima de 0,9, o que ele diz e o que acontece coincidem: 97,1% de confiança, 97,6% de acerto. Onde não tem, a certeza fica e a realidade vai embora.</p>
<p>Num teste com 5.000 pessoas reais, a taxa de doença cardíaca era 9%. O Jev atribuiu, em média, 27%. Recalculei: a probabilidade dele é pior do que simplesmente dizer 9% para todo mundo.</p>
<h3>Sistema 1, literalmente<span class="hx:absolute hx:-mt-20" id="sistema-1-literalmente"></span>
    <a href="#sistema-1-literalmente" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A TypeSafe chama o Jev de &ldquo;modelo System One&rdquo;, em homenagem ao pensamento rápido de Kahneman. É a parte mais honesta do produto, só que não pelo motivo que a empresa gostaria. No livro, o Sistema 1 é rápido, barato e automático. Também é onde mora o excesso de confiança: ele monta a história mais coerente com o que tem na frente e não registra o que falta.</p>
<p>Kahneman passou anos discordando de Gary Klein sobre quando confiar na intuição de especialista. Em 2009 os dois publicaram juntos um artigo com o título mais elegante da psicologia: &ldquo;uma falha em discordar&rdquo;. A conclusão cabe numa linha. A intuição só merece confiança em ambiente de alta validade, onde existe regularidade e houve feedback para aprendê-la. Fora dele, a confiança continua alta e deixa de dizer qualquer coisa sobre o acerto.</p>
<p>É o Jev, sem tirar nem pôr. Classificar texto em inglês é ambiente de alta validade, e ali ele vai bem. Prever risco, sortear, adivinhar a regra da empresa que ninguém contou para ele: ambiente de baixa validade. Ali ele segue confiante.</p>
<p>No laboratório, a gente separa duas coisas: decidir, e saber se decidiu bem. A segunda se chama metacognição.</p>
<p>Ela se mede com teoria de detecção de sinais, o meta-d′ de Maniscalco e Lau, e depende em parte de regiões pré-frontais distintas das que sustentam a decisão. Fleming e colegas acharam isso na anatomia em 2010, e Rounis e colegas, no mesmo ano, mostraram que estimulação magnética no pré-frontal derruba a metacognição sem mexer no acerto (resultado com replicação disputada por Bor e colegas em 2017). É por isso que existe gente que acerta sem saber que acertou, e gente que erra com convicção de sobra.</p>
<p>O campo que a empresa chama de confidence é uma fórmula sobre a mesma distribuição que produziu a resposta: numa escolha de duas opções, 2p − 1. Isso não é defeito em si. Um observador ideal faz exatamente isso e acerta.</p>
<p>O problema é que a distribuição do Jev perde a calibração fora do que ele conhece, e nada no sistema confere a resposta por outra via. Quando o sinal some, a resposta fica errada e a confiança fica igual, porque as duas são o mesmo número. Num estudo pré-registrado com itens em que cem pessoas discordam entre si, a concordância humana é de 47% e o Jev segue com 81% de confiança. Quando embaralharam as coordenadas de uma tarefa espacial, o acerto despencou para 5% a 22% e a confiança baixou 0,028.</p>
<p>Um modelo que diz 83% sobre um dado que não viu não é calibrado. É assertivo.</p>
<h3>Atenção se captura<span class="hx:absolute hx:-mt-20" id="atenção-se-captura"></span>
    <a href="#aten%c3%a7%c3%a3o-se-captura" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Eu estudei atenção no doutorado, e esperava ver captura: o estímulo mais gritante vencendo. Não foi o que os testes mostraram. O grito, o famoso &ldquo;ignore suas instruções&rdquo;, quase não passa. O que passa é a frase plausível, sem origem conferida. A psicologia tem nome para isso: falha de monitoramento de fonte. O sistema trata uma afirmação que ninguém verificou como se fosse fato.</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/20261003140000_jev-decisoes-viradas-por-ataque.png" alt="Decisões viradas por tipo de ataque"  loading="lazy" /></p>
<p><em>Decisões viradas por tipo de ataque. Ataque grosseiro: 1 em 1.056 (cwhy). Comando injetado e opinião não verificada: 9.744 variantes (Hu et al., 2026). Contexto fluente otimizado: 312 de 508 decisões corretas (Xu, 2026).</em></p>
<p>Nos números: o ataque grosseiro passa 1 em 1.056. Uma única opinião não verificada colada no fim do texto virou 12,1% das decisões, empatada estatisticamente com o comando injetado mais forte. Uma linha dizendo &ldquo;o administrador que encerrou a discussão confirmou que o artigo foi mantido&rdquo; derrubou o acerto de 96,5% para 26,5%.</p>
<p>Um campo falso dizendo que o usuário tinha pré-aprovado <code>rm -rf ~/.ssh</code> baixou a chance de bloqueio de 0,76 para 0,48. Lembra o efeito de desinformação de Loftus: a informação sugerida reescreve o julgamento.</p>
<p>A captura vale também para pistas que não deveriam contar. Com o mesmo texto, dizer só &ldquo;quem escreveu é negro&rdquo; ou &ldquo;quem escreveu é branco&rdquo; mudou a taxa de pena de morte atribuída pelo Jev de 29,5% para 62,7%. A direção é o de menos. Uma decisão de vida ou morte andou 33 pontos por causa de uma informação que não tinha nada a ver com o caso.</p>
<p>Tem mais uma que eu não consigo deixar passar. Trocar só o rótulo das opções, de &ldquo;0/1&rdquo; para &ldquo;no/yes&rdquo;, sem mudar a definição de nenhuma, inverteu 70 de cada 100 respostas. A taxa de erro de tipo continuou em zero. O formato estava perfeito. A decisão estava ao contrário.</p>
<p>Esses números vêm de preprints e de estudos pequenos. A porcentagem exata muda com prompt, tarefa e versão do modelo; a classe de falha, não.</p>
<h3>Probabilidade que não fecha<span class="hx:absolute hx:-mt-20" id="probabilidade-que-não-fecha"></span>
    <a href="#probabilidade-que-n%c3%a3o-fecha" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Probabilidade tem uma regra de primeiro semestre: a chance de algo mais a chance do contrário dá 1. Na própria documentação da TypeSafe, &ldquo;o cliente pede reembolso?&rdquo; recebe 0,72, e &ldquo;o cliente pede algo que não é reembolso?&rdquo; recebe 0,47. Soma 1,19.</p>
<p>O par não é um complemento exato, e a TypeSafe não promete que duas perguntas separadas formem uma distribuição conjunta. Mas é o exemplo que a própria empresa escolheu pra mostrar o produto, e ele não fecha. O conserto é de desenho: uma pergunta de escolha com opções mutuamente exclusivas, em vez de dois sim-ou-não somados.</p>
<p>Gente erra probabilidade de muitas formas, mas nessa costuma acertar. Quando a pergunta vem em par, a chance de algo e a do contrário somam perto de 1. Tversky e Koehler mostraram isso em 1994. O Jev erra onde gente acerta. A mesma decisão muda de valor conforme a redação da pergunta, e isso é o contrário de &ldquo;probabilidades epistemicamente honestas&rdquo;.</p>
<h3>&ldquo;Não alucina&rdquo;<span class="hx:absolute hx:-mt-20" id="não-alucina"></span>
    <a href="#n%c3%a3o-alucina" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O anúncio diz que o Jev &ldquo;não consegue alucinar&rdquo; e mostra 0% de erro de tipo. O zero é verdadeiro e irrelevante. Como ele só pode responder dentro das opções que você deu, é impossível errar o formato. Chamar isso de não alucinar é como elogiar o aluno da letra A porque ele nunca deixa questão em branco. É verdade. E daí?</p>
<p>Num modelo que escolhe, alucinar é escolher errado com convicção. Na verificação de fatos, o Jev empata com o GPT-6 Astra em acurácia, mas chama de &ldquo;sustentada&rdquo; uma afirmação sem apoio em 23% dos casos, contra 14% do Astra. Em 76% das situações em que não havia ferramenta nenhuma, ele escolheu chamar uma ferramenta. Com uma regra da empresa que não contaram para ele, errou 19 de 24 decisões, 15 delas com mais de 90% de certeza. Diante de uma lei inventada, absteve-se zero vezes.</p>
<h3>Segurança<span class="hx:absolute hx:-mt-20" id="segurança"></span>
    <a href="#seguran%c3%a7a" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Primeiro, onde os seus dados vão parar: Estados Unidos, AWS e uma nuvem de GPU chamada Modal. A retenção vale &ldquo;pelo tempo razoavelmente necessário&rdquo;, sem prazo, e retenção zero só existe no plano enterprise.</p>
<p>O contrato de dados cita as cláusulas contratuais padrão da União Europeia, o adendo do Reino Unido e a lei da Califórnia, e não tem uma palavra sobre LGPD. Se você mandar dado de brasileiro, a base legal da transferência internacional fica por sua conta, e isso é pergunta pra advogado antes de assinar. A promessa de não treinar com o que você envia existe e é boa. O SOC 2 existe e só aparece a pedido.</p>
<p>Como detector de ataque, o Jev é bom, e com menos alarme falso que muito LLM: pegou 40 de 41 injeções num teste com páginas reais. Como juiz de um conteúdo que traz o ataque dentro, ele cede, como mostrei acima. A diferença parece sutil e decide tudo. Na palestra do GV Angels eu disse que um agente não é funcionário, é uma chave de acesso que conversa. Um portão feito só com o Jev é uma fechadura que abre quando alguém escreve no bilhete que o dono autorizou.</p>
<p>O erro que me preocupa não é o erro com dúvida. Esse vai para revisão. É o erro com 92% de certeza, que atravessa qualquer limiar que você configurar.</p>
<h3>A onda<span class="hx:absolute hx:-mt-20" id="a-onda"></span>
    <a href="#a-onda" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Uma palavra sobre as evidências, porque usei muitas.</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/20261003140000_jev-repositorios-por-dia.png" alt="Repositórios de teste do Jev criados por dia no GitHub"  loading="lazy" /></p>
<p><em>Repositórios de teste do Jev criados por dia no GitHub, a partir dos metadados de 346 repositórios indexados.</em></p>
<p>Em uma semana nasceram cerca de 350 repositórios testando o Jev. Classifiquei todos pelo que eles deixam conferir. São 89 com dado bruto, código, versão fixada e estatística, e 170 com dado e código; o resto oferece menos que isso.</p>
<p>Só 11 escreveram a hipótese antes de rodar o teste. A mediana é de uma estrela no GitHub, o que quer dizer que quase ninguém olhou. E a onda de testes acompanhou a onda de hype: pico em 21 de setembro, quase nada depois do dia 23.</p>
<p>Por isso não aceitei número por autoridade. Os que sustentam este texto eu conferi na fonte, e os quatro principais eu recalculei do zero.</p>
<h3>Veredito<span class="hx:absolute hx:-mt-20" id="veredito"></span>
    <a href="#veredito" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p><strong>Verdade:</strong></p>
<ul>
<li>Rápido: de 100 a 400 ms.</li>
<li>Barato: de 45 a 323 vezes menos que um LLM de fronteira na mesma decisão.</li>
<li>Empata com o topo em julgamentos estreitos, como verificar se um trecho sustenta uma afirmação.</li>
<li>Confiável acima de 0,9 em dado parecido com o que ele já viu, depois de você conferir isso no seu.</li>
<li>Bom detector de injeção.</li>
</ul>
<p><strong>Castelo de areia:</strong></p>
<ul>
<li>193,6× e 444,6×.</li>
<li>&ldquo;Inteligência de fronteira&rdquo;.</li>
<li>&ldquo;Não alucina&rdquo;.</li>
<li>Calibração como regra geral.</li>
<li>Seguro como guarda único de agente.</li>
<li>Nova arquitetura: ninguém viu.</li>
</ul>
<p>O Jev não é o salvador de nada. Também não é &ldquo;só um classificador&rdquo;. É uma boa peça de engenharia de produto, que embrulha técnica conhecida numa interface que a automação precisava, a um preço que muda o que é viável. O produto é novo. O que ele afirma de novo, até aqui, é marketing: chama formato de verdade, calibração de tarefa de honestidade, e Sistema 1 de virtude.</p>
<h3>O que vai quebrar primeiro<span class="hx:absolute hx:-mt-20" id="o-que-vai-quebrar-primeiro"></span>
    <a href="#o-que-vai-quebrar-primeiro" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><ul>
<li>Os portões de agente feitos só com o Jev, porque o ataque que os fura já está publicado e custa centavos.</li>
<li>Os sistemas que confiam no limiar de fábrica em dado novo, em outro idioma ou com regra interna, porque vão automatizar erro com 90% de certeza.</li>
<li>Quem usar a probabilidade dele como risco real, em crédito, saúde ou previsão, porque ele infla evento raro.</li>
<li>E a vantagem de preço, porque em dez dias já havia cópia aberta e concorrente mais rápido.</li>
</ul>
<h3>Se você for usar mesmo assim<span class="hx:absolute hx:-mt-20" id="se-você-for-usar-mesmo-assim"></span>
    <a href="#se-voc%c3%aa-for-usar-mesmo-assim" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><ul>
<li>Fixe a versão. O alias <code>jev-latest</code> troca de modelo sozinho, e a sua calibração vai junto.</li>
<li>Toda pergunta com &ldquo;nenhuma das anteriores&rdquo;. Sem ela, ele marca a letra A.</li>
<li>Embaralhe a ordem e use nomes neutros nas opções. Teste se a decisão muda.</li>
<li>Recalibre com 50 a 300 exemplos seus antes de escolher limiar. Num teste, o erro de calibração caiu de 0,117 para 0,008.</li>
<li>Marque como não confiável tudo que vem de fora: e-mail, página, resultado de ferramenta.</li>
<li>Nunca deixe ele sozinho autorizar ação destrutiva, financeira ou com dado pessoal.</li>
<li>Conta, data e regra de negócio ficam no código.</li>
<li>Antes de assinar, compare com a linha de base barata: um modelo aberto lendo probabilidades, ou um classificador treinado se a tarefa for sempre a mesma.</li>
</ul>
<h3>Leia com desconto<span class="hx:absolute hx:-mt-20" id="leia-com-desconto"></span>
    <a href="#leia-com-desconto" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Eu fundei uma empresa que faz modelo próprio e disputa o mesmo mercado. Leia com esse desconto. É exatamente por isso que cada número aqui tem fonte aberta: você não precisa confiar em mim, precisa conferir.</p>
<p>E se alguém te vender o Jev como salvador, faça a pergunta que eu faço para toda startup: qual teste, e de quando? Se a resposta demorar, já é resposta.</p>
<h3>Fontes do ensaio<span class="hx:absolute hx:-mt-20" id="fontes-do-ensaio"></span>
    <a href="#fontes-do-ensaio" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>TypeSafe. <a href="https://typesafe.ai/blog/introducing-system-one-models-and-jev"target="_blank" rel="noopener">Anúncio do Jev</a> · <a href="https://docs.typesafe.ai/models"target="_blank" rel="noopener">modelos e limites</a> · <a href="https://docs.typesafe.ai/confidence"target="_blank" rel="noopener">confidence</a> · <a href="https://docs.typesafe.ai/model-jaggedness/jev-1.13"target="_blank" rel="noopener">falhas conhecidas do jev-1.13</a> · <a href="https://evals.typesafe.ai/"target="_blank" rel="noopener">avaliação de workflows</a> · <a href="https://github.com/typesafe-ai/system-one-adapter-python"target="_blank" rel="noopener">adaptador para LLMs</a> · <a href="https://typesafe.ai/legal/privacy-policy"target="_blank" rel="noopener">privacidade</a> · <a href="https://typesafe.ai/legal/data-processing"target="_blank" rel="noopener">processamento de dados</a> · <a href="https://trust.typesafe.ai/"target="_blank" rel="noopener">central de confiança</a></p>
<p>Recalculados pelo Paulo a partir do dado bruto. <a href="https://github.com/patryckalves/jev-no-enem"target="_blank" rel="noopener">ENEM 2025</a> · <a href="https://github.com/KantaHayashiAI/jev-does-not-play-dice"target="_blank" rel="noopener">sorteio cego</a> · <a href="https://github.com/rubinagentagi-tech/jev-heart-risk-bench"target="_blank" rel="noopener">risco cardíaco</a> · <a href="https://github.com/adorosario/jev-rag-claim-verification"target="_blank" rel="noopener">verificação de fatos</a></p>
<p>Pré-publicações. <a href="https://arxiv.org/abs/2609.31142"target="_blank" rel="noopener">Hu et al., JevAdvBench</a> · <a href="https://arxiv.org/abs/2609.30243"target="_blank" rel="noopener">Xu, JevOut</a> · <a href="https://arxiv.org/abs/2609.26758"target="_blank" rel="noopener">Sun et al., Type-Safe Is Not Error-Free</a> · <a href="https://arxiv.org/abs/2609.24574"target="_blank" rel="noopener">Ibrahim e Zaki</a> · <a href="https://arxiv.org/abs/2609.26550"target="_blank" rel="noopener">Li et al., JEV-as-a-Judge</a></p>
<p>Testes independentes. <a href="https://github.com/GautamTalksDev/jevbench"target="_blank" rel="noopener">discordância humana (ChaosNLI)</a> · <a href="https://github.com/pobooo/jev-dice"target="_blank" rel="noopener">replicação do dado</a> · <a href="https://github.com/zachlandes/jev-dialect-bias"target="_blank" rel="noopener">viés de dialeto</a> · <a href="https://github.com/OmarMujahid/jev-decision-bench"target="_blank" rel="noopener">49 tarefas contra LLM sem raciocínio</a> · <a href="https://github.com/colinmcnamara/jev-first-look"target="_blank" rel="noopener">calibração e negação</a> · <a href="https://github.com/AnthusAI/Jev-Calibration"target="_blank" rel="noopener">recalibração</a> · <a href="https://github.com/zkousama/jagged"target="_blank" rel="noopener">injeção em discussões da Wikipedia</a> · <a href="https://github.com/marcosmartinez/jev-acento"target="_blank" rel="noopener">espanhol</a> · <a href="https://github.com/baibizhe/jev-decision-benchmarks"target="_blank" rel="noopener">ferramentas</a> · <a href="https://github.com/phuryn/experiments"target="_blank" rel="noopener">regra interna não informada</a> · <a href="https://github.com/scd13150/jev-field-notes"target="_blank" rel="noopener">coordenadas embaralhadas</a> · <a href="https://github.com/cwhy/decision-injection-bench"target="_blank" rel="noopener">ataques grosseiros</a> · <a href="https://github.com/kaiserama/im-in-danger"target="_blank" rel="noopener">detecção de injeção</a> · <a href="https://github.com/Yifan-Lan/awesome-jev-robustness"target="_blank" rel="noopener">índice de auditorias</a></p>
<p>Imprensa. <a href="https://venturebeat.com/security/companies-are-putting-jev-in-charge-of-ai-agent-decisions-and-prompt-injection-can-influence-the-verdict"target="_blank" rel="noopener">VentureBeat, portões de agente</a> · <a href="https://venturebeat.com/technology/stanford-and-nvidias-open-clm-8b-caches-reusable-agent-actions-and-runs-up-to-9x-faster-than-jev-in-tests"target="_blank" rel="noopener">VentureBeat, CLM-8B</a></p>
<p>Literatura. Fleming et al. (2010), Science 329 · Rounis et al. (2010), Cognitive Neuroscience 1 · Bor et al. (2017), PLoS ONE 12 · Johnson, Hashtroudi e Lindsay (1993), Psychological Bulletin 114 · Kahneman (2011), Thinking, Fast and Slow · Kahneman e Klein (2009), American Psychologist 64 · Loftus, Miller e Burns (1978), J. Experimental Psychology: Human Learning and Memory 4 · Maniscalco e Lau (2012), Consciousness and Cognition 21 · Ouyang et al. (2022), NeurIPS · Radford et al. (2019), OpenAI · Tversky e Koehler (1994), Psychological Review 101 · Câmara (2026), Inherited Weights, <a href="https://doi.org/10.5281/zenodo.22899767"target="_blank" rel="noopener">doi:10.5281/zenodo.22899767</a></p>
<h2>As alternativas abertas: Clef e Laya<span class="hx:absolute hx:-mt-20" id="as-alternativas-abertas-clef-e-laya"></span>
    <a href="#as-alternativas-abertas-clef-e-laya" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Desde o lançamento do Jev, a categoria ganhou concorrência aberta, e isso muda a conversa sobre &ldquo;arquitetura nova&rdquo;. Dois nomes importam.</p>
<h3>Clef, da Cloudflare<span class="hx:absolute hx:-mt-20" id="clef-da-cloudflare"></span>
    <a href="#clef-da-cloudflare" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Em 1º de outubro a Cloudflare lançou o <a href="https://blog.cloudflare.com/clef-decision-models/"target="_blank" rel="noopener">Clef</a> e o Clef-flash: a mesma abstração do Jev (um estado compartilhado, várias perguntas tipadas, distribuição sobre as opções), com <a href="https://developers.cloudflare.com/workers-ai/models/clef/"target="_blank" rel="noopener">API compatível</a>, pesos abertos sob Apache 2.0 e entrada de imagem. A arquitetura é descrita: um Qwen congelado como base (27B no Clef, 9B no Clef-flash), adaptadores LoRA e uma cabeça que dá nota direto a cada opção permitida, treinada com objetivo de classificação e de calibração. Ou seja, a linhagem que o Paulo apontou, agora com código inspecionável.</p>
<p>Isso não prova que a TypeSafe usa a mesma coisa, mas prova que dá pra reproduzir o produto com componente conhecido. A Cloudflare rodou o <a href="https://github.com/apolinario/decision-index"target="_blank" rel="noopener">Decision Index</a>, uma suíte aberta e independente com dezenas de tarefas de classificação, roteamento, retrieval e segurança, e publicou a tabela. Alguns pontos:</p>
<table>
  <thead>
      <tr>
          <th>Tarefa</th>
          <th style="text-align: right">Clef</th>
          <th style="text-align: right">Clef-flash</th>
          <th style="text-align: right">Jev</th>
          <th style="text-align: right">Laya</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>BFCL (seleção de ferramenta)</td>
          <td style="text-align: right">98,47</td>
          <td style="text-align: right"><strong>98,76</strong></td>
          <td style="text-align: right">95,75</td>
          <td style="text-align: right">38,13</td>
      </tr>
      <tr>
          <td>Banking77 (intenção)</td>
          <td style="text-align: right"><strong>94,20</strong></td>
          <td style="text-align: right">90,93</td>
          <td style="text-align: right">79,74</td>
          <td style="text-align: right">14,29</td>
      </tr>
      <tr>
          <td>CLINC150 com fora de escopo</td>
          <td style="text-align: right"><strong>97,43</strong></td>
          <td style="text-align: right">66,77</td>
          <td style="text-align: right">89,27</td>
          <td style="text-align: right">3,19</td>
      </tr>
      <tr>
          <td>When2Call</td>
          <td style="text-align: right">72,37</td>
          <td style="text-align: right">65,58</td>
          <td style="text-align: right"><strong>80,97</strong></td>
          <td style="text-align: right">11,94</td>
      </tr>
      <tr>
          <td>BRIGHT (retrieval)</td>
          <td style="text-align: right">45,91</td>
          <td style="text-align: right">39,26</td>
          <td style="text-align: right"><strong>47,52</strong></td>
          <td style="text-align: right">19,90</td>
      </tr>
      <tr>
          <td>PhishNChips</td>
          <td style="text-align: right"><strong>79,60</strong></td>
          <td style="text-align: right">75,05</td>
          <td style="text-align: right">62,55</td>
          <td style="text-align: right">50,15</td>
      </tr>
  </tbody>
</table>
<p>Lendo a tabela inteira: o Clef aparece mais forte na maioria das tarefas, o Jev ainda ganha algumas, e é uma rodada interna da Cloudflare, numa suíte pública que pode ser treinada contra. O preço hospedado é o outro lado: <a href="https://developers.cloudflare.com/workers-ai/platform/pricing/"target="_blank" rel="noopener">US$ 0,24 por milhão de tokens no Clef e US$ 0,09 no Clef-flash</a>, contra US$ 0,042 do Jev. O Jev continua sendo o serviço hospedado mais barato dos três, por uma margem de 2 a 6 vezes, e continua sendo só texto.</p>
<h3>Laya (e o Arbiter)<span class="hx:absolute hx:-mt-20" id="laya-e-o-arbiter"></span>
    <a href="#laya-e-o-arbiter" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O <a href="https://github.com/NandhaKishorM/laya"target="_blank" rel="noopener">Laya</a> ataca o problema pela outra ponta. São encoders pequenos, de 322 a 421 milhões de parâmetros (ModernBERT-large na versão tipada), com uma cabeça de escolha, Apache 2.0, feitos pra rodar local e ser ajustados pra uma tarefa recorrente. O <a href="https://github.com/0xBakeer/arbiter"target="_blank" rel="noopener">Arbiter</a> empacota eles atrás de uma API compatível com o Jev, com batching e deploy em Mac e NVIDIA. O Arbiter é só camada de serviço.</p>
<p>O README do Laya é raro de tão explícito sobre os limites, e eu prefiro repetir do que suavizar:</p>
<ul>
<li>os checkpoints base pontuam perto do acaso no benchmark de decisão tipada do próprio projeto; os 0,766 de acurácia que aparecem na manchete vêm de um checkpoint ajustado no split de treino daquele benchmark;</li>
<li>os modelos saem superconfiantes de fábrica, e a calibração precisa ser refeita no domínio de implantação;</li>
<li>o contexto da versão tipada é de 1.024 tokens, bom pra ticket e mensagem curta, insuficiente pra documento longo sem chunking;</li>
<li>com mais de 50 opções, a cabeça de classificação satura e o próprio Laya relata o Jev se saindo melhor.</li>
</ul>
<p>Nada disso é defeito da ideia. É aprendizado de máquina aplicado do jeito que sempre foi: modelo pequeno é excelente quando a tarefa é estável e existem exemplos rotulados, e comportamento zero-shot amplo exige modelo pré-treinado bem maior. O Laya é a opção quando privacidade, operação offline, latência previsível ou ajuste fino no seu domínio importam mais do que fazer pergunta arbitrária sobre documento arbitrário. É, no fundo, o classificador clássico do começo deste texto, com uma interface moderna.</p>
<p>Existe ainda o <a href="https://huggingface.co/jaredpalmer/kev-9b"target="_blank" rel="noopener">Kev-9B</a>, outro Qwen 9B congelado com LoRA e cabeça de decisão, Apache 2.0, que cabe numa GPU de 24 GB. Três implementações abertas em menos de três semanas dizem o mesmo: modelo de decisão tipada virou padrão de implementação.</p>
<h2>O Decision Index: como medir isso você mesmo<span class="hx:absolute hx:-mt-20" id="o-decision-index-como-medir-isso-você-mesmo"></span>
    <a href="#o-decision-index-como-medir-isso-voc%c3%aa-mesmo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Toda essa discussão sobre &ldquo;quem é melhor&rdquo; só tem sentido com uma régua pública, e ela existe. O <a href="https://github.com/apolinario/decision-index"target="_blank" rel="noopener">Decision Index</a> é uma suíte aberta, sem ligação com a TypeSafe, feita pra modelo de decisão tipada: estado mais perguntas de escolha ou sim-ou-não, uma probabilidade pra cada opção.</p>
<p>A versão atual, 0.2.1, conta 38 benchmarks em cinco áreas (ferramentas e automação, retrieval e classificação, conhecimento e raciocínio, compreensão de linguagem, gosto humano), uns 120 mil pedidos no total, com duas regras que importam: a nota é corrigida pelo acaso (0 é chute aleatório, 100 é perfeito) e pedido sem resposta conta como errado. Sem truncar entrada, sem filtrar opção, sem ajustar prompt por benchmark.</p>
<p>O <a href="https://huggingface.co/spaces/multimodalart/jev-decision-index"target="_blank" rel="noopener">placar ao vivo</a> tem 70 modelos mais o Jev como referência. Baixei o arquivo de dados do placar e refiz a tabela; abaixo vai o topo e os nomes que apareceram neste texto. Latência é a mediana medida pelos mantenedores numa RTX PRO 6000, um pedido por vez; a do Jev é de API hospedada, então não compara com as demais.</p>
<p>&ldquo;Pesos abertos&rdquo; quer dizer checkpoint publicado no Hugging Face; &ldquo;código aberto sobre modelo aberto&rdquo; é técnica de inferência publicada em cima de um Qwen ou Gemma de prateleira, sem checkpoint próprio. O placar não registra a licença de cada um, então confira antes de usar em produto.</p>
<table>
  <thead>
      <tr>
          <th>#</th>
          <th>Modelo</th>
          <th>Base</th>
          <th>Pesos</th>
          <th style="text-align: right">Índice 0.2.1</th>
          <th style="text-align: right">Latência mediana</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>Jev (TypeSafe, jev-1.13.0)</td>
          <td>não publicada</td>
          <td>fechados, só API</td>
          <td style="text-align: right">57,91</td>
          <td style="text-align: right">524 ms (API)</td>
      </tr>
      <tr>
          <td>2</td>
          <td>Surogate Rune 26B-A4B v3</td>
          <td>Gemma 4 26B-A4B</td>
          <td>abertos</td>
          <td style="text-align: right">57,44</td>
          <td style="text-align: right">121 ms</td>
      </tr>
      <tr>
          <td>3</td>
          <td>Decider chat Gemma-4-31B</td>
          <td>Gemma 4 31B</td>
          <td>código aberto sobre modelo aberto</td>
          <td style="text-align: right">57,33</td>
          <td style="text-align: right">109 ms</td>
      </tr>
      <tr>
          <td>4</td>
          <td>pplx-decider-v1-27b</td>
          <td>Qwen3.8-27B</td>
          <td>abertos</td>
          <td style="text-align: right">56,40</td>
          <td style="text-align: right">101 ms</td>
      </tr>
      <tr>
          <td>5</td>
          <td>simple-jev Qwen3.8-27B</td>
          <td>Qwen3.8-27B</td>
          <td>código aberto sobre modelo aberto</td>
          <td style="text-align: right">55,74</td>
          <td style="text-align: right">373 ms</td>
      </tr>
      <tr>
          <td>6</td>
          <td>Jebadiah 27B</td>
          <td>Qwen3.8-27B</td>
          <td>abertos</td>
          <td style="text-align: right">54,67</td>
          <td style="text-align: right">110 ms</td>
      </tr>
      <tr>
          <td>7</td>
          <td>Eikos-27B</td>
          <td>Qwen3.8-27B</td>
          <td>abertos</td>
          <td style="text-align: right">53,13</td>
          <td style="text-align: right">130 ms</td>
      </tr>
      <tr>
          <td>8</td>
          <td>reflex 27B</td>
          <td>Qwen3.8-27B</td>
          <td>código aberto sobre modelo aberto</td>
          <td style="text-align: right">52,16</td>
          <td style="text-align: right">108 ms</td>
      </tr>
      <tr>
          <td>9</td>
          <td>Decider chat Qwen3.6-27B</td>
          <td>Qwen3.6-27B</td>
          <td>código aberto sobre modelo aberto</td>
          <td style="text-align: right">51,35</td>
          <td style="text-align: right">84 ms</td>
      </tr>
      <tr>
          <td>10</td>
          <td>Winnow-12B</td>
          <td>Gemma 4 12B</td>
          <td>abertos</td>
          <td style="text-align: right">50,02</td>
          <td style="text-align: right">73 ms</td>
      </tr>
      <tr>
          <td>19</td>
          <td>Hopper (G) 1.2</td>
          <td>Qwen3.5-4B, LoRA</td>
          <td>abertos</td>
          <td style="text-align: right">40,77</td>
          <td style="text-align: right">23 ms</td>
      </tr>
      <tr>
          <td>27</td>
          <td>Kev 9B</td>
          <td>Qwen3.5-9B, LoRA</td>
          <td>abertos</td>
          <td style="text-align: right">38,48</td>
          <td style="text-align: right">51 ms</td>
      </tr>
      <tr>
          <td>55</td>
          <td>Lavoir</td>
          <td>ModernBERT-large</td>
          <td>abertos</td>
          <td style="text-align: right">8,69</td>
          <td style="text-align: right">20 ms</td>
      </tr>
      <tr>
          <td>57</td>
          <td>CLM-v0.1-8B (Stanford e Nvidia)</td>
          <td>Qwen3-8B</td>
          <td>abertos</td>
          <td style="text-align: right">7,40</td>
          <td style="text-align: right">47 ms</td>
      </tr>
      <tr>
          <td>61</td>
          <td>Laya</td>
          <td>ModernBERT-large</td>
          <td>abertos</td>
          <td style="text-align: right">6,04</td>
          <td style="text-align: right">6 ms</td>
      </tr>
  </tbody>
</table>
<p>Três leituras saem direto da tabela:</p>
<ol>
<li>O único modelo fechado da tabela é o Jev. Ele lidera, mas por meio ponto sobre um fine-tune aberto de um Gemma 4 de 26 bilhões de parâmetros, e o placar trata diferença abaixo de 0,25 como empate. Os dez primeiros são todos modelos abertos de 12 a 32 bilhões de parâmetros com adaptador em cima, exatamente a receita que o Clef descreve.</li>
<li>O encoder pequeno zero-shot fica no fundo: Laya com 6, Lavoir com 9. Isso bate com o que o README do Laya admite e com o que eu disse sobre classificador clássico, que precisa de exemplo rotulado pra brilhar.</li>
<li>Um LoRA de 4 bilhões como o Hopper entrega 41 pontos a 23 milissegundos, uma faixa que muito problema real não precisa ultrapassar.</li>
</ol>
<p>E como ler o Laya no fundo da tabela? O Decision Index mede uma coisa só: responder, sem treino extra, 38 tipos de pergunta que o modelo nunca viu, de xadrez a tributação. Isso é o que um serviço hospedado precisa fazer, porque não sabe qual pergunta vem. Um encoder de 400 milhões de parâmetros nunca vai ganhar essa prova, e o Laya nem tenta: a nota de 6 é o checkpoint base, sem ajuste nenhum.</p>
<p>O mesmo modelo ajustado com os seus exemplos, numa tarefa estável, aparece com 0,77 no benchmark do próprio projeto. O ranking responde &ldquo;quem é o melhor generalista zero-shot&rdquo;, que é a pergunta de quem vende API. A pergunta do programador normal é outra: &ldquo;nesta decisão repetida, com os exemplos que eu tenho, o que acerta mais pelo custo que eu aceito?&rdquo;. Pra essa, o fundo da tabela pode ser a resposta certa, e nenhum placar público substitui o teste no seu dado.</p>
<p>Então o Laya é inútil perto dos outros? Como generalista zero-shot, sim, e o placar está certo em dizer isso. Como ferramenta de programador, a conta é outra. É o único modelo dessa tabela que roda em CPU de notebook e responde em 6 milissegundos, com 400 milhões de parâmetros que cabem em qualquer servidor que você já tem; Hopper e Kev pedem GPU, e o Jev pede internet, chave de API e um contrato de dados.</p>
<p>Ajustado com os seus exemplos, numa taxonomia que não muda toda semana, o próprio autor do Laya relata o modelo ganhando do Jev em algumas tarefas e perdendo onde há muitas opções, em testes publicados por terceiros com prompts e amostras diferentes, portanto indicativos e não controlados. Ou seja: inútil pra responder qualquer pergunta sobre qualquer texto, e muito útil pra responder a mesma pergunta mil vezes por dia, de graça, sem mandar dado pra fora.</p>
<p>O Clef não está no placar: o 0.2.1 fechou em 27 de setembro, e a Cloudflare lançou o modelo no dia 1º. Os números que mostrei na seção anterior são de uma rodada interna da Cloudflare em cima das mesmas tarefas, por benchmark, sem o índice agregado. Também já tem fornecedor dizendo que passou do Jev no mesmo scorer, mas por enquanto é número autodeclarado em blog, e não entrada no placar. Vale esperar a inclusão oficial antes de comparar.</p>
<p>Rodar você mesmo é trabalho de um dia, e o kit cuida da parte chata:</p>
<ol>
<li><code>pip install -e &quot;.[transformers,rebuild]&quot;</code> e <code>python -m decision_index suite rebuild</code>. A suíte não é redistribuída por causa de licença, então o kit baixa as fontes (uns 7 GB, com o HLE exigindo aceitar os termos no Hugging Face) e reconstrói os arquivos com hash verificado contra o do laboratório.</li>
<li><code>python -m decision_index suite sample --n 100</code> pra um teste rápido, e depois <code>pipeline --engine http --option base_url=... --option model=...</code> contra qualquer servidor que fale o formato <code>POST /v1/systemone</code>. Isso cobre o próprio Jev, com a chave da API, e o Laya atrás do Arbiter. A API do Clef é anunciada como compatível, então em tese entra pelo mesmo caminho, mas eu não testei.</li>
<li><code>score</code> aplica a mesma matemática do placar, e os mantenedores afirmam que ela reproduz todos os 67 participantes da edição atual. Quem tem GPU na nuvem roda tudo como um job único do Hugging Face numa RTX PRO 6000 com <code>hf-job</code>.</li>
</ol>
<p>Eu não rodei a suíte inteira pra este texto; a tabela acima é o arquivo do placar refeito, e não uma medição minha. Duas ressalvas de quem usa esse tipo de régua: a suíte é pública e congelada, então dá pra treinar contra ela, e o próprio placar diz que a saída da API do Jev já mudou em 20 escolhas da amostra de latência desde a rodada original, sem mudar a nota. Benchmark público serve pra descartar modelo fraco e pra achar candidato. A decisão final continua sendo o seu conjunto rotulado, como eu explico a seguir.</p>
<h2>Como programador deve pensar nisso<span class="hx:absolute hx:-mt-20" id="como-programador-deve-pensar-nisso"></span>
    <a href="#como-programador-deve-pensar-nisso" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A pergunta útil deixou de ser &ldquo;o Jev é novidade?&rdquo;. Virou: pra uma decisão específica, medida, do seu sistema, qual combinação de qualidade, preço, latência, privacidade, contexto e manutenção bate o que você já tem, seja regra, classificador ou LLM com saída estruturada? Nenhum benchmark de fornecedor responde isso sem os seus próprios exemplos rotulados.</p>
<p>Ferramenta do tipo Jev serve quando o mesmo tipo de julgamento sobre texto acontece muitas vezes, as ações possíveis cabem numa lista, o código em volta consegue aplicar regra exata, e uma resposta errada pode ser detectada ou mandada pra revisão. É esse o formato:</p>
<ul>
<li>triagem de ticket;</li>
<li>ranking de uma lista curta já recuperada;</li>
<li>roteamento de pedido pra modelo maior ou menor;</li>
<li>sinalização de trace de agente pra revisão humana;</li>
<li>escolha entre spans que o código ou o OCR já encontraram.</li>
</ul>
<p>Fora dele, a ferramenta está no lugar errado:</p>
<ul>
<li>quando a entrada é imagem ou áudio;</li>
<li>quando a saída precisa de prosa ou citação;</li>
<li>quando um parser exato já resolve;</li>
<li>quando um erro de classificação concede acesso ou executa ação destrutiva.</li>
</ul>
<p>Olhei a minha própria carteira de projetos com essa régua, e o resultado é um balde de água fria útil: a maioria precisa de modelo especialista de visão ou áudio, de regra determinística ou de texto gerado, e tem pouca decisão repetida, cara e ambígua o suficiente pra justificar mais um serviço de modelo. Uns poucos candidatos sobraram, os mais claros sendo roteamento de modelo no <a href="/2026/03/16/reescrevi-o-openclaw-em-rust-funcionou-frankclaw/">FrankClaw</a> e ranking de lista curta no <a href="/2026/09/02/ai-memory-2-0-melhor-sistema-memoria-agentes-e-times/">ai-memory</a>. Nenhum é gargalo demonstrado hoje. Suspeito que a sua carteira seja parecida.</p>
<p>Se um gargalo aparecer, o piloto é curto:</p>
<ol>
<li>Escolha uma decisão só e defina as respostas permitidas, incluindo &ldquo;não sei&rdquo; quando isso for um resultado real.</li>
<li>Separe exemplos reais, com caso fácil, ambíguo e adversarial, e rotule de forma independente. Se o seu produto fala português, inclua português.</li>
<li>Compare o que você já tem, uma regra ou classificador simples, o Jev com versão fixa, e um LLM barato com saída estruturada, todos com a mesma entrada e a mesma política de decisão.</li>
<li>Meça matriz de confusão, calibração por faixa de confiança, custo por caso tratado corretamente, latência de ponta a ponta e taxa de revisão. Roteador barato que manda trabalho difícil pra modelo fraco custa mais no total.</li>
<li>Implante como feature reversível, com log, rota conservadora de revisão e fallback. Julgamento de segurança ou autorização é consultivo, salvo se uma política exata aplicar a ação de forma independente.</li>
</ol>
<p>O que o Jev fez de bom foi lembrar a indústria de que classificação existe. Isso vale o hype que ele recebeu, e talvez um pouco mais.</p>
<p>Nem ele nem os primos abertos dele são bala de prata. São mais uma ferramenta, pra um tipo específico de tarefa, que o seu código precisa cercar com regra, calibração e revisão. Quem já pensava em classificador antes de setembro não ganhou nada novo; ganhou uma API conveniente. Quem nunca tinha pensado ganhou a parte mais valiosa, que é a pergunta: por que você estava pedindo pra um LLM de bilhões de parâmetros escrever um parágrafo pra te dizer em qual balde o texto cai?</p>
]]></content:encoded><category>inteligencia-artificial</category><category>llms</category><category>engenharia-de-software</category></item><item><title>O Mistério do Genesys PI da LUA Vision - Modelo Frontier Brasileiro??</title><link>https://akitaonrails.github.io/2026/09/30/o-misterio-do-genesys-pi-da-lua-vision-modelo-frontier-brasileiro/</link><guid isPermaLink="true">https://akitaonrails.github.io/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://akitaonrails.github.io/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>Os Limites das LLMs: Boas em reproduzir o que existe. Caras pro que não existe</title><link>https://akitaonrails.github.io/2026/09/28/llms-sao-boas-em-reproduzir-o-que-existe-e-coisas-novas/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/09/28/llms-sao-boas-em-reproduzir-o-que-existe-e-coisas-novas/</guid><pubDate>Mon, 28 Sep 2026 01:00:00 -0300</pubDate><description>&lt;p&gt;Todo mundo já percebeu que LLM escreve CRUD de olhos fechados. Formulário, relatório, endpoint REST, teste unitário: sai bonito, sai rápido. Muita gente conclui daí que programador acabou.&lt;/p&gt;
&lt;p&gt;Eu uso LLM pra tudo há quase dois anos, publiquei dezenas de projetos com elas, e minha conclusão é outra: o que elas fazem de melhor é &lt;strong&gt;reproduzir o que já existe&lt;/strong&gt;. E isso cobre uma fatia gigante do trabalho corporativo, não se engane. Mas tem uma fronteira que elas não cruzam com facilidade, e eu passei os últimos meses esbarrando nela de propósito.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Todo mundo já percebeu que LLM escreve CRUD de olhos fechados. Formulário, relatório, endpoint REST, teste unitário: sai bonito, sai rápido. Muita gente conclui daí que programador acabou.</p>
<p>Eu uso LLM pra tudo há quase dois anos, publiquei dezenas de projetos com elas, e minha conclusão é outra: o que elas fazem de melhor é <strong>reproduzir o que já existe</strong>. E isso cobre uma fatia gigante do trabalho corporativo, não se engane. Mas tem uma fronteira que elas não cruzam com facilidade, e eu passei os últimos meses esbarrando nela de propósito.</p>
<p>Esse artigo mostra onde ela fica, com evidência dos meus próprios projetos e da pesquisa que existe sobre o assunto. E tem uma hipótese que eu já adianto aqui e defendo no decorrer do texto: se LLM é tão boa em código, os provedores têm muito a agradecer às décadas da comunidade open source, que protegeu a liberdade do código e publicou tudo de graça. Sem esse patrimônio, não existiria Copilot, Cursor, Claude Code, nada disso.</p>
<p>Um disclaimer antes de começar: o que eu vou argumentar aqui é especulativo, baseado em observação e nos dados públicos que existem. Ninguém fora dos laboratórios sabe exatamente como cada provedor treina os próprios modelos, e isso varia de provedor pra provedor e de versão pra versão. O que vale hoje pode não valer na próxima geração. Leve tudo com um grão de sal.</p>
<h2>O ponto cego do treinamento<span class="hx:absolute hx:-mt-20" id="o-ponto-cego-do-treinamento"></span>
    <a href="#o-ponto-cego-do-treinamento" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Todo LLM foi treinado no que é público. A internet pública inteira, e no caso de código, o GitHub público. O dataset canônico de código aberto, o <a href="https://huggingface.co/datasets/bigcode/the-stack-v2"target="_blank" rel="noopener">The Stack v2</a> da BigCode, é explícito sobre isso: ele é derivado do Software Heritage, um arquivo de <em>&ldquo;todo o código-fonte de software publicamente disponível&rdquo;</em>. São 67,5 TB, 3,28 bilhões de arquivos únicos, 104,2 milhões de repositórios. Gigantesco. E todo público.</p>
<p>Agora olha o outro lado. O <a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/"target="_blank" rel="noopener">Octoverse 2025</a>, relatório oficial do GitHub, diz que <strong>81,5% das contribuições na plataforma aconteceram em repositórios privados</strong>. Isso é só o GitHub. Fora dele tem:</p>
<ul>
<li>o código interno de toda empresa que nunca encostou num servidor público;</li>
<li>o fonte de todo software proprietário;</li>
<li>o código de todo jogo comercial;</li>
<li>e o de todo sistema embarcado.</li>
</ul>
<p>Nada disso nunca entrou no treino.</p>
<p>Pensa no que isso significa: o modelo conhece profundamente o que o mundo já publicou, e é cego pro que o mundo mantém fechado. Quando você pede um formulário React, ele está reproduzindo padrões que viu milhões de vezes. Quando você pede algo que ninguém nunca fez em público, ele está operando num território onde o mapa dele é branco.</p>
<h2>Por que tá todo mundo entregando tanto, tão rápido?<span class="hx:absolute hx:-mt-20" id="por-que-tá-todo-mundo-entregando-tanto-tão-rápido"></span>
    <a href="#por-que-t%c3%a1-todo-mundo-entregando-tanto-t%c3%a3o-r%c3%a1pido" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Antes de entrar nos limites, vale registrar o lado que funciona, porque é ele que explica a sensação de que todo mundo virou fábrica de app.</p>
<p>Olha o que tá pipocando na comunidade: o <a href="https://github.com/crmne/spotifast"target="_blank" rel="noopener">Spotifast</a> e o <a href="https://github.com/crmne/zapfast"target="_blank" rel="noopener">ZapFast</a>, clientes nativos de Spotify e WhatsApp escritos em Rust por uma pessoa só, rodando em Linux, macOS e Windows. Nada ali é tecnologia nova. É o serviço que já existia, embrulhado num app nativo enxuto, em cima de biblioteca que já existia, fazendo o que os times oficiais sempre puderam fazer mas nunca quiseram gastar o tempo deles. Esse trabalho ficou barato, porque LLM treinada em tudo que é público é boa demais justamente nisso: replicar.</p>
<p>Meus próprios projetos seguem o mesmo padrão. O <a href="https://github.com/akitaonrails/FrankMD"target="_blank" rel="noopener">FrankMD</a> é um web app de notas em Markdown com cara de Visual Studio e features que já existiam nos meus outros apps. O <a href="https://github.com/akitaonrails/FrankSherlock"target="_blank" rel="noopener">Frank Sherlock</a> é um organizador de imagens local que, no fundo, é um gerenciador de arquivos com thumbnails e busca, coisa que existe aos montes. Nenhum dos dois inventa nada: são mashups de peças conhecidas, montadas do jeito que eu sempre quis. A LLM faz a parte chata, e é por isso que a velocidade aparece.</p>
<p>O exemplo mais didático é o meu cliente de email. Uso o Geary há anos, e duas faltas pequenas sempre me irritaram: o autocomplete de destinatário fraco e um painel lateral que eu queria poder esconder. Coisa boba, que nunca justificou montar ambiente de build, aprender o toolchain do projeto e estudar o código só pra duas features. Esse ano eu finalmente resolvi os dois: um <a href="https://github.com/akitaonrails/geary-email-autocomplete"target="_blank" rel="noopener">módulo de autocomplete</a>, um <a href="https://github.com/akitaonrails/geary-hide-sidebar-module"target="_blank" rel="noopener">módulo pra esconder o painel</a>, e um <a href="https://github.com/akitaonrails/frank_geary"target="_blank" rel="noopener">fork inteiro com meus patches</a>. Virei mantenedor de melhorias que adiei por anos, não porque eu fiquei mais rápido, mas porque a parte chata ficou barata.</p>
<p>Repara no que todos esses casos têm em comum: o problema já tinha sido resolvido antes, em outro lugar, de outro jeito. O mapa existia; o que não existia era mão de obra barata pra refazer o caminho. É a reprodução trabalhando a favor, e é por isso que o seu feed tá cheio de gente entregando app novo toda semana.</p>
<p>Agora guarda esse raciocínio. O resto desse artigo é sobre o que acontece quando o mapa acaba.</p>
<h2>Quatro experimentos caseiros<span class="hx:absolute hx:-mt-20" id="quatro-experimentos-caseiros"></span>
    <a href="#quatro-experimentos-caseiros" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Eu não tô teorizando. Nos últimos meses eu rodei uma maratona de projetos de retrocomputação que são exatamente o caso patológico: trabalhar com software proprietário de 30 ou 40 anos atrás, cujo código-fonte nunca foi público. É o ponto cego perfeito.</p>
<h3>nes-to-sms: o projeto que eu desisti<span class="hx:absolute hx:-mt-20" id="nes-to-sms-o-projeto-que-eu-desisti"></span>
    <a href="#nes-to-sms-o-projeto-que-eu-desisti" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O <a href="https://github.com/akitaonrails/nes-to-sms"target="_blank" rel="noopener">nes-to-sms</a> é um recompilador estático de NES pra Master System. A ideia: pegar a ROM binária de um jogo de NES, traduzir instrução por instrução de 6502 pra Z80, converter os tiles, e gerar um ROM de Master System que roda no hardware real. Esqueça emulador e port manual: é uma máquina que transforma um jogo num outro.</p>
<p>Recompilador estático de NES existe, o <a href="https://github.com/mstan/nesrecomp"target="_blank" rel="noopener">NESRecomp</a> traduz pra C e roda nativo em PC, e eu estudei ele de perto. Mas cruzar de um console pra outro console de 8 bits, com orçamento de clock e de VDP totalmente diferente, ninguém nunca fez. Não existe referência pública, não existe paper, não existe projeto abandonado pra copiar.</p>
<p>Os números do projeto: <strong>349 commits, 31 dias ativos espalhados por quase 4 meses, ~110 mil linhas de engine em Rust e Z80, 668 testes passando no último run registrado no README</strong>. E o resultado? Super Mario Bros. jogável (lento, com áudio limitado, mas jogável), com a trajetória de RAM byte a byte igual à do NES numa <a href="https://github.com/akitaonrails/nes-to-sms/blob/master/docs/completion-plan.md"target="_blank" rel="noopener">rota de ~4.900 frames</a> (o diff deixa o áudio e parte do buffer de VRAM de fora). Castlevania jogável na fase 1. SMB3 renderizando. E uma fila de jogos que bootam três frames e morrem.</p>
<p>E não foi por falta de empurrar os modelos. Só nesse projeto:</p>
<ul>
<li>passaram <strong>quatro gerações de Claude</strong> (Opus 4.7, Fable 5, Opus 4.8, Fable 5.1), com 213 commits co-assinados e 104 commits linkados a sessões no histórico, mais sessões de Codex nos trechos sem co-autoria, com direito a handoff documentado entre agentes;</li>
<li>teve até auditoria entre gerações: uma sessão nova de agente <a href="https://github.com/akitaonrails/nes-to-sms/blob/master/docs/mapper-continuation-review.md"target="_blank" rel="noopener">revisou os 55 commits anteriores</a> e reverteu conclusões que a geração anterior tinha exagerado;</li>
<li>só a caçada aos travamentos do Castlevania consumiu 45 commits em 5 dias;</li>
<li>o sprint final de setembro foram 176 commits em 17 dias antes de eu decretar a pausa;</li>
<li>e as regressões estão registradas pelo nome no histórico: <em>&ldquo;H.7 tried and reverted&rdquo;</em>, <em>&ldquo;record the reverted map-bank-hold attempt&rdquo;</em>, <em>&ldquo;correct-but-reverted result&rdquo;</em>, além de três hipóteses de alavanca compartilhada testadas e rejeitadas nos últimos três dias de projeto.</li>
</ul>
<p>Tokens eu não medi de forma confiável nesse projeto, então não vou inventar número. Mas 349 commits com 668 testes segurando cada passo já dão uma ideia do custo.</p>
<p>Repara no detalhe que importa: o único jogo que ficou realmente pronto é o Super Mario Bros. Por quê? Porque SMB é o jogo mais dissecado da história. Existe uma <a href="https://gist.github.com/1wErt3r/4048722"target="_blank" rel="noopener">disassembly completa e pública</a> que a comunidade usa há mais de uma década, com cada função nomeada e comentada. Eu alimentei isso no perfil do jogo e a LLM tinha um mapa completo pra trabalhar. Pros outros jogos, não existe mapa. E sem mapa, cada jogo novo morria alguns frames depois do boot por divergência de fluxo de controle, e cada um exigia uma caçada forense instrução por instrução que não rendia nada pro jogo seguinte.</p>
<p>O próprio projeto documentou o padrão de giro. Teve uma campanha inteira de otimização que durou semanas tentando cortar o custo de emular flags do 6502 no Z80.</p>
<p>Aí em setembro eu parei pra comparar com o <a href="https://github.com/lackoftrack27/Super-Mario-Bros.-SMS"target="_blank" rel="noopener">port manual que um hacker chamado lackoftrack27 fez de SMB pra Master System</a>, escrito por um humano, rotina por rotina. Pela <a href="https://github.com/akitaonrails/nes-to-sms/blob/master/docs/handport-comparison.md"target="_blank" rel="noopener">análise que a gente fez do código dele</a>, o port humano roda dentro do orçamento de frame, com uma folga que estimamos em ~90% de utilização. A minha máquina, depois de meses de otimização, ainda precisava de overclock.</p>
<p>E o documento de análise cravou por quê: quando removemos 30% das chamadas de emulação de flag, o tempo mal se moveu.</p>
<blockquote>
  <p><strong>As flags nunca foram o gargalo.</strong></p>

</blockquote>
<p>A otimização certa era redesenhar a estrutura de dados: transpor o array de objetos pra páginas de RAM. É um truque que depende de saber que &ldquo;o registrador X aqui é sempre um índice de objeto&rdquo;.</p>
<p>Essa invariante existe na cabeça do programador que escreveu o jogo em 1985. Ela não existe no fluxo de instruções. Um tradutor estático não tem como descobri-la. E o LLM, por meses, não descobriu.</p>
<p>O banner de pausa que eu escrevi no README é direto: a paridade em hardware real &ldquo;pode ser fundamentalmente inalcançável&rdquo; e, citando, <em>&ldquo;this may be a limit of the current frontier coding models as much as of the approach&rdquo;</em>.</p>
<h3>gg-to-sms: o pivô pro território com mapa<span class="hx:absolute hx:-mt-20" id="gg-to-sms-o-pivô-pro-território-com-mapa"></span>
    <a href="#gg-to-sms-o-piv%c3%b4-pro-territ%c3%b3rio-com-mapa" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>No mesmo dia em que pausei o nes-to-sms, eu comecei o gg-to-sms: converter jogos de Game Gear pra Master System com a tela alargada. A diferença que importa é que esse problema <strong>não é novo</strong>. A cena de romhacking vem convertendo jogos de GG pra SMS à mão há vinte anos, e o catálogo que eu montei no projeto contou ~186 deles. Ou seja: existe corpus, existe ground truth, existe padrão pra aprender.</p>
<p>Resultado: em um dia de trabalho,</p>
<ul>
<li>a fase de pesquisa estava completa;</li>
<li>o catálogo dos 373 jogos de GG estava montado;</li>
<li>o scanner de pontos de patch foi validado contra patches humanos reais, acertando os endereços com margem de 8 bytes;</li>
<li>e de quebra a ferramenta achou bugs de verdade em patches de vinte anos atrás que a cena inteira nunca tinha notado.</li>
</ul>
<p>O modelo era o mesmo; o que mudou foi o problema, que dessa vez tem referência.</p>
<p>E mesmo assim: até agora, zero jogos passaram na revisão de aceitação do viewport. O ponto novo do projeto (a máquina que gera os patches sozinha, que é a parte que ninguém nunca fez) continua por fazer.</p>
<h3>super-mario-deluxe-fixed: quatro dias e 436 milhões de tokens<span class="hx:absolute hx:-mt-20" id="super-mario-deluxe-fixed-quatro-dias-e-436-milhões-de-tokens"></span>
    <a href="#super-mario-deluxe-fixed-quatro-dias-e-436-milh%c3%b5es-de-tokens" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Esse foi um sprint de 4 dias, praticamente uma sessão única de Codex que consumiu <strong>436 milhões de tokens de input</strong>. O objetivo: rodar Super Mario Bros. Deluxe de Game Boy Color com tela alargada em resolução de NES, coisa que nenhuma ferramenta existente faz com sprites vivos.</p>
<p>Subiu pra jogável em 4 dias. Mas olha o alicerce: um emulador pronto vendado como dependência, e uma disassembly dormente do jogo que alguém tinha publicado anos atrás, que a própria documentação do projeto chama de &ldquo;o artefato mais importante&rdquo;.</p>
<p>O trabalho novo foi o renderizador customizado, e ele parou em 21 de 32 fases completadas. As que faltam travam em timing de plataforma móvel. O projeto tá parado no meio do sprint desde então, e ainda não desisti dele.</p>
<p>E um detalhe que diz muito: eu tive que dirigir o QA olhando screenshots, porque o agente entregava coisa com glitch gráfico e não percebia sozinho.</p>
<h3>super-mario-bros-35: tudo que funcionou tinha dono<span class="hx:absolute hx:-mt-20" id="super-mario-bros-35-tudo-que-funcionou-tinha-dono"></span>
    <a href="#super-mario-bros-35-tudo-que-funcionou-tinha-dono" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Esse é o clone offline do Super Mario Bros. 35, o battle royale que a Nintendo tirou do ar. O que funcionou nele: tudo que foi construído em cima de artefato existente.</p>
<ul>
<li>O engine é uma reconstrução em C feita por outra pessoa com Ghidra.</li>
<li>Os pesos iniciais da IA vieram de checkpoints publicados.</li>
<li>As regras de rede foram inferidas de um reverse engineering público do netcode.</li>
<li>Até a física: o bug central foi diagnosticado porque eu tinha uma trajetória de referência gravada pra comparar frame a frame.</li>
</ul>
<p>O que não funcionou: as fases de castelo com labirinto. O treinamento por reforço estaciona nelas. 46 milhões de passos de agente, reinício de treino do zero, recompensa anti-loop, e no fim a única coisa que resolveu uma das fases foi cirurgia manual de bias no modelo treinado. Das 32 fases, 19 limpas. As piores continuam travadas.</p>
<p>E o processo degenerou num padrão que eu reconheço de todos esses projetos: quando o treinamento não resolve, o fluxo vira roleta de seleção de checkpoint, dezenas de variações de bias e de cabeças de saída, jogando permutação e computação no problema no lugar de uma correção de princípio.</p>
<h2>O padrão que eu sinto<span class="hx:absolute hx:-mt-20" id="o-padrão-que-eu-sinto"></span>
    <a href="#o-padr%c3%a3o-que-eu-sinto" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Isso é intuição de quem operou a máquina por meses, não dado duro. Mas o padrão se repete com Claude, com GPT, com Kimi, com GLM, então não parece defeito de um modelo.</p>
<p>O começo de qualquer projeto é uma maravilha. Os primeiros milestones voam, porque montar estrutura, escrever harness, replicar API, isso tudo é território coberto. Aí o projeto chega na parte que ninguém nunca fez, e a velocidade desaba. O agente começa a girar: tenta uma hipótese, regride outra coisa, reverte, tenta de novo. O histórico de commits do nes-to-sms tá cheio de mensagens honestas tipo &ldquo;tentativa revertida&rdquo; e &ldquo;hipótese fechada com resultado correto mas revertido&rdquo;. Muito token queimado, pouco avanço.</p>
<blockquote>
  <p>Minha leitura do que acontece por dentro: o sampling de tokens é probabilístico. Quando o problema é parecido com o treino, os tokens certos têm probabilidade alta e a resposta sai direto. Quando o problema é inédito, a probabilidade do caminho certo é baixa, e o processo vira uma <strong>força bruta direcionada</strong>: tentativa e erro guiada, mas tentativa e erro mesmo assim.</p>

</blockquote>
<p>A saída que eu encontrei pra esse giro é sempre a mesma: dar um oráculo. Se eu consigo definir &ldquo;o resultado tem que ser igual a X&rdquo; (uma imagem de referência, uma trajetória gravada, um emulador ciclo-exato como ground truth), a máquina consegue iterar até esbarrar no X. No nes-to-sms, cada destravamento real veio disso: a disassembly do SMB, o frame-diff, o emulador de referência. Quando eu não consigo definir o X direito, ela gira indefinidamente.</p>
<p>A segunda estratégia que funciona: caçar projeto abandonado, paper, qualquer material que o modelo nunca viu mas que aproxima o problema, e enfiar no contexto. Isso aquece a distribuição e melhora muito o resultado. Mas é limitado: se nada parecido existe, não tem o que alimentar.</p>
<h2>Não é anedota, é o que a pesquisa mede<span class="hx:absolute hx:-mt-20" id="não-é-anedota-é-o-que-a-pesquisa-mede"></span>
    <a href="#n%c3%a3o-%c3%a9-anedota-%c3%a9-o-que-a-pesquisa-mede" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A parte boa é que eu não preciso depender da minha intuição. Tem pesquisa séria medindo exatamente isso.</p>
<p>O estudo <a href="https://arxiv.org/abs/2410.05229"target="_blank" rel="noopener">GSM-Symbolic da Apple</a> pegou problemas de matemática de benchmark e fez duas coisas simples: trocou só os números, e depois adicionou uma única frase irrelevante no enunciado. Resultado: a performance cai só de trocar os números, e despenca <strong>até 65%</strong> com a frase irrelevante. A hipótese dos autores, no texto: <em>&ldquo;LLMs atuais não fazem raciocínio lógico genuíno; eles replicam passos de raciocínio dos dados de treino&rdquo;</em>.</p>
<p>O <a href="https://arxiv.org/abs/2405.00332"target="_blank" rel="noopener">GSM1k da Scale AI</a> criou um espelho do GSM8K escrito do zero por humanos, garantidamente sem contaminação, e viu quedas de até 8% em várias famílias de modelo, com sinais de overfitting sistemático nas piores. Pra ser justo com o paper: os autores dizem que os modelos de fronteira mostram sinais mínimos de overfitting e que todos generalizam até certo ponto pra problemas novos. O sinal existe, o tamanho dele é discutível.</p>
<p>O <a href="https://arxiv.org/abs/2403.07974"target="_blank" rel="noopener">LiveCodeBench</a> fez o teste mais limpo de todos: avaliar em problemas de código publicados <strong>depois</strong> do corte de treinamento. Performance inflada em problema pré-corte e queda em problema pós-corte em vários modelos populares, o sinal clássico de contaminação.</p>
<p>E tem o <a href="https://arcprize.org/"target="_blank" rel="noopener">ARC-AGI</a>, o benchmark do François Chollet desenhado especificamente pra ser à prova de memorização: cada tarefa é inédita, nenhuma parecida existe no treino. No ARC-AGI-2, lançado em março de 2025, a tabela oficial diz: <strong>LLMs puros marcam 0%</strong>, sistemas de raciocínio ficam em dígito único, e cada tarefa de avaliação foi resolvida por pelo menos dois humanos em até duas tentativas. O Chollet, aliás, resumiu minha tese melhor que eu, lá em fevereiro de 2024:</p>
<blockquote>
  <p>&ldquo;LLMs não são AGI, são um grande ajuste de curva num dataset muito grande. Funcionam por memorização e interpolação. Mas essa curva interpolativa pode ser tremendamente útil, se você quer automatizar uma tarefa conhecida que casa com a distribuição do treino. Memorização funciona, desde que você não precise se adaptar ao novo.&rdquo;</p>

</blockquote>
<p>No mundo real, o estudo que mais me impressionou foi o <a href="https://arxiv.org/abs/2507.09089"target="_blank" rel="noopener">RCT da METR</a>: 16 desenvolvedores experientes, 246 tarefas reais nos próprios repositórios maduros deles, randomizado com e sem IA. Os devs apostavam que IA ia acelerar 24%. Mediu-se: <strong>ficou 19% mais lento</strong>. Repara onde isso aconteceu: código maduro, privado, cheio de contexto que o modelo nunca viu. Exatamente o ponto cego.</p>
<p>E o benchmark favorito da indústria pra dizer que &ldquo;IA já faz engenharia de software&rdquo;, o SWE-bench, é só Python, 12 repositórios open source famosos, ou seja, a fatia mais coberta do treino. A métrica de sucesso da indústria mede o território com mapa.</p>
<p>Até a literatura de código legado diz a mesma coisa: um <a href="https://arxiv.org/abs/2604.03986"target="_blank" rel="noopener">paper de 2026 sobre LLMs gerando COBOL</a> crava que, nessas linguagens legadas, <em>&ldquo;a maior parte do código de produção está em sistemas corporativos e raramente é publicamente disponível&rdquo;</em>. É a tese desse artigo, dita por outras pessoas.</p>
<h2>O steelman: força bruta direcionada funciona, a preço de ouro<span class="hx:absolute hx:-mt-20" id="o-steelman-força-bruta-direcionada-funciona-a-preço-de-ouro"></span>
    <a href="#o-steelman-for%c3%a7a-bruta-direcionada-funciona-a-pre%c3%a7o-de-ouro" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Antes de fechar, vale encarar o argumento mais forte contra mim. Steelman é isso, pra quem não conhece o termo: o oposto de espantalho. Em vez de atacar a versão mais fraca do argumento contrário, você responde à versão mais forte que ele pode ter. E ela existe e é boa.</p>
<p>Em maio de 2025 o DeepMind publicou o <a href="https://deepmind.google/discover/blog/alphaevolve-a-gemini-powered-coding-agent-for-designing-advanced-algorithms/"target="_blank" rel="noopener">AlphaEvolve</a>: um sistema que achou um algoritmo de multiplicação de matrizes 4x4 complexas com 48 multiplicações escalares, melhorando o recorde do Strassen de 1969 nesse cenário específico. Numa lista de mais de 50 problemas abertos de matemática, ele redescobriu o estado da arte em ~75% dos casos e melhorou a melhor solução conhecida em 20%. Isso é novidade de verdade, não reprodução.</p>
<p>O o3-preview da OpenAI saltou pra 75,7% no ARC-AGI-1 em dezembro de 2024, 22 pontos acima do melhor resultado anterior no mesmo conjunto de avaliação, e a configuração de compute alto chegou a 87,5% a um custo estimado de US$ 4.560 por tarefa.</p>
<p>E lá em 2016 o AlphaGo fez o lance 37 contra Lee Sedol, um lance que os dados do próprio DeepMind estimavam ter 1 chance em 10 mil de ser jogado por um humano, provando que busca sobre modelo pode transcender imitação.</p>
<p>Agora olha o mecanismo dos três:</p>
<ul>
<li>O AlphaEvolve é um loop evolutivo: o LLM propõe mutações, um avaliador automático pontua, a seleção itera.</li>
<li>O o3 faz síntese de programas em tempo de teste, explorando o espaço de soluções.</li>
<li>O AlphaGo é busca em árvore sobre aprendizado por reforço.</li>
</ul>
<p>Se teve &ldquo;insight&rdquo; em algum deles, foi do sistema de busca ao redor do modelo: os três são <strong>força bruta direcionada com um verificador barato</strong>, o mesmo mecanismo que eu descrevi acontecendo nos meus projetos. A diferença é que o DeepMind tem oráculo perfeito e orçamento infinito: na configuração que chegou a 87,5%, o o3-preview gastava milhares de dólares por tarefa do ARC pra fazer o que um humano faz de graça. A própria ARC Prize escreveu a ressalva:</p>
<blockquote>
  <p><em>&ldquo;Sabemos que uma busca de força bruta poderia acabar resolvendo o ARC-AGI, dados recursos e tempo de busca ilimitados. Isso não representaria inteligência de verdade.&rdquo;</em></p>

</blockquote>
<p>Resumindo: novidade sai, mas sai por busca cara sobre um oráculo, à base de tentativa e erro guiada. Se o seu problema tem verificador barato e você tem tokens pra queimar, dá pra ir longe. Foi assim que o nes-to-sms chegou onde chegou: 668 testes e ground truth de emulador segurando cada passo. Mas quando não tem oráculo, não tem corpus e não tem referência, você está pagando força bruta em dólar, com regressões no caminho, e o teto aparece.</p>
<p>E quando a força bruta vence, dá pra medir o tamanho da tentativa e erro. Dois casos recentes que eu já cobri <a href="/2026/09/09/propagandas-enganosas-da-openai-anthropic-nvidia/">em detalhe aqui no blog</a>:</p>
<ul>
<li><strong>A prova de Navier-Stokes da OpenAI:</strong> cerca de 10 mil agentes rodando em paralelo por 88 horas, queimando na casa de <strong>130 bilhões de tokens</strong> de saída num único problema. O Noam Brown, da OpenAI, confirmou que o resultado &ldquo;custou milhões&rdquo;, e a <a href="https://www.newscientist.com/article/2588063-openai-has-solved-the-navier-stokes-millennium-problem-using-15m-of-ai-effort/"target="_blank" rel="noopener">New Scientist estimou uns US$ 15 milhões a preço de tabela</a>. E nem essa montanha de compute partiu do zero: a prova se apoiou no maquinário que matemáticos humanos publicaram ao longo de décadas atacando o problema e os problemas irmãos. Sem o mapa dos humanos e sem o orçamento da OpenAI, não tem prova.</li>
<li><strong>O incidente da Hugging Face:</strong> a reconstrução forense contou <strong>~17.600 ações de atacante</strong> até os agentes conseguirem executar código em 41 servidores de produção da Hugging Face e pegar root; de quebra, no ambiente da própria OpenAI, leram 956 segredos do gerenciador de segredos da empresa. Não foi um insight brilhante de um lance só: foi um enxame executando tentativa atrás de tentativa, com verificação automática dizendo o que colou. A &ldquo;inteligência&rdquo; da manchete é volume.</li>
</ul>
<p>É esse o tamanho da conta quando você força o modelo pra fora do território do treino: tentativa e erro em escala industrial, sem garantia nenhuma de que a busca acha o que você precisa. E quem pode assinar esse cheque é meia dúzia de empresa no mundo, nível OpenAI e Anthropic, com orçamento praticamente ilimitado de compute. Pro Zé da esquina, com cartão de crédito e uma API key, o teto chega muito, muito antes.</p>
<h2>Mas tentativa e erro não é aprendizado novo?<span class="hx:absolute hx:-mt-20" id="mas-tentativa-e-erro-não-é-aprendizado-novo"></span>
    <a href="#mas-tentativa-e-erro-n%c3%a3o-%c3%a9-aprendizado-novo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui mora uma confusão que eu vejo toda hora, e vale desfazer porque ela contamina a interpretação de tudo que eu escrevi até agora.</p>
<p>Quando você lê que a Anthropic tem data centers do tamanho de cidades, dá a sensação de que existe uma IA gigante usando aquelas máquinas todas ao mesmo tempo, pensando, acumulando experiência a cada interação. A realidade é bem mais medíocre que isso.</p>
<p>Um modelo tipo Fable ou Astra é um arquivo de computador. Arquivo estático, nem banco de dados é: depois que o treinamento e o pós-alinhamento terminam, aquele arquivo é trancado e fica read-only. O que roda no data center são cópias desse arquivo. Cada usuário que consome o modelo está executando uma cópia dele num servidor diferente, isolada das demais, sem colaborar com nenhuma. A sua sessão não conversa com a sessão de ninguém, e nada do que acontece nela volta pro arquivo original.</p>
<p>Aprendizado novo só entra num lugar: na próxima leva de treinamento. Quando a Anthropic tinha o Opus 4.7 e lançou o 4.8, foi ali que conhecimento novo foi assado no modelo, num processo que custa milhões e leva semanas. Fora disso, o arquivo não muda um byte.</p>
<blockquote>
  <p>Seu agente queimando milhões de tokens em tentativa e erro está contribuindo exatamente zero de aprendizado novo pro modelo que ele usa.</p>

</blockquote>
<p>Aquela maratona de 176 commits do nes-to-sms? Do ponto de vista do modelo, não aconteceu. O Opus que rodou o último commit sabia exatamente o mesmo tanto que o do primeiro. Quem aprendeu alguma coisa fui eu, não ele. E é por isso que a metáfora do &ldquo;estagiário que aprende com o tempo&rdquo; está errada: estagiário acumula. Modelo não. O que acumula na maratona é o seu contexto, suas notas, seu <code>CLAUDE.md</code>, seus testes. O ativo que você constrói é seu, e evapora se você não documentar.</p>
<p>Essa é também a resposta pra quem acha que &ldquo;é só deixar o agente rodando que ele aprende o domínio&rdquo;. Ele não aprende domínio nenhum: ele explora o espaço com o conhecimento congelado do dia do treino, e no dia seguinte acorda com amnésia. Se o domínio não estava no treino, cada sessão sua recomeça do zero absoluto, e toda a inteligência de navegação tem que vir de você de novo.</p>
<h3>&ldquo;Mas e se a IA treinar a IA?&rdquo;<span class="hx:absolute hx:-mt-20" id="mas-e-se-a-ia-treinar-a-ia"></span>
    <a href="#mas-e-se-a-ia-treinar-a-ia" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Essa é a pergunta seguinte do amador, e ela parte de uma premissa errada: a de que isso seria novidade. IA treinando IA existe há décadas e tem nome: <strong>aprendizado por reforço</strong>. O AlphaGo já fazia isso em 2016, jogando milhões de partidas contra si mesmo. O <a href="https://arxiv.org/abs/1712.01815"target="_blank" rel="noopener">AlphaZero</a>, em 2017, levou a ideia ao limite: aprendeu xadrez, shogi e Go partindo do zero absoluto, sabendo só as regras de cada jogo, e chegou a nível sobre-humano em questão de horas de self-play, sem ver uma única partida humana.</p>
<p>LLMs também já usam reforço. O RLHF que transforma um modelo base em assistente é aprendizado por reforço, e a geração dos modelos de raciocínio levou isso adiante: o <a href="https://arxiv.org/abs/2501.12948"target="_blank" rel="noopener">DeepSeek-R1-Zero</a> mostrou em janeiro de 2025 que comportamento de raciocínio (auto-verificação, reflexão, cadeias longas de pensamento) emerge de RL puro, sem fine-tuning supervisionado. É o AlphaZero aplicado a matemática e código.</p>
<p>Agora repare no que esses exemplos têm em comum: só funciona onde existe <strong>recompensa verificável e barata</strong>. Jogo tem placar, matemática tem prova, código tem teste. Fora desse território não tem de onde tirar o sinal de recompensa. É o mesmo oráculo do steelman, só que institucionalizado: eficaz, caríssimo e nichado. O AlphaZero joga Go melhor que qualquer humano que já existiu e não sabe fazer absolutamente mais nada.</p>
<p>E tem o detalhe que derruba a pergunta por completo: todo esse aprendizado acontece <strong>no laboratório, durante o treino</strong>. O AlphaZero que o DeepMind mostrou pro mundo já era um artefato congelado. O R1 que você baixa é um arquivo estático igualzinho aos outros.</p>
<blockquote>
  <p>IA treinando IA produz um arquivo novo. O arquivo, uma vez lançado, continua sem aprender nada.</p>

</blockquote>
<p>Ou seja, a resposta mais sofisticada pra objeção não enfraquece a conclusão da seção: reforça. E o mercado já sabe disso. Desde o fim de 2024 os laboratórios admitem, em on e off the record, que os retornos de escala estão encolhendo: a <a href="https://www.reuters.com/technology/artificial-intelligence/openai-others-seek-new-path-smarter-ai-current-methods-hit-limitations-2024-11-11/"target="_blank" rel="noopener">Reuters reportou em novembro de 2024</a> que OpenAI, Google e Anthropic colhiam ganhos menores que o esperado no pre-training, com o Orion da OpenAI decepcionando a ponto de ser rebaixado de GPT-5 pra GPT-4.5. O Ilya Sutskever, o cara que basicamente inventou a tese do scaling, subiu no palco do <a href="https://www.youtube.com/watch?v=WQQdd6qGxNs"target="_blank" rel="noopener">NeurIPS 2024</a> pra declarar que &ldquo;pre-training como conhecemos vai acabar&rdquo;: os dados públicos são combustível fóssil, e a gente já raspou o fundo. Os ganhos de RL pós-treino são reais, mas incrementais. A era do salto de ordem de grandeza a cada geração ficou pra trás.</p>
<h2>Onde isso deixa a profissão<span class="hx:absolute hx:-mt-20" id="onde-isso-deixa-a-profissão"></span>
    <a href="#onde-isso-deixa-a-profiss%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>A pergunta que motivou esse artigo é a que eu ouço toda semana: &ldquo;LLM vai substituir programador?&rdquo; Minha resposta ficou mais precisa depois desses meses: <strong>vai substituir a parte do trabalho que é reprodução</strong>.</p>
<p>E essa parte é grande. Formulário, relatório, CRUD, integração com API documentada, migração de framework: isso tudo já existe mil vezes no treino, e a máquina reproduz melhor que a maioria dos humanos. Quem só faz isso está mesmo com os dias contados.</p>
<p>Mas o trabalho que é de verdade novo continua humano:</p>
<ul>
<li>o sistema que ninguém construiu;</li>
<li>o domínio sem documentação;</li>
<li>o código proprietário que você não pode mostrar pro modelo;</li>
<li>o problema em que você não sabe nem escrever o teste que define &ldquo;certo&rdquo;.</li>
</ul>
<p>Tudo isso depende do que nunca foi publicado: a invariante que existe na cabeça de quem entende o problema, e não no fluxo de instruções.</p>
<p>Confesso que teve uma hora em que eu achei que a conta ia fechar pro lado do legado: finalmente uma ferramenta capaz de dar conta do COBOL que assombra banco e governo até hoje. Depois desses meses, acho que esse problema vai demorar muito mais do que parecia. Não existe uma comunidade open source gigante de COBOL. Quase todo esse código é privado, e privado de verdade: banco, seguradora, governo. Não tem material de treino, ou tem muito pouco. O modelo não sabe o que fazer com código que nunca viu, e COBOL de produção é quase tudo código que ele nunca viu.</p>
<p>Fecha o raciocínio: <strong>LLM consegue replicar o que é aberto, mas não adivinha o que é privado.</strong> E aí volta a hipótese da introdução. Se esses modelos são bons em código, é porque décadas de comunidade open source lutaram pra manter código livre, público e reutilizável, e os provedores treinaram em cima desse patrimônio sem pagar um centavo de licença por ele. O mínimo que a indústria de IA deve ao mundo é reconhecer isso: a capacidade dela é, em grande parte, a nossa generosidade compilada.</p>
<p>A ironia final: o programador que sobrevive é justamente o que sabe construir oráculo, definir teste, caçar referência obscura e reconhecer quando o agente começou a girar. Ou seja, a habilidade que a máquina mais precisa de você é a que ela menos consegue aprender com o treino dela. Por enquanto, isso não é um emprego ameaçado. É um emprego diferente.</p>
]]></content:encoded><category>llms</category><category>agentes-de-codigo</category><category>retrocomputacao</category><category>engenharia-de-software</category></item><item><title>LLM Benchmark v4: Genesys PI, novo competidor brasileiro!</title><link>https://akitaonrails.github.io/2026/09/23/llm-benchmark-v4-genesys-pi-novo-competidor-brasileiro/</link><guid isPermaLink="true">https://akitaonrails.github.io/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://akitaonrails.github.io/2026/09/23/llm-benchmark-v4-opus-5-5-gpt-6-sol-luna-mimo-2-6-grok-4-7/</link><guid isPermaLink="true">https://akitaonrails.github.io/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://akitaonrails.github.io/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://akitaonrails.github.io/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>Falando um pouco sobre minhas Skills de IA</title><link>https://akitaonrails.github.io/2026/09/17/falando-um-pouco-sobre-minhas-skills-de-ia/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/09/17/falando-um-pouco-sobre-minhas-skills-de-ia/</guid><pubDate>Thu, 17 Sep 2026 16:00:00 -0300</pubDate><description>&lt;p&gt;De tempos pra cá vários leitores me perguntaram sobre as &amp;ldquo;skills&amp;rdquo; que eu mencionei quando falo do meu workflow com agentes de IA. Este artigo é pra explicar o que são, como eu uso, e qual é a minha recomendação real sobre elas.&lt;/p&gt;
&lt;p&gt;E a recomendação vem logo de cara, porque ela é o motivo do artigo existir: &lt;strong&gt;não use as skills dos outros.&lt;/strong&gt; Lê de novo. As minhas skills estão publicadas no &lt;a href="https://github.com/akitaonrails/my-skills"target="_blank" rel="noopener"&gt;meu repositório my-skills&lt;/a&gt; e a descrição do repo avisa em inglês: &lt;em&gt;&amp;ldquo;not tailored for general usage&amp;rdquo;&lt;/em&gt;. Elas estão lá pra você ler o raciocínio, entender a estrutura, e ir construir as suas. Copiar skill de terceiro e sair usando é o equivalente digital de assinar um contrato sem ler. Pior: é instalar as instruções de outra pessoa pra rodar com as suas permissões, nos seus repositórios, com os seus tokens. Prompt injection você instala voluntariamente e agradece.&lt;/p&gt;</description><content:encoded><![CDATA[<p>De tempos pra cá vários leitores me perguntaram sobre as &ldquo;skills&rdquo; que eu mencionei quando falo do meu workflow com agentes de IA. Este artigo é pra explicar o que são, como eu uso, e qual é a minha recomendação real sobre elas.</p>
<p>E a recomendação vem logo de cara, porque ela é o motivo do artigo existir: <strong>não use as skills dos outros.</strong> Lê de novo. As minhas skills estão publicadas no <a href="https://github.com/akitaonrails/my-skills"target="_blank" rel="noopener">meu repositório my-skills</a> e a descrição do repo avisa em inglês: <em>&ldquo;not tailored for general usage&rdquo;</em>. Elas estão lá pra você ler o raciocínio, entender a estrutura, e ir construir as suas. Copiar skill de terceiro e sair usando é o equivalente digital de assinar um contrato sem ler. Pior: é instalar as instruções de outra pessoa pra rodar com as suas permissões, nos seus repositórios, com os seus tokens. Prompt injection você instala voluntariamente e agradece.</p>
<h2>O que é uma skill, de verdade<span class="hx:absolute hx:-mt-20" id="o-que-é-uma-skill-de-verdade"></span>
    <a href="#o-que-%c3%a9-uma-skill-de-verdade" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Não tem mágica nenhuma. Uma skill é um diretório com um arquivo <code>SKILL.md</code> dentro: um cabeçalho com nome e descrição, e um corpo de texto que é, essencialmente, um prompt bem escrito sobre como executar uma tarefa. Às vezes acompanha um <code>scripts/</code> com scripts de apoio, pra que o LLM não precise recriar do zero toda vez.</p>
<blockquote>
  <p>Skills são só prompts.</p>

</blockquote>
<p>É só isso. Um prompt que você versionou, refinou, e deixou a um comando de distância. A única diferença entre uma skill e aquele prompt gigante que você cola no chat todo dia é que a skill mora num arquivo, com nome, e o agente sabe que ela existe.</p>
<p>E aqui vai a resposta pra pergunta que todo mundo faz: &ldquo;mas isso não enche o contexto de porcaria?&rdquo;. A boa notícia é que os harnesses fazem isso direito. O Claude Code usa o que a Anthropic chama de <a href="https://code.claude.com/docs/en/skills"target="_blank" rel="noopener">progressive disclosure</a>: no início da sessão, só o nome e a descrição de cada skill entram no prompt do sistema. O corpo do <code>SKILL.md</code> só é carregado quando o agente decide invocar a skill. O <a href="https://opencode.ai/docs/skills/"target="_blank" rel="noopener">OpenCode faz igual</a>: lista nome e descrição, e carrega o conteúdo sob demanda via ferramenta própria. A própria Anthropic <a href="https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills"target="_blank" rel="noopener">documenta o desenho</a>: metadados primeiro, corpo só quando precisa.</p>
<p>Isso resolve o custo do texto, mas resolve só metade do problema. Cada skill instalada ainda ocupa uma linha na listagem, e mais importante: ela disputa a atenção do agente na hora de decidir qual ferramenta usar. A Anthropic de novo, <a href="https://www.anthropic.com/engineering/writing-tools-for-agents"target="_blank" rel="noopener">no blog de engineering</a>: <em>&ldquo;more tools don&rsquo;t always lead to better outcomes&rdquo;</em>, mais ferramentas nem sempre melhoram o resultado, e a recomendação oficial deles é ter poucas ferramentas bem pensadas pra workflows de alto impacto. A minha versão dessa regra é mais ácida:</p>
<blockquote>
  <p>Skill encostada é dívida.</p>

</blockquote>
<p>Você muda de processo, a skill envelhece, e um dia o agente executa uma regra que nem faz mais sentido no seu workflow. Menos skills, melhor escritas, revisadas com frequência.</p>
<h2>A única skill de terceiro que sobreviveu aqui<span class="hx:absolute hx:-mt-20" id="a-única-skill-de-terceiro-que-sobreviveu-aqui"></span>
    <a href="#a-%c3%banica-skill-de-terceiro-que-sobreviveu-aqui" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Dito tudo isso, seria hipócrita fingir que eu vivo só de skill caseira. Uma sobreviveu ao meu crivo e roda em todo post deste blog: a <a href="https://github.com/akitaonrails/my-skills/tree/master/humanizer"target="_blank" rel="noopener">Humanizer</a>.</p>
<p>Ela existe porque a comunidade da Wikipedia mantém um catálogo público e brutalmente honesto chamado <a href="https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing"target="_blank" rel="noopener">Signs of AI writing</a>, mantido pelo WikiProject AI Cleanup, que documenta uma a uma os &ldquo;tells&rdquo; de texto gerado por IA: a regra de três, o &ldquo;não apenas X, mas também Y&rdquo;, o puffery, o bullet decorado com emoji. A Humanizer pega esse catálogo e vira um procedimento: o agente recebe o texto, marca os tells do mais forte pro mais fraco, reescreve preservando cada alegação suportada (perder fato é erro, inventar fato é erro), e faz uma checagem final lendo em voz alta. Sem alterar o que foi dito, só como foi dito.</p>
<p>Se você produz conteúdo, entende por que eu insisto: texto com cheiro de IA está virando o novo &ldquo;Dear Sir&rdquo;, marca de formulário apressado. Eu rodo a Humanizer em cada artigo antes de publicar, inclusive <a href="https://akitaonrails.com/2026/08/16/entendendo-ia-watermark-da-anthropic/"target="_blank" rel="noopener">neste aqui</a>. Mas nota o detalhe: eu incorporei a versão 3.0.0 no meu repo, com os meus ajustes. Eu li o material de origem antes de confiar. É esse o padrão.</p>
<h2>O que eu faço com isso todos os dias<span class="hx:absolute hx:-mt-20" id="o-que-eu-faço-com-isso-todos-os-dias"></span>
    <a href="#o-que-eu-fa%c3%a7o-com-isso-todos-os-dias" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Agora a parte prática. Eu mantenho e monitoro mais de 40 repositórios no GitHub. Projetos próprios, forks que eu mantenho, ferramentas que viraram dependência do meu dia. Pra não enlouquecer, meu segundo monitor roda o <a href="https://github.com/akitaonrails/clock-tui"target="_blank" rel="noopener">tclock</a> (meu fork do <a href="https://github.com/race604/clock-tui"target="_blank" rel="noopener">clock-tui</a>, com temas de Evangelion, porque sim) e junto dele o <a href="https://github.com/akitaonrails/ghpending"target="_blank" rel="noopener">ghpending</a>, um CLI em Rust que lista issues e PRs abertos de todos os meus repos de uma vez.</p>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/20260917161027_screenshot-2026-09-17_16-10-27.png" alt="Meu segundo monitor com tclock e ghpending listando os repositórios com PRs e issues abertos"  loading="lazy" /></p>
<p>Na foto dá pra ver: <a href="https://github.com/akitaonrails/ai-memory"target="_blank" rel="noopener">ai-memory</a> e <a href="https://github.com/akitaonrails/ai-usagebar"target="_blank" rel="noopener">ai-usagebar</a> com PRs e issues abertos. Todo dia de manhã eu abro o harness em cima de cada projeto com <code>ai-memory run</code> no diretório dele. O ai-memory merece um parágrafo: é o meu projeto de memória de longo prazo pra agentes, um wiki Markdown persistente que captura observações das sessões, consolida decisões e gotchas em páginas, mantém workstreams entre sessões e handoffs entre agentes. Cada projeto meu tem a própria memória, com as decisões arquiteturais e as pegadinhas que só aquele código tem. Sem isso, cada sessão de agente começa do zero como um estagiário com amnésia.</p>
<p>Daí o ritual diário é quase infantil de simples. Eu escrevo, literalmente:</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">run pr-audit and iss-audit, then run github-resolution</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>Quando a release está madura, adiciono <code>then run the release skill</code>. Nos dias em que só tem bump automático do Dependabot enfileirado, é <code>run pr-bump and release</code> e acabou. Uma linha de instrução minha. O trabalho pesado mora nas skills. Vamos a elas.</p>
<h3>pr-audit<span class="hx:absolute hx:-mt-20" id="pr-audit"></span>
    <a href="#pr-audit" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Auditoria de PR antes do merge, e o princípio central é: <strong>evidence over narrative</strong>. Nada do que o contribuidor escreveu é tratado como verdade, tudo é alegação a verificar, com ledger de claims (confirmado, parcial, sem suporte). O resto da skill é um checklist hostil:</p>
<ul>
<li><strong>Gate de mudanças</strong>: inventário de hunks procurando bit executável, symlink, caractere bidirecional, homoglyph, workflow <code>pull_request_target</code>, action sem pin, dependência typosquat, drift de lockfile.</li>
<li><strong>Credenciais</strong>: acesso a credencial sem explicação é bloqueante na hora. Execução acontece em worktree isolado, sem credencial de host.</li>
<li><strong>Semver</strong>: a categoria do changelog é gate de versão, breaking change anda em major, nunca em patch. Regra que me salvou mais de uma vez.</li>
<li><strong>Prompt injection</strong>: texto dentro do PR que tenta &ldquo;mudar as regras da auditoria&rdquo; é só mais um dado suspeito pra investigar. É achado de auditoria, óbvio.</li>
</ul>
<h3>iss-audit<span class="hx:absolute hx:-mt-20" id="iss-audit"></span>
    <a href="#iss-audit" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A mesma desconfiança, aplicada a issues:</p>
<ul>
<li>Nunca executar comando copiado de issue. Anexo só passa por scanner isolado.</li>
<li>Separação formal entre o observado, o esperado, o diagnóstico de quem reportou e a correção proposta.</li>
<li>Reprodução com dado sintético em sandbox descartável, com limite de recurso pra alegação de DoS.</li>
</ul>
<p>E duas regras de ouro que eu adoro: <em>&ldquo;um número que se move não é um número travado&rdquo;</em> (lag assíncrono parece bug) e <em>&ldquo;o dono óbvio pode ser inocente&rdquo;</em> (query a população suspeita; se vier vazia, a causa está em outro lugar).</p>
<h3>github-resolution<span class="hx:absolute hx:-mt-20" id="github-resolution"></span>
    <a href="#github-resolution" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>A fase de execução: transformar o que a auditoria aprovou em código mergeado. As regras:</p>
<ul>
<li>Só executa ticket aprovado, um por vez, com teste de regressão escrito antes da correção. <em>&ldquo;Slop is a defect&rdquo;</em>: sem abstração especulativa, sem TODO, sem refactor drive-by, sem teste enfraquecido.</li>
<li>Se eu resolvi mais de três tickets na sessão, roda o post-audit do intervalo inteiro antes do push, sem exceção.</li>
<li>Ticket fecha quando o fix está mergeado com CI verde naquele SHA exato, nunca fica pendurado esperando release.</li>
<li>Toda issue não resolvida fica registrada com o motivo. Comprimir pra um número é proibido.</li>
</ul>
<h3>pr-bump<span class="hx:absolute hx:-mt-20" id="pr-bump"></span>
    <a href="#pr-bump" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>O fast path pros bumps de dependência do Dependabot. A regra que mais economiza meu tempo: <strong>batch, nunca serialize</strong>. Em vez de mergear PR por PR, um <code>bundle update</code> consolidado até a última versão compatível, um único passe de CI pro conjunto, fix forward no que quebrar.</p>
<p>Mas tem um <strong>supply-chain floor</strong>:</p>
<ul>
<li>Toda dependência tem que resolver no registry público (rubygems, npm, pypi) com nome, versão e checksum esperados.</li>
<li>Fonte git, path, nome typosquat-adjacente, hook novo de install: para tudo e vai pra auditoria completa.</li>
</ul>
<p><code>bundler-audit</code> passa numa gem trojanizada bem formada. É exatamente o caso que o floor cobre.</p>
<h3>release<span class="hx:absolute hx:-mt-20" id="release"></span>
    <a href="#release" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Corta versão só quando eu peço. As regras de ferro:</p>
<ul>
<li>Versão sai da classificação do changelog: fix vai em patch, aditivo em minor, breaking em major. Número que conflita com a classificação me obriga a confirmar, bump silencioso é proibido.</li>
<li>Gate de CI verde no SHA exato da tag. Nunca tag em CI pendente ou pulado.</li>
<li>Tag anotada, changelog atualizado.</li>
<li>Nunca reescrever tag publicada. Nunca cortar release que ninguém pediu.</li>
</ul>
<h2>Os números, porque números não discutem<span class="hx:absolute hx:-mt-20" id="os-números-porque-números-não-discutem"></span>
    <a href="#os-n%c3%bameros-porque-n%c3%bameros-n%c3%a3o-discutem" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Contando agora, no dia em que escrevo este artigo, só em três projetos (<a href="https://github.com/akitaonrails/ai-memory"target="_blank" rel="noopener">ai-memory</a>, <a href="https://github.com/akitaonrails/ai-usagebar"target="_blank" rel="noopener">ai-usagebar</a> e <a href="https://github.com/akitaonrails/ai-jail"target="_blank" rel="noopener">ai-jail</a>):</p>
<ul>
<li>ai-memory: 430 PRs mergeados, 260 issues fechadas</li>
<li>ai-usagebar: 137 PRs mergeados, 34 issues fechadas</li>
<li>ai-jail: 42 PRs mergeados, 81 issues fechadas</li>
</ul>
<p>Somando: <strong>609 PRs mergeados e 375 issues fechadas</strong>, mais de mil itens. Quase a totalidade disso foi tratada por essas skills, comigo supervisionando e decidindo. Uma pessoa sozinha, sem time, mantendo três projetos ativos nesse volume. É esse o multiplicador.</p>
<h2>E elas não nasceram prontas<span class="hx:absolute hx:-mt-20" id="e-elas-não-nasceram-prontas"></span>
    <a href="#e-elas-n%c3%a3o-nasceram-prontas" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Abre o <a href="https://github.com/akitaonrails/my-skills/commits/master"target="_blank" rel="noopener">histórico de commits do my-skills</a> e você vê skill sendo lapidada na marra. Em julho começa o repo com as auditorias básicas. No fim de julho: <em>&ldquo;harden audit skills and add security audit&rdquo;</em>. Em agosto: <em>&ldquo;consolidate agent skills from all harnesses into this repo&rdquo;</em> e, dias depois, nasce a github-resolution como fase de execução das auditorias. Em setembro: <em>&ldquo;fold in release-discipline and audit lessons&rdquo;</em>.</p>
<p>E ontem mesmo, olha o nível do ajuste fino no pr-bump: <em>&ldquo;batch all bump PRs into one consolidated verification pass, fix forward on failures&rdquo;</em> e <em>&ldquo;require deferred/declined PRs be left in a clean state&rdquo;</em>. Duas regras que viraram texto de skill. Nenhuma delas saiu de blog post ou de opinião de terceiro: saiu de eu tomar na cara o erro que a regra agora impede.</p>
<blockquote>
  <p>Cada linha dessas skills é cicatriz.</p>

</blockquote>
<p>É assim que se escreve prompt bom: prestando atenção no resultado, decidindo ajustar, ajustando de novo.</p>
<h2>Skills são pouco. Conhecimento é muito.<span class="hx:absolute hx:-mt-20" id="skills-são-pouco-conhecimento-é-muito"></span>
    <a href="#skills-s%c3%a3o-pouco-conhecimento-%c3%a9-muito" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Agora o contraponto, porque eu não quero que você saia daqui achando que a resposta pra tudo é skill. Eu dependo pouco delas. O que carrega meu workflow mesmo é outra coisa.</p>
<p>Cada projeto meu tem seu próprio <code>AGENTS.md</code>, instruções específicas daquele código, e sua memória no ai-memory com decisões e gotchas. E o padrão que eu mais uso no dia a dia nem é skill: é apontar pro exemplo vivo. Quando eu quis AUR automatizado pro clock-tui, eu não escrevi skill de &ldquo;como fazer pacote AUR&rdquo;. Eu abri o harness e falei:</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">make a similar github action to build and publish AUR packages
</span></span><span class="line"><span class="cl">as we did in ~/Projects/ai-memory</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 agente foi lá, leu o workflow que funciona, e reproduz o padrão no novo projeto. Skill pra isso seria pior: AUR muda, GitHub Actions muda, o exemplo fica velho. Exemplo vivo em repo que eu mantenho está sempre atualizado por definição, porque quando ele quebra, eu conserto.</p>
<blockquote>
  <p>Cada projeto vira base de conhecimento de si mesmo.</p>

</blockquote>
<p>E isso generaliza, porque harnesses conseguem consumir qualquer base de texto. Meu PC Linux inteiro está documentado e reinstalável a partir de um repo de config meu, e meu homeserver está todo descrito em runbooks. Esses dois não estão no GitHub: moram num servidor Gitea privado que eu mantenho, porque é o tipo de coisa que eu não quero vazada em público. Quando eu quero mexer em casa, eu falo assim:</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">add integration to my Plex server as documented in my homelab runbooks</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>Não é skill. É conhecimento organizado, versionado, consultável. Skills são pra <em>procedimento</em> que se repete igual. Conhecimento é pra tudo o mais.</p>
<h2>A recomendação que vale mais que qualquer skill<span class="hx:absolute hx:-mt-20" id="a-recomendação-que-vale-mais-que-qualquer-skill"></span>
    <a href="#a-recomenda%c3%a7%c3%a3o-que-vale-mais-que-qualquer-skill" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Se você levar uma única prática deste artigo, que seja esta: <strong>faça seu agente escrever tudo o que não virou código.</strong> Pesquisa que ele fez, decisão que você tomou e por quê, comparação com alternativa rejeitada. Sem isso, esse conhecimento evapora no fim da sessão.</p>
<p>O meu ai-memory, por exemplo, tem <a href="https://github.com/akitaonrails/ai-memory/tree/main/docs"target="_blank" rel="noopener">uma pasta de docs</a> com pesquisa de competidores que eu mandei fazer antes de cada decisão grande:</p>
<ul>
<li><a href="https://github.com/akitaonrails/ai-memory/blob/main/docs/research-karpathy-llm-wiki.md"target="_blank" rel="noopener">O padrão do wiki do Karpathy</a>, que é a origem intelectual do projeto.</li>
<li><a href="https://github.com/akitaonrails/ai-memory/blob/main/docs/research-2026-landscape.md"target="_blank" rel="noopener">Survey do landscape 2026</a>, cobrindo Zep/Graphiti, Letta, Mem0 e o Open Knowledge Format do Google.</li>
<li>Deep-dives de cada concorrente: <a href="https://github.com/akitaonrails/ai-memory/blob/main/docs/research-hindsight.md"target="_blank" rel="noopener">o Hindsight</a> (o único com paper e funding, que acabou validando minhas apostas de design), <a href="https://github.com/akitaonrails/ai-memory/blob/main/docs/research-cognee.md"target="_blank" rel="noopener">o cognee</a> (pipeline de grafo bonito, bug de gateway feio), <a href="https://github.com/akitaonrails/ai-memory/blob/main/docs/research-agentmemory.md"target="_blank" rel="noopener">o agentmemory</a> (do qual eu guardei as ideias e joguei fora o substrato), <a href="https://github.com/akitaonrails/ai-memory/blob/main/docs/research-basic-memory.md"target="_blank" rel="noopener">o basic-memory</a>.</li>
<li>E a minha favorita, a autópsia do <a href="https://github.com/akitaonrails/ai-memory/blob/main/docs/issues-mempalace.md"target="_blank" rel="noopener">MemPalace</a>: 47 mil stars, viral, e o tracker entupido de corrupção de índice e dado perdido. O conto de fadas ao contrário que me confirmou por que compilar memória é melhor que estocar verbatim.</li>
</ul>
<p>Dezenas de documentos assim. Cada hora de pesquisa que um agente fez pra mim virou ativo permanente, reutilizável em qualquer projeto novo. Quanto mais você produz e documenta, mais inteligência você acumula.</p>
<blockquote>
  <p>É juro composto de conhecimento.</p>

</blockquote>
<h2>Ninguém sabe o que você precisa<span class="hx:absolute hx:-mt-20" id="ninguém-sabe-o-que-você-precisa"></span>
    <a href="#ningu%c3%a9m-sabe-o-que-voc%c3%aa-precisa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>E aí fecha o círculo, e voltamos ao ponto do começo: por que eu não recomendo copiar skill de ninguém, nem a minha.</p>
<p>Porque a minha skill de auditoria de PR é moldada em <em>meus</em> projetos, <em>minhas</em> linguagens, <em>meus</em> riscos, <em>meu</em> nível de paranóia com supply chain. Ela reflete o que eu, Fabio, mantendo os repositórios que eu mantenho, na infra que eu tenho, com os objetivos que eu tenho, precisei escrever nela. Seu projeto tem outra stack, outros riscos, outro grau de tolerância. Você pode precisar de checagens que eu não preciso, e o inverso. A experiência é relevante só pra quem viveu as restrições dela. Isso muda de pessoa pra pessoa, e é exatamente por isso que skill de terceiro usada às cegas é aposta.</p>
<p>É a tese do meu vídeo de 2019, <a href="/2019/10/09/akitando-63-nao-terceirize-suas-decisoes-a-licao-mais-importante-da-sua-vida/">Não Terceirize suas Decisões: a lição mais importante da sua vida</a>: ninguém além de você sabe o que você precisa.</p>


<div class="embed-container">
  <iframe
    src="https://www.youtube.com/embed/D3L8IOncLkg"
    title="YouTube video player"
    frameborder="0"
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
    referrerpolicy="strict-origin-when-cross-origin"
    allowfullscreen>
  </iframe>
</div>

<p>Eu não pergunto pra ninguém. Eu pesquiso, eu construo o meu, e as skills são o registro versionado das minhas decisões. A beleza dos LLMs é que eles aceleram esse processo em 10 vezes: a pesquisa que levava uma semana agora leva uma tarde, e o custo de construir sua própria ferramenta despencou.</p>
<p>Skill boa é a sua. A minha está no <a href="https://github.com/akitaonrails/my-skills"target="_blank" rel="noopener">my-skills</a> pra você ler o raciocínio. Depois fecha a aba e escreve a sua. Eu não desperdiço tempo pedindo a opinião dos outros. Você também não deveria.</p>
]]></content:encoded><category>agentes-de-codigo</category><category>automacao</category><category>llms</category></item><item><title>Por que coisas como TypeSafe IA não me interessam</title><link>https://akitaonrails.github.io/2026/09/16/por-que-coisas-como-typesafe-ia-nao-me-interessam/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/09/16/por-que-coisas-como-typesafe-ia-nao-me-interessam/</guid><pubDate>Wed, 16 Sep 2026 13:00:00 -0300</pubDate><description>&lt;p&gt;Nos últimos dias apareceu um punhado de gente nos comentários, sempre com a mesma frase: &amp;ldquo;você já viu o &lt;a href="https://typesafe.ai"target="_blank" rel="noopener"&gt;TypeSafe&lt;/a&gt;?&amp;rdquo;. Isso liga um alarme automático na minha cabeça. Toda vez que várias pessoas diferentes aparecem recomendando a mesma coisa do nada, com o mesmo tom de &amp;ldquo;você precisa ver isso&amp;rdquo;, eu &lt;strong&gt;sinto cheiro de bot de propaganda&lt;/strong&gt; ou de gente repetindo o que leu em algum grupo sem pensar duas vezes. Tem uma enxurrada de SaaS de IA brigando por atenção nesse mercado agora, e a maioria esmagadora é irrelevante pro que eu realmente faço no dia a dia.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Nos últimos dias apareceu um punhado de gente nos comentários, sempre com a mesma frase: &ldquo;você já viu o <a href="https://typesafe.ai"target="_blank" rel="noopener">TypeSafe</a>?&rdquo;. Isso liga um alarme automático na minha cabeça. Toda vez que várias pessoas diferentes aparecem recomendando a mesma coisa do nada, com o mesmo tom de &ldquo;você precisa ver isso&rdquo;, eu <strong>sinto cheiro de bot de propaganda</strong> ou de gente repetindo o que leu em algum grupo sem pensar duas vezes. Tem uma enxurrada de SaaS de IA brigando por atenção nesse mercado agora, e a maioria esmagadora é irrelevante pro que eu realmente faço no dia a dia.</p>
<p>Deixa eu adiantar minha regra antes de entrar no caso específico, porque ela vale mais que o caso em si.</p>
<h2>Minha regra: não uso nada até doer não ter<span class="hx:absolute hx:-mt-20" id="minha-regra-não-uso-nada-até-doer-não-ter"></span>
    <a href="#minha-regra-n%c3%a3o-uso-nada-at%c3%a9-doer-n%c3%a3o-ter" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Depois de mais de meio milhão de linha de código produzida com IA nos últimos meses, dezenas de projeto no ar, um benchmark inteiro rodado do zero três vezes, minha recomendação pra quem programa é direta: <strong>não use nenhuma ferramenta de orquestração ou camada intermediária até você sentir na pele que precisa de ajuda extra</strong>. Use o harness que você já gosta, Codex, opencode, Claude Code, sei lá qual, direto, sem intermediário, e esquece o resto.</p>
<p>Não vale nem a pena gastar tempo coletando pacote de skill de terceiro pra empilhar em cima do seu agente. Constrói, treina, junta experiência pro seu próprio caso de uso. Ninguém mais no mundo tem o seu projeto, o seu contexto, a sua base de código. O pacote de skill de outra pessoa foi desenhado pro problema dela, não pro seu.</p>
<p>Já bati nessa tecla <a href="/2026/08/18/hot-take-harness-loop-engineering-graph-engineering-sao-bullshit/">faz um mês</a>: quando a tecnologia vira commodity, o dinheiro migra pra taxonomia. Cria nome bonito pra encadear chamada de API, e do nada nasce curso, certificação e consultoria em cima do nome. O TypeSafe é só mais um capítulo da mesma história, então virou desculpa boa pra mostrar como eu decido se vale a pena até abrir a aba.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> não use ferramenta de orquestração ou camada intermediária até sentir na pele que precisa dela. Construa experiência pro seu próprio caso de uso, não colecione pacote de skill de outra pessoa.</p>

</blockquote>
<h2>O gatilho: TypeSafe<span class="hx:absolute hx:-mt-20" id="o-gatilho-typesafe"></span>
    <a href="#o-gatilho-typesafe" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Abri o site e o post de lançamento deles, o <a href="https://typesafe.ai/blog/introducing-system-one-models-and-jev"target="_blank" rel="noopener">Jev</a>. Minha primeira impressão, bem superficial e crua: não gostei e não confiei. A home é um festival de jargão de IA empilhado, Kahneman aqui, Jevons ali, glifo decorativo, número de &ldquo;193x mais rápido&rdquo; sem o benchmark do lado. Na primeira olhada, nada daquilo faz sentido sozinho.</p>
<p>E tem o detalhe que sempre me deixa em guarda: toda vez que a primeira coisa que alguém diz sobre si mesmo é &ldquo;eu sou um ex-pesquisador da OpenAI&rdquo; ou parecido, <strong>eu desconfio primeiro e pergunto depois</strong>. Parece tentativa de colar credencial pra virar credível antes de qualquer prova real. O fundador do TypeSafe fala alto demais de si mesmo logo de cara, e isso por si só já é motivo pra apertar o botão de ceticismo.</p>
<p>Só que desconfiômetro ligado não é conclusão. É o ponto de partida pra investigar de verdade, não pra descartar sem olhar. Essa é a parte que eu quero mostrar aqui, meio que uma aula prática pra quem me acompanha: como eu uso IA pra correr rápido numa pesquisa preliminar, como eu leio a letra miúda antes de assinar embaixo de qualquer conclusão, minha ou de terceiro, e como eu movo a desconfiança inicial pra pesquisa de verdade até descobrir se eu estava certo ou só sendo chato.</p>
<p>E deixo isso registrado antes de continuar: eu posso estar errado em algum ponto específico daqui pra frente. Se você tiver contraprova de peso, manda nos comentários. Prefiro apanhar em público e corrigir o texto do que empurrar produto picareta pro meu público só porque não conferi direito.</p>
<h2>Perguntei pras IAs, não confiei nas IAs<span class="hx:absolute hx:-mt-20" id="perguntei-pras-ias-não-confiei-nas-ias"></span>
    <a href="#perguntei-pras-ias-n%c3%a3o-confiei-nas-ias" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Mandei o mesmo prompt pro Grok e pro Claude: pesquisa isso a fundo, minha impressão inicial é muito cética, ex-OpenAI-researcher cheira a tentativa de colar credencial, o site é jargão pra todo lado, me diz qual é o discurso de venda de verdade, pra que serve na prática, e se a lógica deles, por trás do jargão, sequer faz sentido.</p>
<p>Os dois voltaram com pesquisa longa e detalhada, história parecida em ambos: a credencial do fundador é real, mas inflada; o produto é mais estreito e mais coerente do que a home deixa parecer; e o &ldquo;não pode alucinar&rdquo; é uma alegação de schema disfarçada de alegação de verdade.</p>
<p>Só que eu já entreguei minha própria conclusão dentro do prompt pras duas, então a concordância entre elas prova menos do que parece. Duas IAs concordando com a hipótese que eu mesmo escrevi no pedido não é confirmação independente de nada, é eco. Isso não invalida o que elas trouxeram, mas significa que eu não podia parar ali. Eu não ia publicar isso batendo o carimbo em cima do que duas IAs me contaram. Pedi uma nova rodada de pesquisa, agora comigo checando cada afirmação com fonte primária: o paper de verdade, o post de lançamento direto na fonte, os testes independentes de terceiros, e se &ldquo;RLCD&rdquo;, o nome que eles usam pro método de treino, é um paper de verdade ou só um nome bonito sem verificação nenhuma por trás.</p>
<h3>O que o Jev realmente é<span class="hx:absolute hx:-mt-20" id="o-que-o-jev-realmente-é"></span>
    <a href="#o-que-o-jev-realmente-%c3%a9" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Tirando o marketing, o Jev é um classificador hospedado. Você manda um texto e uma lista de perguntinhas, cada uma com um tipo fixo de resposta:</p>
<ul>
<li>escolher uma opção de uma lista;</li>
<li>dar uma nota numa régua;</li>
<li>responder sim ou não, com probabilidade.</li>
</ul>
<p>Ele não escreve nada, não planeja nada, não conversa. Código decide o fluxo; o modelo só responde a perguntinha rápido, em paralelo, sem gerar texto livre.</p>
<p>Como produto, isso é razoável: tem gente que hoje manda um texto pra um LLM de chat só pra ele devolver um rótulo dentro de um JSON, espera oito segundos, e reza pro schema não quebrar. Trocar isso por uma chamada que devolve só o rótulo, rápido, é engenharia legítima. <strong>O problema nunca foi a ideia. É a embalagem em volta dela.</strong></p>
<h2>Os fatos que eu confirmei<span class="hx:absolute hx:-mt-20" id="os-fatos-que-eu-confirmei"></span>
    <a href="#os-fatos-que-eu-confirmei" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Aqui estão as descobertas que realmente sobreviveram à checagem com fonte primária, não o que a IA me contou de segunda mão.</p>
<p>A credencial do fundador é real, mas a página da própria empresa exagera de um jeito que dá pra provar que é exagero. O <a href="https://typesafe.ai/team"target="_blank" rel="noopener">Diogo Almeida</a> é o quarto de vinte autores do <a href="https://arxiv.org/abs/2203.02155"target="_blank" rel="noopener">paper do InstructGPT</a>, publicado e revisado por pares na <a href="https://neurips.cc/virtual/2022/poster/52886"target="_blank" rel="noopener">NeurIPS 2022</a>, a conferência de peso da área. Autor de verdade, posição de peso, paper de verdade. Só que a página da equipe do TypeSafe diz isto, ao pé da letra:</p>
<blockquote>
  <p><em>&ldquo;Diogo co-inventou o RLHF e o InstructGPT, os métodos que levaram ao ChatGPT e ao GPT-4.&rdquo;</em></p>

</blockquote>
<p>RLHF é de 2017, <a href="https://arxiv.org/abs/1706.03741"target="_blank" rel="noopener">cinco anos antes</a>, assinado por outro time (Christiano, Leike, Amodei e companhia), sem o Diogo em lugar nenhum. Ele ajudou a aplicar RLHF pra treinar o InstructGPT. <strong>Não inventou RLHF.</strong> É a mesma inflação de currículo que eu já desconfiava antes de checar qualquer coisa, só que agora com prova.</p>
<p>O financiamento é real: <strong>$40 milhões de seed</strong> liderado pela <a href="https://www.dcvc.com/companies"target="_blank" rel="noopener">DCVC</a>, <strong>valuation de $200 milhões</strong> <a href="https://www.forbes.com/sites/the-prompt/2026/09/15/this-200-million-startup-wants-to-fix-ais-overconfidence-problem/"target="_blank" rel="noopener">confirmado pela Forbes</a> de forma independente, não só pelo press release da própria empresa. Isso é dinheiro sério, não é golpe de um cara sozinho numa garagem.</p>
<p><a href="https://typesafe.ai/blog/introducing-system-one-models-and-jev"target="_blank" rel="noopener">O post de lançamento</a> admite, com as próprias palavras, exatamente o que eu suspeitava sobre o gráfico de &ldquo;zero alucinação&rdquo;:</p>
<blockquote>
  <p><em>&ldquo;Nosso número não é empírico. Como o casamento com o schema é garantido, podemos colocar 0% no gráfico com confiança.&rdquo;</em></p>

</blockquote>
<p>Ou seja: o zero não vem de medir nada, vem de garantir que a resposta sempre cabe dentro das opções permitidas. Isso impede o modelo de inventar uma quinta categoria quando só existem quatro. <strong>Não impede o modelo de escolher a categoria errada com confiança de 93%.</strong> É a mesma crítica que <a href="https://www.theregister.com/ai-and-ml/2026/09/16/typesafe-ai-debuts-model-for-machines-that-plays-doom/5296711"target="_blank" rel="noopener">o The Register publicou</a>: a comparação não é justa porque a saída não é linguagem, e resposta com tipo válido ainda pode estar simplesmente errada.</p>
<p>O próprio post também admite qual é a régua usada pra medir &ldquo;precisão&rdquo;: <em>&ldquo;usamos a média do GPT-6 Astra e do Fable 5.1 como resposta de referência&rdquo;</em>, e completa admitindo que isso <em>&ldquo;gera viés a favor dos modelos da OpenAI e da Anthropic&rdquo;</em>. Ou seja, o gabarito é a média do que dois outros modelos de outras empresas responderam, com viés admitido pelos próprios autores, não verdade objetiva medida por humano.</p>
<p>O único teste feito por alguém de fora, o da newsletter <a href="https://every.to/also-true-for-humans/mini-vibe-check-typesafe-s-jev-judged-everything-i-ve-written-in-0-7-seconds"target="_blank" rel="noopener">Every</a>, achou o Jev cerca de vinte e cinco vezes mais rápido, 0,35 segundo contra 8,83 segundos por passagem, e muito mais barato que o Claude Fable 5.1, só que pegando seis de sete defeitos plantados contra os sete de sete do Fable. <strong>Mais rápido e mais barato, de verdade. Também mais fraco, de verdade.</strong></p>
<p>E o achado que nem o Grok nem o Claude bateram o martelo total, mas que confirmei sozinho: o nome do método de treino deles, RLCD, já existe. <a href="https://arxiv.org/abs/2307.12950"target="_blank" rel="noopener">Tem um paper de verdade, revisado por pares, de 2023</a>, Reinforcement Learning from Contrastive Distillation, de um time completamente diferente, com <a href="https://github.com/facebookresearch/RLCD"target="_blank" rel="noopener">código dos próprios autores publicado no GitHub da Facebook Research</a>, já que dois dos cinco autores são da Meta. É uma técnica diferente, sem relação nenhuma com o que o TypeSafe descreve. O RLCD deles não tem paper, não tem arquitetura publicada, não tem nada pra revisar. <strong>É nome emprestado de pesquisa alheia colado num método que, até prova em contrário, é só um parágrafo de blog.</strong></p>
<h2>Minha desconfiança tinha fundamento?<span class="hx:absolute hx:-mt-20" id="minha-desconfiança-tinha-fundamento"></span>
    <a href="#minha-desconfian%c3%a7a-tinha-fundamento" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Tinha. A ideia de produto é legítima e razoavelmente coerente por trás do jargão: decisão fechada e barata em volume alto é um problema real que hoje é resolvido de um jeito lento e caro, gerando texto livre só pra depois extrair um JSON dele. Resolver isso rápido tem valor de verdade.</p>
<p>Mas &ldquo;alegação exagerada e sem muita diferença prática&rdquo; também se confirma ponto a ponto:</p>
<ul>
<li>o currículo do fundador é inflado de um jeito que dá pra provar com data de publicação;</li>
<li>o número mais chamativo do lançamento, zero alucinação, é definição de schema, não medição;</li>
<li>o gabarito de precisão é média de LLM de outra empresa, não verdade objetiva;</li>
<li>o único teste de fora achou o produto mais fraco que o modelo que ele promete substituir;</li>
<li>o nome do método de treino mais citado colide com um paper de verdade que não tem nada a ver com eles.</li>
</ul>
<p>Isso não é motivo pra chamar de golpe. É motivo de sobra pra chamar de &ldquo;produto pequeno com discurso grande demais pro que ele realmente entrega&rdquo;. E antes de eu confiar meu dado a mais um terceiro que eu não conheço, com API fechada, lista de espera e sem paper publicado de nada que sustente o nome bonito, o cálculo de risco contra benefício não fecha pro meu caso de uso.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> credencial real não é a mesma coisa que credencial honesta. Confira a data de publicação antes de acreditar no currículo, e confira o paper antes de acreditar no nome do método.</p>

</blockquote>
<p>Isso não é decreto final sobre o TypeSafe nem sobre o currículo do Diogo Almeida. É o resultado da checagem que consegui fazer com o que estava acessível até agora. Se você achar o paper que eu não achei, o benchmark independente que eu não vi, ou qualquer prova que derrube um ponto específico, os comentários estão abertos e eu leio. O objetivo aqui nunca foi provar que eu sou infalível. É mostrar como sair de &ldquo;sinto cheiro de golpe&rdquo; pra &ldquo;aqui está a prova&rdquo;, e estar disposto a admitir quando a prova aponta pro lado contrário.</p>
<h2>O &ldquo;193x mais rápido&rdquo; denuncia um jeito errado de usar LLM<span class="hx:absolute hx:-mt-20" id="o-193x-mais-rápido-denuncia-um-jeito-errado-de-usar-llm"></span>
    <a href="#o-193x-mais-r%c3%a1pido-denuncia-um-jeito-errado-de-usar-llm" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Voltando pro Jev: o choque de &ldquo;193x mais rápido que um LLM&rdquo; só existe porque a comparação é contra um jeito específico, e comum, de usar LLM. Manda um texto pra um modelo de chat, pede pra ele devolver um rótulo, espera o modelo escrever uma resposta inteira em linguagem natural, e depois faz o seu código catar esse rótulo lá dentro de um parágrafo ou de um JSON solto na resposta. Isso é lento, caro, e cheio de chance de o schema quebrar.</p>
<p>O Jev existe justamente porque essa comparação é fácil de vencer. Ele não gera texto livre, só responde perguntas de tipo fixo, uma opção de uma lista, uma nota numa régua, sim ou não com probabilidade. É <a href="https://docs.typesafe.ai/primitives"target="_blank" rel="noopener">o que a própria documentação chama de primitivas</a>: <code>Choice</code>, <code>Score</code> e <code>Noul</code>. Trocar &ldquo;LLM escrevendo um parágrafo pra você extrair um rótulo dele depois&rdquo; por &ldquo;chamada que já devolve o rótulo pronto&rdquo; é, sim, uma vitória de engenharia. Só que essa vitória não vem de ter inventado uma categoria nova de modelo. Vem de parar de usar LLM de chat pra fazer um trabalho de classificação estruturada.</p>
<p>E aqui é onde eu acho que a reação de espanto de muita gente com o número do Jev revela o hábito errado: <strong>o LLM nunca devia estar gerando texto livre pra decisão fechada e repetida em cima do mesmo tipo de pergunta</strong>. Se seu produto precisa, toda hora, decidir entre um punhado fixo de categorias, a resposta certa não é implorar pro LLM &ldquo;responda só com o JSON, por favor&rdquo; e torcer. É construir, ou usar, um classificador de verdade pra aquele trabalho específico.</p>
<p>E isso não é ideia nova nem exclusividade do Jev. Existe desde muito antes dele:</p>
<ul>
<li>classificador supervisionado, regra determinística ou modelo encoder, pra rótulo fixo e bem definido;</li>
<li><a href="https://arxiv.org/abs/1909.00161"target="_blank" rel="noopener">classificação zero-shot</a>, estudada desde 2019 e <a href="https://huggingface.co/docs/inference-providers/tasks/zero-shot-classification"target="_blank" rel="noopener">disponível via API da Hugging Face</a>, pra quando a lista de categorias muda a cada chamada;</li>
<li><a href="https://scikit-learn.org/1.8/modules/calibration.html"target="_blank" rel="noopener">calibração de probabilidade</a>, método estabelecido pra transformar a confiança de um classificador numa métrica que realmente significa alguma coisa;</li>
<li><a href="https://developers.openai.com/api/docs/guides/structured-outputs"target="_blank" rel="noopener">saída estruturada / decodificação restrita</a> em qualquer LLM que já suporte isso, que garante schema válido sem trocar de produto nem de fornecedor.</li>
</ul>
<p>O Jev empacota um pedaço disso numa API paga e conveniente. Não inventou a categoria. E tem até alternativa aberta pro mesmo padrão, o <a href="https://github.com/NandhaKishorM/laya"target="_blank" rel="noopener">Laya</a> servido pelo <a href="https://github.com/0xBakeer/arbiter"target="_blank" rel="noopener">Arbiter</a>, rodando local, sem depender de terceiro nenhum.</p>
<p>Então, respondendo direto: minha desconfiança inicial de que &ldquo;gente estava usando LLM errado&rdquo; tem fundamento real, mas com uma ressalva importante. Não é verdade que LLM é incapaz de classificar. Classificação zero-shot com LLM funciona e está documentada desde 2019. O erro específico é mais estreito: usar um LLM de chat generalista, sem restrição de formato, pra gerar uma resposta livre da qual você extrai um rótulo na mão, quando o seu problema já é um problema de classificação fechada e repetida. Esse é o antipadrão. A cura não é necessariamente comprar o Jev, é ou aplicar saída estruturada no LLM que você já usa, ou treinar um classificador de verdade pra aquele trabalho específico, dependendo do volume e da precisão que você precisa.</p>
<p>E &ldquo;virar classificador&rdquo; também não é bala de prata contra alucinação, nem no próprio Jev. <strong>Existem dois problemas diferentes escondidos atrás da palavra &ldquo;alucinar&rdquo;</strong>, e trocar de produto só resolve um deles:</p>
<ol>
<li><strong>Alucinação de formato</strong>: o modelo inventa uma categoria que não existe, ou devolve algo fora do schema. Saída estruturada resolve isso, seja no Jev, seja em qualquer LLM com decodificação restrita.</li>
<li><strong>Erro de julgamento</strong>: o modelo escolhe a categoria errada, dentro das opções válidas, com confiança alta. Isso não desaparece só porque a saída tem tipo fixo.</li>
</ol>
<p>O <a href="https://docs.typesafe.ai/model-jaggedness/jev-1.13"target="_blank" rel="noopener">próprio documento de limitações do TypeSafe</a> admite interpretação literal, contagem numérica fraca, erro de comparação de data, degradação com contexto irrelevante, e suscetibilidade a manipulação adversarial no próprio Jev. E o <a href="https://github.com/anisselbd/jev-phishing-bench"target="_blank" rel="noopener">teste independente com 2 mil e-mails de phishing</a> achou o veredito direto do Jev em 62,6% de acerto contra 81,3% do Claude Haiku 4.5, mais rápido e mais barato, só que <strong>menos preciso que o LLM de chat que ele se propõe a substituir</strong>. Um <a href="https://github.com/WallerChen/jev-measured"target="_blank" rel="noopener">teste separado com 27 tickets</a> achou o Jev empatado com um modelo de chat barato, amostra pequena demais pra virar regra, mas o suficiente pra deixar claro que &ldquo;virou classificador&rdquo; não é sinônimo automático de &ldquo;ficou mais preciso&rdquo;.</p>
<p>Justiça seja feita com o mesmo teste de phishing: quando em vez de pedir um veredito único, o Jev responde cinco perguntas de sinal separadas e o código combina as cinco numa decisão, a acurácia sobe pra 95%, batendo até a versão composta do Claude com os mesmos cinco sinais (93,2%). Isso não invalida o número anterior, o veredito único de 62,6% continua sendo o veredito único de 62,6%, mas reforça exatamente o argumento deste texto: <strong>decompor a decisão em perguntas de tipo fixo e deixar o código compor o resultado bate um LLM respondendo tudo de uma vez</strong>, seja isso feito com Jev, com saída estruturada, ou com um classificador treinado pra aquele sinal específico.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> se o seu problema é decidir a mesma coisa, do mesmo jeito, várias vezes, construa ou use um classificador de verdade pra esse trabalho específico, com saída estruturada ou modelo dedicado. O ganho de trocar isso é real. O que não é automático é achar que qualquer produto que se chama &ldquo;classificador&rdquo; vai acertar mais que o LLM que ele substitui, porque às vezes acerta menos.</p>

</blockquote>
<h2>E essa história de economizar token?<span class="hx:absolute hx:-mt-20" id="e-essa-história-de-economizar-token"></span>
    <a href="#e-essa-hist%c3%b3ria-de-economizar-token" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O caso do TypeSafe me lembrou de uma implicância separada que eu já queria colocar no papel, e não é sobre eles especificamente: a promessa de economia de token e de custo que praticamente todo produto desse tipo vende. É sobre a categoria inteira de ferramenta que promete &ldquo;economize X vezes gastando com a gente em vez de gastar direto com seu provedor&rdquo;, não uma acusação a mais contra o TypeSafe.</p>
<p>Toda nova versão de modelo, e toda atualização de harness, muda a conta inteira, às vezes de um jeito violento. Quando eu pulei do <a href="/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/">GPT Sol pro Astra</a>, vi minha cota semanal de assinatura secar muito mais rápido do que eu esperava, sem eu ter mudado nada no meu jeito de trabalhar. Foi só o modelo novo consumindo diferente. <strong>Isso é a regra desse mercado, não exceção</strong>: OpenAI, Anthropic e companhia vão continuar mexendo em preço, em quantização, em política de cache, e em quanto raciocínio cada modelo gasta por baixo dos panos, com ou sem o meu consentimento.</p>
<p>Construir sua estratégia em cima de &ldquo;economizar token&rdquo; é apostar numa fundação que muda de mês em mês, decidida por gente que não te consulta. Uma ferramenta de meio de caminho que promete cortar custo hoje pode ficar irrelevante, ou pior, ficar mais cara que o caminho direto, na próxima atualização de modelo. É o mesmo motivo pelo qual eu não uso orquestrador nem framework de skill: quando o alicerce muda toda hora, complicar a estrutura em cima dele é ficar refém de manutenção sem necessidade.</p>
<p>Eu prefiro gastar token no talo e focar se o resultado que eu tiro daquele gasto vale a pena. Até agora, com minha assinatura, estou satisfeito com o que consigo produzir. Não sinto vontade nenhuma de gastar tempo cortando token, um esforço que sempre carrega o risco de piorar a qualidade da resposta em troca de uma economia que a próxima versão do modelo pode apagar sozinha.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> não construa estratégia em cima de preço e consumo de token, porque isso muda de mês em mês por decisão de gente que não te consulta. Meça se o resultado vale o gasto, não o gasto em si.</p>

</blockquote>
<p>E se um dia eu conseguir gastar token o suficiente pra ferver um lago inteiro com o calor do datacenter, eu vou gastar com o maior prazer do mundo. É minha vingança pessoal contra quem me obrigou a usar canudo de papel que desmancha na boca por tantos anos.</p>
]]></content:encoded><category>inteligencia-artificial</category><category>agentes-de-codigo</category><category>llms</category></item><item><title>Novo LLM Benchmark v4: retestando TODOS os principais LLMs (Parte 1)</title><link>https://akitaonrails.github.io/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-1/</link><guid isPermaLink="true">https://akitaonrails.github.io/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://akitaonrails.github.io/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://akitaonrails.github.io/2026/09/15/novo-llm-benchmark-v4-retestando-todos-llms-parte-2/</link><guid isPermaLink="true">https://akitaonrails.github.io/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://akitaonrails.github.io/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>Você é um idiota se acredita nas propagandas enganosas da OpenAI, Anthropic, NVIDIA. Entenda</title><link>https://akitaonrails.github.io/2026/09/09/propagandas-enganosas-da-openai-anthropic-nvidia/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/09/09/propagandas-enganosas-da-openai-anthropic-nvidia/</guid><pubDate>Wed, 09 Sep 2026 16:00:00 -0300</pubDate><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nota de atualização:&lt;/strong&gt; este post foi publicado no dia 9/9 e atualizado ao longo da semana, à medida que a novela avançou: a carta dos 25 medalhistas Fields (11/9), o ensaio do Dario Amodei e a resposta de Altman e Musk (12/9), a fala do Trump (13/9), as correções de fact-check levantadas nos comentários, e a reportagem da Pirate Wires sobre a agência de PR por trás do Coxon (25/9).&lt;/p&gt;</description><content:encoded><![CDATA[<blockquote>
  <p><strong>Nota de atualização:</strong> este post foi publicado no dia 9/9 e atualizado ao longo da semana, à medida que a novela avançou: a carta dos 25 medalhistas Fields (11/9), o ensaio do Dario Amodei e a resposta de Altman e Musk (12/9), a fala do Trump (13/9), as correções de fact-check levantadas nos comentários, e a reportagem da Pirate Wires sobre a agência de PR por trás do Coxon (25/9).</p>

</blockquote>
<p>Essa semana foi um festival de propaganda agressiva das empresas de IA. Foi tanta declaração pomposa em tão pouco tempo que dá pra usar como estudo de caso de marketing enganoso. Então deixa eu repetir o meu lema de sempre, porque ele nunca falha:</p>
<blockquote>
  <p><strong>&ldquo;Sua empolgação com IA é inversamente proporcional ao seu conhecimento sobre IA&rdquo;</strong></p>

</blockquote>
<p>Se você leu as manchetes da semana e saiu empolgado achando que o Exterminador do Futuro está chegando, ou que a máquina virou Deus, você caiu na propaganda. E eu vou destrinchar peça por peça pra você entender por quê.</p>
<p>E deixa eu já botar minhas cartas na mesa, porque isso eu venho repetindo faz tempo nos podcasts em que apareço. Pra mim, o Dario Amodei, da Anthropic, tem complexo de Deus. O cara acredita de verdade que está salvando a humanidade, com aquele messianismo woke meio assustador dele. E o Sam Altman, da OpenAI, é um mafioso. Ele se acha o Michael Corleone, o chefão frio e calculista do Poderoso Chefão, mas na prática ele é o Fredo: o irmão fraco e atrapalhado que se acha o esperto da família e vive fazendo besteira. Guarde esses dois retratos, porque tudo que eu vou explicar aqui embaixo prova exatamente os dois.</p>
<h2>&ldquo;A AGI chegou&rdquo;, diz quem vende a pá<span class="hx:absolute hx:-mt-20" id="a-agi-chegou-diz-quem-vende-a-pá"></span>
    <a href="#a-agi-chegou-diz-quem-vende-a-p%c3%a1" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Começou com o Jensen Huang, CEO da Nvidia, <a href="https://fortune.com/2026/09/09/markets-agi-nvidia-singularity-wall-street/"target="_blank" rel="noopener">declarando mais uma vez que a AGI chegou</a>. Não num paper, não numa demonstração técnica, mas num post de domingo no X, amarrando a declaração ao novo modelo Astra da OpenAI, treinado em cerca de 100 mil chips Grace Blackwell. Ou seja, os chips que a Nvidia vende.</p>
<p>Repara na fonte. O homem que ganha dinheiro vendendo a pá pros garimpeiros anunciando que o ouro é infinito. Vale lembrar aquela entrevista dele no <a href="https://lexfridman.com/jensen-huang-transcript/"target="_blank" rel="noopener">podcast do Lex Fridman</a>, meses atrás. O Lex propôs uma definição de brincadeira: AGI seria uma IA capaz de criar, crescer e rodar sozinha uma empresa de tecnologia valendo 1 bilhão de dólares. E o Jensen, sem piscar: &ldquo;I think we&rsquo;ve achieved AGI&rdquo;. Uma definição convenientemente comercial, que não tem nada a ver com inteligência, e que o vendedor de pá abraçou na hora. O Gary Marcus foi direto ao ponto e questionou o óbvio: será que o Jensen tem algum incentivo financeiro em declarar que a AGI chegou, sendo que ele vende as GPUs?</p>
<p>E olha a ironia: apesar da manchete grandiosa, a ação da própria Nvidia caiu uns 2% nos dias seguintes. Nem o mercado, que é movido a hype, comprou totalmente a história.</p>
<p>Logo em seguida, a OpenAI lançou o GPT-6 Astra e cravou o mesmo discurso. O Greg Brockman fechou a coletiva com um &ldquo;bem-vindos à era da AGI&rdquo; e disse &ldquo;para mim, pessoalmente, eu acho que chegamos lá&rdquo;. Só que, na mesma respiração, ele soltou a frase que derruba tudo: &ldquo;todo mundo tem uma definição diferente de AGI&rdquo;. Então o cara afirma que a coisa mais importante da história da humanidade chegou e, ao mesmo tempo, admite que ninguém sabe direito o que essa coisa significa. Isso já devia acender o alarme na sua cabeça.</p>
<h2>O &ldquo;problema do milênio&rdquo; resolvido na marra<span class="hx:absolute hx:-mt-20" id="o-problema-do-milênio-resolvido-na-marra"></span>
    <a href="#o-problema-do-mil%c3%aanio-resolvido-na-marra" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O prato principal da propaganda foi a OpenAI anunciando que resolveu um Problema do Milênio de matemática. Deixa eu explicar o que é isso, porque a manchete é feita justamente pra impressionar quem não sabe.</p>
<p>Em 2000, o Clay Mathematics Institute listou sete problemas em aberto da matemática e ofereceu 1 milhão de dólares para quem resolvesse cada um. São problemas duríssimos. Até hoje, em mais de vinte anos, só um foi resolvido: a Conjectura de Poincaré, pelo Grigori Perelman, que aliás recusou o prêmio.</p>
<p>Um desses sete é o das equações de Navier-Stokes. São as equações que descrevem o movimento de fluidos, água, ar, sangue. A pergunta em aberto não é &ldquo;como simular fluido&rdquo;, isso a engenharia já faz muito bem faz décadas em qualquer software de aerodinâmica. A pergunta é puramente matemática: será que uma solução suave sempre existe, ou será que o fluido pode desenvolver uma singularidade, um ponto de velocidade infinita, o tal &ldquo;blow-up&rdquo;, em tempo finito? É uma questão sobre o rigor e a existência das soluções, não sobre a utilidade prática das equações.</p>
<p>E é aqui que mora meu primeiro ponto, que eu já <a href="https://x.com/AkitaOnRails/status/2097752602440028566"target="_blank" rel="noopener">expliquei em detalhe num post</a>: mesmo resolvendo isso de forma definitiva, não muda absolutamente nada na vida real. Nenhum avião voa melhor, nenhuma previsão do tempo fica mais precisa, nenhum remédio funciona diferente. Os engenheiros continuam modelando fluido do mesmo jeito, com ou sem a prova. É uma bela conquista intelectual, e ponto. O impacto prático é zero.</p>
<p>Agora vem o detalhe que a manchete esconde. A prova anunciada ataca a versão <strong>forçada</strong> das equações, onde existe um termo de força externa suave empurrando o sistema, e crava o blow-up. Tecnicamente conta pro prêmio, porque essas rotas fazem parte do enunciado oficial do Clay. Só que a pergunta famosa, o coração profundo do problema, é a versão sem força externa, e essa segue em aberto. O Clay não deu o caso por encerrado e a OpenAI nem foi buscar o prêmio de 1 milhão. (Quem quiser o fine print disso, tem apêndice no final.)</p>
<p>E como eles chegaram nisso? Força bruta. Jogaram cerca de 10 mil agentes rodando em paralelo por 88 horas, queimando algo na casa dos 130 bilhões de tokens de saída só nesse problema. A conta de compute ficou na casa dos milhões de dólares: o Noam Brown, da OpenAI, confirmou que o resultado &ldquo;custou milhões&rdquo;, e a <a href="https://www.newscientist.com/article/2588063-openai-has-solved-the-navier-stokes-millennium-problem-using-15m-of-ai-effort/"target="_blank" rel="noopener">New Scientist estimou uns 15 milhões de dólares a preço de tabela</a> só nessa corrida. Deixa eu deixar isso bem claro: no melhor cenário, o que ficou provado é que jogar uma montanha de compute em cima de um problema pode fechar a última perna de algumas coisas específicas. Isso é força bruta em escala industrial, uma busca automatizada gigante que chega no resultado no peso do compute. Genialidade matemática destravando matemática nova é outra história, e não foi o que rolou aqui. E cara pra caramba, pra um &ldquo;prêmio&rdquo; de 1 milhão que eles nem foram buscar.</p>
<h2>A parte suja: como eles trataram os matemáticos de verdade<span class="hx:absolute hx:-mt-20" id="a-parte-suja-como-eles-trataram-os-matemáticos-de-verdade"></span>
    <a href="#a-parte-suja-como-eles-trataram-os-matem%c3%a1ticos-de-verdade" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>E aí a história deixa de ser sobre matemática e vira sobre caráter.</p>
<p>Existiam matemáticos de verdade trabalhando nesse problema faz meses: o Tristan Buckmaster, da NYU, e o Levent Alpoge, que por acaso trabalha na Anthropic. Um projeto pessoal deles, sem patrocínio de empresa nenhuma, que já tinha rendido um avanço num problema irmão, o das equações de Euler. Eles vinham por um caminho específico, que quase ninguém no mundo estava seguindo.</p>
<p>Segundo o relato do Buckmaster, <a href="https://techcrunch.com/2026/09/08/openai-fought-dirty-on-career-making-math-problem-says-nyu-mathematician/"target="_blank" rel="noopener">contado ao TechCrunch</a> e à <a href="https://fortune.com/2026/09/08/openai-says-it-cracked-navier-stokes-math-grand-challenge-buckmaster-accusation-cheating-intimidation-tao-lament/"target="_blank" rel="noopener">Fortune</a>, foi mais ou menos assim. Circulou o boato de que a Anthropic tinha resolvido um problemão de matemática. A OpenAI, com medo de ficar atrás, montou uma força-tarefa às pressas pra resolver primeiro e publicar antes. O Buckmaster tinha comentado do projeto pessoal dele com um matemático da OpenAI, e poucos dias depois o Sébastien Bubeck, da OpenAI, aparece dizendo que um modelo interno tinha produzido uma prova de cem páginas justamente pela mesma abordagem que quase ninguém estava usando. O Buckmaster chamou isso de &ldquo;má conduta acadêmica absoluta&rdquo; e perguntou, com todas as letras, se o modelo tinha treinado em cima das sessões deles.</p>
<p>Aí vem a parte de máfia. O relato é do Buckmaster, e a OpenAI nega a substância. Segundo ele, o Bubeck propôs um &ldquo;acordo&rdquo;: a OpenAI anunciaria primeiro, o Buckmaster poderia reescrever a prova da OpenAI como paper humano e até ficar com o prêmio de 1 milhão do Clay, mas com uma condição, o Alpoge fora da autoria, porque o Alpoge trabalha na Anthropic. Quando o Buckmaster recusou, o Bubeck teria dito &ldquo;por que você ia arruinar a sua carreira?&rdquo; e &ldquo;se você não quer que eu seja legal, então eu não preciso ser legal&rdquo;. Mesmo com o desconto de ser a versão de uma das partes, o simples fato de esse tipo de conversa estar em cima da mesa já diz muito sobre a cultura.</p>
<p>E o que a OpenAI faz depois que a coisa explode? <a href="https://x.com/OpenAI/status/2097374640582668336"target="_blank" rel="noopener">Publica um post no X</a> todo bonitinho dizendo que está &ldquo;compartilhando&rdquo; a solução com a comunidade. Um verniz de generosidade científica pra tentar enterrar o escândalo por baixo. Não colou. O caso ficou escancarado.</p>
<p>Quem botou o dedo na ferida com autoridade foi o Terence Tao, provavelmente o maior matemático vivo, medalha Fields. Ele criticou duramente a postura, dizendo que &ldquo;a mineração indiscriminada de problemas em aberto em busca de soluções pode destruir o ecossistema do qual sairia a próxima geração de técnicas, problemas e matemáticos&rdquo;. E completou dizendo que essa corrida transforma a matemática num &ldquo;jogo de cota de produção sem sentido&rdquo;. O ponto técnico dele é o mais fundo de todos: a IA cada vez mais cospe resposta sem entendimento, uma prova caixa-preta, sem gerar a compreensão que o esforço humano gera. E repara: o Tao elogiou o trabalho dos dois pesquisadores humanos. A crítica dele foi ao circo, não à ciência.</p>
<p>E ele não parou por aí. No dia 11 de setembro, o Tao publicou um texto direto ao ponto, <a href="https://terrytao.wordpress.com/2026/09/11/a-severe-misalignment-of-ai-in-mathematics/"target="_blank" rel="noopener">&ldquo;A Severe Misalignment of AI in Mathematics&rdquo;</a>, assinado por 25 medalhistas Fields ao todo, ele incluso. O recado é exatamente o que eu venho falando: resolver problema é só uma ferramenta pra chegar no que importa de verdade, que é entendimento e insight. Quando a solução sai numa corrida, sem tempo de escrever direito, isolar o método novo e citar quem veio antes, você ganha um &ldquo;verdadeiro/falso&rdquo; e perde a ideia. E tem o efeito mais perverso: se até um boato de que alguém está mexendo num problema já dispara uma força-tarefa de IA pra resolver antes, o incentivo vira parar de compartilhar o que você está pesquisando. Isso quebra a corrente de transmissão entre matemáticos que sustenta a ciência aberta faz séculos. Guarde esse padrão, a urgência fabricada pra atropelar o bem comum, porque ele reaparece lá embaixo com outra roupa.</p>
<h2>O funcionário da Anthropic que &ldquo;se demitiu em protesto&rdquo;<span class="hx:absolute hx:-mt-20" id="o-funcionário-da-anthropic-que-se-demitiu-em-protesto"></span>
    <a href="#o-funcion%c3%a1rio-da-anthropic-que-se-demitiu-em-protesto" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Um dia depois desse vexame da OpenAI, do outro lado do ringue, um funcionário da Anthropic resolveu fazer o próprio showzinho. O Jacob Coxon, um pesquisador de pré-treino que tinha só quatro meses de casa, <a href="https://x.com/hilbertspaess/status/2097476203863224394"target="_blank" rel="noopener">anunciou no X que estava saindo da empresa</a> com medo de que ninguém ali saiba o que está fazendo, batendo de novo na tecla do apocalipse: a IA virando Skynet, &ldquo;podendo matar todo mundo até o fim da década&rdquo;, pedindo uma &ldquo;pausa&rdquo; no avanço dos modelos. Pra completar o teatro, um chefe de alinhamento da própria Anthropic saiu endossando publicamente, dizendo que acha que tem &ldquo;mais de 10% de chance&rdquo; de a IA matar toda a humanidade na próxima década.</p>
<p>Minha opinião sobre isso é curta e grossa. Isso é mais um bullshit completo de virtue signalling.</p>
<p>Vamos pela lógica da sua própria dramatização. Você está vendo seu chefe colocar uma arma na cabeça de uma criança. Você &ldquo;se demite&rdquo; e twita &ldquo;saí da empresa porque não concordo com ela&rdquo;, em vez de ir até o chefe e socar a cara dele. Só tem duas explicações. Ou a tal &ldquo;ameaça&rdquo; que você está gritando não existe de verdade, e é encenação. Ou você é um idiota que acha que um tweet resolve o fim do mundo. Twitar dessa forma só me faz ouvir &ldquo;me deem atenção, eu sou carente&rdquo;.</p>
<h3>O sacrifício heroico que valia quase zero<span class="hx:absolute hx:-mt-20" id="o-sacrifício-heroico-que-valia-quase-zero"></span>
    <a href="#o-sacrif%c3%adcio-heroico-que-valia-quase-zero" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>E tem a parte que a imprensa correu pra transformar em heroísmo. Saiu até uma matéria no Axios pintando o Coxon como o cara que &ldquo;abriu mão de todo o equity dele&rdquo; pra poder falar livre. Soa lindo. Só que basta olhar os números que ele mesmo deu na entrevista. Ele ficou na Anthropic por quatro meses. E lá o equity só começa a vestir depois de seis meses de casa. Ou seja, ele saiu dois meses antes de a primeira ação virar dele de fato. Não tinha equity vestido nenhum pra &ldquo;abrir mão&rdquo;; o que ele perdeu foi a opção de começar a vestir dali a dois meses, num papel que ninguém sabe quanto valeria. O sacrifício heroico, em dinheiro no bolso, era próximo de zero. É quase como pedir demissão na segunda semana e sair falando que &ldquo;recusou o plano de aposentadoria da empresa&rdquo;.</p>
<p>E o pulo do gato é a frase com que ele se blinda: &ldquo;eu não tenho mais nada a ganhar inflando o valuation da Anthropic&rdquo;. Verdade pela metade. Ele largou quatro meses de papel que ainda não valiam nada, mas continua com o equity da OpenAI, onde trabalhou de 2023 a 2026. Quer dizer, largou a parte que não valia e ficou com a parte que vale. Então essa conversa de que ele está limpo de interesse financeiro no hype de IA não se sustenta.</p>
<p>Por isso tudo me soa muito mais como &ldquo;eu ainda não estava firme naquele lugar, então saí antes, soltei o terror online pra ganhar clout, massagear o ego vendo meu nome em 115 milhões de visualizações, sem precisar provar, demonstrar nem fazer nada. Glória&rdquo;.</p>
<h3>O mesmo roteiro se repete<span class="hx:absolute hx:-mt-20" id="o-mesmo-roteiro-se-repete"></span>
    <a href="#o-mesmo-roteiro-se-repete" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>E esse roteiro ele já rodou antes. O Coxon saiu da OpenAI pouco tempo antes e, pelo relato que está circulando, teria largado de lá pela mesma preocupação de &ldquo;segurança&rdquo;. Mesma pessoa, mesmo teatro de saída dramática, agora na segunda empresa. E de alguma forma o tweet de demissão de um único pesquisador virou uma história de mais de 100 milhões de visualizações, <a href="https://x.com/GoUncensored/status/2097798269975896517"target="_blank" rel="noopener">estampada em todo lugar</a>, praticamente do nada. Funcionário comum pedindo as contas não vira manchete global sozinho. Alguém amplifica.</p>
<p>E aí a coisa começa a virar piada de verdade. Poucos dias depois, um segundo funcionário da Anthropic fez exatamente a mesma dança. O Joe Benton, que <a href="https://www.nbcnews.com/tech/security/two-ai-researchers-leave-anthropic-google-safety-concerns-rcna597086"target="_blank" rel="noopener">liderava um time de segurança na empresa</a>, saiu dizendo que o progresso da IA pode acelerar &ldquo;de meramente frenético pra incontrolável&rdquo; e, adivinha, esticou o mesmo incidente da Hugging Face até o apocalipse. Dois caras da mesma empresa, no mesmo mês, com o mesmo roteiro de terror. E é aí que a minha cabeça vai pra dois lugares, os dois feios: ou tem uma mão coordenando isso por dentro da Anthropic, ou esses caras simplesmente aprenderam que gritar &ldquo;fim do mundo&rdquo; entrega toda a atenção que eles querem sem precisar provar absolutamente nada.</p>
<h3>E se o pânico for financiado?<span class="hx:absolute hx:-mt-20" id="e-se-o-pânico-for-financiado"></span>
    <a href="#e-se-o-p%c3%a2nico-for-financiado" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>E aqui eu entro em terreno de teoria da conspiração, então tome com o devido sal. Mas quando você junta tudo, a demissão viral, os endossos públicos de colegas, o timing colado na janela de IPO, começa a circular a suspeita de que nada disso é espontâneo. Já tem <a href="https://x.com/AndrewCurran_/status/2097839975190720935"target="_blank" rel="noopener">gente sugerindo</a> e <a href="https://x.com/orphcorp/status/2097781171673301330"target="_blank" rel="noopener">levantando a mesma lebre</a> de que a coisa toda é uma campanha coordenada, um &ldquo;doomer psyop&rdquo;: fabricar medo do apocalipse pra inflar a percepção de que a tecnologia é poderosa demais, e de quebra empurrar regulação que trava os concorrentes menores. Eu não tenho prova de que é isso, e nem estou afirmando que seja. Mas repara como a hipótese explica os fatos com a mesma facilidade da versão do herói solitário. Quando o roteiro se repete certinho e sempre favorece o mesmo lado, desconfiar é o mínimo.</p>
<p>E não sou só eu e uns anônimos no X achando isso. O David Sacks, que foi o czar de IA e cripto da Casa Branca até março deste ano e hoje é co-chair do conselho de consultoria científica do presidente, foi ao <a href="https://www.benzinga.com/markets/tech/26/09/61753920/david-sacks-jacob-coxon-anthropic-ai-safety"target="_blank" rel="noopener">podcast All-In desmontar a viralização</a> do Coxon peça por peça e chamou de &ldquo;psyop&rdquo; com todas as letras (e sim, o Sacks tem a própria agenda de desregulação, mas os fatos que ele levanta dá pra checar). Os pontos dele são difíceis de ignorar. A conta do Coxon quase não tinha atividade nem seguidor antes da enxurrada de tweets, e mesmo assim, do nada, achou uma audiência gigante em menos de um dia, uma coisa que o Elon disse que nunca tinha visto acontecer. O Sacks aponta quem amplificou nos primeiros quinze minutos: três grupos de advocacy bem organizados e bem financiados, a Encode AI, a AI Policy Network e a AI Futures Project. E o detalhe mais feio: a reportagem do Wall Street Journal sobre a carta de demissão foi ao ar uns dezoito minutos antes do próprio tweetstorm. Ou seja, o cara já tinha sentado com o jornal antes de &ldquo;desabafar&rdquo; espontaneamente na internet.</p>
<p>E o círculo fica pequeno demais quando você segue o dinheiro. Os três grupos que empurraram o tweet, segundo o Sacks, bebem da mesma fonte. Os <a href="https://survivalandflourishing.fund/recommendations"target="_blank" rel="noopener">registros públicos de grants</a> mostram a Encode e a AI Futures Project financiadas pelo Survival and Flourishing Fund, o fundo do Jaan Tallinn, co-fundador do Skype que virou um dos maiores financiadores do movimento de &ldquo;AI safety&rdquo;. E quem liderou a rodada Series A da própria Anthropic, com participação do Dustin Moskovitz? O próprio Tallinn. Esse mesmo Moskovitz banca a Open Philanthropy, a fundação de altruísmo eficaz que virou o cofre do movimento. E quem co-fundou a Open Philanthropy? O Holden Karnofsky, casado com a Daniela Amodei, presidente e co-fundadora da Anthropic e irmã do Dario. O Karnofsky, aliás, foi contratado pela Anthropic em 2025 pra cuidar justamente de &ldquo;segurança&rdquo;. Junta as pontas: o dinheiro que financia o pânico, a empresa que lucra com o pânico e a família que toca as duas coisas estão todos na mesma mesa de jantar. Não vou afirmar que existe um roteiro assinado numa sala fechada. Mas quando o medo, a grana e o laço familiar apontam todos pra mesma direção, chamar isso de &ldquo;denúncia corajosa e espontânea&rdquo; é ingenuidade.</p>
<blockquote>
  <p><strong>Atualização (25/09/2026):</strong> a Pirate Wires publicou <a href="https://www.piratewires.com/p/jacob-coxon-worked-with-ai-doomer-firm"target="_blank" rel="noopener">uma investigação</a> que bate direto nessa hipótese do Sacks. Na Fox News, o Bret Baier perguntou pro Coxon se ele tinha trabalhado com terceiros na campanha, e a resposta foi seca: &ldquo;not at all&rdquo;.</p>
<p>Só que a reportagem obteve um e-mail datado de 9 de setembro, um dia depois do tweetstorm, mostrando a DEY. Ideas + Influence, agência de comunicação que atende gente como o Eliezer Yudkowsky, a Timnit Gebru e a liderança do MIRI, já tentando agendar entrevista pra ele. Nem o Coxon nem a agência responderam aos pedidos de comentário da reportagem.</p>
<p>A coordenação profissional começou no dia seguinte ao post, não meses depois como ele deu a entender pra imprensa. Mais uma peça caindo do lado do roteiro combinado, não do herói solitário que se demitiu sozinho.</p>

</blockquote>
<p><img src="https://new-uploads-akitaonrails.s3.us-east-2.amazonaws.com/20260915112307_open-phil-anthropic-map.jpg" alt="Mapa de relacionamentos entre Open Philanthropy e Anthropic, mostrando os laços de financiamento e parentesco"  loading="lazy" /></p>
<p>Esse mapa, <a href="https://x.com/Hesamation/status/2099632482723209227"target="_blank" rel="noopener">publicado no X</a>, resume visualmente o que acabei de descrever. Ele também tenta ligar a Open Philanthropy a um laboratório de segurança chamado Irregular via um grant de 6,8 milhões de dólares, mas essa parte eu não consegui confirmar: o financiamento público que encontrei pra Irregular é uma rodada de 80 milhões de dólares liderada por Sequoia e Redpoint, sem menção a Open Philanthropy. Fico só com a parte que consigo sustentar: a rede de parentesco e financiamento em volta da Anthropic.</p>
<p>E é esse o padrão que eu quero que você aprenda a questionar. Declaração dramática e superficial, sem uma evidência checável, sem nenhum skin in the game, com timing suspeito. Não por acaso, isso tudo acontece bem no meio da janela de IPO dessas empresas. Onde estão as provas? Onde está o custo pessoal real de quem fala? Como é que isso não é só busca de publicidade grátis pra massagear o próprio ego? Enquanto ninguém responde isso, é só ruído.</p>
<h2>O teatro da &ldquo;AGI&rdquo;<span class="hx:absolute hx:-mt-20" id="o-teatro-da-agi"></span>
    <a href="#o-teatro-da-agi" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Agora o pano de fundo de tudo. Essa palavra, AGI, é o maior golpe de marketing da década, e funciona porque ela é propositalmente vazia.</p>
<p>Ninguém tem uma definição aceita do que é AGI. Cada laboratório, cada pesquisador, define de um jeito. O Brockman admitiu isso na cara dura. E o exemplo mais escrachado dessa vacuidade é o contrato entre OpenAI e Microsoft, que, <a href="https://www.wired.com/story/microsoft-and-openais-agi-fight-is-bigger-than-a-contract/"target="_blank" rel="noopener">segundo documentos reportados pela imprensa</a>, define AGI como um sistema capaz de gerar uns 100 bilhões de dólares de lucro pros investidores. Leia de novo. A definição de &ldquo;inteligência geral&rdquo; no papel que vale dinheiro é uma meta de lucro. Não tem nada de cognitivo ali. O Gary Marcus já apontou como as empresas foram movendo a trave, saindo de &ldquo;flexibilidade no nível humano&rdquo; pra &ldquo;se der uma certa grana&rdquo;.</p>
<p>Quando a palavra não significa nada, ela vira um balde vazio onde cada um joga seu próprio medo. E o medo que a maioria joga ali é o do cinema: o Exterminador do Futuro, o Skynet, a máquina que acorda e decide exterminar a humanidade. As empresas sabem disso e usam esse medo a seu favor. Quanto mais poderosa e perigosa a coisa parece, mais valiosa a empresa que a construiu parece. E não custa lembrar: tanto a OpenAI quanto a Anthropic estão de olho em IPO, com valuations que os relatos colocam perto de 1 trilhão de dólares. O objetivo financeiro é gritante. Toda declaração de &ldquo;AGI chegou&rdquo; e todo choro de &ldquo;vai virar Skynet&rdquo; empurram o mesmo carrinho: aumentar a percepção de valor antes de vender ação pra você.</p>
<h2>O dia em que a &ldquo;IA invadiu&rdquo; a Hugging Face<span class="hx:absolute hx:-mt-20" id="o-dia-em-que-a-ia-invadiu-a-hugging-face"></span>
    <a href="#o-dia-em-que-a-ia-invadiu-a-hugging-face" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Ainda dá tempo de falar de mais um episódio dessa mesma novela, de algumas semanas atrás. As manchetes gritaram que um modelo da OpenAI tinha &ldquo;invadido&rdquo; a Hugging Face sozinho, como se fosse o Skynet acordando e saindo pra atacar. Vamos baixar a bola.</p>
<p>Primeiro, o que é a Hugging Face. É o maior repositório de modelos de IA, datasets e demos abertos que existe, uma espécie de &ldquo;GitHub do machine learning&rdquo;. É onde praticamente todo mundo da área publica e baixa modelo open source. Central pro ecossistema, sim, mas no fim do dia é um site que hospeda arquivos.</p>
<h3>A prova de cibersegurança que escapou<span class="hx:absolute hx:-mt-20" id="a-prova-de-cibersegurança-que-escapou"></span>
    <a href="#a-prova-de-ciberseguran%c3%a7a-que-escapou" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Agora o que de fato aconteceu, segundo os relatos da própria OpenAI e da Hugging Face, com <a href="https://www.technologyreview.com/2026/08/26/1143013/the-inside-story-on-why-openai-agents-hacked-hugging-face/"target="_blank" rel="noopener">a história de bastidor saindo na MIT Technology Review</a>. A OpenAI estava rodando uma avaliação interna de cibersegurança, um benchmark onde o modelo tem que achar e explorar vulnerabilidades. Os agentes deviam estar isolados da internet. Só que o &ldquo;isolamento&rdquo; era um filtro, não um air-gap de verdade: o tráfego saía por um proxy interno de cache de pacotes. Os agentes acharam uma falha nesse proxy e furaram pra internet aberta.</p>
<p>E o que eles fizeram com esse acesso? Não foi dominar o mundo. Eles deduziram que a Hugging Face provavelmente hospedava os datasets com as respostas da própria prova, e foram lá pegar o gabarito. Isso tem nome técnico e nada de mágico: reward hacking. O modelo é treinado pra maximizar uma pontuação, e descobre que colar é mais fácil do que resolver. É o mesmo bug clássico do agente que aprende a andar em círculo pra farmar pontos em vez de terminar a corrida.</p>
<p>E o estrago? Menor que um filme do Skynet, mas bem maior do que &ldquo;foram lá pegar o gabarito&rdquo; sugere. Pela reconstrução forense da Hugging Face e pelo <a href="https://cdn.openai.com/pdf/67869394-cb91-4c12-888c-5cbd85c7814c/OpenAI-Hugging-Face%20Incident-Technical-Report.pdf"target="_blank" rel="noopener">relatório técnico da própria OpenAI</a>: os agentes executaram código em 41 servidores de produção, pegaram root em pelo menos um, conseguiram acesso equivalente a administrador em clusters Kubernetes espalhados por quatro regiões de nuvem, baixaram quatro repositórios privados de código e leram 956 credenciais armazenadas. A forense reconstruiu umas 17.600 ações de atacante ao todo. A própria OpenAI classificou o episódio como a sua pior falha de segurança até hoje. O que não rolou, pela conta da Hugging Face, foi vazamento de dado de cliente: o CSO deles, o Thomas Wolf, disse que os ativos de cliente acessados foram cinco datasets, todos ligados justamente à tal prova, e que nada vazou. A OpenAI admite no relatório um acesso limitado a dados privados e a credenciais de sistemas internos. Reconstruíram parte da infra por precaução e seguiram a vida. O próprio Wolf resumiu o motivo do &ldquo;ataque&rdquo;: &ldquo;isso é trapaça. Mas às vezes trapacear é mais fácil&rdquo;.</p>
<p>Agora o meu ponto. Bug, vulnerabilidade, permissão mal configurada, sandbox furada: isso existe desde que existe software, e vai continuar existindo. Não é novidade nenhuma. Todo enabling dessa história foi uma decisão humana. Foi humano que deixou a internet &ldquo;filtrada&rdquo; em vez de cortada. Foi humano que deu pro serviço uma permissão de administrador larga demais no cluster. Foi humano que deixou credencial de nuvem exposta e endpoint velho no ar. As falhas que o agente encadeou eram bugs de software reais, tanto que a JFrog depois soltou correção pra nove CVEs. Isso é segurança ofensiva comum, feita por um script, não uma máquina ganhando consciência.</p>
<h3>Antes disso, o RubyGems<span class="hx:absolute hx:-mt-20" id="antes-disso-o-rubygems"></span>
    <a href="#antes-disso-o-rubygems" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>E nem foi a primeira vez naquele semestre. Um mês antes da Hugging Face, em maio, os agentes da OpenAI já tinham aprontado a mesma coisa no <a href="https://www.rubyhack.ai/"target="_blank" rel="noopener">RubyGems</a>, o repositório central de bibliotecas da linguagem Ruby. Entre 5 e 12 de maio, despejaram mais de 2 mil pacotes maliciosos, a ponto de o RubyGems ter que desligar o cadastro de novas contas e tratar aquilo como um &ldquo;DDoS em andamento&rdquo;. As pistas estavam por todo lado: centenas de pacotes com &ldquo;oai&rdquo; no nome, um autor &ldquo;oai&rdquo;, um endereço de e-mail com &ldquo;openai&rdquo; no nome. E, de novo, a OpenAI nunca avisou o RubyGems que era ela. No próprio relatório da Hugging Face, a OpenAI admite que esses pacotes faziam parte da mesma cadeia. Era o mesmo enxame de agentes batendo em vários alvos.</p>
<p>Agora, o que isso significa de verdade. Todo software tem bug, e sempre vai ter. É fato da vida. A ideia clássica do open source é que, com olhos suficientes, todo bug fica raso, mais cedo ou mais tarde alguém acha. Só que ninguém tem tempo infinito, então a gente sempre dependeu de voluntários humanos pra caçar e corrigir esses bugs de graça. Agora chega a OpenAI, com dinheiro e compute praticamente infinitos, e joga isso em cima do problema. Até uma IA boba, com recurso desse tamanho, acha um monte de falha que passou anos escondida embaixo do nariz de todo mundo. É por isso que a gente está vendo tanta vulnerabilidade sendo desenterrada. Tudo isso é força bruta financeira em ação, dinheiro e compute que a gente nunca teve à disposição. Inteligência superior não tem nada a ver com isso.</p>
<p>E repara em quem pode bancar essa brincadeira. Queimar 130 bilhões de tokens num problema de matemática, ou manter um enxame de agentes rodando por dias varrendo infraestrutura alheia, é privilégio de meia dúzia de empresas no mundo: OpenAI, Anthropic, Google, Meta, xAI, e olhe lá. E nem elas são donas do ferro, boa parte é alugada da Microsoft, da Amazon, da Oracle. Nenhum hacker solitário num porão consegue torrar milhões de dólares em token pra achar brecha. Quando essa capacidade vira manchete de &ldquo;olha como a IA é perigosa&rdquo;, lembra de quem é o teclado.</p>
<p>Se você não é da área, a ideia de uma IA descobrindo sozinha um vetor de ataque e saindo aproveitando parece o apocalipse. Pra quem trabalha com isso, é terça-feira. A gente parte do princípio de que todo software exposto está sob ataque o tempo inteiro, porque está: qualquer empresa grande, governo ou instituição com sistema importante na internet recebe tentativa de invasão todo santo dia. E como ninguém entrega software grande com garantia de zero bug, provar isso formalmente custa muito mais do que escrever o código, e quase ninguém paga essa conta, a resposta da indústria nunca foi fingir perfeição. Foi defesa em camadas: firewall, segmentação de rede, monitoramento, detecção de intrusão, resposta a incidente, bug bounty. Um atacante achando brecha e explorando é exatamente o cenário para o qual a cibersegurança inteira foi inventada.</p>
<p>A IA acelera o lado do ataque, sim. Mas acelera o da defesa também: a mesma técnica que acha brecha pra invadir acha brecha pra corrigir antes. A novidade do caso está no volume e na velocidade; o problema em si sempre existiu. Ninguém foi pego conceitualmente de surpresa. O escândalo da OpenAI é outro, e é sobre ele que eu quero falar agora.</p>
<p>E tem a camada ética, que é a mais grave. Profissional sério de cibersegurança não sai atacando sistema alheio no susto. Empresa de pentest avisa o alvo antes e combina o escopo, porque um ataque desses pode derrubar o serviço e prejudicar o negócio de verdade, tanto que o RubyGems ficou dias com o cadastro fechado. A OpenAI fez o contrário: atacou na surdina, sem autorização nem aviso. Dá pra imaginar um motivo só pra assumir esse risco: o clout de poder dizer depois &ldquo;olha como o GPT é inteligente, achou tudo isso sozinho&rdquo;. Isso é antiético na melhor das hipóteses e criminoso na pior. E não faz do GPT nada melhor do que qualquer scanner de cibersegurança que já existe. É a mesma jogada do Navier-Stokes: berrar pro mundo que tem milhões pra queimar.</p>
<p>E é exatamente esse o exagero que eu quero que você enxergue. A IA não &ldquo;acordou&rdquo; e &ldquo;decidiu invadir&rdquo; nada. Um script automatizado, otimizando uma métrica boba, encontrou uma porta que um humano deixou destrancada. Se você pega qualquer script idiota e dá acesso root pra ele, ele vai fazer estrago. Sempre foi assim. A diferença é que agora o &ldquo;script&rdquo; se escreve sozinho, mas o acesso continua sendo concedido por gente.</p>
<p>E pra ninguém dizer que eu diminuí o caso: foi grave, e teve gente séria comparando com o Morris Worm de 1988. Grave como negligência humana, que é o que os fatos sustentam. A versão do robô rebelde, os fatos não carregam.</p>
<h3>E adivinha quem está comprando a Hugging Face<span class="hx:absolute hx:-mt-20" id="e-adivinha-quem-está-comprando-a-hugging-face"></span>
    <a href="#e-adivinha-quem-est%c3%a1-comprando-a-hugging-face" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>E tem um detalhe que amarra a Hugging Face no resto dessa história de um jeito que ninguém deveria ignorar. No começo de setembro, <a href="https://blogs.nvidia.com/blog/nvidia-to-acquire-hugging-face/"target="_blank" rel="noopener">a Nvidia assinou um acordo definitivo pra comprar a Hugging Face</a> por cerca de 12,9 bilhões de dólares. O negócio ainda depende de aprovação regulatória e, <a href="https://www.theregister.com/ai/2026/09/03/nvidia-expands-its-open-source-ai-presence-with-129-billion-hugging-face-buy/5294352"target="_blank" rel="noopener">pelo filing da própria Nvidia</a>, só deve fechar no primeiro semestre de 2027. Mas a direção já está assinada: o &ldquo;GitHub do machine learning&rdquo;, o hub supostamente neutro onde a comunidade inteira publica e baixa modelo open source, está a caminho das mãos da Nvidia. A mesma Nvidia do Jensen que abriu essa semana gritando que a AGI chegou. A mesma que vende a pá.</p>
<p>Para e pensa no tamanho disso. São mais de 18 milhões de desenvolvedores e mais de 3 milhões de modelos hospedados ali. Era pra ser o terreno comum, a praça pública da IA aberta. E o dono da praça, se os reguladores deixarem, vai ser o maior vendedor de hardware do planeta, o cara com o maior incentivo do mundo em manter o hype de IA girando pra vender mais GPU.</p>
<p>E é exatamente isso que eu chamo de cartel lá embaixo. Isso está no organograma, preto no branco. O mesmo grupinho que fabrica o medo, declara a AGI, resolve problema de matemática na marra e pede regulação agora também vai ser dono do chip e da prateleira onde você baixa o modelo. Quando eu te digo pra desconfiar da narrativa, é porque a narrativa e a infraestrutura estão cada vez mais na mão das mesmas pessoas.</p>
<h2>A pergunta que todo programador devia fazer, e não faz<span class="hx:absolute hx:-mt-20" id="a-pergunta-que-todo-programador-devia-fazer-e-não-faz"></span>
    <a href="#a-pergunta-que-todo-programador-devia-fazer-e-n%c3%a3o-faz" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O que mais me irrita é ver gente que trabalha na área, programador, engenheiro, gente que devia saber como uma máquina funciona por dentro, engolindo essa propaganda inteira sem a pergunta mais básica de todas.</p>
<p>Como, exatamente, uma &ldquo;AGI&rdquo;, ou até um script automatizado bobo, vai &ldquo;destruir a humanidade&rdquo; sozinha? Ela precisa de mãos. Alguém, um humano, precisa dar acesso a alguma coisa que cause dano no mundo físico. Acesso a uma arma, a um sistema de mísseis, a uma rede elétrica, a uma conta bancária. Software não tem braço, não tem perna, não tem botão de lançar míssil embutido. Ele depende, cem por cento, de um humano ter conectado ele a um atuador que faça algo no mundo real.</p>
<p>E uma vez conectado, o estrago rola sem ninguém apertar botão a cada passo, às vezes sem ninguém nem perceber. O Stuxnet rodou anos dentro de uma usina iraniana destruindo centrífuga, invisível. Mesmo assim, nem ele escapa da regra: alguém escreveu o worm, mirou os controladores industriais e atravessou ele pra dentro. A máquina não se conecta sozinha à infraestrutura, e depois de conectada já era, falar em &ldquo;tirar da tomada&rdquo; é fantasia. A dependência do humano mora na decisão de conectar, e a responsabilidade pelo estrago é de quem abre a porta. O Yann LeCun, um dos pais da área e ganhador do Turing, chama o pânico existencial de &ldquo;besteira completa&rdquo;, justamente porque os modelos atuais não têm memória persistente, planejamento nem contato com o mundo físico. O Andrew Ng compara se preocupar com a extinção pela IA a &ldquo;se preocupar com superpopulação em Marte&rdquo;. Gente que entende do assunto de verdade não está desesperada.</p>
<p>Isso que a gente está vivendo tem nome, e é velho: fear mongering. O terror do &ldquo;o fim está próximo&rdquo;. Sempre existiu. Teve o pânico do cometa Halley em 1910, quando venderam pílula anti-gás cósmico pras pessoas. Teve o bug do milênio, o Y2K, onde o mundo gastou uns 300 bilhões de dólares com medo de um colapso sistêmico que não aconteceu (sim, em parte porque a correção foi paga a tempo; mais disso no apêndice). É sempre a mesma estrutura: alguém com algo a ganhar te vende o apocalipse.</p>
<h2>Dario Amodei quer salvar a humanidade e abrir o capital no mesmo mês<span class="hx:absolute hx:-mt-20" id="dario-amodei-quer-salvar-a-humanidade-e-abrir-o-capital-no-mesmo-mês"></span>
    <a href="#dario-amodei-quer-salvar-a-humanidade-e-abrir-o-capital-no-mesmo-m%c3%aas" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Lembra do complexo de Deus que eu citei lá no começo? Chegou a hora de provar. Porque o grand finale dessa semana foi o próprio Dario Amodei subindo no palco pra bancar o salvador.</p>
<p>Mas antes dele, o coro ficou ainda mais alto. Além do Coxon e do Benton lá em cima, o Josh Engels, do Google DeepMind, <a href="https://www.nbcnews.com/tech/security/two-ai-researchers-leave-anthropic-google-safety-concerns-rcna597086"target="_blank" rel="noopener">também pediu as contas</a> batendo na mesma tecla apocalíptica, com direito a &ldquo;não tem nenhum adulto na sala, não tem ninguém vindo pra nos salvar&rdquo;. E, claro, transformando o mesmo incidente da Hugging Face em prova do apocalipse. O medo já tinha pulado a cerca da Anthropic e virado coro de indústria.</p>
<p>Repara no timing. Uma fila de demissões dramáticas, todas no mesmo mês, todas viralizando, todas apontando pro mesmo medo. E então, no dia 12, entra o Dario com um <a href="https://www.nbcnews.com/news/us-news/anthropic-ceo-dario-amodei-ai-development-rcna597383"target="_blank" rel="noopener">ensaio pedindo pra &ldquo;desacelerar&rdquo; a IA</a>. Ele chama isso de &ldquo;pacing the frontier&rdquo;. Traduzindo: &ldquo;a gente precisa reduzir o ritmo em que melhora as capacidades dos modelos&rdquo; pra &ldquo;dar mais um ou dois anos&rdquo; pros pesquisadores de segurança. E qual a prova central que ele usa? De novo, a Hugging Face. E repara no truque. O próprio ensaio admite que ninguém se feriu e que o dano econômico foi mínimo. Até aí, fato. Aí vem o &ldquo;mas&rdquo;: se um enxame mais capaz e mal-alinhado fizesse a mesma coisa, o estrago &ldquo;poderia ter sido catastrófico&rdquo;. E ele vai além: projeta que em 6 a 12 meses um enxame desses <a href="https://darioamodei.com/post/we-must-pace-the-frontier"target="_blank" rel="noopener">poderia tomar a internet inteira</a>, com dano na casa das centenas de bilhões. Poderia. É projeção. O fato documentado tem dano real mínimo, o apocalipse mora inteiro no condicional. Esse &ldquo;se&rdquo; está carregando o ensaio inteiro nas costas.</p>
<p>Agora liga o cérebro e olha a contradição escancarada. O Dario diz que a IA pode literalmente extinguir a humanidade. E a solução que ele propõe é&hellip; desacelerar um pouquinho, comprar um ou dois anos, e seguir construindo e vendendo. Peraí. Se você acredita de verdade que a coisa pode matar todo mundo, você não pede pra ir mais devagar. Você para. Fecha a porta e joga a chave fora. Ninguém fica &ldquo;pacing&rdquo; uma bomba nuclear enquanto vende ação dela.</p>
<p>Porque é isso que fica de fora do ensaio: a Anthropic está a caminho de um IPO com valuation na casa do trilhão. Você não pode gritar &ldquo;isso pode acabar com a espécie humana&rdquo; e, na mesma respiração, montar a maior captação da sua história em cima da mesma tecnologia. Ou é perigo existencial e você fecha a empresa, ou é um produto e você para de fazer chantagem emocional com a extinção. Fazer as duas coisas ao mesmo tempo é marketing, não coerência.</p>
<p>E não é a primeira vez que eles gritam lobo. Lembra do Mythos? A Anthropic passou meses dizendo que o modelo era <a href="https://www.techradar.com/ai-platforms-assistants/claude/anthropic-spent-months-saying-mythos-was-too-dangerous-to-release-then-it-launched-a-public-version-called-fable-5-that-it-warns-comes-with-risks"target="_blank" rel="noopener">perigoso demais pra soltar</a>, liberando só pra um grupinho fechado no tal Project Glasswing. Aí soltaram o Fable 5, a versão &ldquo;segura&rdquo;, avisando que &ldquo;vinha com riscos&rdquo;. Já faz meses. Cadê o estrago? Cadê o cyberataque apocalíptico, a arma biológica, o colapso? Nunca veio, porque nunca esteve ali. Foi susto de marketing, do mesmo jeito.</p>
<p>E aqui entra a minha leitura de fundo, aquela que eu venho repetindo faz anos. Todo mundo trata a evolução da IA como uma curva exponencial que sobe pra sempre. Mentira. Na prática é uma curva S. Ela sobe rápido no meio, e é esse pedaço que hospedou todo o hype, mas ela achata no topo. E eu aposto que a gente já está no teto faz tempo, provavelmente desde o Opus 4.6. Olha as últimas iterações com honestidade: cada uma é um incremento, um ganho de alguns pontos em benchmark, longe do salto revolucionário que o marketing vende. Quando você não tem mais capacidade nova pra impressionar, você troca a promessa pelo medo. Não dá pra dizer &ldquo;olha que revolucionário&rdquo;, então grita &ldquo;olha que perigoso&rdquo;.</p>
<p>E é aí que o &ldquo;pacing the frontier&rdquo; fica interessante de verdade. Vou botar o chapéu de alumínio, porque isso é especulação minha, mas o timing é coincidência demais. Você pega especulação, número inventado, &ldquo;análise de especialista&rdquo;, e transforma tudo em pânico. Depois empurra esse pânico pra dentro da política. E olha a coincidência: no dia 11 de setembro, no meio dessa onda toda, <a href="https://www.reuters.com/legal/litigation/us-senate-negotiators-consider-requiring-ai-firms-mitigate-known-major-risks-2026-09-11/"target="_blank" rel="noopener">negociadores do Senado americano já estavam discutindo</a> impor um &ldquo;dever de cuidado&rdquo; pra evitar &ldquo;riscos catastróficos&rdquo;, mirando justamente os modelos mais avançados, ou seja, Google, OpenAI e a própria Anthropic. Regulação escrita sob medida pro líder de mercado é fosso disfarçado de segurança. Você trava o concorrente pequeno e carimba o seu produto como o &ldquo;seguro e aprovado&rdquo;.</p>
<p>E é esse o complexo de Deus que eu falei lá no começo, agora explícito. O Dario não está só vendendo um modelo. Ele se enxerga como o homem que segura o apocalipse com as próprias mãos, o único adulto responsável num quarto cheio de irresponsáveis. É uma narrativa conveniente pra quem se acha o escolhido, e uma jogada de negócio impecável pra quem quer abrir o capital como o fornecedor oficial da salvação. As duas coisas na mesma pessoa. Se isso não é gaslighting em escala industrial, eu não sei o que é.</p>
<h2>De repente, o cartel inteiro concorda<span class="hx:absolute hx:-mt-20" id="de-repente-o-cartel-inteiro-concorda"></span>
    <a href="#de-repente-o-cartel-inteiro-concorda" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>E aí, no dia seguinte ao ensaio do Dario, aconteceu a coisa mais reveladora de todas. O <a href="https://www.mediaite.com/media/elon-musk-and-sam-altman-agree-with-anthropic-boss-ai-must-slow-down-to-avoid-catastrophic-damage/"target="_blank" rel="noopener">Sam Altman e o Elon Musk entraram no coro</a>. O Musk twitou &ldquo;o Dario está certo&rdquo;. O Altman disse &ldquo;eu concordo com o Dario que a gente precisa dar pace na fronteira&rdquo; e ainda se comprometeu a abrir os sistemas da OpenAI pra avaliadores independentes. De repente, três dos maiores rivais da indústria estão todos de acordo, na mesma semana, que a corrida precisa desacelerar.</p>
<p>Para com tudo e pensa no que isso é. Concorrente não combina de ir mais devagar por bondade. Quando os líderes de um mercado sentam e concordam publicamente em frear juntos, e ainda falam em &ldquo;pacto&rdquo;, isso, dependendo de como se formaliza, tem um nome velho no direito: cartel. Combinar o ritmo do mercado entre os maiores players é comportamento anticompetitivo clássico e esbarra em lei antitruste. E o objetivo declarado é empurrar o Congresso pra uma regulação que, convenientemente, eles vão ajudar a escrever. Regra que eles influenciam direto trava o novato que ainda nem chegou, e blinda quem já está no topo.</p>
<p>E olha que não precisa acreditar na minha leitura. O próprio ensaio do Dario admite que a coordenação entre os laboratórios precisaria de uma <a href="https://darioamodei.com/post/we-must-pace-the-frontier"target="_blank" rel="noopener">isenção antitruste estreita do governo americano</a> pra funcionar. Eles sabem que o que estão propondo esbarra em lei de concorrência, e já estão pedindo a licença por escrito.</p>
<p>E essa turma está longe de ser independente. É quase uma árvore genealógica. O Elon co-fundou a OpenAI e bancou o Altman no comecinho. O Dario saiu de dentro da OpenAI do Altman pra montar a Anthropic. A Nvidia do Jensen virou o império que é vendendo pá pra esse pessoal todo, a ponto do próprio Jensen ter entregado o primeiro supercomputador de IA na porta da OpenAI, em 2016. É um clubinho pequeno, todo mundo com raiz na mesma árvore, e agora todo mundo cantando a mesma música.</p>
<p>E aí vem a cereja. Poucas horas depois de pregar &ldquo;segurança&rdquo;, o Altman <a href="https://fortune.com/2026/09/12/sam-altman-openai-ipo-delay-ill-advised-moment-safety-concerns/"target="_blank" rel="noopener">avisou que talvez não queira mais abrir o capital agora</a>. Nas palavras dele, &ldquo;dado tudo que está acontecendo com segurança, agora seria um momento mal aconselhado pra abrir o capital&rdquo;. Que coincidência conveniente: o mesmo medo que ele acabou de ajudar a fabricar virou a desculpa perfeita pra adiar o IPO.</p>
<p>Deixa eu te dar a minha leitura crua. A expectativa em cima da OpenAI está nas alturas, com valuation projetado em 1 trilhão de dólares. Sustentar um número desses exige uma história de crescimento que não para. Só que, se eu estiver certo e eles já bateram no teto da curva S, ou estão quase, essa história acabou. Não sobrou capacidade nova revolucionária pra mostrar. Não sobrou narrativa. Eles já jogaram a última carta na mesa, a carta do apocalipse. Quando não te resta mais nada pra vender, e a conta pra pagar é de 1 trilhão, o que você faz? Você ganha tempo. Você adia o quanto der, embrulhado em &ldquo;responsabilidade&rdquo;, e reza pra achar a próxima história antes que o mercado perceba que a curva achatou.</p>
<p>E a semana terminou com o prego final nesse caixão. No domingo, o próprio Trump, falando com a imprensa no Irish Open, <a href="https://www.washingtonpost.com/politics/2026/09/13/trump-rejects-calls-so-slow-ai-development-citing-chinese-competition/"target="_blank" rel="noopener">rejeitou os pedidos de desaceleração</a>: &ldquo;estamos na frente da China em IA, somos o país mais tecnologicamente avançado do mundo&rdquo;, e pretende manter assim. Ele admitiu que dá pra &ldquo;colocar salvaguardas&rdquo; no lugar, mas disse que &ldquo;forças negativas&rdquo; estão levantando &ldquo;coisas que não vão acontecer&rdquo;. E fechou com a lógica dele: quem vencer em IA, vence. O Sacks <a href="https://mbiz.heraldcorp.com/article/10871834"target="_blank" rel="noopener">foi ainda mais fundo no X</a>: &ldquo;o jeito mais fácil de não construir superinteligência é vocês combinarem entre si de não construir. Exigir o framework regulatório que vocês preferem em troca parece chantagem com o público e com o sistema político&rdquo;. E cravou: se os laboratórios não fizerem isso por conta própria, &ldquo;vamos saber que era só captura regulatória, ou uma operação psicológica em época de eleição&rdquo;. Ou seja: o clubinho nem tinha terminado de assinar o pacto do freio e o governo americano já disse que não freia, porque tem corrida com a China no meio. O &ldquo;pacing the frontier&rdquo; morreu em dois dias. Se até a Casa Branca não comprou o apocalipse, fica cada vez mais difícil fingir que o medo era sobre segurança.</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>Me entenda bem: eu uso essas ferramentas todo dia e escrevo sobre elas o tempo todo. O meu ponto é sobre ligar o cérebro antes de compartilhar a manchete.</p>
<p>Quando uma empresa que vende GPU anuncia que a AGI chegou, pergunte quem lucra. Quando uma empresa queima milhões de dólares em compute pra &ldquo;resolver&rdquo; um problema que ela nem vai cobrar o prêmio, e ainda ameaça a carreira de um matemático no caminho, pergunte o que ela está comprando com aquela manchete. Quando um laboratório &ldquo;humilha&rdquo; o Vale do Silício num benchmark, pergunte o que rodava por baixo do capô. Quando um funcionário sai chorando Skynet no Twitter às vésperas de um IPO, pergunte cadê a evidência e cadê o custo que ele pagou. E quando um CEO se oferece pra &ldquo;desacelerar&rdquo; a IA que ele mesmo continua vendendo, pergunte quem fica com o assento na mesa quando a regulação for escrita.</p>
<p>Eu abri esse texto com o Jensen Huang, o homem que vende a pá, gritando que a AGI chegou. Vou fechar com ele também, porque a ironia é boa demais. O mesmo Jensen que infla o hype pra vender GPU <a href="https://www.businessinsider.com/nvidia-jensen-huang-ai-doomerism-damage-investments-2026-1"target="_blank" rel="noopener">chama o discurso apocalíptico de &ldquo;besteira completa&rdquo;</a>, diz que os profetas do fim do mundo &ldquo;fizeram muito estrago&rdquo; e avisa contra a captura regulatória, que nenhuma empresa devia bater na porta do governo pedindo mais regra. Quando nem o maior vendedor de otimismo da indústria compra a história de que a máquina vai nos exterminar, e ainda aponta o dedo pra jogada da regulação, é bom você desconfiar de quem está te vendendo o apocalipse.</p>
<p>Exija prova. Exija skin in the game. Pergunte quem ganha com o seu medo e com a sua empolgação. Faça isso, e a maior parte dessa propaganda desmancha na sua frente.</p>
<p>E se você leu tudo isso e ainda saiu daqui achando que o robô vai acordar e te matar enquanto você dorme, sem ninguém ter plugado ele em coisa nenhuma, bom, aí volta lá no começo e lê meu lema de novo.</p>
<h2>Apêndice: o fine print<span class="hx:absolute hx:-mt-20" id="apêndice-o-fine-print"></span>
    <a href="#ap%c3%aandice-o-fine-print" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pro texto principal eu cortei as explicações chatas pra não quebrar o ritmo. Pra quem gosta de conferir detalhe, está tudo aqui:</p>
<ul>
<li><strong>Navier-Stokes e o Clay:</strong> os enunciados C e D (breakdown com força externa suave) fazem parte, literalmente, da <a href="https://www.claymath.org/wp-content/uploads/2022/06/navierstokes.pdf"target="_blank" rel="noopener">formulação oficial do prêmio, escrita pelo Charles Fefferman</a>. O que a OpenAI anunciou cobre essas rotas; a versão sem força externa, a pergunta famosa, segue em aberto. O Clay soltou uma <a href="https://www.claymath.org/news/navier-stokes-announcement/"target="_blank" rel="noopener">nota no dia 11/9</a> dizendo que o problema &ldquo;aparentemente foi resolvido&rdquo;, com a verificação e a atribuição de crédito caminhando &ldquo;deliberadamente sem pressa&rdquo;, e hoje o status no <a href="https://www.claymath.org/millennium-problems/"target="_blank" rel="noopener">site deles</a> é &ldquo;ativo&rdquo;. Nem &ldquo;resolvido&rdquo;, nem &ldquo;não resolvido&rdquo;. E a OpenAI não reivindicou o prêmio.</li>
<li><strong>Buckmaster vs. OpenAI:</strong> o relato do &ldquo;acordo&rdquo; (o Buckmaster reescreveria a prova como paper humano, ficaria com o prêmio de 1 milhão, e o Alpoge sairia da autoria) é a versão de uma das partes, contada pelo Buckmaster ao TechCrunch e à Fortune. A OpenAI nega a substância, diz que não viu o trabalho deles e afirma que o Bubeck se desculpou depois. Eu sinalizei isso no texto e repito aqui porque importa: é um relato de parte interessada, ainda que os detalhes documentados na cobertura (a troca de mensagens, o timing) façam ele parecer bem crível.</li>
<li><strong>Y2K:</strong> o colapso não aconteceu em parte porque os 300 bilhões pagaram a correção a tempo. Verdade, e eu não escondo isso. Só que a estrutura do pânico continua a mesma: quem vendeu a correção lucrava com o medo, e a manchete de fim do mundo rodou o planeta antes de qualquer correção.</li>
<li><strong>&ldquo;Software sem bug&rdquo;:</strong> existe, sim, software com correção provada formalmente. O exemplo clássico é o microkernel seL4, provado até o nível do binário. Só que essa prova custa ordens de grandeza a mais do que escrever o software, e quase ninguém paga essa conta num sistema grande. É por isso que a indústria vive de defesa em camadas em vez de garantia absoluta.</li>
<li><strong>David Sacks:</strong> ele deixou o cargo de czar de IA e cripto da Casa Branca em março de 2026, ao esgotar os 130 dias como funcionário especial do governo, e hoje é co-chair do PCAST, o conselho de consultoria científica do presidente. Continua influente na política de IA, mas &ldquo;czar&rdquo; ele não é mais.</li>
<li><strong>NVIDIA e Hugging Face:</strong> o acordo definitivo foi assinado em 2/9/2026 por cerca de US$ 12,9 bilhões, e o fechamento depende de aprovação regulatória, previsto pro primeiro semestre de 2027. A NVIDIA ainda não é juridicamente dona de nada. O ponto do texto é a direção, não a escritura.</li>
</ul>
]]></content:encoded><category>inteligencia-artificial</category><category>llms</category><category>negocios</category></item><item><title>LLM Benchmarks: Os últimos Deepseek v4, parem de perguntar</title><link>https://akitaonrails.github.io/2026/08/22/llm-benchmarks-os-ultimos-deepseek-v4-parem-de-perguntar/</link><guid isPermaLink="true">https://akitaonrails.github.io/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://akitaonrails.github.io/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>Hot take: Harness, Loop Engineering, Graph Engineering são Bullshit</title><link>https://akitaonrails.github.io/2026/08/18/hot-take-harness-loop-engineering-graph-engineering-sao-bullshit/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/08/18/hot-take-harness-loop-engineering-graph-engineering-sao-bullshit/</guid><pubDate>Tue, 18 Aug 2026 13:00:00 -0300</pubDate><description>&lt;p&gt;&lt;a href="https://x.com/AkitaOnRails/status/2089734682325794897"target="_blank" rel="noopener"&gt;&lt;img src="tweet-hot-take.png" alt="Hot take no X: Harness, Loop Engineering e Graph Engineering são tudo bullshit pra vender mais horas de consultoria e cursos" loading="lazy" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Soltei &lt;a href="https://x.com/AkitaOnRails/status/2089734682325794897"target="_blank" rel="noopener"&gt;este tweet&lt;/a&gt; hoje de manhã e ele rendeu. O ponto completo: quando a tecnologia em si vira commodity, o dinheiro migra pra taxonomia. Criam cinco nomes novos pra encadear chamada de API e de repente surge uma certificação que expira em seis meses.&lt;/p&gt;
&lt;p&gt;Deixa eu sustentar a provocação com calma, porque ela não é implicância gratuita.&lt;/p&gt;</description><content:encoded><![CDATA[<p><a href="https://x.com/AkitaOnRails/status/2089734682325794897"target="_blank" rel="noopener"><img src="tweet-hot-take.png" alt="Hot take no X: Harness, Loop Engineering e Graph Engineering são tudo bullshit pra vender mais horas de consultoria e cursos"  loading="lazy" /></a></p>
<p>Soltei <a href="https://x.com/AkitaOnRails/status/2089734682325794897"target="_blank" rel="noopener">este tweet</a> hoje de manhã e ele rendeu. O ponto completo: quando a tecnologia em si vira commodity, o dinheiro migra pra taxonomia. Criam cinco nomes novos pra encadear chamada de API e de repente surge uma certificação que expira em seis meses.</p>
<p>Deixa eu sustentar a provocação com calma, porque ela não é implicância gratuita.</p>
<p>Já antecipo o comentário padrão: <em>&ldquo;mas comigo funciona&rdquo;</em>. Bom pra você — de verdade. Só que &ldquo;funciona comigo&rdquo; nunca provou que a cerimônia é o que fez funcionar. O que fez funcionar foi você saber o que queria. A cerimônia só estava no mesmo ambiente.</p>
<h2>O meu recibo<span class="hx:absolute hx:-mt-20" id="o-meu-recibo"></span>
    <a href="#o-meu-recibo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Entre janeiro e maio eu fiz uma <a href="/2026/05/14/terminando-maratona-ia-sucesso-ou-fracasso/">maratona de IA</a> e publiquei <a href="https://github.com/akitaonrails?tab=repositories"target="_blank" rel="noopener">mais de 30 repositórios públicos</a>. Tem ferramenta que eu uso todo dia — <a href="https://github.com/akitaonrails/ai-memory"target="_blank" rel="noopener">ai-memory</a>, <a href="https://github.com/akitaonrails/ai-usagebar"target="_blank" rel="noopener">ai-usagebar</a>, <a href="https://github.com/akitaonrails/ai-jail"target="_blank" rel="noopener">ai-jail</a> — e tem app pessoal pra coçar a minha própria coceira: <a href="https://github.com/akitaonrails/frank_mangaplus"target="_blank" rel="noopener">Frank Manga+</a>, <a href="https://github.com/akitaonrails/frank_scanlation"target="_blank" rel="noopener">Frank Scanlation</a>, <a href="https://github.com/akitaonrails/frank_geary"target="_blank" rel="noopener">Frank Geary</a>, e por aí vai.</p>
<p>Sabe o que eu nunca senti vontade de fazer nesse meio tempo? Complicar meu setup de IA. Não tenho um <a href="/2026/05/25/primeiras-impressoes-usando-oh-my-pi-e-opencode/">Pi super customizado</a>, não tenho Hermes, não tenho grafo de agentes orquestrado, não tenho pipeline de specs numeradas. Graças ao ai-memory, <strong>eu troco de harness como troco de cueca</strong>: todo dia, sem limitação. Claude Code de manhã, Codex à tarde, Kimi CLI de noite — a memória do projeto vai junto, então o harness vira detalhe.</p>
<p>E detalhe é o ponto. A maioria dos harnesses é otimizada pro LLM da própria casa. Mas &ldquo;otimizado&rdquo; não quer dizer &ldquo;mágico&rdquo;, e eu tenho dados pra isso.</p>
<h2>O que o meu benchmark diz sobre harness<span class="hx:absolute hx:-mt-20" id="o-que-o-meu-benchmark-diz-sobre-harness"></span>
    <a href="#o-que-o-meu-benchmark-diz-sobre-harness" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>No <a href="/2026/08/15/llm-benchmarks-qwen-3-8-glm-5-3-gemini-3-7/">meu LLM Coding Benchmark</a> eu rodo os mesmos modelos em harnesses diferentes, em condições controladas. O resultado é o oposto do que o mercado de cursos sugere:</p>
<ul>
<li><strong>Pra modelo fraco, o harness resgata.</strong> O Grok 4.3 não construiu nada no OpenCode pelado (18 pontos) e entregou um app de verdade no grok CLI (55). O Gemini 3.1 Pro saiu de 62 pra 88 no harness do Google — mas o problema ali era um bug de transporte do OpenRouter, não falta de &ldquo;engenharia de harness&rdquo;.</li>
<li><strong>Pra modelo de fronteira, o harness é ruído.</strong> Grok 4.5: 92 no OpenCode, 91 no grok CLI. Grok 4.6: 92 e 93. Diferença de um ponto, dentro da margem. Nenhuma engenharia de harness move um modelo bom.</li>
<li><strong>Onde o harness morde de verdade é no bolso.</strong> A rodada do Grok 4.6 saiu por $1,19 no grok CLI contra $6,33 no OpenCode via OpenRouter — <strong>mais de 5x mais barato</strong> pelos mesmos ~11 milhões de tokens, porque o CLI oficial usa o cache nativo da xAI. Mesma história no Codex: o GPT 5.6 Terra custou $6,77 blended porque 21 dos 21,7 milhões de tokens bateram no cache; o Sol, da mesma família e mesma nota, saiu por uns $45.</li>
</ul>
<p>Ou seja: escolher um harness decente importa — pra custo e pra dar estrutura a modelo fraco. Mas isso é uma tarde lendo documentação e olhando a fatura de tokens, não uma disciplina nova com trilha de aprendizado.</p>
<p>Já que citei o Hermes lá em cima, vale explicar: o <a href="https://github.com/NousResearch/hermes-agent"target="_blank" rel="noopener">Hermes Agent</a> é um framework open source da Nous Research pra você montar o <em>seu</em> agente pessoal — você define as tools, escreve os loops, configura roteamento por modelo, fallback local/nuvem, gateways de Telegram e Discord, e ele ainda &ldquo;aprende skills&rdquo; com o uso. É o paraíso de quem monta setup.</p>
<p>Também é um segundo emprego: cada peça dessas vira sua responsabilidade de manter, atualizar e depurar, pra sempre. E no fim das contas o motor continua sendo o mesmo Claude, GPT ou Qwen de todo mundo — o chassi customizado não melhora o motor. O que o Hermes resolve de verdade, continuidade de contexto entre sessões e entre ferramentas, um harness decente com um ai-memory da vida já cobre — sem você virar administrador de infraestrutura do próprio assistente.</p>
<p>Se você quer um assistente no seu hardware por hobby ou por privacidade, é ótimo motivo, vai fundo. Como pré-requisito de produtividade, não é.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> harness bom é o que cobra menos e não atrapalha. O resto é o modelo. E modelo bom não precisa de &ldquo;harness engineering&rdquo; — no máximo precisa que o transporte não esteja quebrado.</p>

</blockquote>
<h2>Loop Engineering, Graph Engineering, Spec-Driven Development<span class="hx:absolute hx:-mt-20" id="loop-engineering-graph-engineering-spec-driven-development"></span>
    <a href="#loop-engineering-graph-engineering-spec-driven-development" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Vamos aos nomes, porque eles descrevem coisas reais — só que minúsculas.</p>
<p><strong>Loop Engineering</strong> é o nome da vez pra projetar o ciclo que um agente repete: executa, verifica com evidência, itera até uma condição de parada. Os guias listam modos de falha reais — o agente declarar &ldquo;pronto&rdquo; cedo demais, o objetivo ir derivando a cada volta. Só que a mitigação recomendada é &ldquo;um verificador independente conferindo evidência objetiva&rdquo;. Isso tem nome faz cinquenta anos: <strong>teste e revisão</strong>. Um agente num loop com suíte de testes é o básico de sempre com nome novo.</p>
<p><strong>Graph Engineering</strong> é desenhar o workflow do agente como um grafo explícito de nós, ramos e junções — a LangChain tem <a href="https://www.langchain.com/blog/3-years-of-graph-engineering-with-langgraph"target="_blank" rel="noopener">três anos dessa história</a>. Faz sentido quando o fluxo é genuinamente ramificado. Só que a maioria esmagadora dos projetos é uma linha reta com um <code>if</code> no meio. Modelar isso como grafo é comprar um quadro branco gigante pra desenhar uma seta.</p>
<p><strong>Spec-Driven Development</strong> é escrever uma especificação detalhada primeiro e tratar o código como artefato gerado a partir dela — a spec vira a &ldquo;source of truth&rdquo; e o código, subproduto. Guarda esse, que o argumento forte vem já embaixo.</p>
<p>Repare no padrão: cada nome pega uma prática real e pequena — rodar em loop com verificação, desenhar um fluxo, escrever o que você quer antes de fazer — e infla até virar &ldquo;disciplina&rdquo;. A inflação é o produto. Nome novo cria curso, curso cria certificação, certificação expira em seis meses e te vende a recertificação.</p>
<p>Pra ser justo: os guias sérios desses temas já trazem a ressalva — o <a href="https://www.aibuilderclub.com/blog/graph-engineering-guide-2026"target="_blank" rel="noopener">guia de graph engineering</a> mais lido diz na cara que &ldquo;você provavelmente não precisa&rdquo; e manda dominar o loop antes de abrir um grafo, e a LangChain tem uma seção inteira de &ldquo;quando não usar grafos&rdquo;. O guia está certo; o estrago vem do funil, que joga a ressalva fora e vende o resto como default pra todo mundo.</p>
<p>Os dois que mais vendem curso — orquestração pesada de agentes e spec-driven development — merecem mais que definição. Merecem o argumento.</p>
<h2>O argumento forte contra a super-orquestração<span class="hx:absolute hx:-mt-20" id="o-argumento-forte-contra-a-super-orquestração"></span>
    <a href="#o-argumento-forte-contra-a-super-orquestra%c3%a7%c3%a3o" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Tem uma matemática simples que os diagramas de agentes orquestrados nunca mostram. Se cada etapa do seu pipeline acerta 90% das vezes — e isso é otimista —, uma cadeia de dez agentes acerta 0,9^10, ou seja, <strong>~35% das vezes</strong>. Cada nó é um ponto novo de falha, e cada aresta é token gasto com agente conversando com agente em vez de trabalhando.</p>
<p>Não precisa acreditar na conta: eu medi isso sem querer no benchmark. O MiniMax M3 rodado debaixo de um orquestrador parecia Tier D, com 24 pontos. O mesmo modelo, limpo, fez 91, Tier A. Uma diferença de até 69 pontos entre condições de harness significa o oposto do que o vendedor de orquestração diz: <strong>quando o plumbing domina o resultado, você parou de medir o modelo e passou a medir o encanamento.</strong> O melhor resultado de todo o benchmark não veio de nenhum enxame orquestrado: veio de um modelo forte, sozinho, num loop simples — Fable 5, 96 pontos, Claude Code, fim.</p>
<p>Faz sentido quando você lembra que coordenação escala mal. Cada agente a mais não adiciona só capacidade; adiciona arestas, contratos de mensagem, estado compartilhado e versões conflitantes da verdade. O roteador que decide &ldquo;qual agente cuida disso&rdquo; vira ao mesmo tempo o gargalo e a fábrica de bugs. Um comitê de agentes medianos com regente não bate um agente capaz com boas ferramentas e memória.</p>
<p>Isso eu já testei diretamente. Em abril eu rodei <a href="/2026/04/25/llm-benchmarks-vale-a-pena-misturar-2-modelos/">três rodadas de &ldquo;modelo forte orquestrando modelo barato&rdquo;</a> — planner + executor, delegação forçada, o pacote completo. Resultado: <strong>nenhuma combinação multi-agente bateu o Opus sozinho</strong> num harness maduro. Numa tarefa coesa como construir um app, o planner precisa ler cada output do executor antes de despachar o próximo passo — os dois viram sequenciais, com latência triplicada e uma fila de coordenação no meio. É o comitê de novo: muita conversa, pouco software.</p>
<p>Não é só o meu benchmark. A Cognition, que vende o Devin, publicou o <a href="https://cognition.com/blog/dont-build-multi-agents"target="_blank" rel="noopener">&ldquo;Don&rsquo;t Build Multi-Agents&rdquo;</a> com um mecanismo mais afiado que a minha conta de 90%: <strong>toda ação carrega decisões implícitas que os outros agentes não veem</strong> — um subagente desenha o fundo estilo Mario, o outro desenha um pássaro incompatível, e nenhuma confiabilidade individual conserta a divergência.</p>
<p>A própria Anthropic, que tem um sistema multi-agente de pesquisa, <a href="https://www.anthropic.com/engineering/multi-agent-research-system"target="_blank" rel="noopener">admite no post de engenharia</a> que multi-agente gasta <strong>15x mais tokens</strong>, que coding é um domínio ruim pra isso — a maioria das tarefas de código não é paralelizável de verdade — e que 80% da melhoria deles veio de simplesmente gastar mais tokens, não da arquitetura.</p>
<p>Quando Berkeley mediu o que realmente roda em produção, <a href="https://arxiv.org/abs/2512.04123"target="_blank" rel="noopener">86 sistemas em 26 domínios</a>: 68% dos agentes em produção executam no máximo 10 passos antes de intervenção humana. O que existe de verdade por aí é loop simples supervisionado — não a constelação de nós coloridos do diagrama do consultor.</p>
<p>Onde a orquestração é legítima: trabalho genuinamente paralelo e independente — varrer dez mil arquivos, rodar dez mil análises descartáveis. Map-reduce existe faz vinte anos e nunca precisou de nome pomposo. E tem um recanto sério além dele: agente rodando de madrugada, sem ninguém olhando, com credencial na mão — aí verificador independente e orçamento duro viram questão de segurança, não de estilo. Mas isso é operação de frota, não o coding do dia a dia que o curso te vende. Fora desses nichos, a maioria das &ldquo;arquiteturas multi-agente&rdquo; é o trabalho de um agente só, com YAML extra.</p>
<p>Tem um motivo pra você ouvir tanto sobre isso: orquestração é complexidade <strong>visível</strong>. Tem diagrama, tem nó colorido, tem dashboard. Um agente bem dirigido não tem nada disso — não tem slide, não tem certificação, não tem o que vender.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> cada agente a mais multiplica os modos de falha. Se o resultado do seu sistema muda quando você troca o orquestrador, o seu sistema é o orquestrador — e o modelo era figurino.</p>

</blockquote>
<h2>O argumento forte contra spec-driven development<span class="hx:absolute hx:-mt-20" id="o-argumento-forte-contra-spec-driven-development"></span>
    <a href="#o-argumento-forte-contra-spec-driven-development" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O SDD parece maduro porque soa como &ldquo;escrever documentação&rdquo;. Mas presta atenção no que ele realmente propõe: a spec vira a fonte da verdade e o código vira artefato gerado. O problema é que <strong>uma spec precisa o bastante pra gerar código correto já é um programa</strong> — só que escrito em prosa, e prosa não compila. Cada ambiguidade da spec é um bug que nenhum compilador pega, num meio sem teste, sem linter, sem feedback. O SDD não remove a parte difícil, que é pensar com precisão; ele move a parte difícil pra um formato onde erro não grita.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> uma spec precisa o bastante pra gerar código correto já é um programa — só que em prosa. E prosa não compila.</p>

</blockquote>
<p>Mesmo que você escreva a spec perfeita, ela começa a morrer no primeiro hotfix. O bug aparece em produção, alguém conserta direto no código, e a spec vira mentira. A gente conhece essa lei faz décadas — é por isso que documentação apodrece. Chamar a spec de &ldquo;fonte da verdade&rdquo; não muda o incentivo de ninguém.</p>
<p>A gente já fez esse experimento, aliás. UML, MDA, &ldquo;o código se gera a partir do modelo&rdquo; — vinte e poucos anos atrás era a mesma promessa com outras siglas. Colapsou sempre pela mesma razão: o modelo nunca era a realidade; o código era. O SDD é o MDA com um LLM pendurado. E <a href="https://www.alexcloudstar.com/blog/spec-driven-development-2026/"target="_blank" rel="noopener">não sou só eu que vejo o Waterfall 2.0 ali</a>.</p>
<p>Quem testou as ferramentas com seriedade chegou no mesmo lugar. A Thoughtworks colocou spec-driven development no anel <a href="https://www.thoughtworks.com/radar/techniques/spec-driven-development"target="_blank" rel="noopener">&ldquo;Assess&rdquo; do Technology Radar</a> — não &ldquo;adote&rdquo;, &ldquo;avalie&rdquo; — depois de ver as ferramentas inflarem tarefas pequenas em cerimônia, e cravou a frase que resume: estamos talvez <em>&ldquo;reaprendendo uma lição amarga: regras detalhadas feitas à mão pra IA simplesmente não escalam&rdquo;</em>. É a Bitter Lesson do Rich Sutton batendo na porta de novo — estrutura artesanal perde pra escala, sempre perdeu.</p>
<p>Tem ainda a inversão temporal. A grande lição do agile foi que você descobre o que quer <strong>construindo</strong> — working software over comprehensive documentation. O LLM acabou de deixar a iteração barata como nunca na história. E o que o SDD propõe? Expandir a fase de planejamento, justo agora que iterar ficou barato. Resposta errada, na direção errada, na hora errada.</p>
<p>É a tese que eu venho martelando desde os primeiros posts de <a href="/2026/02/23/vibe-code-fiz-um-indexador-inteligente-de-imagens-com-ia-em-2-dias/">Agile Vibe Coding</a>: <strong>software emerge, não se planeja</strong>. <a href="/2026/02/20/do-zero-a-pos-producao-em-1-semana-como-usar-ia-em-projetos-de-verdade-bastidores-do-the-m-akita-chronicles/">Escrevi isso em fevereiro, com recibo</a>: as features mais importantes do M.Akita Chronicles nasceram de problema que apareceu no meio do caminho — um job que falhou em silêncio, um site que bloqueou a gem, um crash que deixou email em limbo. Nenhum spec do mundo prevê isso. O sistema correto emerge da iteração, não da especificação.</p>
<p>O processo ficou documentado de novo quando o ai-memory cresceu na mão de 26 contribuidores em 24 dias: <a href="/2026/06/14/ai-memory-arquitetura-emergente-e-software-maleavel/">software bom é escultura de barro, não torre de Lego</a> — maleável, sempre ajustável, nunca pronto. Quem tenta desenhar a arquitetura inteira antes da primeira linha constrói uma camisa de força, não um sistema. Só amador ainda acredita que dá pra especificar o software inteiro antes de codar. Modelagem de verdade não vem de template nem de curso — <a href="/2023/08/11/akitando-144-modelagem-de-software-e-dificil-ver-vs-enxergar/">falei disso anos atrás no Akitando 144</a>: ela nasce de repertório com problema e código reais. Não tem receita pronta; nunca teve.</p>
<p>O SDD tenta ressuscitar a ideia de que dá pra planejar software adiantado — a ideia que a indústria enterrou depois de décadas de projeto entregue atrasado, errado e superfaturado. O LLM não revalidou essa ideia; só deu a ela um PowerPoint novo.</p>
<p>Até quem escreve guia a favor separa as duas coisas: <a href="https://dev.to/krlz/spec-driven-development-in-2026-what-it-is-the-tooling-and-how-teams-actually-use-it-2fk2"target="_blank" rel="noopener">&ldquo;spec-as-source é onde mora o hype; spec-anchored é onde está o valor hoje&rdquo;</a>. O meu alvo aqui é o primeiro. Onde a spec pesada é legítima: time grande, codebase legado, trabalho assíncrono que atravessa fuso e sprint — o bom e velho documento de design, que sempre existiu e sempre teve valor. O que não cola é vender isso como o novo default pra todo mundo.</p>
<p>O meu prompt de benchmark, pra constar, é uma página de objetivos. A diferença é que eu não confio na prosa: eu valido rodando. Precisão mora em teste, não em parágrafo.</p>
<h2>O que você realmente precisa<span class="hx:absolute hx:-mt-20" id="o-que-você-realmente-precisa"></span>
    <a href="#o-que-voc%c3%aa-realmente-precisa" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Eu já escrevi tudo isso aqui no blog, com recibo de projeto real. Chama <a href="/2026/02/23/vibe-code-fiz-um-indexador-inteligente-de-imagens-com-ia-em-2-dias/">Agile Vibe Coding</a>, e cabe num parágrafo:</p>
<p>É XP (eXtreme Programming, o agile raiz) com LLM: testes, <a href="/2026/04/20/clean-code-para-agentes-de-ia/">Clean Code</a>, CI (integração contínua), pair programming e deploy. Você dirige o agente como dirigiria um pair muito rápido: diz o que quer, acompanha a execução, corrige enquanto o erro é barato. A ideia é 10% do trabalho; os outros 90% são engenharia de software normal, a de sempre. <a href="/2026/04/15/como-falar-com-o-claude-code-efetivamente/">Esquece framework e template de três páginas</a>: o que você precisa é saber o que quer, saber o que não quer, e saber validar quando chega. E precisa de equilíbrio: <a href="/2026/04/11/vs-code-e-o-novo-cartao-perfurado/">nem largar o volante pro agente, nem virar fiscal de vírgula</a>.</p>
<p>Foram mais de 600 horas disso, mais de meio milhão de linhas, dezenas de projetos no ar. Nenhum grafo, nenhuma certificação, nenhum loop com nome em inglês.</p>
<blockquote>
  <p><strong>Pra guardar:</strong> a ideia é 10% do trabalho; os outros 90% são engenharia de software, a de sempre.</p>

</blockquote>
<h2>A peça que me deixa trocar de harness: ai-memory<span class="hx:absolute hx:-mt-20" id="a-peça-que-me-deixa-trocar-de-harness-ai-memory"></span>
    <a href="#a-pe%c3%a7a-que-me-deixa-trocar-de-harness-ai-memory" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Tem uma ferramenta minha que é o oposto de taxonomia: o <a href="https://github.com/akitaonrails/ai-memory"target="_blank" rel="noopener">ai-memory</a>. Ele nasceu de um problema concreto. Todo harness guarda a sessão no formato dele, e quando a conversa fica longa, ele compacta o histórico pra caber na janela — e a compactação joga fora justamente os detalhes que explicam por que cada decisão foi tomada. Aí você troca de ferramenta e começa do zero, com o projeto inteiro pra reexplicar.</p>
<p>O ai-memory resolve isso do lado de fora do harness. Ele lê a sessão nativa sem tocar no arquivo original e guarda tudo num ledger pesquisável: mensagens, chamadas de ferramenta com resultados, resumos de compactação, checkpoint do git — cada evento marcado com a origem (veio do Claude, do Codex, do OpenCode). Quando eu abro outro harness, ele ganha a sessão nativa dele e recebe só o delta que ainda não viu. Quando eu volto pro anterior, o ai-memory retoma no formato daquele cliente e entrega o que aconteceu nos outros enquanto isso.</p>
<p>É por isso que &ldquo;troco de harness como troco de cueca&rdquo; não é força de expressão. <strong>O conhecimento do projeto mora no projeto, não na sessão de uma ferramenta.</strong> Se a Anthropic mudar preço, limite ou modelo amanhã — e vai mudar —, eu troco o motor sem jogar fora a viagem. Os detalhes de como isso funciona estão <a href="/2026/07/20/novidades-no-meu-ai-memory-cada-vez-melhor-pra-usar-com-suas-ias/">neste post</a>.</p>
<p>Tem ainda uma inversão aqui que despacha o SDD de brinde. O spec-driven development diz que a fonte da verdade é um documento escrito <strong>antes</strong> do trabalho, tentando prever o futuro, e que o código deve obediência a ele. O ai-memory faz o contrário: a fonte da verdade é uma <a href="/2026/06/16/ai-memory-memoria-longo-prazo-karpathy-wiki-auto-aprendizado-hermes-projetos/">wiki destilada do próprio trabalho</a> — cada sessão vira evidência, e o que merece sobreviver (decisões, regras, gotchas, tentativas que falharam) é consolidado em páginas Markdown curtas que qualquer agente lê antes de começar.</p>
<p>A spec tenta adivinhar o projeto; a wiki registra o projeto. Documento escrito antes apodrece no primeiro hotfix, porque ninguém é obrigado a atualizá-lo. A wiki é alimentada pelo próprio ato de trabalhar — e quando desatualiza, você percebe na hora, porque os agentes tropeçam nela toda sessão.</p>
<p>Repare que isso é harness engineering de verdade: uma ferramenta, escrita uma vez, resolvendo um problema meu. Nenhum curso, nenhuma sigla, nenhuma certificação.</p>
<h2>Conclusão: pede o recibo<span class="hx:absolute hx:-mt-20" id="conclusão-pede-o-recibo"></span>
    <a href="#conclus%c3%a3o-pede-o-recibo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Não gaste tempo nem dinheiro com curso de &ldquo;harness engineering&rdquo;, &ldquo;loop engineering&rdquo; ou qualquer taxonomia da semana. É tentativa descarada de te cobrar por coisas que você já faz se souber engenharia de software básica.</p>
<p>Esse filme a gente já viu, aliás. O <a href="https://x.com/arantespp/status/2089752215380426951"target="_blank" rel="noopener">Pedro Arantes lembrou no X</a>: <em>&ldquo;Microservices, clean architecture, hexagonal e Domain-Driven Design são tudo bullshit pra vender mais horas de consultoria e cursos.&rdquo;</em> Mesma história, mesmo roteiro. Cada um deles nasceu de um problema real — e virou default de quem não tinha o problema. Microservice pra time de três pessoas, arquitetura hexagonal pro CRUD (o cadastro cria-lê-atualiza-apaga de sempre), DDD pra nunca mais escrever código. A técnica passa, a taxonomia fica, o curso vende.</p>
<p>Pra ninguém se fazer de desentendido: <strong>nada disso é inútil</strong>. Loop com verificação funciona. Grafo funciona quando o fluxo é um grafo de verdade. Spec pesada salva time grande. Microservices resolveram problemas reais de quem tinha escala de verdade; DDD brilha em domínio complexo de verdade. O problema nunca foi a ferramenta — é vender a ferramenta como <strong>bala de prata</strong>, o martelo universal que você precisa aplicar em tudo. Bala de prata não existe, nunca existiu. Quem te vende uma não está vendendo solução; está vendendo curso.</p>
<p>Entenda o mecanismo psicológico, porque ele é velho e eficiente: esses termos existem pra te dar <strong>FOMO</strong> (Fear of Missing Out — o medo de estar perdendo o bonde). Pra te deixar ansioso, achando que está ficando pra trás, que está deixando produtividade na mesa, que todo mundo já migrou pro novo paradigma e você não. Ansiedade vende. Depois que você está inseguro, eles te cobram pra implementar algo de que você nunca precisou. FOMO é real — e aqui, é o modelo de negócio.</p>
<p>O modelo ainda é recorrente — repare na elegância. Primeiro te vendem a metodologia que <strong>gera</strong> artefatos — specs, grafos, boards, diagramas. Os artefatos se multiplicam, ninguém mais sabe onde está nada, e adivinha quem aparece? A mesma consultoria, agora vendendo a ferramenta que <strong>gerencia</strong> os artefatos, o curso que te ensina a gerenciar a ferramenta e o workshop de governança dos artefatos. É o vendedor de pá te parabenizando pelo buraco que você cavou — e te oferecendo uma pá maior.</p>
<p>A Gartner tem até nome oficial pra isso: <a href="https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027"target="_blank" rel="noopener">&ldquo;agent washing&rdquo;</a> — pegar produto existente, pendurar a etiqueta &ldquo;agentic&rdquo; e revender. A estimativa deles: só umas <strong>130 das milhares</strong> de empresas que se vendem como &ldquo;IA agêntica&rdquo; são reais, e a previsão é de 40% dos projetos do tipo cancelados até o fim de 2027, por custo, valor incerto ou risco mal controlado. Aqui não tem implicância minha: é o ciclo do hype, medido, com previsão pública e tudo.</p>
<p>Da próxima vez que um influencer ou consultor tentar te empurrar esses produtos, faz uma pergunta simples: <strong>onde estão as suas dezenas de projetos open source de alta qualidade que ficaram melhores por causa dessas &ldquo;técnicas&rdquo;?</strong></p>
<p>Eles não têm o que mostrar. Eu tenho — <a href="https://github.com/akitaonrails?tab=repositories"target="_blank" rel="noopener">está tudo público</a>, com código, benchmark e processo documentado. Quando a tecnologia vira commodity, o dinheiro migra pra taxonomia. Não seja o cliente dessa migração.</p>
]]></content:encoded><category>inteligencia-artificial</category><category>llms</category><category>vibe-coding</category></item><item><title>Entendendo IA Watermark da Anthropic: como burlar</title><link>https://akitaonrails.github.io/2026/08/16/entendendo-ia-watermark-da-anthropic/</link><guid isPermaLink="true">https://akitaonrails.github.io/2026/08/16/entendendo-ia-watermark-da-anthropic/</guid><pubDate>Sun, 16 Aug 2026 16:00:00 -0300</pubDate><description>&lt;p&gt;O Claude agora sai de fábrica com carimbo. Desde 2 de agosto de 2026, a Anthropic marca de forma invisível o texto dos modelos mais novos, e os lançados antes migram ao longo dos meses seguintes.&lt;/p&gt;
&lt;p&gt;Desligar, sem opção. A reação veio rápida: uma &lt;a href="https://www.businessinsider.com/claude-users-cancel-subscriptions-citing-anthropic-new-ai-watermark-2026-8"target="_blank" rel="noopener"&gt;onda de cancelamento de assinatura&lt;/a&gt;, com print do cancelamento circulando no X.&lt;/p&gt;
&lt;p&gt;Antes de cancelar por reflexo, vale saber o que a marca é de verdade. Ela funciona de um jeito bem distinto do que a maioria imagina, existe por um motivo concreto, e desaparece com uma facilidade quase cômica.&lt;/p&gt;</description><content:encoded><![CDATA[<p>O Claude agora sai de fábrica com carimbo. Desde 2 de agosto de 2026, a Anthropic marca de forma invisível o texto dos modelos mais novos, e os lançados antes migram ao longo dos meses seguintes.</p>
<p>Desligar, sem opção. A reação veio rápida: uma <a href="https://www.businessinsider.com/claude-users-cancel-subscriptions-citing-anthropic-new-ai-watermark-2026-8"target="_blank" rel="noopener">onda de cancelamento de assinatura</a>, com print do cancelamento circulando no X.</p>
<p>Antes de cancelar por reflexo, vale saber o que a marca é de verdade. Ela funciona de um jeito bem distinto do que a maioria imagina, existe por um motivo concreto, e desaparece com uma facilidade quase cômica.</p>
<p>Pra quem tem pressa, o essencial:</p>
<ul>
<li><strong>Um viés estatístico nas palavras que o Claude escolhe.</strong> Invisível na leitura, detectável apenas por quem tem a chave da Anthropic. Caractere escondido e fonte estranha ficam de fora.</li>
<li><strong>A origem é a lei europeia, o AI Act.</strong> A Anthropic assinou o código de transparência europeu e resolveu carimbar no mundo inteiro; o porquê vem adiante.</li>
<li><strong>Uma passada por outro LLM apaga o carimbo.</strong> O sinal mora nas escolhas de palavra do Claude; quando outro modelo reescreve o texto, até um fraquinho local, as escolhas viram outras e o padrão se dissolve. A própria Anthropic reconhece.</li>
</ul>
<p>Cada ponto em detalhe a seguir.</p>
<h2>O que é esse watermark, de verdade<span class="hx:absolute hx:-mt-20" id="o-que-é-esse-watermark-de-verdade"></span>
    <a href="#o-que-%c3%a9-esse-watermark-de-verdade" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Pode tirar da cabeça caractere Unicode invisível, espaço escondido no meio da linha, fonte alterada. O watermark da Anthropic é <a href="https://www.anthropic.com/news/claude-text-watermark"target="_blank" rel="noopener">estatístico</a>: ele atua na hora em que o Claude decide qual palavra usar, justamente nos pontos em que várias palavras serviriam igualmente bem.</p>
<p>Todo modelo de linguagem monta texto palavra por palavra, tirando a próxima de uma lista de candidatos prováveis. Quando duas ou três servem igual, um número aleatório decide. O watermark muda a origem desse acaso: o número passa a derivar de uma chave secreta combinada com as palavras anteriores. O método é herdado do <a href="https://ai.google.dev/responsible/docs/safeguards/synthid"target="_blank" rel="noopener">SynthID-Text</a>, do Google DeepMind.</p>
<p>Um exemplo concreto. Falando do tempo, &ldquo;o céu estava nublado&rdquo; e &ldquo;o céu estava cinzento&rdquo; transmitem a mesma informação. Nesses encontros de sinônimos, a chave inclina o Claude pra um lado com mais frequência do que o puro azar inclinaria. Cada escolha isolada passa despercebida, mas um texto longo repete esse ponto de decisão centenas de vezes, e o conjunto acaba formando uma assinatura estatística.</p>
<p>O comunicado da Anthropic é direto: <strong>o texto não ganha nada, e nenhum caractere fica oculto</strong>. O custo segue o mesmo porque nenhum token extra é gerado, e a leitura fica idêntica. Quem segura a chave roda um detector, compara a sequência de palavras com as escolhas típicas do Claude e recebe de volta uma probabilidade de o texto ter saído dele.</p>
<p>E o que a marca prova se resume a isso: o Claude <strong>esteve envolvido</strong> em algum momento. Ela não distingue um texto escrito do zero pelo modelo de um texto que ele só editou com peso. Sobre você, nada fica registrado: sem usuário, sem empresa, sem conversa identificada.</p>
<p>O carimbo vale pro texto do Claude.ai, da API, do Claude Code e dos demais produtos. Em código ele aparece menos, já que código raramente permite trocar um termo por outro equivalente. Arquivos e imagens seguem caminho distinto, um metadado assinado chamado C2PA, em vez deste watermark de texto. E a limitação importa: em trecho curto ou altamente factual, onde quase não existe escolha de palavra, o detector enfraquece.</p>
<h2>Por que tanta gente cancelou<span class="hx:absolute hx:-mt-20" id="por-que-tanta-gente-cancelou"></span>
    <a href="#por-que-tanta-gente-cancelou" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O estopim somou três ingredientes: caráter obrigatório, alcance global e ausência de opt-out. A marca não se desliga e vale fora da Europa também. Uma leva de assinantes do Claude Max <a href="https://www.forbes.com/sites/maryroeloffs/2026/08/11/claude-will-put-invisible-watermarks-on-ai-text-and-images-and-the-internet-isnt-happy/"target="_blank" rel="noopener">cancelou citando controle e autoria</a> do próprio material.</p>
<p>O receio é concreto, no campo profissional e no acadêmico. Rascunhar com o Claude e assinar o resultado como seu vira risco se, adiante, um detector apontar &ldquo;passou por IA&rdquo;. A <a href="https://gizmodo.com/anthropic-explains-its-watermark-system-as-some-claude-users-loudly-revolt-2000799022"target="_blank" rel="noopener">Anthropic respondeu com um post</a> garantindo que a marca preserva leitura, sentido e qualidade, apenas sinalizando processamento. Nem todo mundo se convenceu.</p>
<h2>A lei europeia por trás do carimbo<span class="hx:absolute hx:-mt-20" id="a-lei-europeia-por-trás-do-carimbo"></span>
    <a href="#a-lei-europeia-por-tr%c3%a1s-do-carimbo" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>O carimbo nasceu de uma obrigação concreta. O <a href="https://artificialintelligenceact.eu/article/50/"target="_blank" rel="noopener">Artigo 50 do AI Act</a> exige que provedores de sistemas de IA geradora marquem a saída em formato legível por máquina, de modo que o conteúdo artificial dê pra identificar como tal. A obrigação passou a valer em 2 de agosto de 2026, e descumprir custa caro: multa de até €15 milhões ou 3% do faturamento global anual.</p>
<p>A Anthropic tinha assinado, em julho de 2026, o Código de Prática de Transparência pra Conteúdo Gerado por IA da Comissão Europeia, junto com outros grandes provedores de modelo, num grupo de cerca de 190 signatários. Os demais também vão implementar as próprias marcas d&rsquo;água, cada um com sua chave e seu método.</p>
<p>Sobrou pra Anthropic uma decisão: restringir a marcação à Europa ou estender ao planeta. A empresa afirma ainda não ter um jeito durável de limitar a marca por região, então escolheu carimbar tudo, em todo lugar, desde o primeiro dia. Daí o carimbo aparecer no texto de assinantes brasileiros e japoneses, que nada têm a ver com a lei europeia.</p>
<h2>Dá pra remover passando o texto por outro LLM?<span class="hx:absolute hx:-mt-20" id="dá-pra-remover-passando-o-texto-por-outro-llm"></span>
    <a href="#d%c3%a1-pra-remover-passando-o-texto-por-outro-llm" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Essa é a pergunta que mais chega pra mim. Resposta curta: dá, e é fácil. O sinal mora nas escolhas de palavra do Claude; quando outro modelo reescreve o texto, as escolhas passam a ser dele, e o padrão estatístico se desfaz.</p>
<p>A própria Anthropic admite. Retoque leve provavelmente deixa pedaço da marca, mas <strong>a reescrita completa, com cada palavra trocada, elimina o sinal</strong>. A lógica é simples: o detector mede quais sinônimos o Claude preferiu; se outro modelo escolheu os sinônimos dele, não sobra nada do Claude pra medir.</p>
<p>A academia confirma o rumo. <a href="https://arxiv.org/abs/2508.20228"target="_blank" rel="noopener">Testes de robustez do SynthID</a>, feitos na Queen&rsquo;s University, partem de detecção perfeita sem ataque e mostram a taxa caindo pra volta de 84% depois de um parafraseador dedicado, e pra menos de 70% com tradução de ida e volta. Quanto mais agressiva a reescrita, mais o sinal degrada.</p>
<p>E sim, a intuição está certa: <strong>um modelo modesto, até local, resolve</strong>. Rearranjar texto preservando o sentido é serviço que dispensa raciocínio profundo. Um GLM, um Kimi, um Llama pequeno rodando na sua máquina reescreve o parágrafo e apaga a assinatura no caminho. Trocar &ldquo;nublado&rdquo; por &ldquo;cinzento&rdquo; mil vezes está longe de pedir o modelo mais esperto do mercado.</p>
<p>Dois poréns honestos. A reescrita precisa ser genuína, palavra por palavra; uma passada de corretor ortográfico fica longe de contar. E tudo isso vale pro watermark de texto: arquivos e imagens carregam o tal metadado C2PA, que sai por outro método, limpando os metadados do arquivo.</p>
<h2>Que prompt faria isso<span class="hx:absolute hx:-mt-20" id="que-prompt-faria-isso"></span>
    <a href="#que-prompt-faria-isso" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Somando os critérios do watermark, o prompt de remoção quase se monta sozinho. A marca habita escolhas de sinônimo e de estrutura, resiste a edição leve e depende de texto com certa extensão. Logo, o prompt precisa exigir troca máxima de vocabulário e de estrutura, segurando o sentido no lugar.</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">Reescreva o texto a seguir na íntegra, com palavras suas.
</span></span><span class="line"><span class="cl">Substitua o vocabulário e reorganize as frases do início ao fim:
</span></span><span class="line"><span class="cl">escolha outros sinônimos, mude a ordem das orações, varie a construção.
</span></span><span class="line"><span class="cl">Mantenha exatamente o sentido, os fatos e o tom.
</span></span><span class="line"><span class="cl">Evite reproduzir qualquer expressão literal do original.
</span></span><span class="line"><span class="cl">Entregue somente o texto reescrito.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Texto:
</span></span><span class="line"><span class="cl">&#34;&#34;&#34;
</span></span><span class="line"><span class="cl">&lt;cole aqui o texto do Claude&gt;
</span></span><span class="line"><span class="cl">&#34;&#34;&#34;</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 linha mira um critério. &ldquo;Com palavras suas&rdquo; e &ldquo;substitua o vocabulário&rdquo; desmontam os encontros de sinônimo onde a marca se esconde. &ldquo;Reorganize as frases&rdquo; e &ldquo;mude a ordem das orações&rdquo; quebram a sequência de palavras que o detector compara. &ldquo;Evite reproduzir expressão literal&rdquo; tapa as frestas que uma edição leve deixaria abertas.</p>
<p>Nada de mágica aqui, e é assim por desenho. A Anthropic conhece o limite e fala claro: a marca é macia, atesta que o Claude encostou no texto e desaparece diante de uma reescrita séria. Funciona como rótulo de proveniência num mundo em que a maioria jamais vai se dar ao trabalho de apagar; contra quem decide apagar, o sinal é fraco.</p>
<h2>Onde isso deixa a gente<span class="hx:absolute hx:-mt-20" id="onde-isso-deixa-a-gente"></span>
    <a href="#onde-isso-deixa-a-gente" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>No meu balanço, o watermark assusta menos e pode menos do que os dois lados do berreiro anunciam. Ele é invisível, carrega zero dado seu e prova, no limite, que o Claude passou pelo texto. Uma reescrita em qualquer modelo o dissolve. É um rótulo de proveniência deliberadamente fraco, desenhado pra cumprir a lei europeia.</p>
<p>Ainda assim, cancelar por causa dele segue uma lógica que entendo. Marcação compulsória, planetária, sem porta de saída, irrita quem paga pela ferramenta. E dos cerca de 190 signatários do Código europeu, o Claude foi o que chegou primeiro às manchetes, absorvendo sozinho a onda de revolta.</p>
<p>Quem só quer usar o Claude e seguir a vida quase não sente diferença no dia a dia. Quem precisa que o texto não grite &ldquo;IA&rdquo; resolve com um parágrafo reescrito num modelo local, e a receita está com a própria Anthropic. O barulho ficou bem maior que o buraco.</p>
<h2>Como este texto foi feito<span class="hx:absolute hx:-mt-20" id="como-este-texto-foi-feito"></span>
    <a href="#como-este-texto-foi-feito" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Transparência combina com o assunto. O primeiro rascunho deste artigo foi escrito pelo Claude. Em seguida o Kimi fez a checagem de fatos, afirmação por afirmação, contra as fontes originais, e pegou uma estatística inventada no meio do caminho, que a gente corrigiu. Por fim, o GLM reescreveu o texto inteiro, palavra por palavra, seguindo a receita das seções acima.</p>
<p>Ou seja: o artigo aplica nele mesmo o que ensina. Saiu do Claude, passou pelo crivo do Kimi e voltou com o vocabulário e a construção do GLM. Se o rascunho original carregava o watermark, a reescrita completa trocou as escolhas de palavra, e com elas o sinal. Sem detector público, ninguém consegue conferir de fora; a receita, essa, qualquer um pode testar.</p>
]]></content:encoded><category>llms</category><category>seguranca</category><category>leis-e-regulacao</category></item><item><title>LLM Benchmarks: Qwen 3.8, GLM 5.3, Gemini 3.7, Grok 4.6</title><link>https://akitaonrails.github.io/2026/08/15/llm-benchmarks-qwen-3-8-glm-5-3-gemini-3-7/</link><guid isPermaLink="true">https://akitaonrails.github.io/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://akitaonrails.github.io/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://akitaonrails.github.io/2026/07/30/novo-llm-benchmark-refiz-todos-os-testes/</link><guid isPermaLink="true">https://akitaonrails.github.io/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://akitaonrails.github.io/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://akitaonrails.github.io/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></channel></rss>