TS-moBERTo-150M · TS-Ettin-150M · 68M · 32M · 17MFamília TS
Announcement

Família TS: modelos de decisão que você treina nos seus dados

Cinco encoders abertos, de 17M a 150M de parâmetros, que escolhem entre opções em vez de escrever texto. Você baixa, roda na CPU e, com a typestrict.ai, treina nos dados da sua empresa.

Lucas DuarteFundador, typestrict.aiOctober 20, 2026

A maioria das decisões de IA não precisa escrever uma única palavra.

Uma equipe de atendimento precisa escolher uma categoria. Um sistema de pedidos precisa escolher uma rota. Uma operação de risco precisa decidir quais casos merecem revisão. Para essas tarefas, gerar texto palavra por palavra é trabalho a mais: a resposta é uma das opções que você já tem.

Hoje estamos lançando a família TS: encoders abertos que recebem uma pergunta e as suas opções, estimam a probabilidade de cada resposta e podem ser treinados nos dados da sua empresa. Você baixa os modelos no Hugging Face, roda na CPU e usa a typestrict.ai para transformar qualquer um deles num modelo especializado na sua tarefa.

Uma decisão tipada, de verdade

Qual é o assunto da mensagem do cliente?

“Meu cartão ainda não chegou. Como posso acompanhar a entrega?”

  • Problema com pagamento<0.1%
  • Entrega do cartão100%
  • Cancelamento<0.1%

confidence 0.98

Saída real da TS-moBERTo-150M baixada do Hugging Face (ONNX int8, CPU), sem treino nos seus dados: só a pergunta e as três opções com uma descrição cada. O pré-treino da família inclui intenções públicas de atendimento bancário, então este é um caso que ela conhece bem. O código está em "Como começar", lá embaixo.

Gerar uma resposta ou escolher uma

Um LLM gera texto, um pedaço depois do outro, e alguém ainda precisa transformar esse texto numa das opções. Um modelo de decisão lê a pergunta e todas as opções de uma vez e dá uma nota para cada uma num único passo. Por isso a resposta é sempre uma das opções que você deu, vem com a probabilidade de todas e cabe numa CPU.

  • choice: escolher uma opção entre várias (o assunto de um chamado, a fila certa, a ferramenta do próximo passo).
  • noul: dizer se uma afirmação é verdadeira (esta cláusula está no contrato? esta resposta usa só o documento?).
  • score: dar uma nota numa escala ordenada (a urgência de um caso, o quanto um produto atende a busca).

Probabilidade e confiança

Cada resposta traz dois números com papéis diferentes. As probabilidades dizem como a resposta se distribui entre as opções. A confiança estima a chance de a opção escolhida estar certa, e é ela que você usa para decidir o que automatizar e o que mandar para uma pessoa.

Dizer que a confiança é calibrada só vale com medida. Na TS-moBERTo-150M ela passa por um ajuste (uma temperatura por tipo de pergunta e número de opções, e um mapa de Platt) feito em metade dos conjuntos de teste de decisões tipadas. Na outra metade, que não entrou no ajuste, o erro esperado de calibração é 0,046 em inglês (1.000 itens) e 0,050 em português (947 itens), contra 0,107 e 0,106 sem o ajuste. Isso vale para perguntas parecidas com as do treino. No seu domínio, meça de novo: é o que a typestrict.ai faz com o seu modelo treinado, olhando a acurácia nas 80% respostas mais confiantes.

Três coisas juntas

  • Um encoder especializado em decisões. Pré-treinado em dois estágios (2.048 e depois 8.192 tokens) com dados públicos de licença comercial, para responder choice, noul e score.
  • Um modelo aberto. Pesos, ONNX e código de inferência sob Apache-2.0: você baixa, roda onde quiser e não paga por chamada.
  • Uma plataforma que adapta e mede. A typestrict.ai treina o modelo nos seus dados e mede o resultado contra uma referência, o Jev, em exemplos que ele não viu no treino.

A família

ModeloTamanhoIdiomasDecision Index 0.3, encoder sozinhoHoje
TS-moBERTo-150M150Minglês e português31,20padrão na typestrict.ai
TS-Ettin-150M150Minglês31,96treino na typestrict.ai
TS-Ettin-68M68Minglês27,61treino na typestrict.ai
TS-Ettin-32M32Minglês19,70treino na typestrict.ai
TS-Ettin-17M17Minglês15,76treino na typestrict.ai
Todos com a mesma receita e os mesmos dados de treino, 8.192 tokens de contexto e licença Apache-2.0. A TS-moBERTo-150M parte do moBERTo; as TS-Ettin, dos rerankers Ettin.

Três medidas, três perguntas

Os números deste lançamento respondem perguntas diferentes, e cada um vem com o modelo e a configuração ao lado: como o encoder se sai sozinho num benchmark público, como ele se sai depois de treinado numa tarefa, e o que acontece na sua tarefa.

34,78TS-Ettin-150M no Decision Index 0.3Com os experts de código e calculadora, antes de qualquer treino nos seus dados. A TS-moBERTo-150M faz 33,89 na mesma configuração.
0,915macro-F1 da TS-moBERTo-150M treinada no BANKING77Contra 0,798 do Jev nos mesmos 1.001 exemplos de teste.
164,5 MBa TS-moBERTo-150M inteira em ONNX de 8 bitsO arquivo que você baixa e roda no seu servidor, no navegador ou no celular.

1. O encoder sozinho, num benchmark público

Decision Index 0.3 da família TS: encoder sozinho e com os experts de código e calculadora
Índice público do Decision Index 0.3, rodado no nosso laboratório com as mesmas requisições para todos. Barra escura: o encoder sozinho. Barra amarela: com os experts de código e calculadora que acompanham a TS-moBERTo-150M. Os exemplos de teste do índice e as suas quase duplicatas foram tirados do treino.

Esse é o retrato do modelo base, antes de ver os seus dados. O pré-treino usa divisões de treino públicas de várias bases que também estão no índice (a lista completa está no card de cada modelo). A corrida oficial do kit do Decision Index na TS-moBERTo-150M, publicada quando ela se chamava Dinah-1, deu 34,32, com os resultados brutos abertos para auditoria. Um encoder de 150M não sabe tudo o que um modelo gigante sabe, e o índice mostra isso com clareza: ele é o ponto de partida, não o produto final.

2. Treinado na tarefa, contra o Jev

Para mostrar o que acontece depois do treino, rodamos o produto como um cliente rodaria em 15 bases públicas: atendimento de banco (BANKING77), seguros, telecom, viagem e crédito imobiliário (Bitext), notícias financeiras, cláusulas de contrato, moderação, segurança de IA e temas de enciclopédia. Em cada uma separamos 20% para teste, treinamos no resto e medimos o Jev nos mesmos 20%.

moBERTo-150M + fine-tuningTS-moBERTo-150M + fine-tuningJevBANKING77BANKING77 · moBERTo-150M + fine-tuning: 0.86BANKING77 · TS-moBERTo-150M + fine-tuning: 0.920.92BANKING77 · Jev: 0.80Bitext InsuranceBitext Insurance · moBERTo-150M + fine-tuning: 0.99Bitext Insurance · TS-moBERTo-150M + fine-tuning: 0.990.99Bitext Insurance · Jev: 0.90Financial newsFinancial news · moBERTo-150M + fine-tuning: 0.81Financial news · TS-moBERTo-150M + fine-tuning: 0.820.82Financial news · Jev: 0.74Bitext TelcoBitext Telco · moBERTo-150M + fine-tuning: 0.99Bitext Telco · TS-moBERTo-150M + fine-tuning: 0.990.99Bitext Telco · Jev: 0.91Bitext MortgageBitext Mortgage · TS-moBERTo-150M + fine-tuning: 0.990.99Bitext Mortgage · Jev: 0.92Bitext TravelBitext Travel · TS-moBERTo-150M + fine-tuning: 0.980.98Bitext Travel · Jev: 0.95Bitext Retail BankingBitext Retail Banking · TS-moBERTo-150M + fine-tuning: 0.990.99Bitext Retail Banking · Jev: 0.96Measuring Hate Speech (20k)Measuring Hate Speech (20k) · TS-moBERTo-150M + fine-tuning: 0.840.84Measuring Hate Speech (20k) · Jev: 0.82LEDGARLEDGAR · TS-moBERTo-150M + fine-tuning: 0.980.98LEDGAR · Jev: 0.98MINDS-14 (pt)MINDS-14 (pt) · TS-moBERTo-150M + fine-tuning: 0.920.92MINDS-14 (pt) · Jev: 0.92Measuring Hate SpeechMeasuring Hate Speech · TS-moBERTo-150M + fine-tuning: 0.830.83Measuring Hate Speech · Jev: 0.83Aegis 2.0Aegis 2.0 · TS-moBERTo-150M + fine-tuning: 0.840.84Aegis 2.0 · Jev: 0.84DBpediaDBpedia · TS-moBERTo-150M + fine-tuning: 0.980.98DBpedia · Jev: 0.99HelpSteer2HelpSteer2 · TS-moBERTo-150M + fine-tuning: 0.680.68HelpSteer2 · Jev: 0.74SIB-200 (pt)SIB-200 (pt) · TS-moBERTo-150M + fine-tuning: 0.760.76SIB-200 (pt) · Jev: 0.86
Macro-F1 nos 20% separados para teste de cada base. Modelos treinados pelo fluxo do produto; o Jev nos mesmos exemplos.
BenchmarkmoBERTo-150M + fine-tuningTS-moBERTo-150M + fine-tuningJevGain over Jev
BANKING771,001 tests0.8620.9150.798+11.8
Bitext Insurance802 tests0.9860.9910.896+9.5
Financial news804 tests0.8120.8240.743+8.1
Bitext Telco806 tests0.9940.9910.911+8.0
Bitext Mortgage814 tests·0.9870.920+6.7
Bitext Travel792 tests·0.9840.952+3.2
Bitext Retail Banking806 tests·0.9900.963+2.7
Measuring Hate Speech (20k)2,000 tests·0.8370.825+1.3
LEDGAR240 tests·0.9840.983+0.0
MINDS-14 (pt)119 tests·0.9190.922-0.3
Measuring Hate Speech800 tests·0.8260.828-0.3
Aegis 2.0800 tests·0.8380.841-0.4
DBpedia798 tests·0.9840.994-1.0
HelpSteer2800 tests·0.6830.739-5.7
SIB-200 (pt)201 tests·0.7600.864-10.4

Ganho é a TS-moBERTo-150M treinada menos o Jev, em pontos de macro-F1, com o intervalo de 95% por bootstrap pareado. A coluna do moBERTo original só tem número nas 4 bases em que o treinamos do mesmo jeito; nas outras não há resultado comparável. Cada base é um teste separado, sem correção para comparações múltiplas, e as pequenas (MINDS-14 com 119 testes, SIB-200 com 201) têm intervalos mais largos. A regra completa, com a semente fixa e o script para recalcular, está no cálculo de reembolso.

A TS-moBERTo-150M treinada supera o Jev com significância (o intervalo inteiro acima de zero) em 7 das 15 bases, todas com a taxonomia própria do negócio: +11,8 pontos nas 77 intenções do BANKING77, +9,5 em seguros, +8,1 em notícias financeiras, +8,0 em telecom. Em 5 empata e em 3 perde.

3. A sua tarefa

Benchmark público é vitrine. O que vale é a sua tarefa, e nela a regra é a mesma da tabela: a typestrict.ai separa 20% dos seus exemplos, treina no resto e compara com o Jev nos exemplos separados. Se o modelo não superar o Jev pelos critérios publicados, o crédito volta.

Veja decidindo

Abaixo estão exemplos reais do teste do BANKING77: a mensagem do cliente, a resposta da TS-moBERTo-150M treinada e a do Jev, conferidas contra a resposta certa.

“Does my PIN come with my card?”

  • typestrictGetting the physical card
  • Card arrival

Rápido e pequeno

Na mensagem do exemplo lá em cima, a TS-moBERTo-150M em ONNX int8 levou 30 ms de mediana por decisão na CPU de um Mac com Apple M5, uma decisão por vez. Na geração anterior (Dinah-0), em 200 problemas de xadrez, medimos 63 ms por decisão contra 343 ms do Jev pela API, e 185 ms de mediana no simulador do iOS (iPhone 17), sem servidor.

O modelo inteiro cabe em 164,5 MB. Ele roda no seu servidor, no navegador do seu cliente ou num aplicativo, e cada pergunta não precisa ir para um serviço externo. Depois de baixado, um milhão de decisões custa o mesmo que uma.

Onde o Jev ainda ganha

  • Conhecimento de mundo. Em categorias genéricas que um modelo grande já conhece, como os temas da DBpedia e do SIB-200, o Jev venceu.
  • Julgamento subjetivo. Avaliar a qualidade de respostas de IA (HelpSteer2) também foi do Jev.
  • É um limite dos modelos TS atuais. Novos modelos TS mais fortes nessas áreas estão no laboratório, e até lá é exatamente para esses casos que a garantia existe.

Onde usar

  • Atendimento: classifique o assunto e roteie cada chamado para o time certo.
  • Jurídico: diga se uma cláusula está presente, ausente ou em conflito com a política da empresa.
  • Comércio: decida se um produto atende a busca do cliente, ou se é substituto ou complemento.
  • Risco: marque a transação, o e-mail ou a mensagem que merece uma segunda olhada.
  • Agentes: escolha a ferramenta certa para o próximo passo, sem pagar um LLM para isso.
  • Qualidade de dados: rotule milhares de registros por hora numa única máquina.

Como começar

Baixe e rode

O exemplo do começo, do jeito que rodamos: o código de inferência vem no próprio repositório do modelo.

# pip install huggingface_hub onnxruntime transformers numpy
import importlib.util
from huggingface_hub import hf_hub_download

REPO = "typestrict/TS-moBERTo-150M"
spec = importlib.util.spec_from_file_location("dinah", hf_hub_download(REPO, "dinah.py"))
dinah = importlib.util.module_from_spec(spec)
spec.loader.exec_module(dinah)

model = dinah.DinahONNX.from_pretrained(REPO)  # ONNX int8, CPU
print(model.choice(
    state="Meu cartão ainda não chegou. Como posso acompanhar a entrega?",
    criteria={
        "pagamento": "Problema com um pagamento ou cobrança",
        "entrega_cartao": "Entrega ou envio do cartão",
        "cancelamento": "Cancelar o cartão ou a conta",
    },
    instructions="Qual é o assunto da mensagem do cliente?",
))
# {"choice": "entrega_cartao", "confidence": 0.98, "probabilities": {...}}

Treine nos seus dados

Envie os seus arquivos em typestrict.ai: o agente organiza e anonimiza os dados, você confere a proposta e treina. O treino custa $50 per model ($25 in the launch promotion, until January 18, 2027), e o crédito volta se o modelo não superar o Jev. Também dá para fazer tudo pelo seu assistente de IA, com o servidor MCP, ou pelo CLI. O modelo treinado vem num pacote ONNX que roda no seu servidor, num container ou num app Flutter com o decision_ai.

Treine um modelo de decisão nos seus dados com a typestrict.ai: dados, revisão, modelo base, treino e resultado

De Dinah-1 para TS-moBERTo-150M

  • Em 14/10/2026 publicamos o modelo como Dinah-1 (revisão b518a5e7). Em 19/10 ele passou a se chamar TS-moBERTo-150M, na organização typestrict.
  • Os pesos são idênticos: o mesmo SHA-256 no encoder, no expert de calculadora e nos dois arquivos ONNX. Não houve novo treino.
  • Os resultados publicados da Dinah-1, como os 34,32 da corrida oficial do Decision Index, valem para a TS-moBERTo-150M.
  • Para projetos novos, use typestrict/TS-moBERTo-150M. O repositório da Dinah-1 continua no ar, para citações e integrações antigas.

O que vem por aí

Esta é a primeira versão pública da família, e um modelo pequeno não substitui um modelo gigante em tudo. Os próximos passos já estão no laboratório: a calibração das TS-Ettin, mais idiomas, modelos menores para qualquer celular e as arenas abertas para qualquer um testar. Se você tem uma tarefa que gostaria de ver aqui, me conta.

Apêndice: modelos e referências

  • [TS-moBERTo-150M](https://huggingface.co/typestrict/TS-moBERTo-150M): base moBERTo, inglês e português.
  • [TS-Ettin-150M](https://huggingface.co/typestrict/TS-Ettin-150M), [68M](https://huggingface.co/typestrict/TS-Ettin-68M), [32M](https://huggingface.co/typestrict/TS-Ettin-32M) e [17M](https://huggingface.co/typestrict/TS-Ettin-17M): bases Ettin, inglês.
  • Jev: typesafe/jev-1.13, a referência dos testes e do cálculo de reembolso.
  • Decision Index: edição 0.3, placar público.