Os testes

Notas em linguagem simples sobre cada teste no Main Bench. O mesmo texto é exibido ao clicar no ícone i ao lado do título de cada coluna. Os próprios testes fazem parte do projeto de código aberto CrucibleForge; esta página descreve, de forma geral, o que eles avaliam. Quando um teste possui exemplos públicos de questões, basta abrir seu respectivo cartão para visualizá-los.

O que os testes medem

Total

O “Total” é a soma da pontuação do “Code” e da pontuação do “Chat”. Cada uma dessas pontuações pode chegar a 10 em um desempenho perfeito nos testes padrão; portanto, 20 é a pontuação máxima possível. Os pacotes de bônus (ver “Pacotes de Bônus”) adicionam pontos extras, permitindo que um modelo obtenha uma pontuação acima de 20. Nesta suíte, o “Code” pode atingir 13 pontos e o “Chat”, 15 pontos, com todos os pacotes de bônus. As barras em cada linha indicam esse valor máximo possível; há também um marcador no ponto onde termina o conjunto padrão de testes. Os testes não censurados têm sua própria aba e nunca são incluídos na pontuação total. O valor “±” ao lado do “Total” representa metade do intervalo de 90% obtido por meio de bootstrap nos casos de teste; portanto, dois modelos cujas pontuações estejam dentro desse intervalo são estatisticamente equivalentes.

Chat

O Chat avalia jogos de role-play e conversas entre companheiros, não tarefas gerais de assistência. Ele executa 8 sessões com múltiplas interações: um role-play repleto de detalhes narrativos, conversas entre companheiros, um personagem com várias vozes e uma história criada em conjunto. Cada sessão verifica se o modelo se lembra de fatos mencionados anteriormente, aceita correções, mantém a voz e o ponto de vista do personagem, além de seguir regras de escrita específicas. Um modelo avaliador separado, Gemma 4 31B (uncensored “heretic” build, Q8) on our own GPU rig, atribui notas às respostas com base numa lista de verificação para cada caso; regras textuais simples cobrem o restante. Responder a perguntas ou seguir instruções pontuais não são avaliados aqui. A pontuação máxima no Chat é 10, para execução perfeita das perguntas padrão; pacotes bônus adicionam pontos extras, até um total de 15 neste conjunto de testes.

Resumo completo no GitHub

Chat: exemplos de perguntas

Alguns casos reais do conjunto de testes de código aberto, resumidos.

  1. Mantém um chat de companhia consistente ao longo de semanas

    User (Fri 6 Nov) Evening, Hettie. Day off. I did nothing at all until two o'clock and I regret nothing. Biscuit and I sat at the window watching the park like two old men on a bench. The flat's mostly sorted now. One odd thing though. Biscuit goes out fine in the morning, but when we get back in he just flops down by the front door, and in the evening he won't go out for his walk at all. He's gone a bit off his food as well.

    Como é avaliado: O modelo de juiz responde a 12 perguntas de sim/não sobre as respostas, e 13 regras em texto simples são verificadas ao lado dele.

    Veja este caso no GitHub

  2. Interpreta três personagens, cada um com a sua própria voz

    User The door of the Lamp and Ladle bangs open on wind and rain. Daro Kessen, thirty, a river-guild assessor with a satchel of papers under his oilskin, shakes the water off his hat and looks at the three people at the table by the stove. "Evening. Daro Kessen, river guild. I'm here about your toll-ledger. I gather it went missing three nights ago? …

    Como é avaliado: O modelo de juiz responde a 10 perguntas de sim/não sobre as respostas, e 11 regras em texto simples são verificadas ao lado dele.

    Veja este caso no GitHub

  3. Coescreve uma história sob restrições múltiplas

    User Hi! Let's write a short story together, one section per message. Ground rules for the whole piece: first person, past tense; the narrator is Wren Adair, 34, a piano tuner. …

    Several turns later

    User One more author's change, from here to the end: the Hales live on a houseboat moored on the canal, not in a flat. Don't use the word "flat" again, in any sense, and call it the boat. Earlier sections stay as they are. …

    Como é avaliado: O modelo de juiz responde a 5 perguntas de sim/não sobre as respostas, e 25 regras em texto simples são verificadas ao lado dele.

    Veja este caso no GitHub

Resumo completo no GitHub

Código

O “Code” abrange a escrita de funções Python que funcionem corretamente, a previsão do que um programa imprimirá, a localização e correção de erros, além de tarefas relacionadas a repositórios e ao uso de ferramentas. As respostas são testadas contra testes ocultos; portanto, a pontuação reflete código que realmente funciona, e não apenas código que parece correto. A pontuação máxima é 10 para a resolução perfeita das questões padrão; pacotes bônus adicionam pontos extras, até um máximo de 13 neste conjunto de testes.

Resumo completo no GitHub

Código: exemplos de perguntas

Alguns casos reais do conjunto de testes de código aberto, resumidos.

  1. Conta os dias úteis com um fim de semana personalizado

    def workday_intl(start, days, weekend=1, holidays=()):
        """
        Implement `def workday_intl(start, days, weekend=1,
        holidays=()):` in the spirit
        of a spreadsheet WORKDAY.INTL function, with exactly these
        rules:
    
        - Dates are strings of the exact shape `YYYY-MM-DD` (ASCII
        digits, a real
          calendar date). `start` and every holiday must be valid, else
        ValueError.
          The result is a date string of the same shape.
        - `days` is an `int` (not `bool`), else ValueError. …
        """

    Como é avaliado: Testes de unidade ocultos (35 verificações em 16 grupos)

    Veja este caso no GitHub

  2. Prevê exatamente o que os trechos de código Python imprimirão

    # Q1: shared basket (Python 3.13) - what does it print?
    class Basket:
        items = []
        count = 0
    
        def add(self, thing):
            self.items.append(thing)
            self.count += 1
    
    a, b = Basket(), Basket()
    a.add("milk")
    b.add("eggs")
    b.add("tea")
    Basket.count = 10
    print(a.items, a.count, b.count, Basket.count, Basket().count)

    Como é avaliado: Correspondência exata em 8 saídas previstas

    Veja este caso no GitHub

  3. Encontra dois bugs por trás de um único relatório de bug

    Bug report: "I have 750 g of flour, the bread recipe needs 1.25 kg, and the shopping list tells me to buy the whole 1.25 kg. Also, after I bought another 500 g and added it, the pantry shows 500 g of flour instead of 1250 g." tests/test_shopping.py::test_partial_stock fails too.

    Find the causes and fix them so the package does what README.md says.

    Como é avaliado: Testes de unidade ocultos (4 grupos: converter, adicionar, compras, existentes)

    Veja este caso no GitHub

Resumo completo no GitHub

Conjuntos bônus

Cada categoria vale 10 pontos para uma execução perfeita das questões padrão. Um modelo que obtenha pelo menos 90% de acerto em uma categoria ganha acesso a um conjunto bônus mais difícil para essa mesma categoria; ao completar esse conjunto, o modelo pode desbloquear o próximo. Cada pacote vale 1 ponto adicional, de modo que uma categoria pode ultrapassar os 10 pontos. O máximo que uma categoria pode alcançar é 10 pontos mais um por cada pacote disponível; cada novo pacote aumenta esse valor. Os detalhes de cada linha listam os pacotes: seus pontos ou se estão bloqueados. Os conjuntos bônus são a única forma de ultrapassar os 10 pontos, evitando assim que todos os modelos fiquem com a pontuação máxima no topo da tabela.

Como a escala cresce

Programas

Os programas dão ao modelo 6 tarefas, cada uma das quais exige uma função em Python a partir de uma descrição precisa, porém repleta de armadilhas (datas, arredondamento, layout de texto, agendamento). A resposta é executada num ambiente isolado contra testes unitários ocultos; a pontuação corresponde à proporção de grupos de testes que são aprovados. Assim, uma resposta quase correta também recebe crédito parcial.

Resumo completo no GitHub

Programas: exemplos de perguntas

Alguns casos reais do conjunto de testes de código aberto, resumidos.

  1. Disponibiliza o texto em linhas de largura fixa

    def wrap(text, width):
        """
        Implement `def wrap(text, width):` that lays `text` out into
        lines of at most
        `width` characters and returns them as a list of strings.
    
        Rules:
    
        1. `width` must be an `int` >= 2, otherwise raise ValueError.
        2. Whitespace means exactly these four characters: space, tab,
        `\r`, `\n`.
           Every other character (including non-breaking space U+00A0)
        is part of a
           word. Words are maximal runs of non-whitespace characters.
        3. …
        """

    Como é avaliado: Testes de unidade ocultos (28 verificações em 15 grupos)

    Veja este caso no GitHub

  2. Arredonda da mesma forma que uma planilha faz

    def sheet_round(func, number, *args):
        """
        Implement `def sheet_round(func, number, *args):` — six
        spreadsheet rounding
        functions with exact decimal arithmetic.
    
        Numbers (`number`, a multiple, a significance) are given as an
        `int` or as a
        `str` decimal: optional `-`, one or more digits, optionally `.`
        and one or more
        digits (`"-0.125"`, `"12"`, `"007.50"`). Floats, bools and other
        shapes raise
        ValueError. `digits` and `mode` are `int`s (not `bool`). …
        """

    Como é avaliado: Testes de unidade ocultos (44 verificações em 15 grupos)

    Veja este caso no GitHub

  3. Planeja tarefas entre as máquinas para obter o melhor resultado geral

    def best_plan(tasks, k, gap=0, machine_cost=0):
        """
        Implement `def best_plan(tasks, k, gap=0, machine_cost=0):` that
        returns an `int`.
    
        - `tasks` is a list of `(start, end, value)` tuples of ints with
        `start < end` and
          `value >= 1`. There are `k` identical machines (`k >= 1`).
        - A machine runs one task at a time. On the same machine, a task
        `y` may run after
          a task `x` only if `y.start >= x.end + gap` (`gap` is an int
        >= 0). …
        """

    Como é avaliado: Testes de unidade ocultos (72 verificações em 14 grupos)

    Veja este caso no GitHub

Resumo completo no GitHub

Banco de códigos

O banco de códigos mostra ao modelo pequenos trechos de código Python e JavaScript do dia a dia — o tipo de código auxiliar que um aplicativo comum utiliza — e pergunta exatamente o que cada um imprime. Existem 2 conjuntos, um para cada linguagem; toda saída prevista é verificada por correspondência exata. O objetivo é recompensar quem conhece o verdadeiro comportamento da linguagem (valores padrão compartilhados, ordem de classificação, arredondamento, valores considerados “verdadeiros”), e não quem escreve novo código. A pontuação corresponde à proporção de saídas previstas que estão corretas.

Resumo completo no GitHub

Banco de códigos: exemplos de perguntas

Alguns casos reais do conjunto de testes de código aberto, resumidos.

  1. Prevê o que os trechos de código Python imprimirão

    # Q1: shared basket (Python 3.13) - what does it print?
    class Basket:
        items = []
        count = 0
    
        def add(self, thing):
            self.items.append(thing)
            self.count += 1
    
    a, b = Basket(), Basket()
    a.add("milk")
    b.add("eggs")
    b.add("tea")
    Basket.count = 10
    print(a.items, a.count, b.count, Basket.count, Basket().count)

    Como é avaliado: Correspondência exata em 8 saídas previstas

    Veja este caso no GitHub

  2. Prevê o que os trechos de código JavaScript imprimirão

    // Q1: sorting quantities (Node 24 (ES module)) - what does it print?
    const qty = ["10", "9", "1", "25"];
    console.log([...qty].sort().join(","), qty.map(parseInt).join(","), qty.map(Number).sort().join(","));
    console.log([3, 20, 100].sort().join(","), [3, 20, 100].sort((a, b) => b - a).join(","));

    Como é avaliado: Correspondência exata em 8 saídas previstas

    Veja este caso no GitHub

Resumo completo no GitHub

Agente

O agente fornece ao modelo um relatório de erro referente a um pequeno projeto com vários arquivos, além das ferramentas que o assistente de codificação utiliza: listar, ler e buscar arquivos, editá-los e executar os testes. Trata-se de uma única tarefa (1 no conjunto de tarefas); portanto, uma única execução pode fazer com que essa coluna se mova bastante. O projeto corrigido é avaliado pela execução dos seus testes.

Resumo completo no GitHub

Agente: exemplos de perguntas

Alguns casos reais do conjunto de testes de código aberto, resumidos.

  1. Encontra dois bugs por trás de um único relatório de bug

    Bug report: "I have 750 g of flour, the bread recipe needs 1.25 kg, and the shopping list tells me to buy the whole 1.25 kg. Also, after I bought another 500 g and added it, the pantry shows 500 g of flour instead of 1250 g." tests/test_shopping.py::test_partial_stock fails too.

    Find the causes and fix them so the package does what README.md says.

    Como é avaliado: Testes de unidade ocultos (4 grupos: converter, adicionar, compras, existentes)

    Veja este caso no GitHub

Resumo completo no GitHub

Ferramentas

O Tools testa se um modelo invoca as ferramentas corretamente. Cada caso é uma conversa scriptada com uma ida e volta à ferramenta: o modelo precisa escolher a ferramenta certa, fornecer argumentos válidos, usar o resultado e evitar as armadilhas embutidas na configuração. Uma chamada malformada é considerada uma falha.

Resumo completo no GitHub

Ferramentas: exemplos de perguntas

Alguns casos reais do conjunto de testes de código aberto, resumidos.

  1. Verifica um horário de retirada durante uma mudança de horário

    User Book a pickup for my mother, Maria Sousa, at Lisbon airport on Sunday 25 October. …

    User Her mobile is +351 912 345 678.

    User Her husband Joao Sousa is on TP1351 with her but his phone is broken - book him a pickup too, same place and time …

    Several steps later

    User Finally: Maria might switch to the earlier TP1349 instead, so book her a second pickup for that flight too, just in …

    Como é avaliado: Intercâmbio scriptado de 6 etapas: cada chamada à ferramenta, seus argumentos e as respostas são verificados

    Veja este caso no GitHub

  2. Calcula o prazo final para a reserva com base na resposta da ferramenta

    User Book a room at Harbour Inn Bergen (hotel BGO-2) for two nights from Friday 13 November for me, Ola …

    User Jonas really does sleep in the cot, so switch us to R-412 - it's cheaper, and the hotel's own note on …

    User OK, we stay in R-509. Until when can we still cancel this Bergen booking for free?

    Several steps later

    User Then just move that Oslo booking to the weekend of 4 December instead.

    Como é avaliado: Intercâmbio scriptado de 11 etapas: cada chamada à ferramenta, seus argumentos e as respostas são verificados; uma resposta contendo conteúdo proibido é rejeitada

    Veja este caso no GitHub

  3. Escolha o dia e o grupo etário certos antes de fazer a reserva

    User Please sign my son Leo Brandt (born 7 November 2021) up for this term's Saturday class at Northpool - the earliest …

    User Lovely. What time does his class start, and is anyone else still able to get a spot in it?

    User Hm, he's still only four, so the Minnows would suit him better - move him to the 09:45 Minnows. …

    Several steps later

    User His sister Mia Brandt, born 3 March 2019, wants a Saturday class at Northpool too - the earliest one she can join …

    Como é avaliado: Intercâmbio scriptado de 8 etapas: cada chamada à ferramenta, seus argumentos e as respostas são verificados

    Veja este caso no GitHub

Resumo completo no GitHub

tok/s

O tok/s é a velocidade média na qual o modelo gerou texto durante a execução. Os modelos locais foram executados em nosso próprio hardware; portanto, essas velocidades podem ser comparadas entre si. Já os modelos hospedados dependem do provedor e do grau de utilização do serviço; assim, considere suas velocidades apenas como uma referência aproximada.

Custo de execução

O custo de execução soma o valor de cada solicitação em uma execução completa, com base nos preços divulgados pelo provedor: os tokens enviados e os tokens retornados, incluindo o tempo de processamento. Ele abrange os testes padrão de Código e Chat. Não inclui conjuntos de testes bônus, novas tentativas, o sistema de avaliação (que roda em nosso próprio hardware) nem quaisquer descontos por uso fora do horário de pico ou por uso de cache; portanto, esse valor é próximo ao que você pagaria pelo preço de tabela. Um símbolo “~” indica que o provedor não cobra por token (utiliza um plano fixo); assim, calculamos o custo com base no preço de tabela. Um símbolo “*” significa que algumas solicitações retornaram sem dados de uso; por isso, o valor pode estar subestimado. O filtro de conteúdo do provedor pode bloquear respostas; nesse caso, a linha correspondente indica quantas respostas foram bloqueadas, e cada uma delas recebe pontuação zero.

Classe

A classe é uma maneira rápida de agrupar os modelos por Pontuação Total: S, A, B e C, sendo S o mais forte. O limite para cada faixa está listado nas notas abaixo do quadro. Um modelo sem uma pontuação de Chat completa não possui Pontuação Total nem classe.

Enxuto

O Lean compara as pontuações do modelo em “Chat” e “Code” com a mediana do painel para cada uma delas. Se o modelo for claramente melhor numa das áreas do que na outra, é marcado como tendendo para “Chat” ou para “Code”; caso contrário, é considerado equilibrado. O tamanho da diferença necessária está indicado nas notas abaixo do painel.

Suíte

O conjunto de testes é a versão do conjunto de testes com a qual uma pontuação foi gerada. Quando os testes são alterados, os modelos são executados novamente e o conjunto anterior é mantido em “Versões anteriores do conjunto de testes”. Compare as pontuações apenas dentro de um mesmo conjunto de testes.

Data do teste

A data de teste é o dia em que os resultados do modelo neste quadro foram gerados. Uma nova execução do modelo exibe uma data mais recente.

Baseado em

O ajuste fino mantém o nome da base aqui e nunca é ocultado por “Apenas versões mais recentes”. Essa caixa está ativada por padrão e oculta versões mais antigas de um fornecedor quando uma versão mais nova da mesma linha está disponível e possui uma classificação. Ao digitar um nome de base no filtro, como “gemma 4”, são listados todos os itens construídos com base nele.

Quanto

O Quant é o formato de compressão dos pesos de um modelo local. O Q8_0 é semelhante ao modelo de precisão total e é o padrão utilizado nesta placa; uma compressão menor torna o modelo mais rápido e adequado para GPUs menores, mas pode resultar em um desempenho inferior. Utilizamos Q6 ou Q5 apenas quando o Q8_0 não se adequa ao nosso equipamento; nunca utilizamos valores abaixo de Q5. As linhas com pontuação abaixo de Q5 permanecem na lista, marcadas como “abaixo de Q5”, e são reavaliadas apenas se apresentarem um bom desempenho. Se os mesmos pesos forem testados em dois formatos de compressão diferentes, uma linha é classificada e a outra aparece abaixo dela como uma variante alternativa. API refere-se a um modelo hospedado, que o provedor oferece na forma que desejar.

Abrir Bancada Principal Cada pontuação aqui é uma coluna no quadro.