Decisões

Decisões (Jev)

Faça perguntas tipadas sobre seus dados e receba respostas que seu código pode usar: a probabilidade de sim, uma opção de um conjunto ou uma posição em uma escala, com probabilidades calibradas, geralmente em menos de um segundo. Disponível na própria API da TypeSafe, então seus SDKs funcionam sem alterações.

POST/v1/systemone
ModeloIDEntrada, por 1M tokensPreço da TypeSafeSaída
Jev 1.14jev-1.14$0.024$0.042Grátis
Jev 1.13jev-1.13$0.035$0.042Grátis

Jev é o modelo de decisão da TypeSafe, que ela chama de modelo System One: ele entende linguagem natural como um modelo de chat, mas, em vez de escrever texto, responde às perguntas que você define. jev-latest, jev-1.14.0 e typesafe/jev-1.14 também funcionam como IDs de modelo, e jev-1.13 continua disponível para prompts ajustados para ele.

Faça perguntas

# pip install typesafe-sdk
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient
with TypeSafeClient(
base_url="https://api.zurelay.com",
api_key="YOUR_ZURELAY_KEY",
model="jev-1.14",
) as client:
response = client.system_one(
state={"ticket": "I was charged twice for October, please refund one today."},
questions={
"refund": Noul(instructions="Is the customer asking for money back?"),
"team": Choice(
instructions="Which team should handle this?",
criteria={"billing": "Charges and refunds", "technical": "Bugs and outages"},
),
"urgency": Score(
instructions="How urgent is it?",
criteria=["can wait", "this week", "today"],
),
},
)
print(response.nouls["refund"].noul) # 0.98
print(response.choices["team"].choice) # billing
print(response.scores["urgency"].score) # 1.9

Nos SDKs da TypeSafe, defina a URL base como https://api.zurelay.com, sem /v1: eles adicionam /v1/systemone automaticamente. As variáveis de ambiente TYPESAFE_BASE_URL e TYPESAFE_API_KEY também funcionam. Qualquer cliente HTTP funciona da mesma forma: envie sua chave Zurelay como um token Bearer.

A resposta

Resposta
{
"id": "req_8Kq2vXbN4tR7mWc1pLs9dYe3",
"model": "jev-1.14",
"answers": {
"refund": { "type": "noul", "noul": 0.98 },
"team": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 1.0, "technical": 0.0 },
"confidence": 1.0
},
"urgency": {
"type": "score",
"score": 1.9,
"legend": { "0": "can wait", "1": "this week", "2": "today" },
"probabilities": { "0": 0.0, "1": 0.1, "2": 0.9 },
"confidence": 0.81
}
},
"usage": { "input_tokens": 396, "output_tokens": 61, "cost": 0.00001386 }
}

Cada resposta vem com o nome que você deu à pergunta. usage indica a base da cobrança da requisição, e cost, o custo em dólares americanos. A mesma requisição pode gerar respostas com um ou dois pontos de diferença entre chamadas.

Parâmetros

modelstringobrigatório
jev-1.14, jev-latest (o mesmo modelo) ou jev-1.13.
statestring, object ou arrayobrigatório
O conteúdo a avaliar: um texto ou dados estruturados, como um registro, um histórico de chat ou o estado atual do seu app. Para se referir a um campo em uma pergunta, use o nome dele entre crases, como `ticket`.
questionsobjectobrigatório
Suas perguntas, cada uma com um nome que você escolhe. As respostas vêm com os mesmos nomes, e os nomes não são enviados ao modelo.
Cada pergunta
typestringobrigatório
noul, choice ou score.
instructionsstring, object ou arrayobrigatório
A pergunta. Um objeto pode conter a pergunta em um campo e os dados aos quais ela se refere em outros.
criteriaobject ou array
Para choice (obrigatório): um objeto com até 255 opções, cada uma com uma descrição ou null. Para score (obrigatório): um array de 2 a 10 níveis, do menor para o maior. Para noul (opcional): true e false, o que significam sim e não.

Tipos de pergunta

TipoPerguntaAnswer
noulUma pergunta de sim ou nãonoul: a probabilidade de sim, de 0 a 1
choiceQual das suas opções se encaixachoice, o valor de probabilities de cada opção e um confidence
scoreOnde se situa na sua escala ordenadascore, que pode ficar entre níveis, um legend, o valor de probabilities de cada nível e um confidence

Uma requisição pode combinar os três tipos, e fazer várias perguntas custa pouco mais do que fazer uma só: o estado é lido uma vez, e todas as perguntas são respondidas com base nele em paralelo.

Limites

  • Até 64K tokens por requisição, somando o estado e todas as perguntas, e 32K para o estado mais a pergunta mais longa.
  • Somente texto: uma string, um objeto JSON ou um array. Converta imagens, PDFs ou áudio em texto primeiro.
  • Sem streaming: as respostas chegam completas, geralmente em menos de um segundo.
  • Uma requisição malformada (sem instructions, uma pontuação com apenas um nível) é rejeitada com 400 antes de chegar ao modelo e não custa nada. O mesmo vale para uma requisição acima de 64K tokens, com o código context_length_exceeded.

Como obter boas respostas

Jev interpreta as instruções literalmente, então escreva a condição exata e inclua os casos-limite nos critérios. Deixe contagens, cálculos e comparações de datas no código e envie apenas a parte do estado necessária para a pergunta. Ele pode favorecer a primeira opção de uma escolha: para uma decisão importante, verifique se a resposta se mantém ao reordenar as opções.

Cobrança por decisões

A cobrança do Jev é baseada nos tokens de entrada que ele contabiliza: seu estado e suas perguntas, mais cerca de 270 tokens próprios em cada requisição. As respostas são grátis, como na TypeSafe. Uma requisição curta de cerca de 300 tokens custa aproximadamente $0.00001, então um milhão delas custa cerca de $10. Os cabeçalhos usage e x-zurelay-input-tokens de cada resposta indicam a base da cobrança, todas as requisições aparecem no seu registro de requisições, e as que falham não custam nada.

Teste seu próprio conteúdo e suas perguntas no Playground do painel: selecione Jev, cole o conteúdo, configure as perguntas ao lado, e o botão Obter código gera a mesma requisição em Python, Node.js ou cURL.

Tem dúvidas ou falta algo? Fale com nossa equipe de suporte e responderemos por e-mail, geralmente em até um minuto.