7 melhores alternativas open-source ao TypeSafe Jev
Explore uma nova geração de projetos open-source que oferecem alternativas práticas ao Jev para decisões de IA rápidas, locais e com ótimo custo-benefício.
Muitas aplicações de IA usam modelos de linguagem grandes para tarefas que, na prática, não exigem geração de texto.
Um agente pode só precisar decidir qual ferramenta acionar, se um documento é relevante, qual a urgência de uma solicitação ou se uma ação deve ser escalonada.
Jev, da TypeSafe AI, encara essas tarefas de outro jeito. Em vez de gerar uma resposta token a token, ele recebe o estado da aplicação e perguntas estruturadas e devolve decisões tipadas como escolhas, pontuações, julgamentos de sim/não e probabilidades. Veja na prática no nosso tutorial da Jev API
A TypeSafe AI descreve isso como uma abordagem de System One Model: usar IA como uma camada rápida de decisão, e não como um gerador de texto genérico.
O desafio é que ainda sabemos relativamente pouco sobre como o Jev funciona internamente.
A TypeSafe AI compartilhou alguns detalhes sobre sua abordagem de decisão em paralelo e método de treinamento, mas a arquitetura completa, os pesos do modelo, os dados e a receita integral de treino não são públicos.
Isso dificulta inspecionar, reproduzir ou adaptar o próprio Jev.
Projetos open-source estão explorando a mesma ideia com arquiteturas que podemos, de fato, examinar e rodar localmente.
Alguns usam modelos bidirecionais pequenos, outros adaptam Qwen com heads de decisão especializadas, enquanto outros extraem probabilidades diretamente de modelos de linguagem existentes.
Como você controla toda a stack, também pode otimizar tamanho do modelo, quantização, batching, cache, hardware e serving para construir uma camada de decisão mais rápida e barata para a sua carga de trabalho.
Neste blog, vou comparar sete alternativas open-source ao Jev, incluindo Laya, Nimble, Kev, SemIf, Rizzo Flow, Von e NanoJev, analisando como cada uma funciona, o quão de perto seguem a abordagem do Jev, onde se destacam e como rodá-las localmente.
Aviso: os projetos deste guia são muito novos e evoluem rapidamente. Os exemplos de código se baseiam na documentação e nos repositórios oficiais, mas nem todos foram testados de ponta a ponta de forma independente.
1. Laya: uma alternativa ao Jev, feita sob medida e multilíngue
Laya é um modelo de decisão não autoregressivo, feito para esse fim, baseado em ModernBERT-large, com um checkpoint separado mmBERT para cargas multilíngues.
Em vez de gerar texto, ele processa o estado, a pergunta e as opções disponíveis em conjunto e pontua diretamente as respostas possíveis em um único forward pass. Suporta decisões no estilo Jev de choice, score e noul, com checkpoints dedicados para workloads em inglês, multilíngues e de decisões tipadas.
Isso torna o Laya uma das alternativas arquitetônicas mais próximas do Jev, pois ambos foram projetados especificamente para decisões probabilísticas em vez de geração de texto.
O Laya se destaca por seus modelos relativamente pequenos (322M–421M), suporte a mais de 100 idiomas e capacidade de avaliar várias perguntas com eficiência, sem precisar rodar um modelo generativo com bilhões de parâmetros.
Como o Laya funciona
O Laya recebe um estado como um e-mail, chamado de suporte, documento ou objeto JSON, junto com perguntas tipadas como choice, score ou noul.
Seu roteador seleciona o checkpoint mais adequado para a solicitação, como ModernBERT-large para inglês ou mmBERT-base para entradas multilíngues.
O modelo escolhido processa o estado e as perguntas em um único forward pass; em seguida, um decision head pontua as opções disponíveis e as converte em probabilidades.
Isso cria um fluxo direto da entrada, passando por roteamento e codificação, até a decisão tipada final.
Esse comando instala a biblioteca Laya e suas dependências, mas não inclui os pesos do modelo dentro do pacote.
Os modelos ficam hospedados no Hugging Face.
Ao criar o roteador com preload=True, o Laya baixa e carrega seus checkpoints disponíveis imediatamente, deixando tudo pronto antes da primeira requisição.
Os pesos baixados ficam em cache local, então você não precisa baixá-los novamente sempre que rodar a aplicação.
from laya import Router
router = Router(preload=True)
state ={"subject":"Duplicate charge","body":"I was charged twice. Please refund this today."}
questions ={"department":{"type":"choice","instructions":"Which department should handle this?","criteria":{"billing":"Payments and refunds","technical":"Errors and outages","sales":"Pricing and purchases"}}}
result = router.predict(state, questions)print(result["answers"]["department"]["choice"])Tecnologia
Aqui, Router(preload=True) é a parte importante.
Na primeira execução, o Laya busca os arquivos de modelo necessários no repositório do Hugging Face e os carrega em memória. Execuções futuras reutilizam as cópias em cache local.
O Laya usa carregamento preguiçoso: espera até que um checkpoint específico seja necessário e faz o download/construção no primeiro uso.
2. Nimble: uma alternativa ao Jev baseada em Qwen
Bespoke Nimble usa Qwen3.5-9B como backbone e faz fine-tuning com uma LoRA de rank 16, especificamente para decisões tipadas.
Você fornece um texto junto com um schema simples contendo perguntas booleanas ou enum, e o Nimble retorna a resposta selecionada mais as probabilidades para cada opção permitida.
Em vez de decodificar uma resposta token a token, o treino e a inferência operam diretamente sobre os logits dos candidatos.
Como o Jev, o Nimble segue a ideia de estado entra, decisões probabilísticas tipadas saem, mas sua implementação mostra como esse comportamento pode ser adicionado a um LLM aberto existente, sem exigir uma arquitetura proprietária de decisão.
Sua principal força é a abertura de todo o processo: a Bespoke Labs publicou o modelo, a receita de treinamento, a configuração de avaliação e o pipeline de curadoria de dados, tornando o Nimble especialmente útil para desenvolvedores que querem treinar ou estudar seus próprios modelos no estilo Jev.
Como o Nimble funciona
O Nimble começa com um contexto e um schema de decisão que define as saídas permitidas, como um booleano ou um valor de um enum.
Ele usa o Qwen3.5-9B com LoRA para processar o contexto e o schema, e então lê os logits para os tokens candidatos permitidos, em vez de gerar uma resposta completa.
Esses logits passam por softmax para gerar probabilidades, que são devolvidas como uma saída estruturada e tipada.
Primeiros passos com o Nimble
O Nimble requer Python 3.12 e usa o checkpoint Bespoke-Nimble-9B. Comece clonando o repositório e instalando as dependências:
Em seguida, baixe e prepare o modelo. A etapa oficial de preparação baixa bespokelabs/Bespoke-Nimble-9B do Hugging Face e, quando necessário, faz o merge do adaptador LoRA com o modelo base Qwen3.5 fixado em versão. Depois, cria .cache/nimble-model.json.
Se a release baixada for um adaptador LoRA, use o bloco completo de preparação do quickstart oficial do Nimble para mesclar o adaptador com o modelo base fixado antes da inferência.
Em uma GPU NVIDIA, carregue o modelo preparado:
import json
from pathlib import Path
from nimble.scoring.cuda_scorer import CudaCandidateScorer
config = json.loads(
Path(".cache/nimble-model.json").read_text())
scorer = CudaCandidateScorer(**config)
Then make a typed decision:
schema ={"priority":{"type":"enum","choices":["HIGH","LOW"],"description":"Urgency based on current business impact."},"requires_review":{"type":"boolean","description":"Whether a human should review this incident."}}
result = scorer.score("The payment service is down for all customers.",
schema
)print(result["output"])print(result["fields"]["priority"]["scores"])Tecnologia
O Nimble retorna os valores selecionados junto com a probabilidade atribuída a cada candidato, em vez de gerar uma resposta textual.
3. Kev: a réplica arquitetural mais próxima do Jev
Kev é uma família de modelos de decisão inspirados no Jev e construídos sobre Qwen3.5, com variantes de 0.8B, 4B e 9B.
Ele adiciona um adaptador LoRA de rank 16 e um pequeno pointer head que compara a representação de cada opção com a representação de decisão da pergunta.
Várias perguntas podem compartilhar o mesmo estado, enquanto o Kev mantém as perguntas isoladas e retorna suas distribuições de probabilidade sem gerar texto.
O Kev é particularmente próximo do Jev porque sua arquitetura foi explicitamente baseada em uma reconstrução pública do Jev, e seu servidor implementa o contrato da API /v1/systemone da TypeSafe.
Ele suporta os mesmos estilos de pergunta noul, choice e score, então o código existente do SDK TypeSafe pode ser redirecionado para um servidor Kev local.
Sua principal vantagem é a combinação de comportamento semelhante ao Jev, pesos abertos, múltiplos tamanhos de modelo e um pipeline de treinamento aberto.
Como o Kev funciona
O Kev usa um modelo base Qwen com um adaptador LoRA e um pequeno pointer head.
O estado compartilhado é processado uma vez e reutilizado em várias perguntas, evitando reprocessar o mesmo contexto repetidamente.
Para cada pergunta, o Kev cria representações ocultas para as opções e para o token de decisão; então, o pointer head as compara e produz as pontuações das opções.
O softmax converte essas pontuações em probabilidades para o choice, noul ou score final.
Primeiros passos com o Kev
O Kev roda como um servidor local System One.
Comece clonando o projeto e instalando as dependências de serving:
git clone https://github.com/jaredpalmer/kev.git
cd kev
uv sync --extra serveTecnologia
Isso instala o Kev em si, mas não necessariamente todos os pesos do modelo.
Na primeira execução, o Kev baixa automaticamente tanto o adaptador/checkpoint do Kev quanto o modelo base Qwen no Hugging Face.
Inicializações posteriores reutilizam os arquivos em cache, sem novo download.
Com o servidor rodando, você pode usar o SDK da TypeSafe com ele:
from typesafe_sdk import Choice, TypeSafeClient
client = TypeSafeClient(
api_key="local",
base_url="http://127.0.0.1:8009",
model="kev-latest",)
response = client.system_one(
state="I was charged twice.",
questions={"team": Choice(
instructions="Which team owns this?",
criteria={"billing":None,"technical":None,},)},)print(response.choices["team"].choice)Tecnologia
No Kev, o comando do servidor também carrega o modelo: o primeiro start baixa os pesos necessários automaticamente.
4. SemIf: uma alternativa ao Jev por logit direto, sem fine-tuning
SemIf adota um caminho mais simples: não treina um novo modelo de decisão.
Em vez disso, usa modelos abertos existentes, como o Qwen3.5-4B, e lê diretamente os logits atribuídos às respostas permitidas.
O estado, os critérios e as opções tipadas são passados ao modelo, e o SemIf converte os logits nativos das opções em probabilidades, sem sampling nem geração de resposta.
Isso reproduz uma das propriedades práticas mais importantes do Jev — tomar decisões sem saída autoregressiva — e evita a necessidade de um checkpoint especializado.
O SemIf se destaca pela flexibilidade: você pode usar diferentes modelos abertos por baixo, reutilizar um estado longo em muitas perguntas e experimentar pontuação direta em CUDA, Apple Silicon ou modelos quantizados no navegador.
Ele é especialmente útil quando você quer testar a ideia de System One sem treinar um modelo dedicado primeiro.
Como o SemIf funciona
O SemIf recebe um estado não estruturado, critérios em tempo de execução e um conjunto de opções permitidas e os passa por um modelo aberto existente.
Em vez de pedir ao modelo para gerar uma resposta, ele lê diretamente os logits atribuídos a essas opções predefinidas.
Esses logits são convertidos em uma distribuição de probabilidade, permitindo que a aplicação tome uma decisão tipada sem gerar texto ou fazer parsing depois.
Primeiros passos com o SemIf
O SemIf não tem seu próprio checkpoint de foundation model. Em vez disso, ele roda a pontuação de decisão sobre um modelo aberto existente.
Na primeira execução, o modelo Qwen selecionado é baixado do Hugging Face e armazenado no cache do Hugging Face. A documentação do SemIf inclusive recomenda definir HF_HOME para um disco grande, pois os arquivos podem ocupar bastante espaço.
Depois que o modelo estiver em cache, execuções posteriores reutilizam a cópia local.
Assim, o SemIf em si é relativamente pequeno. A maior parte do download vem do modelo aberto que você escolher rodar por baixo dele.
5. Rizzo Flow: alternativa local-first ao Jev com flexibilidade de hardware
Rizzo Flow é um sistema de inferência no estilo Jev, local-first, construído em torno dos modelos Spark-X2.5 abertos e serving baseado em llama.cpp.
Em vez de gerar uma resposta em JSON, ele converte cada decisão em um conjunto restrito de tokens de resposta possíveis, lê os logits atribuídos a esses tokens e os transforma em probabilidades.
O estado pode ser processado uma vez e reutilizado em várias perguntas, reduzindo computação repetida.
Como o Jev, o Rizzo Flow aceita estado não estruturado e retorna decisões tipadas como julgamentos de sim/não, escolhas, pontuações e saídas numéricas.
Ele também espelha a interface HTTP da TypeSafe, facilitando substituir uma chamada hospedada por um endpoint local.
O Rizzo Flow se destaca especialmente pela implantação local e flexibilidade de hardware, combinando modelos abertos, quantização e uma API familiar, em vez de tentar reproduzir a arquitetura proprietária de treinamento do Jev.
Como o Rizzo Flow funciona
O Rizzo Flow processa o estado uma vez e armazena o resultado no KV cache do modelo.
Várias perguntas podem reutilizar esse estado em cache em vez de processar todo o contexto novamente. Cada pergunta é convertida em um problema de múltipla escolha, com respostas candidatas representadas por letras como A, B ou C.
O Rizzo Flow lê apenas os logits dessas letras de resposta, aplica softmax e converte as probabilidades resultantes em saídas tipadas como boolean, choice, score ou número.
Primeiros passos com o Rizzo Flow
O Rizzo Flow requer Python 3.11+, Git e uv.
Ao instalar, selecione o backend de computação da sua máquina. Por exemplo, no Linux com GPU NVIDIA:
git clone https://github.com/Rizzo-AI-Academy/rizzo-flow
cd rizzo-flow
uv sync --locked --extra cuda
source .venv/bin/activateTecnologia
Para Apple Silicon, use --extra mlx; sistemas apenas com CPU podem usar --extra cpu.
Depois, baixe o modelo Spark-X2.5 padrão e seu runtime local:
O modelo passa a rodar localmente em http://127.0.0.1:8017.
Você pode testar o endpoint compatível com Jev com uma decisão real:
curl http://127.0.0.1:8017/v1/systemone \-H'Content-Type: application/json'\-d'{
"state": "My payouts have been failing for three days.",
"model": "rizzo-latest",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Does this convey urgency?"
},
"department": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Payments and refunds",
"technical": "Bugs and outages",
"sales": null
}
}
}
}'Tecnologia
O Rizzo Flow retorna a resposta e a distribuição de probabilidade diretamente, sem gerar tokens de saída um a um.
6. Von: uma alternativa System One compacta ao Jev
Von é um modelo System One feito sob medida, baseado em uma arquitetura ModernBERT bidirecional com 395M de parâmetros.
Em vez de decodificar texto, ele avalia o estado e os critérios candidatos em conjunto usando representações OptionMarker e, então, produz diretamente logits para decisões de Choice, Noul e Score.
Ele também aplica calibração pós-treinamento para que as distribuições de probabilidade resultantes possam ser usadas diretamente na lógica da aplicação.
O Von é muito parecido com o Jev no nível de interface: é não autoregressivo, suporta as três primitivas de decisão centrais, avalia múltiplas perguntas em um forward pass e implementa o protocolo /v1/systemone.
Sua principal força é o tamanho enxuto e o design para inferência local: o modelo tem centenas de milhões, e não bilhões, de parâmetros, e suporta execução em CUDA, ROCm, Apple Silicon e CPU.
Como o Von funciona
O von usa um modelo compacto, bidirecional e baseado em ModernBERT para processar o estado, a pergunta e os critérios candidatos em conjunto.
Seu mecanismo Option-Marker cria representações para as respostas possíveis, que são convertidas em logits de candidatos.
Em seguida, aplica-se temperature scaling para melhorar a distribuição de probabilidades antes de o von retornar o choice, noul ou score final.
A mesma arquitetura também pode avaliar múltiplas perguntas em um único forward pass.
Isso instala o software do Von. O modelo em si é publicado separadamente como wfzyx/von-1.0 no Hugging Face.
Quando o modelo é carregado pela primeira vez, seu checkpoint ModernBERT é baixado e armazenado em cache local por meio do sistema de carregamento de modelos do Hugging Face/Transformers.
Depois de em cache, inferências posteriores usam a cópia local, sem novo download.
Você pode então tomar uma decisão com:
import von
result = von.decide(
state="Database replication lag exceeded 45 seconds.",
choices={"infrastructure":"Database or network failures","billing":"Payments and invoices","feature":"Requests for new functionality",},
instructions="Classify the root cause.",)print(result.choice)print(result.confidence)
For a binary decision:
p_blocking = von.judge(
state="Requests are timing out.",
instructions="Is this actively blocking customers?")print(p_blocking)Tecnologia
A primeira chamada pode demorar mais, pois o modelo precisa ser baixado e inicializado. Depois disso, a inferência acontece localmente.
7. NanoJev: uma réplica do Jev treinável e leve
NanoJev é uma réplica do Jev de 0,6B, construída sobre Qwen3-0.6B, com decision heads dedicados para saídas estruturadas.
Cada requisição contém um estado, uma pergunta e um conjunto de candidatos, que passam pelo backbone antes de heads compartilhados produzirem distribuições de probabilidade completas.
Choice usa set attention e um head escalar; decisões booleanas usam sigmoid; e Score avalia níveis ordenados e produz tanto uma distribuição quanto a pontuação esperada.
O NanoJev segue bem de perto o design do Jev: suporta decisões em paralelo, conjuntos de candidatos dinâmicos, distribuições completas de probabilidade e zero decodificação de saída.
Seu destaque está no backbone muito pequeno e no pipeline explícito de treinamento ponta a ponta.
Ele pode agrupar vários estados, perguntas e caminhos de candidatos em um único forward pass do backbone, sendo uma opção interessante para desenvolvedores que querem experimentar uma arquitetura compacta, treinável e no estilo Jev, em vez de adaptar um LLM maior e genérico.
Como o NanoJev funciona
O NanoJev recebe um estado, uma pergunta e as respostas candidatas entre as quais o modelo pode escolher.
Cada candidato é combinado com a entrada relevante e passado por um backbone Qwen3-0.6B compartilhado.
O NanoJev então usa decision heads dedicados para pontuar diretamente os candidatos: Choice usa set attention e softmax; Boolean usa sigmoid; e Score produz uma distribuição de probabilidade sobre níveis ordenados.
Como lê essas probabilidades diretamente do forward pass, pode retornar distribuições tipadas completas sem gerar tokens de saída.
Primeiros passos com o NanoJev
O NanoJev mantém o download do modelo separado da instalação do repositório.
cat> data/request.json <<'JSON'
{
"states": [{
"id": "living_room",
"state": "The living room is 29 degrees. The target is 24 degrees. The window is closed and someone is home.",
"questions": {
"action": {
"type": "choice",
"instructions": "Choose the action that most directly lowers the room temperature.",
"criteria": {
"cool": "Turn on air conditioning",
"light": "Turn on the lights",
"wait": "Keep the current settings"
}
},
"occupied": {
"type": "boolean",
"instructions": "Someone is home."
}
}
}]
}
JSONTecnologia
O servidor mantém o checkpoint carregado e retorna a distribuição de probabilidade para cada pergunta. O NanoJev também consegue agrupar vários estados e perguntas na mesma requisição.
Comparando as 7 principais alternativas ao Jev
A principal diferença está em como cada projeto produz a decisão.
Laya e Von usam encoders bidirecionais pequenos, feitos especificamente para pontuação de opções.
Kev, Nimble e NanoJev adaptam modelos Qwen com treinamento especializado ou decision heads.
SemIf e Rizzo Flow seguem um caminho mais leve, extraindo probabilidades diretamente de modelos generativos existentes.
Projeto
Arquitetura
Tamanho
Decisões no estilo Jev
Melhor uso
Laya
ModernBERT/mmBERT + decision head
322M–421M
Sim
Decisões pequenas e multilíngues
Nimble
Qwen3.5 + pontuação por LoRA
9B
Similar
Treinamento e pesquisa
Kev
Qwen + LoRA + pointer head
0.8B–9B
Sim
Implantação local ao estilo Jev
SemIf
Logits diretos de LLMs abertos
Dependente do modelo
Similar
Experimentos de logit direto
Rizzo Flow
Spark + pontuação direta de opções
1.7B–4B
Sim
Serving local facilitado
Von
ModernBERT + OptionMarker
~395M
Sim
Inferência de decisão compacta
NanoJev
Qwen3 + decision heads compartilhados
0.6B
Sim
Réplica pequena e treinável do Jev
Na prática, encoders dedicados priorizam velocidade e eficiência; modelos Qwen adaptados mantêm mais capacidade geral de linguagem; e métodos de logits diretos são mais fáceis de experimentar porque exigem menos treinamento especializado.
Qual alternativa ao Jev você deve usar?
Para modelos de decisão pequenos e especializados, Laya, Von e NanoJev estão entre as opções mais interessantes, variando de cerca de 322M a 600M de parâmetros.
Se você precisa de decisão multilíngue, o Laya se destaca com um checkpoint baseado em mmBERT cobrindo mais de 100 idiomas.
Para aplicações construídas em torno da API TypeSafe System One, Kev e Von oferecem caminhos de integração especialmente próximos, enquanto o Rizzo Flow espelha a mesma interface HTTP para serving local.
Para treino e experimentação, o Nimble publica sua curadoria de dados e a receita de fine-tuning com LoRA, enquanto o NanoJev oferece um pipeline completo cobrindo geração de dados, treinamento, avaliação e serving.
Se você quer experimentar sem treinar um modelo de decisão especializado, o SemIf é um baseline útil: lê as probabilidades das opções diretamente de modelos abertos como o Qwen, em vez de gerar uma resposta.
Considerações finais
A arquitetura exata do Jev pode ser nova, mas a ideia por trás dela não é.
Classificadores NLI zero-shot vêm pontuando rótulos candidatos arbitrários a partir de logits do modelo há anos, muito antes do Jev.
O que a TypeSafe AI traz é uma arquitetura feita para isso, saídas em paralelo, probabilidades calibradas e uma API limpa para transformar essa ideia em uma camada de decisão programável.
O ecossistema open-source mostra que você não precisa de um serviço fechado para construir algo semelhante.
Projetos como Kev, Von e Rizzo Flow podem rodar localmente e expor interfaces no estilo Jev, enquanto outros permitem baixar os pesos, quantizá-los ou usar runtimes como o llama.cpp.
A grande lição não é que o Jev inventou a tomada de decisão por IA, mas que ele trouxe de volta a atenção para uma ideia importante: se sua aplicação só precisa de uma decisão, talvez você não precise de geração de texto.
FAQs
Os modelos de decisão não autoregressivos são quanto mais rápidos que LLMs tradicionais?⌄
Ao eliminar a geração token a token, modelos não autoregressivos avaliam o contexto e computam decisões em um único forward pass. Essa mudança arquitetural normalmente reduz a latência de inferência de alguns segundos para dezenas de milissegundos, tornando-os viáveis para roteamento em tempo real em aplicações de alto throughput, onde LLMs tradicionais seriam gargalo.
Quais são os principais casos de uso empresariais para camadas de decisão em IA dedicadas?⌄
Modelos de decisão brilham em fluxos que exigem roteamento estruturado em alto volume, e não geração de texto aberta. Aplicações comuns incluem seleção de ferramentas por agentes autônomos (decidir qual API chamar em seguida), moderação de conteúdo em tempo real, triagem dinâmica de suporte ao cliente e pipelines de validação de dados automatizados que demandam saídas probabilísticas tipadas e estritas.
Modelos System One alucinam como modelos de linguagem generativos?⌄
Embora não inventem citações falsas nem fabriquem texto (alucinações tradicionais), modelos de decisão ainda podem classificar incorretamente. Como eles produzem distribuições de probabilidade mapeadas a escolhas restritas, desenvolvedores mitigam isso definindo limites rígidos de confiança. Se a confiança do modelo para uma classificação ficar abaixo do limite, o sistema pode escalar automaticamente a tarefa para um humano ou para um modelo de raciocínio maior.
É possível rodar esses modelos de decisão de IA em dispositivos de borda apenas com CPU?⌄
Sim. Modelos de decisão feitos para esse fim geralmente variam de 300M a 600M de parâmetros, exigindo apenas uma fração da memória necessária para LLMs generativos padrão. Quando quantizados, podem ser implantados de forma eficiente em CPUs comuns, dispositivos de borda móveis ou diretamente em navegadores usando runtimes como ONNX ou llama.cpp, eliminando totalmente dependência de nuvem e custos de API.
Sou um cientista de dados certificado que gosta de criar aplicativos de aprendizado de máquina e escrever blogs sobre ciência de dados. No momento, estou me concentrando na criação e edição de conteúdo e no trabalho com modelos de linguagem de grande porte.
GPT-4 alternativas de código aberto que podem oferecer desempenho semelhante e exigem menos recursos computacionais para serem executadas. Esses projetos vêm com instruções, fontes de código, pesos de modelos, conjuntos de dados e interface de usuário do chatbot.
Dá uma olhada nos melhores assistentes de codificação de IA, incluindo ferramentas de código aberto, gratuitas e comerciais para melhorar sua experiência de desenvolvimento.
Projetos de machine learning para iniciantes, estudantes do último ano e profissionais. A lista tem projetos guiados, tutoriais e exemplos de código-fonte.
Explore o potencial inexplorado dos modelos de linguagem grandes com o LangChain, uma estrutura Python de código aberto para criar aplicativos avançados de IA.
Muitas aplicações de IA usam modelos de linguagem grandes para tarefas que, na prática, não exigem geração de texto.
Um agente pode só precisar decidir qual ferramenta acionar, se um documento é relevante, qual a urgência de uma solicitação ou se uma ação deve ser escalonada.
Jev, da TypeSafe AI, encara essas tarefas de outro jeito. Em vez de gerar uma resposta token a token, ele recebe o estado da aplicação e perguntas estruturadas e devolve decisões tipadas como escolhas, pontuações, julgamentos de sim/não e probabilidades. Veja na prática no nosso tutorial da Jev API
A TypeSafe AI descreve isso como uma abordagem de System One Model: usar IA como uma camada rápida de decisão, e não como um gerador de texto genérico.
O desafio é que ainda sabemos relativamente pouco sobre como o Jev funciona internamente.
A TypeSafe AI compartilhou alguns detalhes sobre sua abordagem de decisão em paralelo e método de treinamento, mas a arquitetura completa, os pesos do modelo, os dados e a receita integral de treino não são públicos.
Isso dificulta inspecionar, reproduzir ou adaptar o próprio Jev.
Projetos open-source estão explorando a mesma ideia com arquiteturas que podemos, de fato, examinar e rodar localmente.
Alguns usam modelos bidirecionais pequenos, outros adaptam Qwen com heads de decisão especializadas, enquanto outros extraem probabilidades diretamente de modelos de linguagem existentes.
Como você controla toda a stack, também pode otimizar tamanho do modelo, quantização, batching, cache, hardware e serving para construir uma camada de decisão mais rápida e barata para a sua carga de trabalho.
Neste blog, vou comparar sete alternativas open-source ao Jev, incluindo Laya, Nimble, Kev, SemIf, Rizzo Flow, Von e NanoJev, analisando como cada uma funciona, o quão de perto seguem a abordagem do Jev, onde se destacam e como rodá-las localmente.
Aviso: os projetos deste guia são muito novos e evoluem rapidamente. Os exemplos de código se baseiam na documentação e nos repositórios oficiais, mas nem todos foram testados de ponta a ponta de forma independente.
1. Laya: uma alternativa ao Jev, feita sob medida e multilíngue
Laya é um modelo de decisão não autoregressivo, feito para esse fim, baseado em ModernBERT-large, com um checkpoint separado mmBERT para cargas multilíngues.
Em vez de gerar texto, ele processa o estado, a pergunta e as opções disponíveis em conjunto e pontua diretamente as respostas possíveis em um único forward pass. Suporta decisões no estilo Jev de
choice,scoreenoul, com checkpoints dedicados para workloads em inglês, multilíngues e de decisões tipadas.Isso torna o Laya uma das alternativas arquitetônicas mais próximas do Jev, pois ambos foram projetados especificamente para decisões probabilísticas em vez de geração de texto.
O Laya se destaca por seus modelos relativamente pequenos (322M–421M), suporte a mais de 100 idiomas e capacidade de avaliar várias perguntas com eficiência, sem precisar rodar um modelo generativo com bilhões de parâmetros.
Como o Laya funciona
O Laya recebe um estado como um e-mail, chamado de suporte, documento ou objeto JSON, junto com perguntas tipadas como
choice,scoreounoul.Seu roteador seleciona o checkpoint mais adequado para a solicitação, como ModernBERT-large para inglês ou mmBERT-base para entradas multilíngues.
O modelo escolhido processa o estado e as perguntas em um único forward pass; em seguida, um decision head pontua as opções disponíveis e as converte em probabilidades.
Isso cria um fluxo direto da entrada, passando por roteamento e codificação, até a decisão tipada final.
O Laya está disponível como pacote Python:
Esse comando instala a biblioteca Laya e suas dependências, mas não inclui os pesos do modelo dentro do pacote.
Os modelos ficam hospedados no Hugging Face.
Ao criar o roteador com
preload=True, o Laya baixa e carrega seus checkpoints disponíveis imediatamente, deixando tudo pronto antes da primeira requisição.Os pesos baixados ficam em cache local, então você não precisa baixá-los novamente sempre que rodar a aplicação.
Aqui,
Router(preload=True)é a parte importante.Na primeira execução, o Laya busca os arquivos de modelo necessários no repositório do Hugging Face e os carrega em memória. Execuções futuras reutilizam as cópias em cache local.
Se, em vez disso, você usar:
O Laya usa carregamento preguiçoso: espera até que um checkpoint específico seja necessário e faz o download/construção no primeiro uso.
2. Nimble: uma alternativa ao Jev baseada em Qwen
Bespoke Nimble usa Qwen3.5-9B como backbone e faz fine-tuning com uma LoRA de rank 16, especificamente para decisões tipadas.
Você fornece um texto junto com um schema simples contendo perguntas booleanas ou enum, e o Nimble retorna a resposta selecionada mais as probabilidades para cada opção permitida.
Em vez de decodificar uma resposta token a token, o treino e a inferência operam diretamente sobre os logits dos candidatos.
Como o Jev, o Nimble segue a ideia de estado entra, decisões probabilísticas tipadas saem, mas sua implementação mostra como esse comportamento pode ser adicionado a um LLM aberto existente, sem exigir uma arquitetura proprietária de decisão.
Sua principal força é a abertura de todo o processo: a Bespoke Labs publicou o modelo, a receita de treinamento, a configuração de avaliação e o pipeline de curadoria de dados, tornando o Nimble especialmente útil para desenvolvedores que querem treinar ou estudar seus próprios modelos no estilo Jev.
Como o Nimble funciona
O Nimble começa com um contexto e um schema de decisão que define as saídas permitidas, como um booleano ou um valor de um enum.
Ele usa o Qwen3.5-9B com LoRA para processar o contexto e o schema, e então lê os logits para os tokens candidatos permitidos, em vez de gerar uma resposta completa.
Esses logits passam por softmax para gerar probabilidades, que são devolvidas como uma saída estruturada e tipada.
O Nimble requer Python 3.12 e usa o checkpoint Bespoke-Nimble-9B. Comece clonando o repositório e instalando as dependências:
Em seguida, baixe e prepare o modelo. A etapa oficial de preparação baixa
bespokelabs/Bespoke-Nimble-9Bdo Hugging Face e, quando necessário, faz o merge do adaptador LoRA com o modelo base Qwen3.5 fixado em versão. Depois, cria.cache/nimble-model.json.Se a release baixada for um adaptador LoRA, use o bloco completo de preparação do quickstart oficial do Nimble para mesclar o adaptador com o modelo base fixado antes da inferência.
Em uma GPU NVIDIA, carregue o modelo preparado:
O Nimble retorna os valores selecionados junto com a probabilidade atribuída a cada candidato, em vez de gerar uma resposta textual.
3. Kev: a réplica arquitetural mais próxima do Jev
Kev é uma família de modelos de decisão inspirados no Jev e construídos sobre Qwen3.5, com variantes de 0.8B, 4B e 9B.
Ele adiciona um adaptador LoRA de rank 16 e um pequeno pointer head que compara a representação de cada opção com a representação de decisão da pergunta.
Várias perguntas podem compartilhar o mesmo estado, enquanto o Kev mantém as perguntas isoladas e retorna suas distribuições de probabilidade sem gerar texto.
O Kev é particularmente próximo do Jev porque sua arquitetura foi explicitamente baseada em uma reconstrução pública do Jev, e seu servidor implementa o contrato da API
/v1/systemoneda TypeSafe.Ele suporta os mesmos estilos de pergunta
noul,choiceescore, então o código existente do SDK TypeSafe pode ser redirecionado para um servidor Kev local.Sua principal vantagem é a combinação de comportamento semelhante ao Jev, pesos abertos, múltiplos tamanhos de modelo e um pipeline de treinamento aberto.
Como o Kev funciona
O Kev usa um modelo base Qwen com um adaptador LoRA e um pequeno pointer head.
O estado compartilhado é processado uma vez e reutilizado em várias perguntas, evitando reprocessar o mesmo contexto repetidamente.
Para cada pergunta, o Kev cria representações ocultas para as opções e para o token de decisão; então, o pointer head as compara e produz as pontuações das opções.
O softmax converte essas pontuações em probabilidades para o
choice,noulouscorefinal.O Kev roda como um servidor local System One.
Comece clonando o projeto e instalando as dependências de serving:
Isso instala o Kev em si, mas não necessariamente todos os pesos do modelo.
Inicie o Kev-4B com:
Na primeira execução, o Kev baixa automaticamente tanto o adaptador/checkpoint do Kev quanto o modelo base Qwen no Hugging Face.
Inicializações posteriores reutilizam os arquivos em cache, sem novo download.
Com o servidor rodando, você pode usar o SDK da TypeSafe com ele:
No Kev, o comando do servidor também carrega o modelo: o primeiro start baixa os pesos necessários automaticamente.
4. SemIf: uma alternativa ao Jev por logit direto, sem fine-tuning
SemIf adota um caminho mais simples: não treina um novo modelo de decisão.
Em vez disso, usa modelos abertos existentes, como o Qwen3.5-4B, e lê diretamente os logits atribuídos às respostas permitidas.
O estado, os critérios e as opções tipadas são passados ao modelo, e o SemIf converte os logits nativos das opções em probabilidades, sem sampling nem geração de resposta.
Isso reproduz uma das propriedades práticas mais importantes do Jev — tomar decisões sem saída autoregressiva — e evita a necessidade de um checkpoint especializado.
O SemIf se destaca pela flexibilidade: você pode usar diferentes modelos abertos por baixo, reutilizar um estado longo em muitas perguntas e experimentar pontuação direta em CUDA, Apple Silicon ou modelos quantizados no navegador.
Ele é especialmente útil quando você quer testar a ideia de System One sem treinar um modelo dedicado primeiro.
Como o SemIf funciona
O SemIf recebe um estado não estruturado, critérios em tempo de execução e um conjunto de opções permitidas e os passa por um modelo aberto existente.
Em vez de pedir ao modelo para gerar uma resposta, ele lê diretamente os logits atribuídos a essas opções predefinidas.
Esses logits são convertidos em uma distribuição de probabilidade, permitindo que a aplicação tome uma decisão tipada sem gerar texto ou fazer parsing depois.
O SemIf não tem seu próprio checkpoint de foundation model. Em vez disso, ele roda a pontuação de decisão sobre um modelo aberto existente.
Clone e instale:
Isso instala o SemIf, mas ainda não baixa o Qwen.
Rode o scorer:
Na primeira execução, o modelo Qwen selecionado é baixado do Hugging Face e armazenado no cache do Hugging Face. A documentação do SemIf inclusive recomenda definir
HF_HOMEpara um disco grande, pois os arquivos podem ocupar bastante espaço.Por exemplo:
Depois que o modelo estiver em cache, execuções posteriores reutilizam a cópia local.
Assim, o SemIf em si é relativamente pequeno. A maior parte do download vem do modelo aberto que você escolher rodar por baixo dele.
5. Rizzo Flow: alternativa local-first ao Jev com flexibilidade de hardware
Rizzo Flow é um sistema de inferência no estilo Jev, local-first, construído em torno dos modelos Spark-X2.5 abertos e serving baseado em llama.cpp.
Em vez de gerar uma resposta em JSON, ele converte cada decisão em um conjunto restrito de tokens de resposta possíveis, lê os logits atribuídos a esses tokens e os transforma em probabilidades.
O estado pode ser processado uma vez e reutilizado em várias perguntas, reduzindo computação repetida.
Como o Jev, o Rizzo Flow aceita estado não estruturado e retorna decisões tipadas como julgamentos de sim/não, escolhas, pontuações e saídas numéricas.
Ele também espelha a interface HTTP da TypeSafe, facilitando substituir uma chamada hospedada por um endpoint local.
O Rizzo Flow se destaca especialmente pela implantação local e flexibilidade de hardware, combinando modelos abertos, quantização e uma API familiar, em vez de tentar reproduzir a arquitetura proprietária de treinamento do Jev.
Como o Rizzo Flow funciona
O Rizzo Flow processa o estado uma vez e armazena o resultado no KV cache do modelo.
Várias perguntas podem reutilizar esse estado em cache em vez de processar todo o contexto novamente. Cada pergunta é convertida em um problema de múltipla escolha, com respostas candidatas representadas por letras como
A,BouC.O Rizzo Flow lê apenas os logits dessas letras de resposta, aplica softmax e converte as probabilidades resultantes em saídas tipadas como boolean, choice, score ou número.
Primeiros passos com o Rizzo Flow
O Rizzo Flow requer Python 3.11+, Git e
uv.Ao instalar, selecione o backend de computação da sua máquina. Por exemplo, no Linux com GPU NVIDIA:
Para Apple Silicon, use
--extra mlx; sistemas apenas com CPU podem usar--extra cpu.Depois, baixe o modelo Spark-X2.5 padrão e seu runtime local:
Em seguida, inicie o servidor:
O modelo passa a rodar localmente em
http://127.0.0.1:8017.Você pode testar o endpoint compatível com Jev com uma decisão real:
O Rizzo Flow retorna a resposta e a distribuição de probabilidade diretamente, sem gerar tokens de saída um a um.
6. Von: uma alternativa System One compacta ao Jev
Von é um modelo System One feito sob medida, baseado em uma arquitetura ModernBERT bidirecional com 395M de parâmetros.
Em vez de decodificar texto, ele avalia o estado e os critérios candidatos em conjunto usando representações OptionMarker e, então, produz diretamente logits para decisões de
Choice,NouleScore.Ele também aplica calibração pós-treinamento para que as distribuições de probabilidade resultantes possam ser usadas diretamente na lógica da aplicação.
O Von é muito parecido com o Jev no nível de interface: é não autoregressivo, suporta as três primitivas de decisão centrais, avalia múltiplas perguntas em um forward pass e implementa o protocolo
/v1/systemone.Sua principal força é o tamanho enxuto e o design para inferência local: o modelo tem centenas de milhões, e não bilhões, de parâmetros, e suporta execução em CUDA, ROCm, Apple Silicon e CPU.
Como o Von funciona
O von usa um modelo compacto, bidirecional e baseado em ModernBERT para processar o estado, a pergunta e os critérios candidatos em conjunto.
Seu mecanismo Option-Marker cria representações para as respostas possíveis, que são convertidas em logits de candidatos.
Em seguida, aplica-se temperature scaling para melhorar a distribuição de probabilidades antes de o von retornar o
choice,noulouscorefinal.A mesma arquitetura também pode avaliar múltiplas perguntas em um único forward pass.
Primeiros passos com o Von
O Von tem uma das interfaces mais simples.
Instale o SDK em Python:
Isso instala o software do Von. O modelo em si é publicado separadamente como
wfzyx/von-1.0no Hugging Face.Quando o modelo é carregado pela primeira vez, seu checkpoint ModernBERT é baixado e armazenado em cache local por meio do sistema de carregamento de modelos do Hugging Face/Transformers.
Depois de em cache, inferências posteriores usam a cópia local, sem novo download.
Você pode então tomar uma decisão com:
A primeira chamada pode demorar mais, pois o modelo precisa ser baixado e inicializado. Depois disso, a inferência acontece localmente.
7. NanoJev: uma réplica do Jev treinável e leve
NanoJev é uma réplica do Jev de 0,6B, construída sobre Qwen3-0.6B, com decision heads dedicados para saídas estruturadas.
Cada requisição contém um estado, uma pergunta e um conjunto de candidatos, que passam pelo backbone antes de heads compartilhados produzirem distribuições de probabilidade completas.
Choice usa set attention e um head escalar; decisões booleanas usam sigmoid; e Score avalia níveis ordenados e produz tanto uma distribuição quanto a pontuação esperada.
O NanoJev segue bem de perto o design do Jev: suporta decisões em paralelo, conjuntos de candidatos dinâmicos, distribuições completas de probabilidade e zero decodificação de saída.
Seu destaque está no backbone muito pequeno e no pipeline explícito de treinamento ponta a ponta.
Ele pode agrupar vários estados, perguntas e caminhos de candidatos em um único forward pass do backbone, sendo uma opção interessante para desenvolvedores que querem experimentar uma arquitetura compacta, treinável e no estilo Jev, em vez de adaptar um LLM maior e genérico.
Como o NanoJev funciona
O NanoJev recebe um estado, uma pergunta e as respostas candidatas entre as quais o modelo pode escolher.
Cada candidato é combinado com a entrada relevante e passado por um backbone Qwen3-0.6B compartilhado.
O NanoJev então usa decision heads dedicados para pontuar diretamente os candidatos: Choice usa set attention e softmax; Boolean usa sigmoid; e Score produz uma distribuição de probabilidade sobre níveis ordenados.
Como lê essas probabilidades diretamente do forward pass, pode retornar distribuições tipadas completas sem gerar tokens de saída.
Primeiros passos com o NanoJev
O NanoJev mantém o download do modelo separado da instalação do repositório.
Comece instalando o projeto:
Depois, baixe o checkpoint público fixado:
Inicie o servidor local de inferência:
Crie uma requisição:
Depois, envie para o NanoJev:
O servidor mantém o checkpoint carregado e retorna a distribuição de probabilidade para cada pergunta. O NanoJev também consegue agrupar vários estados e perguntas na mesma requisição.
Comparando as 7 principais alternativas ao Jev
A principal diferença está em como cada projeto produz a decisão.
Laya e Von usam encoders bidirecionais pequenos, feitos especificamente para pontuação de opções.
Kev, Nimble e NanoJev adaptam modelos Qwen com treinamento especializado ou decision heads.
SemIf e Rizzo Flow seguem um caminho mais leve, extraindo probabilidades diretamente de modelos generativos existentes.
Projeto
Arquitetura
Tamanho
Decisões no estilo Jev
Melhor uso
Laya
ModernBERT/mmBERT + decision head
322M–421M
Sim
Decisões pequenas e multilíngues
Nimble
Qwen3.5 + pontuação por LoRA
9B
Similar
Treinamento e pesquisa
Kev
Qwen + LoRA + pointer head
0.8B–9B
Sim
Implantação local ao estilo Jev
SemIf
Logits diretos de LLMs abertos
Dependente do modelo
Similar
Experimentos de logit direto
Rizzo Flow
Spark + pontuação direta de opções
1.7B–4B
Sim
Serving local facilitado
Von
ModernBERT + OptionMarker
~395M
Sim
Inferência de decisão compacta
NanoJev
Qwen3 + decision heads compartilhados
0.6B
Sim
Réplica pequena e treinável do Jev
Na prática, encoders dedicados priorizam velocidade e eficiência; modelos Qwen adaptados mantêm mais capacidade geral de linguagem; e métodos de logits diretos são mais fáceis de experimentar porque exigem menos treinamento especializado.
Qual alternativa ao Jev você deve usar?
Para modelos de decisão pequenos e especializados, Laya, Von e NanoJev estão entre as opções mais interessantes, variando de cerca de 322M a 600M de parâmetros.
Se você precisa de decisão multilíngue, o Laya se destaca com um checkpoint baseado em mmBERT cobrindo mais de 100 idiomas.
Para aplicações construídas em torno da API TypeSafe System One, Kev e Von oferecem caminhos de integração especialmente próximos, enquanto o Rizzo Flow espelha a mesma interface HTTP para serving local.
Para treino e experimentação, o Nimble publica sua curadoria de dados e a receita de fine-tuning com LoRA, enquanto o NanoJev oferece um pipeline completo cobrindo geração de dados, treinamento, avaliação e serving.
Se você quer experimentar sem treinar um modelo de decisão especializado, o SemIf é um baseline útil: lê as probabilidades das opções diretamente de modelos abertos como o Qwen, em vez de gerar uma resposta.
Considerações finais
A arquitetura exata do Jev pode ser nova, mas a ideia por trás dela não é.
Classificadores NLI zero-shot vêm pontuando rótulos candidatos arbitrários a partir de logits do modelo há anos, muito antes do Jev.
O que a TypeSafe AI traz é uma arquitetura feita para isso, saídas em paralelo, probabilidades calibradas e uma API limpa para transformar essa ideia em uma camada de decisão programável.
O ecossistema open-source mostra que você não precisa de um serviço fechado para construir algo semelhante.
Projetos como Kev, Von e Rizzo Flow podem rodar localmente e expor interfaces no estilo Jev, enquanto outros permitem baixar os pesos, quantizá-los ou usar runtimes como o llama.cpp.
A grande lição não é que o Jev inventou a tomada de decisão por IA, mas que ele trouxe de volta a atenção para uma ideia importante: se sua aplicação só precisa de uma decisão, talvez você não precise de geração de texto.