docs
API

Jev — modelo de decisão

Markdown

O modelo de decisão Jev da TypeSafe responde a perguntas tipadas sobre texto ou JSON: escolha de uma opção, avaliação numa escala ou «sim/não» com probabilidades. Não é um chat nem um gerador de texto.

Guia completo
POSThttps://api.ailoot.ai/v1/systemone
Jev — modelo de decisão
curl https://api.ailoot.ai/v1/systemone \
  -H "Authorization: Bearer $AILOOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jev-latest",
    "state": "Socorro! Os meus pagamentos de saída estão a falhar há 3 dias.",
    "questions": {
      "is_urgent": {
        "type": "noul",
        "instructions": "Isto transmite urgência?"
      }
    }
  }' 
200 OK
{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": {
      "type": "noul",
      "noul": 0.95
    }
  },
  "usage": { "input_tokens": 296, "output_tokens": 20 }
}

Jev é um modelo de decisão da classe System One da TypeSafe. Não escreve texto nem mantém conversas: envia-lhe um estado (state) — texto ou JSON — e um conjunto de perguntas, e recebe valores tipados com probabilidades. O código pode usá-los diretamente para escolher ramos, ordenar e encaminhar, sem analisar texto livre.

Todas as perguntas de um pedido são avaliadas em paralelo e de forma independente, com base no mesmo state. Segundo a TypeSafe, acrescentar perguntas quase não altera o tempo de resposta, e as perguntas não interferem entre si.

AspetoDescrição breve
Modelojev-latest — alias da versão estável mais recente do Jev; ficha no catálogo
MétodoPOST /v1/systemone. Não é um chat: os formatos OpenAI, Anthropic e Gemini não são adequados para o Jev. A resposta chega integralmente, num único JSON
O que aceitaApenas texto: uma cadeia de caracteres, um objeto JSON ou um array de textos. Converta primeiro as imagens, o áudio e o vídeo em texto
Contexto64K tokens por pedido — state e todas as perguntas em conjunto; state e a pergunta mais longa — até 32K
IdiomaSegundo a TypeSafe, o modelo é mais preciso em inglês; aceita outros idiomas, mas com menor precisão — teste-o com os seus dados
PreçoEntrada a $0.084 por 1 milhão de tokens, saída gratuita

Pedido

Autorização

  • Authorizationheaderobrigatório

    Chave Ailoot no formato Bearer sk-….

Corpo do pedido

  • modelstringobrigatório

    jev-latest.

  • statestring | object | arrayobrigatório

    O que avaliar: uma cadeia de texto ou JSON — um pedido de um cliente, um registo da base de dados, uma conversa ou o estado atual da sua aplicação. Um objeto com nomes de campos claros costuma ser mais cómodo do que uma única cadeia de caracteres.

  • questionsobjectobrigatório

    Perguntas. Escolhe as chaves e recebe as respostas com as mesmas chaves; a chave não influencia a resposta — a pergunta propriamente dita é definida em instructions.

  • questions.*.typestringobrigatório

    noul, choice ou score — ver abaixo.

  • questions.*.instructionsstring | object | arrayobrigatório

    A pergunta propriamente dita. Pode enviar uma pergunta longa com dados num objeto: a pergunta num campo e os dados noutros; refira os campos pelo nome entre acentos graves.

  • questions.*.criteriaobject | array

    Opções de resposta específicas de cada tipo: descrições de «sim» e «não» em noul (opcionais), um dicionário de opções em choice, uma lista ordenada de níveis em score.

Tipos de perguntas

TipoO que perguntaO que devolve
noulSe uma afirmação é verdadeira: sim ou nãonoul — probabilidade de «sim» de 0 a 1
choiceQual das opções indicadas é adequadachoice, probabilities, confidence
scoreEm que nível da sua escala se encontra statescore, legend, probabilities, confidence

Pode combinar tipos no mesmo pedido.

noul — sim ou não

O campo criteria é opcional: pode descrever o significado de «sim» (true) e «não» (false). A resposta noul — número de 0 (não) a 1 (sim).

"is_urgent": {
  "type": "noul",
  "instructions": "Isto transmite urgência?",
  "criteria": {
    "true": "Urgência temporal explícita",
    "false": "Nenhuma urgência expressa"
  }
}

choice — escolha de uma opção

criteria — dicionário «opção → descrição»; se não precisar de descrição, indique null. Até 255 opções. Na resposta, choice — a opção mais provável, probabilities — a probabilidade de cada opção (a soma é 1), confidence — a confiança de 0 a 1.

"department": {
  "type": "choice",
  "instructions": "Que equipa deve tratar disto?",
  "criteria": {
    "billing": "Pagamentos, faturação, reembolsos",
    "technical": "Erros, indisponibilidades, integrações",
    "sales": "Preços, passagens para planos superiores, novos clientes"
  }
}

score — avaliação numa escala

criteria — níveis do mais baixo ao mais alto, no máximo 10 (a TypeSafe recomenda pelo menos dois). Na resposta, score — valor ponderado pelas probabilidades dos níveis (pode situar-se entre níveis), legend — número e descrição do nível, probabilities e confidence. Segundo a TypeSafe, score é adequado para comparar com um limiar, mas não para obter um número exato entre níveis.

"frustration": {
  "type": "score",
  "instructions": "Qual é o nível de frustração do cliente?",
  "criteria": ["Calmo", "Frustrado", "Muito zangado"]
}

Resposta

  • modelstring

    Versão do modelo que respondeu. O alias jev-latest passa para novas versões ao longo do tempo: se ajustou os limiares confidence para uma versão específica, acompanhe este campo.

  • answersobject

    Uma resposta por pergunta, com as mesmas chaves. Cada resposta tem type; em choice e score, tem também confidence.

  • usageobject

    input_tokens e output_tokens. Apenas os tokens de entrada são cobrados.

Várias perguntas num único pedido

Envie todas as perguntas sobre o mesmo state num único pedido: são avaliadas em paralelo e state é transmitido uma única vez. Segundo a TypeSafe, no seu exemplo com 13 perguntas, um pedido conjunto foi 12,2 vezes mais barato e 10 vezes mais rápido do que 13 pedidos separados enviados sequencialmente, com as mesmas respostas.

É melhor dividir um julgamento complexo em perguntas simples e combinar as respostas no código: por exemplo, em vez de «avalia esta candidatura», obtenha avaliações separadas do mercado, da viabilidade e das diferenças face à concorrência. Assim, os pesos são alterados no código e não no texto da pergunta.

{
  "model": "jev-latest",
  "state": "Socorro! Os meus pagamentos de saída estão a falhar há 3 dias.",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Que equipa deve tratar disto?",
      "criteria": {
        "billing": "Pagamentos, faturação, reembolsos",
        "technical": "Erros, indisponibilidades, integrações",
        "sales": "Preços, passagens para planos superiores, novos clientes"
      }
    },
    "frustration": {
      "type": "score",
      "instructions": "Qual é o nível de frustração do cliente?",
      "criteria": ["Calmo", "Frustrado", "Muito zangado"]
    },
    "is_urgent": {
      "type": "noul",
      "instructions": "Isto transmite urgência?"
    }
  }
}

Quando é adequado

  • Encaminhamento. Enviar um pedido de apoio para o departamento certo e um pedido para o processador certo: código simples, um modelo grande ou uma pessoa.
  • Ordenação e prioridade. Urgência, tom, risco — numa escala, com limiares no código.
  • Moderação e verificações. Verificar se uma mensagem viola as regras, se a fonte confirma uma citação ou se um documento contém a resposta a uma pergunta — antes de o texto seguir para a etapa seguinte.
  • Pontuação e classificação. Avaliar documentos, candidatos ou excertos encontrados segundo os seus critérios e decidir no código o que segue para a etapa seguinte.
  • Em vez de um frágil «devolve JSON». Uma chamada que devolve valores tipados por construção, em vez de texto que tem de ser analisado.

Quando não é adequado

  • Chat, respostas ao utilizador, geração de texto ou código. O Jev não escreve texto — para isso existem os modelos de texto.
  • Modelo para Claude Code, Cursor e outros agentes. Não pode substituir o modelo de um agente por jev-latest: o agente precisa de um modelo que escreva texto e chame ferramentas. O Jev pode ser chamado a partir do código que o agente escreve para si.
  • Aritmética, contagem, comparação de datas. Segundo a TypeSafe, é mais fiável fazer estas operações no código e perguntar ao modelo apenas a parte semântica — por exemplo, extrair partes de uma data através de choice.
  • Imagens, áudio e vídeo. O modelo aceita apenas texto — converta estes dados em texto antecipadamente.

Preço

Apenas os tokens de entrada são cobrados — campo usage.input_tokens da resposta: $0.084 por 1 milhão. Os tokens de saída são gratuitos.

O pedido do exemplo desta página (296 tokens de entrada) custa menos de $0.0001.

Antes do pedido, o Ailoot reserva o valor no saldo e, após a resposta, debita uma única vez pelo consumo efetivo — como funciona.

Limites

AspetoLimite
Pedido completo: state e todas as perguntas64K tokens
state e a pergunta mais longa em conjunto32K tokens
Opções num único choiceaté 255
Níveis num único scorede 2 a 10
Entradaapenas texto: cadeia de caracteres, objeto JSON ou array de textos

Limites do modelo — segundo a TypeSafe. Os limites da sua chave e do seu saldo aplicam-se como a qualquer modelo Ailoot: Erros e limites.

Erros

Os erros chegam no formato geral da API Ailoot: código, texto claro e Request ID. Os mais frequentes neste método são:

CódigoQuandoO que fazer
400 invalid_requestO corpo não passou a validação: falta state, model ou questions, type desconhecido, mais de 255 opções em choice ou mais de 10 níveis em scoreCorrija o pedido de acordo com o texto do erro: sem alterações, voltará a falhar
400 context_length_exceededstate e as perguntas, em conjunto, excedem o limite do modeloFiltre state no código, deixando apenas o que é necessário para as perguntas
401 invalid_api_keyA chave está em falta ou é inválidaEnvie a chave no cabeçalho Authorization
402 insufficient_balanceO saldo disponível não é suficiente para a reservaCarregue o saldo
404 model_not_found, unsupported_endpointID incorreto ou modelo chamado através do método errado, por exemplo, /v1/chat/completionsChame jev-latest apenas através de POST /v1/systemone
429 rate_limit_exceededDemasiados pedidosAguarde o número de segundos indicado no cabeçalho Retry-After e tente novamente
503 model_overloaded, model_unavailableO modelo está temporariamente sobrecarregado ou indisponívelSe X-Should-Retry: true — tente novamente após o número de segundos de Retry-After; se false — consulte primeiro o Request ID no histórico
504 model_timeoutO modelo não respondeu a tempoNão volte a enviar o pedido antes de consultar o Request ID no histórico

A lista completa de códigos está na página Erros e limites.

Ainda tem dúvidas? Envie o Request ID e uma descrição — ajudamos a esclarecer.Contactar o suporte