Jev — beslutningsmodel
MarkdownJev fra TypeSafe er en beslutningsmodel, der besvarer typede spørgsmål om tekst eller JSON: valg mellem muligheder, vurdering på en skala eller »ja/nej« med sandsynligheder. Den er ikke en chat og genererer ikke tekst.
Komplet guide
https://api.ailoot.ai/v1/systemonecurl https://api.ailoot.ai/v1/systemone \
-H "Authorization: Bearer $AILOOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"state": "Hjælp! Mine udbetalinger har slået fejl i 3 dage.",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Udtrykker dette, at det haster?"
}
}
}' import json, os, urllib.request
body = {
"model": "jev-latest",
"state": "Hjælp! Mine udbetalinger har slået fejl i 3 dage.",
"questions": {
"is_urgent": {"type": "noul", "instructions": "Udtrykker dette, at det haster?"},
},
}
req = urllib.request.Request(
"https://api.ailoot.ai/v1/systemone",
data=json.dumps(body).encode(),
headers={"Authorization": "Bearer " + os.environ["AILOOT_API_KEY"],
"Content-Type": "application/json"},
)
with urllib.request.urlopen(req, timeout=60) as resp:
result = json.load(resp)
print(result["answers"]["is_urgent"]["noul"]) # 0.95const resp = await fetch("https://api.ailoot.ai/v1/systemone", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AILOOT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "jev-latest",
state: "Hjælp! Mine udbetalinger har slået fejl i 3 dage.",
questions: {
is_urgent: { type: "noul", instructions: "Udtrykker dette, at det haster?" },
},
}),
});
const result = await resp.json();
if (!resp.ok) throw new Error(`${resp.status} ${JSON.stringify(result)}`);
console.log(result.answers.is_urgent.noul); // 0.95{
"model": "jev-1.13.0",
"answers": {
"is_urgent": {
"type": "noul",
"noul": 0.95
}
},
"usage": { "input_tokens": 296, "output_tokens": 20 }
}Jev fra TypeSafe er en beslutningsmodel af klassen System One. Den skriver ikke tekst og fører ikke samtaler: du sender en tilstand (state) — tekst eller JSON — og et sæt spørgsmål, og får typede værdier med sandsynligheder tilbage. Koden kan straks forgrene sig, sortere og foretage routning ud fra dem uden at fortolke fri tekst.
Alle spørgsmål i én anmodning vurderes parallelt og uafhængigt af hinanden i forhold til den samme state. Ifølge TypeSafe ændrer ekstra spørgsmål næsten ikke svartiden, og spørgsmålene påvirker ikke hinanden.
| Hvad | Kort fortalt |
|---|---|
| Model | jev-latest — et alias for den seneste stabile version af Jev; kort i kataloget |
| Metode | POST /v1/systemone. Det er ikke en chat: OpenAI-, Anthropic- og Gemini-formaterne passer ikke til Jev. Svaret kommer samlet som ét JSON-objekt |
| Accepteret input | Kun tekst: en streng, et JSON-objekt eller en liste af tekster. Omdan først billeder, lyd og video til tekst |
| Kontekst | 64K tokens pr. anmodning — state og alle spørgsmål tilsammen; state sammen med det længste spørgsmål — op til 32K |
| Sprog | Ifølge TypeSafe er modellen mest præcis på engelsk; den accepterer andre sprog, men med lavere præcision — afprøv den med dine egne data |
| Pris | Input $0.084 pr. 1 mio. tokens, gratis output |
Anmodning
Godkendelse
- Authorizationheaderpåkrævet
Ailoot-nøgle i formen
Bearer sk-….
Anmodningens indhold
- modelstringpåkrævet
jev-latest. - statestring | object | arraypåkrævet
Det, der skal vurderes: en tekststreng eller JSON — en kundehenvendelse, en databasepost, en samtale eller applikationens aktuelle tilstand. Et objekt med beskrivende feltnavne er normalt mere praktisk end én streng.
- questionsobjectpåkrævet
Spørgsmål. Du vælger nøglerne, og svarene kommer med de samme nøgler; nøglen påvirker ikke svaret — selve spørgsmålet angives i
instructions. - questions.*.typestringpåkrævet
noul,choiceellerscore— se nedenfor. - questions.*.instructionsstring | object | arraypåkrævet
Selve spørgsmålet. Et langt spørgsmål med data kan sendes som et objekt: spørgsmålet i ét felt, data i andre; henvis til felterne ved navn i backticks.
- questions.*.criteriaobject | array
Svarmuligheder, som afhænger af typen: beskrivelser af »ja« og »nej« for noul (valgfrit), en ordbog over muligheder for choice og en ordnet liste af niveauer for score.
Spørgsmålstyper
| Type | Hvad den spørger om | Hvad den returnerer |
|---|---|---|
noul | Om et udsagn er sandt: ja eller nej | noul — sandsynligheden for »ja« fra 0 til 1 |
choice | Hvilken af de angivne muligheder der passer | choice, probabilities, confidence |
score | Hvor state ligger på din niveauskala | score, legend, probabilities, confidence |
Typerne kan blandes i én anmodning.
noul — ja eller nej
Feltet criteria er valgfrit: her kan du beskrive, hvad »ja« (true) og »nej« (false) betyder. Svaret noul — et tal fra 0 (nej) til 1 (ja).
"is_urgent": {
"type": "noul",
"instructions": "Udtrykker dette, at det haster?",
"criteria": {
"true": "Udtrykkeligt tidskritisk",
"false": "Intet tyder på, at det haster"
}
}"is_urgent": {
"type": "noul",
"noul": 0.95
}choice — valg af mulighed
criteria — en ordbog »mulighed → beskrivelse«; hvis en beskrivelse ikke er nødvendig, angiv null. Op til 255 muligheder. I svaret er choice — den mest sandsynlige mulighed, probabilities — sandsynligheden for hver mulighed (tilsammen 1), confidence — sikkerhed fra 0 til 1.
"department": {
"type": "choice",
"instructions": "Hvilket team skal håndtere dette?",
"criteria": {
"billing": "Betalinger, fakturering, refusioner",
"technical": "Fejl, nedbrud, integrationer",
"sales": "Priser, opgraderinger, nye kunder"
}
}"department": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 0.88, "technical": 0.12, "sales": 0.0 },
"confidence": 0.81
}score — vurdering på en skala
criteria — niveauer fra lavest til højest, højst 10 (TypeSafe anbefaler mindst to). I svaret er score — en værdi vægtet efter niveauernes sandsynligheder (kan ligge mellem niveauer), legend — niveauets nummer og beskrivelse, probabilities og confidence. Ifølge TypeSafe er score egnet til sammenligning med en tærskel, men ikke som et præcist tal mellem niveauerne.
"frustration": {
"type": "score",
"instructions": "Hvor frustreret er kunden?",
"criteria": ["Rolig", "Frustreret", "Meget vred"]
}"frustration": {
"type": "score",
"score": 1.05,
"legend": { "0": "Rolig", "1": "Frustreret", "2": "Meget vred" },
"probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
"confidence": 0.92
}Svar
- modelstring
Hvilken modelversion der svarede. Aliaset jev-latest peger med tiden på nye versioner: hvis du har tilpasset tærsklerne
confidencetil en bestemt version, skal du holde øje med dette felt. - answersobject
Ét svar pr. spørgsmål med de samme nøgler. Hvert svar har
type, choice og score har desudenconfidence. - usageobject
input_tokensogoutput_tokens. Kun inputtokens betales.
Flere spørgsmål i én anmodning
Stil alle spørgsmål til samme state i én anmodning: de vurderes parallelt, og state sendes kun én gang. Ifølge TypeSafe var én samlet anmodning i deres eksempel med 13 spørgsmål 12,2 gange billigere og 10 gange hurtigere end 13 separate anmodninger sendt efter hinanden, med de samme svar.
Del helst en kompleks vurdering op i enkle spørgsmål, og kombiner svarene i koden: brug eksempelvis separate vurderinger af marked, gennemførlighed og forskelle fra konkurrenterne i stedet for »vurdér ansøgningen«. Vægtene ændres så i koden frem for i spørgsmålsteksten.
{
"model": "jev-latest",
"state": "Hjælp! Mine udbetalinger har slået fejl i 3 dage.",
"questions": {
"department": {
"type": "choice",
"instructions": "Hvilket team skal håndtere dette?",
"criteria": {
"billing": "Betalinger, fakturering, refusioner",
"technical": "Fejl, nedbrud, integrationer",
"sales": "Priser, opgraderinger, nye kunder"
}
},
"frustration": {
"type": "score",
"instructions": "Hvor frustreret er kunden?",
"criteria": ["Rolig", "Frustreret", "Meget vred"]
},
"is_urgent": {
"type": "noul",
"instructions": "Udtrykker dette, at det haster?"
}
}
}Hvornår den passer
- Routing. Send en henvendelse til den rette afdeling og en anmodning til den rette behandler: enkel kode, en stor model eller et menneske.
- Sortering og prioritering. Hastegrad, tone og risiko — på en skala med tærskler i koden.
- Moderation og kontrol. Om en besked bryder reglerne, en kilde bekræfter et citat, eller et dokument indeholder svaret på et spørgsmål — før teksten sendes videre.
- Scoring og rangering. Vurdér dokumenter, kandidater eller fundne tekstuddrag efter dine egne vurderingskriterier, og afgør i koden, hvad der skal videre.
- I stedet for en skrøbelig »returnér JSON«-instruktion. Et kald, der er konstrueret til at returnere typede værdier, frem for tekst, der skal fortolkes.
Hvornår den ikke passer
- Chat, svar til brugeren og generering af tekst eller kode. Jev skriver ikke tekst — til det findes tekstmodeller.
- Som model til Claude Code, Cursor og andre agenter. Du kan ikke erstatte agentens model med jev-latest: agenten har brug for en model, der skriver tekst og kalder værktøjer. Jev kan kaldes fra den kode, som agenten skriver til dig.
- Regning, optælling og sammenligning af datoer. Ifølge TypeSafe er det mere pålideligt at gøre dette i koden og kun spørge modellen om den betydningsmæssige del — for eksempel at udtrække datodele via choice.
- Billeder, lyd og video. Modellen accepterer kun tekst — omdan disse data til tekst på forhånd.
Pris
Kun inputtokens betales — feltet usage.input_tokens i svaret: $0.084 pr. 1 million. Outputtokens er gratis.
Anmodningen i eksemplet på denne side (296 inputtokens) koster mindre end $0.0001.
Før anmodningen reserverer Ailoot beløbet på saldoen og debiterer efter svaret én gang ud fra det faktiske forbrug — sådan fungerer det.
Grænser
| Hvad | Grænse |
|---|---|
| Hele anmodningen: state og alle spørgsmål | 64K tokens |
| state sammen med det længste spørgsmål | 32K tokens |
| Muligheder i én choice | op til 255 |
| Niveauer i én score | fra 2 til 10 |
| Input | kun tekst: en streng, et JSON-objekt eller en liste af tekster |
Modelgrænserne er oplyst af TypeSafe. Begrænsninger for din nøgle og saldo gælder som for enhver anden Ailoot-model: Fejl og grænser.
Fejl
Fejl kommer i Ailoot APIs fælles format: kode, forståelig tekst og Request ID. De hyppigste for denne metode er:
| Kode | Hvornår | Hvad du skal gøre |
|---|---|---|
400 invalid_request | Anmodningens indhold bestod ikke valideringen: state, model eller questions mangler, type er ukendt, choice har mere end 255 muligheder, eller score har mere end 10 niveauer | Ret anmodningen ud fra fejlteksten: uden en rettelse bliver den afvist igen |
400 context_length_exceeded | state og spørgsmålene overskrider tilsammen modellens grænse | Filtrér state i koden, og behold det, spørgsmålene kræver |
401 invalid_api_key | Nøglen mangler eller er ugyldig | Send nøglen i Authorization-headeren |
402 insufficient_balance | Den ledige saldo rækker ikke til reservationen | Fyld saldoen op |
404 model_not_found, unsupported_endpoint | ID indeholder en fejl, eller modellen kaldes med den forkerte metode, eksempelvis via /v1/chat/completions | Kald kun jev-latest via POST /v1/systemone |
429 rate_limit_exceeded | For mange anmodninger | Vent det antal sekunder, som står i Retry-After-headeren, og prøv igen |
503 model_overloaded, model_unavailable | Modellen er midlertidigt overbelastet eller utilgængelig | Hvis X-Should-Retry: true — prøv igen efter Retry-After sekunder; hvis false — kontrollér først Request ID i historikken |
504 model_timeout | Modellen svarede ikke i tide | Send ikke anmodningen igen, før du har kontrolleret Request ID i historikken |
Den fulde liste over koder findes på siden Fejl og grænser.