O Jev responde perguntas tipadas (sim/não, escolher uma opção, pontuar em uma escala) com probabilidades e confiança, a $0,042 por milhão de tokens de entrada e sem cobrar a saída; serve para classificar e rotear, não para gerar texto, e convém medi-lo em sombra antes de deixá-lo decidir.
1. O que é o Jev#
O Jev é o modelo da TypeSafe que a documentação da Cloudflare descreve como um modelo de avaliação estruturada: recebe um estado (um texto ou um objeto) e o avalia contra perguntas tipadas, devolvendo respostas calibradas com probabilidades e confiança. Não gera texto livre. É oferecido no Workers AI como typesafe/jev e, segundo guias de terceiros, também por outros provedores.
As perguntas são de três tipos, que podem ser combinados em uma única chamada.
| Tipo | O que responde | O que devolve |
|---|---|---|
| noul | Uma afirmação de sim ou não | Probabilidade de ser verdadeira (0 a 1) |
| choice | Qual de várias opções rotuladas | A opção escolhida, a sua confiança e a probabilidade de cada uma |
| score | Onde cai em uma escala ordenada | Uma pontuação, a sua confiança, a legenda de níveis e a probabilidade de cada nível |
A utilidade prática é colocar uma decisão tipada no fluxo de uma aplicação: a que equipe vai um ticket, se uma mensagem é urgente, se um texto tenta uma injeção de instruções. Em vez de pedir a um modelo de linguagem que redija uma resposta e depois interpretar o texto, você recebe números que pode comparar com um limiar.
Documentação: Cloudflare: Jev (typesafe/jev) ↗
2. Como se faz a chamada#
A requisição leva o estado e um objeto de perguntas, cada uma com o seu tipo, instruções e critérios. O código monta exatamente a requisição de exemplo da documentação da Cloudflare (no Workers AI vai para env.AI.run com o modelo typesafe/jev; pela API REST vai dentro do campo input).
import json
solicitacao = {
"state": "Help! My payouts have been failing for 3 days.",
"questions": {
"is_urgent": {"type": "noul", "instructions": "Does this convey urgency?",
"criteria": {"true": "Explicitly time-sensitive", "false": "No urgency expressed"}},
"department": {"type": "choice", "instructions": "Which team should handle this?",
"criteria": {"billing": "Payments, invoicing, refunds",
"technical": "Bugs, outages, integrations",
"sales": "Pricing, upgrades, new accounts"}},
"frustration": {"type": "score", "instructions": "How frustrated is the customer?",
"criteria": ["Calm", "Frustrated", "Very angry"]},
},
}
corpo = json.dumps({"model": "typesafe/jev", "input": solicitacao})
print(sorted(solicitacao["questions"]), len(corpo) > 0)A resposta traz, para cada pergunta, o seu tipo e os números: um noul de 0,95, uma opção escolhida com confiança 0,8 e uma pontuação de 1,04 sobre a legenda de níveis, além do modelo usado e dos tokens consumidos.
3. Da resposta a uma decisão#
Uma probabilidade não é uma decisão até que você defina o que fazer com ela. A função aplica um limiar de confiança: se a confiança da opção escolhida não o alcança, o caso passa para uma pessoa. A pontuação é arredondada ao nível mais próximo da legenda. Testa-se com a resposta de exemplo da documentação.
import json
# Resposta de exemplo da documentação da Cloudflare para typesafe/jev
RESPOSTA = json.loads("""
{"model": "jev-1.13.0",
"answers": {
"is_urgent": {"type": "noul", "noul": 0.95},
"department": {"type": "choice", "choice": "billing", "confidence": 0.8,
"probabilities": {"billing": 0.87, "sales": 0, "technical": 0.13}},
"frustration": {"type": "score", "score": 1.04, "confidence": 0.94,
"legend": {"0": "Calm", "1": "Frustrated", "2": "Very angry"},
"probabilities": {"0": 0, "1": 0.96, "2": 0.04}}},
"usage": {"input_tokens": 426, "output_tokens": 73}}
""")
def decidir(resposta, umbral=0.7):
"""Converte as respostas calibradas em uma ação; se a confiança é baixa, passa para uma pessoa."""
a = resposta["answers"]
setor = a["department"]
return {
"urgente": a["is_urgent"]["noul"] >= 0.5,
"equipe": setor["choice"] if setor["confidence"] >= umbral else "revisao_humana",
"tom": a["frustration"]["legend"][str(round(a["frustration"]["score"]))],
"versao_modelo": resposta["model"],
}
print(decidir(RESPOSTA))
print(decidir(RESPOSTA, umbral=0.9)["equipe"])4. Quanto custa frente a um LLM#
A tabela resume os dados da ficha do Jev na Cloudflare. A saída não é cobrada: só conta a entrada.
| Dado | Valor |
|---|---|
| Identificador no Workers AI | typesafe/jev |
| Versão na resposta de exemplo | jev-1.13.0 |
| Janela de contexto | 32.000 tokens |
| Entrada | $0,042 por milhão de tokens |
| Saída | $0,00 |
| Entrada em cache | $0,00 |
| Retenção de dados | Zero, segundo a documentação |
Com os tokens da resposta de exemplo (426 de entrada e 73 de saída), um milhão de requisições custa cerca de $17,89 com o Jev. Fazer a mesma classificação com um modelo de linguagem à tarifa introdutória do Gemini 4 Argon ($2 de entrada e $10 de saída por milhão) custaria cerca de $1.582 por milhão de requisições, 88 vezes mais. Em pesos, com a TRM de 17 de outubro de 2026: COP 56,801 contra COP 5,022,328.
from decimal import Decimal as D
TOKENS_ENTRADA, TOKENS_SALIDA = 426, 73 # "usage" da resposta de exemplo da documentação
JEV_ENTRADA = D("0.042") # USD por milhão de tokens de entrada; a saída custa 0
ARGON = (D("2"), D("10")) # Gemini 4 Argon, tarifa introdutória até 30 nov 2026
TRM = D("3174.67") # TRM de 17 out 2026
milhao = D(1_000_000)
jev = D(TOKENS_ENTRADA) * JEV_ENTRADA / milhao * milhao # USD por milhão de solicitações
llm = (D(TOKENS_ENTRADA) * ARGON[0] + D(TOKENS_SALIDA) * ARGON[1]) / milhao * milhao
print(f"Jev: ${jev:,.2f} | LLM: ${llm:,.2f} por milhão de solicitações | {llm / jev:.0f} vezes")
print(f"Em pesos: COP {jev * TRM:,.0f} vs COP {llm * TRM:,.0f}")Para se aprofundarPreços das APIs de IA em outubro de 2026: quanto custa cada modelo
Documentação: OpenRouter: o que é o Jev (inglês) ↗ · DataCamp: Jev, o modelo System One (inglês) ↗ · LangChain: o que é o Jev (inglês) ↗
5. Quando usá-lo e quando não#
- Serve para classificar, rotear, filtrar e pontuar com alto volume e baixa latência.
- Serve para decisões que precisam de uma probabilidade que você possa comparar com um limiar e auditar.
- Não serve para redigir, resumir nem conversar: não gera texto.
- Tem uma janela de 32.000 tokens: um documento longo precisa ser cortado antes.
- É um modelo de um terceiro: revise que dados envia e os seus termos antes de mandar informação sensível.
Os guias de terceiros destacam que o Jev nunca alucina e que é muito mais rápido e barato que um LLM. São afirmações da empresa ou de conteúdo próximo a ela: teste-as com os seus próprios dados antes de se apoiar nelas.
6. Como adotá-lo sem risco#
- Comece em modo sombra: deixe o Jev decidir em paralelo e compare com a sua decisão atual antes de aplicá-la.
- Meça a concordância e, sobretudo, as discordâncias: ali se vê se as descrições das suas opções são claras.
- Escreva critérios distintos e específicos para cada opção; a qualidade do roteamento depende deles.
- Defina um limiar de confiança e uma saída para uma pessoa para o que não o alcançar.
- Registre a versão do modelo que cada resposta devolve, porque pode mudar.
- Revise na documentação do seu provedor o endpoint e o nome do modelo: os guias de terceiros citam outros diferentes (jev-1.14, jev-latest).
Para se aprofundarModelos de decisão: Jev, Microsoft-Decision-1 e a Decisions API da OpenAI
Fontes e escopo
Documentação consultada em 18 de outubro de 2026. Os exemplos e critérios de decisão são propostas editoriais; adapte-os ao contrato da sua aplicação e valide-os no seu ambiente de testes autorizado.