Windup · Relatório de bancada · 13 jul 2026

Qual LLM planeja melhor os seus testes?

77 gerações de plano ao vivo contra o saucedemo.com, 6 modelos de 2 empresas, medindo assertividade (o plano executa e verifica?), custo por geração e latência — tudo sem cache, do ledger real do windup costs.

77 gerações ao vivo 6 modelos testados 6 cenários (3 complexos novos) 3 releases publicados (0.11.1 → 0.11.3)

Veredito

Campeão geral gemini-3.1-flash-lite 100% de acerto em todas as rodadas finais, inclusive nos cenários complexos. ~2s por plano, $0.0014–0.0025. Zero degeneração. Continua o default.
Melhor da OpenAI gpt-5-mini Depois do tuning: 5/5 no simples, 3/4 nos difíceis. ~$0.0011–0.0016 por plano. Só tropeça em fluxo negativo.
Economia extrema gpt-5-nano $0.0003 por plano (6× mais barato que o campeão) e 5/5 no cenário simples — mas 0/4 nos complexos. Só para suítes triviais.
Reprovados gemini-3.5-flash · gpt-4o-mini O Flash acerta (8/9) mas degenera: até 170s e $0.25 num único plano. O 4o-mini é baratíssimo, mas erra sistematicamente fora do caminho feliz (3/9).

Rodada 1 — A/B inicial

5 gerações por modelo, cenário de login

Primeiro contato do Windup com a API real da OpenAI (client REST próprio, json mode, reasoning_effort: minimal). Funcionou de primeira — as falhas abaixo são de qualidade de plano, não de infraestrutura.

ModeloAcertoPlano (mediana)Custo/geração
googlegemini-3.1-flash-lite 5/5 2,7 s$0.00192
openaigpt-4o-mini 5/5 4,1 s$0.00068
openaigpt-5-mini 4/5 3,1 s$0.00119
openaigpt-5-nano 4/5 3,4 s$0.00032

Rodada 2 — Tuning cross-provider

As falhas dos gpt-5 viraram melhorias no produto

As duas falhas da rodada 1 eram overplanning: passos inventados além da tarefa. Cada correção foi revalidada nos dois providers — e uma delas quebrou o Gemini no caminho, provando que só prompt não basta.

Regra do plano mínimo no prompt

"Gere o MENOR plano que cumpre a tarefa" — os gpt-5 visitavam páginas extras "para conferir" e inventavam seletores de menu.

nano 5/5 · mini 3/5 (sobrou o eco de fragmento)

Exemplo JSON no prompt — regressão!

Um exemplo literal de plano-com-fragmento consertou o mini, mas fez o flash-lite repetir a cauda do fragmento (re-preencher senha, re-clicar login). Lição antiga confirmada: prompt longo degrada o flash.

mini 5/5 · flash-lite 0/3

Dedupe mecânico de eco de fragmento

dropFragmentEchoes(): ações logo após um use que duplicam o próprio fragmento são descartadas deterministicamente — vale para qualquer provider, sem depender de obediência ao prompt. Exemplo JSON removido.

9/9 — flash-lite, gpt-5-mini e gpt-5-nano, 3× cada · flash-lite ficou até mais barato ($0.0014 vs $0.0019)

Rodada 3 — O duelo pedido

gemini-3.5-flash vs gpt-4o-mini em 3 cenários complexos

O gemini-1.5-flash foi aposentado pela Google (404 para contas novas), então o duelo justo foi com o Flash atual. Cenários novos: checkout com 3 produtos (~12 ações), adicionar/remover do carrinho, e o caminho negativo do usuário bloqueado. 3 gerações cada, sem cache.

Cenáriogemini-3.5-flashgpt-4o-mini
Checkout triplo fluxo longo, 12 ações 2/3 — 2 a 3 chamadas por plano, 18 s a 90 s 3/3 — 1 chamada, ~10 s, ~$0.001
Remover do carrinho verificar botão de volta 3/3 — limpo, $0.0104 cada 0/3 — re-adicionou o produto que devia só observar
Login bloqueado caminho negativo 3/3 — mas degenerou: 2–4 chamadas, até 170 s e $0.25 0/3 — credencial errada + expect contraditório
Total 8/9 (89%) · $0.568 3/9 (33%) · $0.007

Custo médio por geração (escala real)

gemini-3.5-flash
$0.0631
gemini-3.1-flash-lite ★
$0.0025
gpt-5-mini
$0.0015
gpt-4o-mini
$0.0008
gpt-5-nano
$0.0003

★ referência: o default rodou os mesmos cenários complexos fora do duelo — 1 chamada, 3,4 s, $0.0024 no checkout triplo.

Anatomia das falhas do gpt-4o-mini

Credencial do manifesto onde não devia

A tarefa dizia locked_out_user literal; o modelo usou os ENVs da conta "qa" do manifesto — logou com o usuário errado e a mensagem de erro nunca apareceu.

Virou regra de prompt no produto (v0.11.2): credencial literal vence quando nenhuma conta é citada. Pós-fix: preenchimento correto.

Expect contraditório no fluxo negativo

No mesmo expect: navegação para o inventário (sucesso) e a mensagem de erro. O modelo não concebe um login que falha. Limitação do modelo — sem patch nosso.

gpt-5-mini e os Gemini acertam esse caso.

Verificação transformada em ação

"Verificar que o botão voltou a aparecer" virou um clique no botão — re-adicionando o produto e quebrando a própria verificação.

Coberto pela regra do plano mínimo para os gpt-5; o 4o-mini persiste.

O verificador funcionou perfeitamente: todos os FAIL acima são o Windup barrando planos errados antes de virarem testes verdes mentirosos — exatamente o que a verificação barata existe para fazer.

Rodada 4 — Extra

Os gpt-5 afinados nos cenários que derrubaram o 4o-mini

ModeloLogin bloqueadoRemover do carrinhoTotal
gpt-5-mini 1/2 2/2 3/4
gpt-5-nano 0/2 0/2 0/4

O nano, que brilhou no cenário simples, desaba na complexidade (planos inválidos mesmo após retry). O mini só tropeça no mesmo expect contraditório de fluxo negativo do 4o-mini.

Rodada 5 — "flash-lite-latest"

O alias -latest é o próprio 3.1

A Google não revela para onde o alias aponta, então a prova foi por fingerprint: mesmos cenários, mesmas contagens de tokens — idênticas até no output, o que é praticamente impossível entre modelos diferentes. Não existe Flash-Lite mais novo que o 3.1 (o 3.5 só saiu na linha Flash cheia).

Cenáriotokens intokens outaçõeslite-latest3.1-flash-lite
Login4 07819923/3 PASSidêntico
Checkout triplo4 324898122/2 PASSidêntico
Login bloqueado4 09849051/1 PASSidêntico
Recomendação: prefira o nome fixo gemini-3.1-flash-lite. O alias flutua — quando a Google reapontar, o comportamento do planejador muda sem você mudar nada. Upgrade de modelo deve ser decisão sua, validada com windup bench antes.

Saldo

O que os testes deixaram no produto

ReleaseMudança
0.11.1Regra do plano mínimo no prompt + dropFragmentEchoes() (dedupe mecânico de eco de fragmento, com testes unitários)
0.11.2Regra de credenciais literais vs manifesto + os 3 cenários duelo-* commitados como fixtures de fluxo complexo
0.11.3Preço dos aliases flutuantes da Google na tabela (o ledger estimava $0.0035 em vez dos $0.0024 reais)

Custo total de toda a bancada de hoje: ≈ $0.85 — sendo $0.57 só do gemini-3.5-flash degenerando. O windup costs guarda a conta completa por provider e modelo.