Jev — päätösmalli
MarkdownTypeSafen päätösmalli Jev vastaa tyypitettyihin kysymyksiin tekstistä tai JSONista: vaihtoehdon valinta, asteikkoarvio tai ”kyllä/ei” todennäköisyyksineen. Se ei ole chat eikä tuota tekstiä.
Koko opas
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": "Apua! Maksatukseni ovat epäonnistuneet 3 päivän ajan.",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Ilmaiseeko tämä kiireellisyyttä?"
}
}
}' import json, os, urllib.request
body = {
"model": "jev-latest",
"state": "Apua! Maksatukseni ovat epäonnistuneet 3 päivän ajan.",
"questions": {
"is_urgent": {"type": "noul", "instructions": "Ilmaiseeko tämä kiireellisyyttä?"},
},
}
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: "Apua! Maksatukseni ovat epäonnistuneet 3 päivän ajan.",
questions: {
is_urgent: { type: "noul", instructions: "Ilmaiseeko tämä kiireellisyyttä?" },
},
}),
});
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 on TypeSafen System One -luokan päätösmalli. Se ei kirjoita tekstiä eikä käy keskustelua: lähetät tilan (state) — tekstinä tai JSONina — ja joukon kysymyksiä, ja saat vastaukseksi tyypitettyjä arvoja todennäköisyyksineen. Koodi voi niiden perusteella heti haarautua, lajitella ja reitittää ilman vapaan tekstin tulkintaa.
Kaikki saman pyynnön kysymykset arvioidaan rinnakkain ja toisistaan riippumatta suhteessa samaan tilaan state. TypeSafen mukaan kysymysten lisääminen ei juuri muuta vastausaikaa, eivätkä kysymykset häiritse toisiaan.
| Asia | Tiivistetysti |
|---|---|
| Malli | jev-latest — Jevin uusimman vakaan version alias; kortti luettelossa |
| Metodi | POST /v1/systemone. Tämä ei ole chat: OpenAI-, Anthropic- ja Gemini-muodot eivät sovellu Jeville. Vastaus saapuu kokonaisena yhtenä JSON-objektina |
| Hyväksytty syöte | Vain teksti: merkkijono, JSON-objekti tai tekstitaulukko. Muunna kuvat, ääni ja video ensin tekstiksi |
| Konteksti | 64K tokenia pyyntöä kohti — state ja kaikki kysymykset yhteensä; state ja pisin kysymys yhdessä — enintään 32K |
| Kieli | TypeSafen mukaan malli toimii tarkimmin englanniksi; se hyväksyy muita kieliä, mutta tarkkuus on heikompi — testaa omilla tiedoillasi |
| Hinta | Syöte $0.084 / 1 miljoonaa tokenia, tuloste maksuton |
Pyyntö
Todennus
- Authorizationheaderpakollinen
Ailoot-avain muodossa
Bearer sk-….
Pyynnön runko
- modelstringpakollinen
jev-latest. - statestring | object | arraypakollinen
Arvioitava sisältö: tekstimerkkijono tai JSON — asiakkaan yhteydenotto, tietokantatietue, viestiketju tai sovelluksesi nykyinen tila. Objekti, jonka kenttien nimet ovat ymmärrettäviä, on yleensä yhtä merkkijonoa kätevämpi.
- questionsobjectpakollinen
Kysymykset. Valitset itse avaimet, ja vastaukset saapuvat samoilla avaimilla; avain ei vaikuta vastaukseen — itse kysymys määritetään kentässä
instructions. - questions.*.typestringpakollinen
noul,choicetaiscore— katso alta. - questions.*.instructionsstring | object | arraypakollinen
Itse kysymys. Pitkän kysymyksen tietoineen voi lähettää objektina: kysymys yhdessä kentässä, tiedot muissa; viittaa kenttiin niiden nimillä gravis-merkkien sisällä.
- questions.*.criteriaobject | array
Vastausvaihtoehdot tyypin mukaan: noulissa ”kyllä”- ja ”ei”-kuvaukset (valinnaiset), choicessa vaihtoehtojen sanakirja ja scoressa järjestetty tasoluettelo.
Kysymystyypit
| Tyyppi | Mitä kysyy | Mitä palauttaa |
|---|---|---|
noul | Onko väite tosi: kyllä vai ei | noul — ”kyllä”-vastauksen todennäköisyys välillä 0–1 |
choice | Mikä annetuista vaihtoehdoista sopii | choice, probabilities, confidence |
score | Mihin state sijoittuu tasoasteikollasi | score, legend, probabilities, confidence |
Tyyppejä voi yhdistellä samassa pyynnössä.
noul — kyllä vai ei
Kenttä criteria on valinnainen: siinä voi kuvata, mitä ”kyllä” (true) ja ”ei” (false) tarkoittavat. Vastaus noul — luku välillä 0 (ei) ja 1 (kyllä).
"is_urgent": {
"type": "noul",
"instructions": "Ilmaiseeko tämä kiireellisyyttä?",
"criteria": {
"true": "Nimenomaisesti aikakriittinen",
"false": "Kiireellisyyttä ei ilmaista"
}
}"is_urgent": {
"type": "noul",
"noul": 0.95
}choice — vaihtoehdon valinta
criteria — sanakirja ”vaihtoehto → kuvaus”; jos kuvausta ei tarvita, määritä null. Enintään 255 vaihtoehtoa. Vastauksessa choice — todennäköisin vaihtoehto, probabilities — kunkin vaihtoehdon todennäköisyys (summa 1), confidence — varmuus välillä 0–1.
"department": {
"type": "choice",
"instructions": "Minkä tiimin pitäisi käsitellä tämä?",
"criteria": {
"billing": "Maksut, laskutus, maksunpalautukset",
"technical": "Virheet, käyttökatkot, integraatiot",
"sales": "Hinnoittelu, päivitykset, uudet asiakkaat"
}
}"department": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 0.88, "technical": 0.12, "sales": 0.0 },
"confidence": 0.81
}score — asteikkoarvio
criteria — tasot alimmasta ylimpään, enintään 10 (TypeSafe suosittelee vähintään kahta). Vastauksessa score — tasojen todennäköisyyksillä painotettu arvo (voi sijoittua tasojen väliin), legend — tason numero ja kuvaus, probabilities ja confidence. TypeSafen mukaan score sopii vertailuun kynnysarvon kanssa, mutta ei tarkaksi luvuksi tasojen välillä.
"frustration": {
"type": "score",
"instructions": "Kuinka turhautunut asiakas on?",
"criteria": ["Rauhallinen", "Turhautunut", "Erittäin vihainen"]
}"frustration": {
"type": "score",
"score": 1.05,
"legend": { "0": "Rauhallinen", "1": "Turhautunut", "2": "Erittäin vihainen" },
"probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
"confidence": 0.92
}Vastaus
- modelstring
Vastanneen mallin versio. Alias jev-latest siirtyy ajan mittaan uusiin versioihin: jos olet sovittanut kentän nimeltä
confidencearvon kynnysarvot tiettyyn versioon, seuraa tätä kenttää. - answersobject
Yksi vastaus jokaiseen kysymykseen samoilla avaimilla. Jokaisessa vastauksessa on
type, choice- ja score-vastauksissa lisäksiconfidence. - usageobject
input_tokensjaoutput_tokens. Vain syötetokeneista veloitetaan.
Useita kysymyksiä yhdessä pyynnössä
Esitä kaikki samaan stateen liittyvät kysymykset yhdessä pyynnössä: ne arvioidaan rinnakkain, ja state lähetetään vain kerran. TypeSafen mukaan heidän 13 kysymyksen esimerkissään yksi yhteinen pyyntö oli 12,2 kertaa halvempi ja 10 kertaa nopeampi kuin 13 peräkkäin lähetettyä erillistä pyyntöä, samoilla vastauksilla.
Monimutkainen arvio kannattaa jakaa yksinkertaisiin kysymyksiin ja yhdistää vastaukset koodissa: esimerkiksi ”arvioi hakemus” -pyynnön sijaan erilliset arviot markkinasta, toteutettavuudesta ja eroista kilpailijoihin. Painoja voi tällöin muuttaa koodissa, ei kysymystekstissä.
{
"model": "jev-latest",
"state": "Apua! Maksatukseni ovat epäonnistuneet 3 päivän ajan.",
"questions": {
"department": {
"type": "choice",
"instructions": "Minkä tiimin pitäisi käsitellä tämä?",
"criteria": {
"billing": "Maksut, laskutus, maksunpalautukset",
"technical": "Virheet, käyttökatkot, integraatiot",
"sales": "Hinnoittelu, päivitykset, uudet asiakkaat"
}
},
"frustration": {
"type": "score",
"instructions": "Kuinka turhautunut asiakas on?",
"criteria": ["Rauhallinen", "Turhautunut", "Erittäin vihainen"]
},
"is_urgent": {
"type": "noul",
"instructions": "Ilmaiseeko tämä kiireellisyyttä?"
}
}
}Milloin sopii
- Reititys. Ohjaa yhteydenotto oikealle osastolle ja pyyntö oikealle käsittelijälle: yksinkertaiselle koodille, suurelle mallille tai ihmiselle.
- Lajittelu ja priorisointi. Kiireellisyys, sävy ja riski — asteikolla, jonka kynnysarvot ovat koodissa.
- Moderointi ja tarkistukset. Rikkooko viesti sääntöjä, vahvistaako lähde lainauksen tai sisältääkö asiakirja vastauksen kysymykseen — ennen kuin teksti etenee.
- Pisteytys ja järjestäminen. Arvioi asiakirjat, ehdokkaat tai löydetyt katkelmat omilla arviointiperusteillasi ja päätä koodissa, mitä viedään eteenpäin.
- Hauraan ”palauta JSON” -ohjeen tilalle. Kutsu, joka palauttaa rakenteensa vuoksi tyypitettyjä arvoja eikä tulkittavaa tekstiä.
Milloin ei sovi
- Chat, vastaukset käyttäjälle sekä tekstin tai koodin generointi. Jev ei kirjoita tekstiä — siihen on tekstimalleja.
- Claude Coden, Cursorin ja muiden agenttien malliksi. Et voi korvata agentin mallia jev-latestilla: agentti tarvitsee mallin, joka kirjoittaa tekstiä ja kutsuu työkaluja. Jeviä voi kutsua koodista, jonka agentti kirjoittaa sinulle.
- Aritmetiikka, laskenta ja päivämäärien vertailu. TypeSafen mukaan nämä kannattaa luotettavuuden vuoksi tehdä koodissa ja kysyä mallilta vain merkitykseen liittyvä osa — esimerkiksi poimia päivämäärän osat choicen avulla.
- Kuvat, ääni ja video. Malli hyväksyy vain tekstin — muunna tällaiset tiedot tekstiksi etukäteen.
Hinta
Vain syötetokeneista veloitetaan — kenttä usage.input_tokens vastauksessa: $0.084 / 1 miljoonaa. Tulostetokenit ovat maksuttomia.
Tämän sivun esimerkkipyyntö (296 syötetokenia) maksaa alle $0.0001.
Ailoot varaa summan saldosta ennen pyyntöä ja veloittaa vastauksen jälkeen kerran toteutuneen kulutuksen mukaan — näin se toimii.
Rajoitukset
| Asia | Raja |
|---|---|
| Koko pyyntö: state ja kaikki kysymykset | 64K tokenia |
| state yhdessä pisimmän kysymyksen kanssa | 32K tokenia |
| Vaihtoehtoja yhdessä choice-kysymyksessä | enintään 255 |
| Tasoja yhdessä score-kysymyksessä | 2–10 |
| Syöte | vain teksti: merkkijono, JSON-objekti tai tekstitaulukko |
Mallirajat ovat TypeSafen ilmoittamia. Avaimesi ja saldosi rajoitukset pätevät kuten kaikilla Ailoot-malleilla: Virheet ja rajoitukset.
Virheet
Virheet saapuvat Ailoot APIn yhteisessä muodossa: koodi, ymmärrettävä teksti ja Request ID. Tämän metodin yleisimmät virheet ovat:
| Koodi | Milloin | Toimenpide |
|---|---|---|
400 invalid_request | Runko ei läpäissyt tarkistusta: state, model tai questions puuttuu, type on tuntematon, choicessa on yli 255 vaihtoehtoa tai scoressa yli 10 tasoa | Korjaa pyyntö virhetekstin perusteella: ilman korjausta se hylätään uudelleen |
400 context_length_exceeded | state ja kysymykset ylittävät yhteensä mallin rajan | Suodata state koodissa ja säilytä kysymysten tarvitsemat tiedot |
401 invalid_api_key | Avain puuttuu tai on virheellinen | Lähetä avain Authorization-otsakkeessa |
402 insufficient_balance | Vapaa saldo ei riitä varaukseen | Lataa saldoa |
404 model_not_found, unsupported_endpoint | ID:ssä on virhe tai mallia kutsutaan väärällä metodilla, esimerkiksi polun /v1/chat/completions kautta | Kutsu jev-latestia vain metodilla POST /v1/systemone |
429 rate_limit_exceeded | Liikaa pyyntöjä | Odota Retry-After-otsakkeessa ilmoitettu määrä sekunteja ja yritä uudelleen |
503 model_overloaded, model_unavailable | Malli on tilapäisesti ylikuormittunut tai ei käytettävissä | Jos X-Should-Retry: true — yritä uudelleen Retry-After-otsakkeessa ilmoitetun sekuntimäärän kuluttua; jos false — tarkista ensin Request ID historiasta |
504 model_timeout | Malli ei vastannut ajoissa | Älä lähetä pyyntöä uudelleen ennen kuin olet tarkistanut Request ID:n historiasta |
Kaikki koodit löytyvät sivulta Virheet ja rajoitukset.