Wat elk veld betekent
Het verzoek definieert de vragen en antwoordformaten. Het antwoord retourneert voor elk een resultaat. Dit zijn de JSON-velden die in het voorbeeld worden gebruikt.
Velden opvragen
model- De model-ID. In dit voorbeeld wordt Jev 1.13 vastgezet, zodat de versie ervan expliciet is.
state- De tekst of gestructureerde gegevens die moeten worden geëvalueerd, zoals een ondersteuningsbericht.
questions- Een verzameling beslissingen met een naam. Diezelfde namen staan in het veld answers van de respons.
<question_id>- Een naam zoals action of urgency; het antwoord gebruikt dezelfde naam.
type- Antwoordvorm: choice kiest een optie, score beoordeelt op een geordende schaal en noul beoordeelt een ja/nee-vraag.
instructions- De specifieke afweging die u het model wilt laten maken.
criteria- De toegestane Choice-opties, geordende Score-niveaus of de betekenis van false en true voor Noul.
Reactievelden
answers- Eén resultaat per vraag, geretourneerd onder dezelfde naam.
choice- De optiesleutel die door choice is geselecteerd: de optie met de hoogste waarschijnlijkheid.
probabilities- De waarschijnlijkheid van elke keuzeoptie; samen tellen deze waarden op tot 1.
confidence- Een afzonderlijke betrouwbaarheidswaarde berekend op basis van de waarschijnlijkheidsverdeling; het is niet de waarschijnlijkheid van de geselecteerde optie.
score- Een positie op een geordende schaal, gewogen naar waarschijnlijkheid; die kan tussen twee niveaus liggen.
legend- De koppeling tussen numerieke Score-posities en de beschrijvingen van je niveaus.
noul- Een getal van 0 (nee) tot 1 (ja) voor een ja/nee-vraag.
Dezelfde context, drie onafhankelijke vragen: Choice, Score en Probability. Elke keer uitvoeren kost één poging van je daglimiet. Een correct gevormd antwoord kan nog steeds fout zijn. Test representatieve cases en stel routeringsdrempels in voor uw eigen workflow.
LangChain · PythonJev opnemen in een LangChain-agentharnas
Het harnas regelt de modelaanroepen en tools van de agent. Op een beslismoment leest Jev een bericht, een voorgenomen toolaanroep of de agentstatus en geeft een getypeerd antwoord terug. Je code bepaalt wat volgt; open taken blijven bij het chatmodel.
ModelRouterMiddlewarebefore_agent → wrap_model_callClassificeer het laatste gebruikersbericht vóór de run, kies een model en houd die keuze tijdens de run aan. De keuze, kansen en betrouwbaarheid blijven beschikbaar in de agentstatus.
AutoModeMiddlewarewrap_tool_callControleer een geselecteerde toolaanroep vóór uitvoering. Als Jev risico of onvoldoende toestemming vaststelt, blokkeert de middleware de aanroep en geeft een ToolMessage met fout terug. Er wordt geen menselijke goedkeuring gevraagd.
TypeSafeClassifierChoice · Score · NoulVoeg desgewenst eigen controlepunten toe: geef berichten of agentstatus vanuit aangepaste middleware aan TypeSafeClassifier en gebruik Choice, Score of Noul om in code te vertakken of een geval te laten beoordelen.
LangChain · Python · ModelRouterMiddleware
# pip install "langchain-typesafe[experimental]" langchain-openai
# Set TYPESAFE_API_KEY and OPENAI_API_KEY on your server.
from langchain.agents import create_agent
from langchain_typesafe.experimental.middleware import (
ModelChoice, ModelRouterMiddleware,
)
router = ModelRouterMiddleware(
choices={
"fast": ModelChoice(
model="openai:gpt-5.6-terra",
criteria="Simple lookups and extraction.",
),
"powerful": ModelChoice(
model="openai:gpt-6-astra",
criteria="Complex reasoning and high-stakes decisions.",
),
},
instructions="Choose the least costly model that can do the task safely.",
)
agent = create_agent("openai:gpt-5.6-terra", middleware=[router])
result = agent.invoke({"messages": [{"role": "user", "content": "Summarize this log."}]})
print(result["model_route"].choice)
TypeScript aan de serverzijde
TypeScript · fetch// Run on your server. Keep the API key out of browser code.
const apiKey = process.env.OPENROUTER_API_KEY;
if (!apiKey) throw new Error("Set OPENROUTER_API_KEY");
const response = await fetch("https://openrouter.ai/api/alpha/decisions", {
method: "POST",
headers: {
Authorization: "Bearer " + apiKey,
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "typesafe/jev-1.13",
state: {input: "A customer reports a duplicate charge."},
questions: {
team: {
type: "choice",
instructions: "Which team should handle this?",
criteria: {
billing: "Payments and refunds",
technical: "Bugs and integrations"
}
},
urgency: {
type: "score",
instructions: "How urgent is the issue?",
criteria: ["Can wait", "Needs attention today", "Immediate action"]
},
escalate: {
type: "noul",
instructions: "Should a human review this first?",
criteria: {false: "No review needed", true: "Review before acting"}
}
}
})
});
if (!response.ok) throw new Error("Decision request failed");
const {answers} = await response.json();
console.log(answers.team.choice, answers.urgency.score, answers.escalate.noul);