{
  "aboutHtml": "<p>Jev on TypeSafen lippulaivamalli ja uuden <strong>System One</strong> -luokan ensimmäinen malli. Se ei kirjoita tekstiä, vaan tekee nopeasti päätöksiä, joita ohjelma voi käyttää suoraan: annat <strong>tilan</strong> (<code>state</code>), tekstin tai JSON-datan, ja joukon <strong>kysymyksiä</strong>, ja saat vastaukseksi tyypitetyt arvot kalibroituine todennäköisyyksineen.</p><p>Kielimallit kirjoittavat sanoja ihmisille, kun taas Jev on TypeSafen mukaan lähempänä koodia: vastaus on heti koodin tarvitsemaa muotoa, nopeus suuri eikä yksikään arvo jää määritettyjen vaihtoehtojen ulkopuolelle. Malli on suunniteltu antamaan vakaita vastauksia toistuvissa pyynnöissä.</p><h4>Miten System One eroaa kielimallista</h4><ul><li><strong>Ei generoi.</strong> Jev ei kirjoita käyttäjävastauksia, koodia eikä selitä päättelyä. Määrität mahdolliset vastaukset itse yhdellä kolmesta kysymystyypistä.</li><li><strong>Koulutettu kalibroituihin päätöksiin.</strong> TypeSafe kouluttaa mallia RLCD-menetelmällä (Reinforcement Learning for Calibrated Decisions): todennäköisyydet sovitetaan todellisiin lopputuloksiin ja ne kuvaavat epävarmuutta. Suuresta joukosta vastauksia, joiden todennäköisyys on 0,8, noin 80%:n tulisi olla oikein. Kalibrointi on suuren otoksen ominaisuus, ei yksittäisen vastauksen oikeellisuuden takuu.</li><li><strong>Eri koulutustavoite.</strong> Chat-malleja koulutetaan miellyttämään ihmisiä (RLHF), mikä TypeSafen havaintojen mukaan kannustaa myötäilyyn ja varman kuuloisiin virheisiin. Yksi RLHF:n tekijöistä, Diogo Almeida, on TypeSafen toinen perustaja.</li></ul><p>Nimi viittaa Daniel Kahnemanin ”Ajattelu, nopeasti ja hitaasti” -kirjan ”järjestelmään 1”: nopeaan intuitiiviseen arvioon vastakohtana ”järjestelmän 2” hitaalle harkitulle ajattelulle. Jev on luotu nopeisiin, rajattuihin arvioihin.</p><h4>Kolme kysymystyyppiä</h4><p>Kysymys on yksi tilaa koskeva arvio, ja vastaus on arvo, jota koodi vertaa kynnykseen, lajittelee tai välittää eteenpäin.</p><ol><li><strong>Choice – vaihtoehdon valinta.</strong> Yhteydenoton osasto, tuoteluokka tai koodijakson kieli. Vaihtoehdot ovat ”vaihtoehto → kuvaus” -sanakirja, enintään 255 kappaletta. Vastauksessa ovat valittu <code>choice</code>, kaikkien vaihtoehtojen <code>probabilities</code> (yhteensä 1) ja varmuus <code>confidence</code>. Jos luettelo ei ehkä kata kaikkia tapauksia, lisää ”muu” tai ”ei mikään näistä”.</li><li><strong>Score – arvio asteikolla.</strong> Sijainti itse kuvaamallasi järjestetyllä asteikolla: virheen vakavuus, asiakkaan ärtymys tai taitotaso. Tasoja on 2–10 alimmasta ylimpään; malli arvioi jokaisen erikseen näkemättä sen numeroa tai naapuritasoja. Vastauksessa ovat <code>score</code> (tasojen numeroiden ja niitä vastaavien todennäköisyyksien tulojen summa, joten arvo voi olla tasojen välissä), tasokuvaukset sisältävä <code>legend</code>, <code>probabilities</code> ja <code>confidence</code>.</li><li><strong>Noul – kyllä tai ei.</strong> Pitääkö väite paikkansa. Vastaus <code>noul</code> on ”kyllä”-vastauksen todennäköisyys välillä 0–1: lähellä 1:tä on varma ”kyllä”, lähellä 0:aa varma ”ei” ja lähellä 0,5:tä malli epäröi. Erillistä <code>confidence</code>-arvoa ei ole: yksi luku kuvaa koko vastauksen. Valinnainen <code>criteria</code> täsmentää, mikä lasketaan ”kyllä”- ja mikä ”ei”-vastaukseksi.</li></ol><p>Valintaperuste: tunnetut järjestämättömät vaihtoehdot – choice; jatkumon portaat – score; puhdas ”kyllä/ei”, jossa itse todennäköisyys ratkaisee – noul. Noul 0,5 tarkoittaa ”kyllä”- ja ”ei”-vastauksen tasaisia mahdollisuuksia, ei ”keskitasoa”: astetta mittaa score. Kahdesta sopivasta tyypistä valitse se, jonka perusteella koodi toimii heti: choice – haarat, score – kynnys, noul – <code>if</code>.</p><p>Tyyppejä voi yhdistää samassa pyynnössä. Vastaus on aina rajattu vaihtoehtoihisi eikä riipu muista kysymyksistä: kysymyksiä voi lisätä ja poistaa muiden vastausten muuttumatta.</p><h4>Tila</h4><p>Tila on mallin arvioitava kohde: asiakkaan viesti, asiakirjajakso, tietokannan tietue tai sovelluksesi tila.</p><ul><li><strong>Merkkijono</strong>, kun tekstiä on yksi: viesti, artikkeli tai katkelma.</li><li><strong>Objekti</strong>: nimetyt kentät, toisiinsa liittyvät tietueet tai sovelluksen tila. TypeSafe suosittelee objektia useimpiin pyyntöihin: jokaisella osalla on selkeä nimi.</li><li><strong>Taulukko</strong>: viestien tai tietueiden sarja.</li></ul><p>Valmistele tila kuten aineisto asiantuntijoille: kokoa viestit, tilaus ja palautussäännöt yhteen, jos päätös edellyttää niiden vertailua. Pidä sisältö tilassa ja arviot kysymyksissä. Jos kysymys koskee yhtä tilan osaa, nimeä sen polku käänteisten heittomerkkien sisällä, esimerkiksi <code>ticket.messages[0].text</code>.</p><h4>Kysymysten laatiminen</h4><ul><li><strong>Yksi nopea arvio kysymystä kohden.</strong> Hyvä kysymys on sellainen, johon asiantunteva ihminen vastaa sopivalla kontekstilla sekunnissa: ”Ilmaiseeko viesti kiireellisyyttä?” ”Analysoi viesti ja päätä, mitä tehdä” vaatii jo hidasta päättelyä ja on jaettava yksinkertaisiin kysymyksiin.</li><li><strong>Koko kysymys kenttään <code>instructions</code>.</strong> Kysymysavain, kuten <code>refund_requested</code>, on vain koodiasi varten eikä sitä välitetä mallille.</li><li><strong>Kaikki saman tilan kysymykset yhdessä pyynnössä.</strong> Malli arvioi ne rinnakkain: TypeSafen mukaan lisäkysymykset eivät juuri pidennä vastausaikaa ja maksavat vain omat tokeninsa. ”Varmuuden vuoksi” esitetty kysymys on lähes ilmainen – koodi päättää itse, mitä vastauksia tarvitaan.</li><li><strong>Vaativa arvio osiin.</strong> ”Arvioi startup-hakemus” -pyynnön sijaan kysy erikseen markkinan koosta, teknisestä toteutettavuudesta ja eroista kilpailijoihin ja laske lopputulos koodissa painoilla. Painopisteiden muuttuessa muutat painoja etkä kirjoita kysymystä uudelleen.</li><li><strong>Riippuvat kysymykset toiseen pyyntöön.</strong> Saman pyynnön vastaukset eivät toimi toistensa kontekstina. Toinen pyyntö tarvitaan vain, jos sitä ei voi koostaa ilman ensimmäistä vastausta: tietoja on ladattava tai seuraavan kysymyksen vaihtoehdot valittava.</li><li><strong>Pitkä kysymys objektina.</strong> <code>instructions</code> ja <code>criteria</code> ovat tavallisesti merkkijonoja mutta voivat olla objekti tai taulukko: kysymys yhdessä kentässä ja tiedot muissa. Näin ansioluetteloa voi verrata tietokantatietueisiin yhdellä kysymyksellä.</li></ul><h4>Varmuus</h4><p>Tyypeissä choice ja score <code>confidence</code> välillä 0–1 osoittaa, kuinka keskittynyt todennäköisyys on yhteen vastaukseen: 1 tarkoittaa kaikkea yhdellä vaihtoehdolla ja 0 tasajakoa kaikille. Tyypissä score viereinen taso alentaa varmuutta vähemmän kuin kaukainen. Tyypissä noul varmuus on itse arvo: mitä kauempana 0,5:stä, sitä varmempi vastaus.</p><p>TypeSafe suosittelee kolmea aluetta:</p><ol><li><strong>Suuri varmuus</strong> – toimi automaattisesti.</li><li><strong>Keskisuuri varmuus</strong> – toimi varovasti, esimerkiksi pyydä käyttäjän vahvistus.</li><li><strong>Pieni varmuus</strong> – anna tapaus ihmiselle, täsmennä pyyntöä tai käytä varareittiä, kuten tehokkaampaa päättelymallia.</li></ol><p>Mitä kalliimpi virhe, sitä tiukempi kynnys: peruuttamattomissa toimissa korkeampi kuin lukemisessa. Vastaus kertoo valinnan ja varmuus sen, kannattaako toimia. Valitse kynnykset omilla aineistoillasi vertaamalla varmuutta tarkkuuteen.</p><h4>Järjestelmän rakentaminen Jevin ympärille</h4><p>Jev on suunniteltu ohjelmiin, joissa koodi ohjaa prosessia ja malli vastaa rajattuihin merkityskysymyksiin, ei agenteille, jotka valitsevat seuraavan vaiheen itse ja voivat eksyä jokaisella kierroksella. TypeSafen kahdeksan suunnitteluvaihetta:</p><ol><li>Tee koodilla kaikki, minkä voi tehdä koodilla – luotettavasti ja edullisesti.</li><li>Tilaan vain nykyisten kysymysten tarvitsema sisältö; tuoreet faktat omasta tietopohjasta, eivät mallin muistista.</li><li>Tilaan rakenne: sisäkkäinen JSON ja kysymykseen tarvittavan kentän polku käänteisissä heittomerkeissä, jos se vähentää monitulkintaisuutta.</li><li>Mahdollisimman rajatut ja konkreettiset kysymykset – TypeSafen mukaan ehkä tärkein sääntö: laaja kysymys kätkee useita arvioita yhteen vastaukseen.</li><li>Kysymyksiin rakenne: itse kysymys lyhyenä; selitykset, esimerkit ja oman tietokannan arvot objektin <code>instructions</code> tai <code>criteria</code> viereisiin kenttiin, ei yhteen pitkään merkkijonoon.</li><li>Monta riippumatonta saman tilan kysymystä yhdessä pyynnössä – enemmän hyötyä jokaista dollaria kohden.</li><li>Koodi yhdistää vastaukset säännöillä, painotetulla summalla tai perinteisen koneoppimismallin piirteinä.</li><li>Haarautuminen varmuuden mukaan: epävarmat tapaukset ihmiselle tai päättelymallille.</li></ol><p>Jev ei ole chat eikä koodin täydennysmalli, eikä sitä voi sijoittaa ohjelmointiagenttiin kielimallin tilalle. Agentti voi kuitenkin kirjoittaa sinulle koodin, joka kutsuu Jeviä siellä, missä tarvitaan nopea kalibroitu vastaus.</p><h4>Käyttökohteet</h4><ul><li><strong>Tausta-automaatio</strong> – päätökset, joita suoritetaan miljoona kertaa ilman läsnä olevaa ihmistä.</li><li><strong>Reaaliaikaisuus</strong> – TypeSafen mukaan useimmat pyynnöt valmistuvat noin 100 ms:ssa: tämä riittää lennossa tapahtuvaan käsittelyyn ja käyttöliittymiin.</li><li><strong>Suuret tietoaineistot</strong> – valtavien aineistokokoelmien haku, agenttien työlokien merkintä ja ennusteiden piirteet.</li><li><strong>Muiden mallien tarkistus</strong> – pyynnöt, poiminnat, päättelyt ja työkalukutsut: rajoitusten kierto, viittausvirheet ja keksityt tiedot.</li><li><strong>Haku ja järjestäminen</strong> – ”kysely – ehdokas” -parin relevanssi, uudelleenjärjestäminen ja kontekstin valinta.</li><li><strong>Haarautuminen aikomuksen perusteella</strong> – mitä käyttäjä haluaa ja mikä käsittelijä tarvitaan: yksinkertainen logiikka, erikoismalli tai ihminen; aihe, vaikeus ja riski määräävät, mille kielimallille pyyntö annetaan.</li><li><strong>Suojatarkistukset</strong> – kielimallin syöte, tuloste ja työkalukutsut: upotetut ohjeet, sääntörikkomukset ja henkilötietovuodot.</li><li><strong>Tuki</strong> – yhteydenoton aihe ja aikomus, kiireellisyys, ärtymys, poistumisen riski, palautuspyyntö ja jono.</li><li><strong>Moderointi</strong> – oman alustan sääntöjen mukaan: toksisuus, kiusaaminen, roskaposti, petokset, vaaralliset neuvot ja henkilötiedot; vakavuuden ja varmuuden perusteella hyväksy, varoita, tarkista tai estä.</li><li><strong>Toimialat</strong> – vakuutustapaukset, taloustutkinnat ja KYC, sopimukset ja mainonta, tuotekortit, rekrytointi, liidit, pelit, riskit, kysynnän ennusteet, tietograafit, tieteelliset katsaukset ja koodin merkitystarkistukset CI:ssä.</li></ul><h4>Ominaisuudet</h4><ul><li><strong><code>jev-latest</code></strong> on viimeisimmän vakaan version alias, tällä hetkellä Jev 1.13; vastanneen version näkee kentästä <code>model</code>, esimerkiksi <code>jev-1.13.0</code>. Uuden version ilmestyessä alias siirtyy siihen, ja vastaukset voivat muuttua ilman omia muutoksiasi – seuraa kenttää, jos kynnykset on valittu tietylle versiolle.</li><li><strong>Konteksti</strong> on 64K tokenia pyyntöä kohden: tila ja kaikki kysymykset yhdessä; tila ja pisin kysymys enintään 32K. Malli lukee tilan kerran ja tarkistaa kaikki kysymykset sitä vasten rinnakkain.</li><li><strong>Syöte</strong> on vain tekstiä: merkkijono, JSON-objekti tai tekstitaulukko. Kuvia, ääntä ja videota ei vielä tueta – muunna ne tekstiksi etukäteen.</li><li><strong>Kieli</strong>: pääasiallinen koulutuskieli on englanti, jolla tarkkuus on tällä hetkellä paras. Malli vastaanottaa muita kieliä, myös kiinaa, japania ja koreaa, mutta tarkkuus on heikompi – tarkista omilla aineistoillasi.</li><li><strong>Hinnat ja laskutus Ailoot API:ssa</strong> — ehdot riippuvat valitusta metodista, ja ne on ilmoitettu sen kortissa.</li><li><strong>Asetukset</strong>: Jeviä ei jatkokouluteta asiakkaan aineistolla: omat aineistot kenttään <code>state</code>, alan säännöt kenttiin <code>instructions</code> ja <code>criteria</code>.</li><li><strong>Tiedot</strong>: TypeSafe ilmoittaa, ettei Jeviä kouluteta asiakkaiden pyynnöillä eikä vastauksilla.</li></ul><h4>Jev 1.13:n tunnetut heikkoudet</h4><p>TypeSafe luettelee avoimesti nykyversion heikkoudet ja lupaa korjata monia seuraavissa versioissa. Malli on nopea, kalibroitu ja arvioi hyvin terveen järjen perusteella, mutta:</p><ol><li><strong>Lukee kirjaimellisesti.</strong> Se vastaa kirjoitettuun kysymykseen, ei tarkoitettuun: varaukset, kiellot ja epäsuorat ehdot ymmärretään sanatarkasti. Kirjoita täsmällinen ehto ja rajatapaukset kenttään <code>criteria</code>; jaa väistämätön tulkinta kahdeksi kirjaimelliseksi kysymykseksi.</li><li><strong>Ei laskin.</strong> Merkkien, toistojen ja luetteloelementtien laskeminen on epäluotettavaa, ja virhe kasvaa koon mukana – laske koodissa ja esitä yksi kysymys ehdokasta kohden. Malli ymmärtää hex- tai RGB-värejä huonommin kuin värinimiä. <code>score</code> sopii kynnykseen, ei tasojen väliseen tarkkaan lukuun.</li><li><strong>Päivämäärät ja aika.</strong> Päivämäärien järjestys, niiden välinen aika ja kuuluminen ajanjaksoon ovat epäluotettavia, etenkin yhdistetyillä formaateilla ja suhteellisilla päivämäärillä. Poimi päivämäärän osat choice-tyypillä ja ”ei määritetty” -vaihtoehdolla ja vertaa koodissa.</li><li><strong>Epäsuoruus.</strong> Kaksoiskiellot ja ominaisuuden ominaisuutta koskevat kysymykset heikentävät tarkkuutta. Kirjoita suoraan ja nimeä tilan osat.</li><li><strong>Ylimääräinen tilassa.</strong> Asiaankuulumaton teksti heikentää tarkkuutta. Suodata koodissa tai, jos se ei ole mahdollista, karsi epäolennaiset noul-kysymyksillä.</li><li><strong>Vihamielinen teksti.</strong> Malli ei oletuksena odota tilaan kätkettyjä ansaohjeita: upotettu ohje tai omasta luokituksestaan väittelevä teksti voi siirtää vastausta. Kirjoita täsmälliset kriteerit ja tarkista rajatapaukset ennen käynnistystä.</li><li><strong>Ristiriidat.</strong> Jos <code>instructions</code> ja <code>criteria</code> pyytävät eri asioita – esimerkiksi noul-tyypin ”kyllä” kuvataan ”ei”-vastauksena – tarkkuus laskee. Kriteerit jatkavat kysymystä.</li><li><strong>Vaihtoehtojen järjestys.</strong> Malli kallistuu joskus ensimmäiseen choice-vaihtoehtoon. Vaihda järjestystä ja tarkista, ettei vastaus muutu.</li><li><strong>Generointi.</strong> Jeviä ei ole koulutettu kirjoittamaan tekstiä. Tietojen poiminnassa etsi ehdokkaat säännöllisellä lausekkeella tai generatiivisella mallilla ja anna Jevin valita oikea choice-tyypillä.</li></ol>",
  "aboutText": "Jev on TypeSafen lippulaivamalli ja uuden **System One** -luokan ensimmäinen malli. Se ei kirjoita tekstiä, vaan tekee nopeasti päätöksiä, joita ohjelma voi käyttää suoraan: annat **tilan** (`state`), tekstin tai JSON-datan, ja joukon **kysymyksiä**, ja saat vastaukseksi tyypitetyt arvot kalibroituine todennäköisyyksineen.\n\nKielimallit kirjoittavat sanoja ihmisille, kun taas Jev on TypeSafen mukaan lähempänä koodia: vastaus on heti koodin tarvitsemaa muotoa, nopeus suuri eikä yksikään arvo jää määritettyjen vaihtoehtojen ulkopuolelle. Malli on suunniteltu antamaan vakaita vastauksia toistuvissa pyynnöissä.\n\n### Miten System One eroaa kielimallista\n\n- **Ei generoi.** Jev ei kirjoita käyttäjävastauksia, koodia eikä selitä päättelyä. Määrität mahdolliset vastaukset itse yhdellä kolmesta kysymystyypistä.\n- **Koulutettu kalibroituihin päätöksiin.** TypeSafe kouluttaa mallia RLCD-menetelmällä (Reinforcement Learning for Calibrated Decisions): todennäköisyydet sovitetaan todellisiin lopputuloksiin ja ne kuvaavat epävarmuutta. Suuresta joukosta vastauksia, joiden todennäköisyys on 0,8, noin 80%:n tulisi olla oikein. Kalibrointi on suuren otoksen ominaisuus, ei yksittäisen vastauksen oikeellisuuden takuu.\n- **Eri koulutustavoite.** Chat-malleja koulutetaan miellyttämään ihmisiä (RLHF), mikä TypeSafen havaintojen mukaan kannustaa myötäilyyn ja varman kuuloisiin virheisiin. Yksi RLHF:n tekijöistä, Diogo Almeida, on TypeSafen toinen perustaja.\n\nNimi viittaa Daniel Kahnemanin ”Ajattelu, nopeasti ja hitaasti” -kirjan ”järjestelmään 1”: nopeaan intuitiiviseen arvioon vastakohtana ”järjestelmän 2” hitaalle harkitulle ajattelulle. Jev on luotu nopeisiin, rajattuihin arvioihin.\n\n### Kolme kysymystyyppiä\n\nKysymys on yksi tilaa koskeva arvio, ja vastaus on arvo, jota koodi vertaa kynnykseen, lajittelee tai välittää eteenpäin.\n\n1. **Choice – vaihtoehdon valinta.** Yhteydenoton osasto, tuoteluokka tai koodijakson kieli. Vaihtoehdot ovat ”vaihtoehto → kuvaus” -sanakirja, enintään 255 kappaletta. Vastauksessa ovat valittu `choice`, kaikkien vaihtoehtojen `probabilities` (yhteensä 1) ja varmuus `confidence`. Jos luettelo ei ehkä kata kaikkia tapauksia, lisää ”muu” tai ”ei mikään näistä”.\n2. **Score – arvio asteikolla.** Sijainti itse kuvaamallasi järjestetyllä asteikolla: virheen vakavuus, asiakkaan ärtymys tai taitotaso. Tasoja on 2–10 alimmasta ylimpään; malli arvioi jokaisen erikseen näkemättä sen numeroa tai naapuritasoja. Vastauksessa ovat `score` (tasojen numeroiden ja niitä vastaavien todennäköisyyksien tulojen summa, joten arvo voi olla tasojen välissä), tasokuvaukset sisältävä `legend`, `probabilities` ja `confidence`.\n3. **Noul – kyllä tai ei.** Pitääkö väite paikkansa. Vastaus `noul` on ”kyllä”-vastauksen todennäköisyys välillä 0–1: lähellä 1:tä on varma ”kyllä”, lähellä 0:aa varma ”ei” ja lähellä 0,5:tä malli epäröi. Erillistä `confidence`-arvoa ei ole: yksi luku kuvaa koko vastauksen. Valinnainen `criteria` täsmentää, mikä lasketaan ”kyllä”- ja mikä ”ei”-vastaukseksi.\n\nValintaperuste: tunnetut järjestämättömät vaihtoehdot – choice; jatkumon portaat – score; puhdas ”kyllä/ei”, jossa itse todennäköisyys ratkaisee – noul. Noul 0,5 tarkoittaa ”kyllä”- ja ”ei”-vastauksen tasaisia mahdollisuuksia, ei ”keskitasoa”: astetta mittaa score. Kahdesta sopivasta tyypistä valitse se, jonka perusteella koodi toimii heti: choice – haarat, score – kynnys, noul – `if`.\n\nTyyppejä voi yhdistää samassa pyynnössä. Vastaus on aina rajattu vaihtoehtoihisi eikä riipu muista kysymyksistä: kysymyksiä voi lisätä ja poistaa muiden vastausten muuttumatta.\n\n### Tila\n\nTila on mallin arvioitava kohde: asiakkaan viesti, asiakirjajakso, tietokannan tietue tai sovelluksesi tila.\n\n- **Merkkijono**, kun tekstiä on yksi: viesti, artikkeli tai katkelma.\n- **Objekti**: nimetyt kentät, toisiinsa liittyvät tietueet tai sovelluksen tila. TypeSafe suosittelee objektia useimpiin pyyntöihin: jokaisella osalla on selkeä nimi.\n- **Taulukko**: viestien tai tietueiden sarja.\n\nValmistele tila kuten aineisto asiantuntijoille: kokoa viestit, tilaus ja palautussäännöt yhteen, jos päätös edellyttää niiden vertailua. Pidä sisältö tilassa ja arviot kysymyksissä. Jos kysymys koskee yhtä tilan osaa, nimeä sen polku käänteisten heittomerkkien sisällä, esimerkiksi `ticket.messages[0].text`.\n\n### Kysymysten laatiminen\n\n- **Yksi nopea arvio kysymystä kohden.** Hyvä kysymys on sellainen, johon asiantunteva ihminen vastaa sopivalla kontekstilla sekunnissa: ”Ilmaiseeko viesti kiireellisyyttä?” ”Analysoi viesti ja päätä, mitä tehdä” vaatii jo hidasta päättelyä ja on jaettava yksinkertaisiin kysymyksiin.\n- **Koko kysymys kenttään `instructions`.** Kysymysavain, kuten `refund_requested`, on vain koodiasi varten eikä sitä välitetä mallille.\n- **Kaikki saman tilan kysymykset yhdessä pyynnössä.** Malli arvioi ne rinnakkain: TypeSafen mukaan lisäkysymykset eivät juuri pidennä vastausaikaa ja maksavat vain omat tokeninsa. ”Varmuuden vuoksi” esitetty kysymys on lähes ilmainen – koodi päättää itse, mitä vastauksia tarvitaan.\n- **Vaativa arvio osiin.** ”Arvioi startup-hakemus” -pyynnön sijaan kysy erikseen markkinan koosta, teknisestä toteutettavuudesta ja eroista kilpailijoihin ja laske lopputulos koodissa painoilla. Painopisteiden muuttuessa muutat painoja etkä kirjoita kysymystä uudelleen.\n- **Riippuvat kysymykset toiseen pyyntöön.** Saman pyynnön vastaukset eivät toimi toistensa kontekstina. Toinen pyyntö tarvitaan vain, jos sitä ei voi koostaa ilman ensimmäistä vastausta: tietoja on ladattava tai seuraavan kysymyksen vaihtoehdot valittava.\n- **Pitkä kysymys objektina.** `instructions` ja `criteria` ovat tavallisesti merkkijonoja mutta voivat olla objekti tai taulukko: kysymys yhdessä kentässä ja tiedot muissa. Näin ansioluetteloa voi verrata tietokantatietueisiin yhdellä kysymyksellä.\n\n### Varmuus\n\nTyypeissä choice ja score `confidence` välillä 0–1 osoittaa, kuinka keskittynyt todennäköisyys on yhteen vastaukseen: 1 tarkoittaa kaikkea yhdellä vaihtoehdolla ja 0 tasajakoa kaikille. Tyypissä score viereinen taso alentaa varmuutta vähemmän kuin kaukainen. Tyypissä noul varmuus on itse arvo: mitä kauempana 0,5:stä, sitä varmempi vastaus.\n\nTypeSafe suosittelee kolmea aluetta:\n\n1. **Suuri varmuus** – toimi automaattisesti.\n2. **Keskisuuri varmuus** – toimi varovasti, esimerkiksi pyydä käyttäjän vahvistus.\n3. **Pieni varmuus** – anna tapaus ihmiselle, täsmennä pyyntöä tai käytä varareittiä, kuten tehokkaampaa päättelymallia.\n\nMitä kalliimpi virhe, sitä tiukempi kynnys: peruuttamattomissa toimissa korkeampi kuin lukemisessa. Vastaus kertoo valinnan ja varmuus sen, kannattaako toimia. Valitse kynnykset omilla aineistoillasi vertaamalla varmuutta tarkkuuteen.\n\n### Järjestelmän rakentaminen Jevin ympärille\n\nJev on suunniteltu ohjelmiin, joissa koodi ohjaa prosessia ja malli vastaa rajattuihin merkityskysymyksiin, ei agenteille, jotka valitsevat seuraavan vaiheen itse ja voivat eksyä jokaisella kierroksella. TypeSafen kahdeksan suunnitteluvaihetta:\n\n1. Tee koodilla kaikki, minkä voi tehdä koodilla – luotettavasti ja edullisesti.\n2. Tilaan vain nykyisten kysymysten tarvitsema sisältö; tuoreet faktat omasta tietopohjasta, eivät mallin muistista.\n3. Tilaan rakenne: sisäkkäinen JSON ja kysymykseen tarvittavan kentän polku käänteisissä heittomerkeissä, jos se vähentää monitulkintaisuutta.\n4. Mahdollisimman rajatut ja konkreettiset kysymykset – TypeSafen mukaan ehkä tärkein sääntö: laaja kysymys kätkee useita arvioita yhteen vastaukseen.\n5. Kysymyksiin rakenne: itse kysymys lyhyenä; selitykset, esimerkit ja oman tietokannan arvot objektin `instructions` tai `criteria` viereisiin kenttiin, ei yhteen pitkään merkkijonoon.\n6. Monta riippumatonta saman tilan kysymystä yhdessä pyynnössä – enemmän hyötyä jokaista dollaria kohden.\n7. Koodi yhdistää vastaukset säännöillä, painotetulla summalla tai perinteisen koneoppimismallin piirteinä.\n8. Haarautuminen varmuuden mukaan: epävarmat tapaukset ihmiselle tai päättelymallille.\n\nJev ei ole chat eikä koodin täydennysmalli, eikä sitä voi sijoittaa ohjelmointiagenttiin kielimallin tilalle. Agentti voi kuitenkin kirjoittaa sinulle koodin, joka kutsuu Jeviä siellä, missä tarvitaan nopea kalibroitu vastaus.\n\n### Käyttökohteet\n\n- **Tausta-automaatio** – päätökset, joita suoritetaan miljoona kertaa ilman läsnä olevaa ihmistä.\n- **Reaaliaikaisuus** – TypeSafen mukaan useimmat pyynnöt valmistuvat noin 100 ms:ssa: tämä riittää lennossa tapahtuvaan käsittelyyn ja käyttöliittymiin.\n- **Suuret tietoaineistot** – valtavien aineistokokoelmien haku, agenttien työlokien merkintä ja ennusteiden piirteet.\n- **Muiden mallien tarkistus** – pyynnöt, poiminnat, päättelyt ja työkalukutsut: rajoitusten kierto, viittausvirheet ja keksityt tiedot.\n- **Haku ja järjestäminen** – ”kysely – ehdokas” -parin relevanssi, uudelleenjärjestäminen ja kontekstin valinta.\n- **Haarautuminen aikomuksen perusteella** – mitä käyttäjä haluaa ja mikä käsittelijä tarvitaan: yksinkertainen logiikka, erikoismalli tai ihminen; aihe, vaikeus ja riski määräävät, mille kielimallille pyyntö annetaan.\n- **Suojatarkistukset** – kielimallin syöte, tuloste ja työkalukutsut: upotetut ohjeet, sääntörikkomukset ja henkilötietovuodot.\n- **Tuki** – yhteydenoton aihe ja aikomus, kiireellisyys, ärtymys, poistumisen riski, palautuspyyntö ja jono.\n- **Moderointi** – oman alustan sääntöjen mukaan: toksisuus, kiusaaminen, roskaposti, petokset, vaaralliset neuvot ja henkilötiedot; vakavuuden ja varmuuden perusteella hyväksy, varoita, tarkista tai estä.\n- **Toimialat** – vakuutustapaukset, taloustutkinnat ja KYC, sopimukset ja mainonta, tuotekortit, rekrytointi, liidit, pelit, riskit, kysynnän ennusteet, tietograafit, tieteelliset katsaukset ja koodin merkitystarkistukset CI:ssä.\n\n### Ominaisuudet\n\n- **`jev-latest`** on viimeisimmän vakaan version alias, tällä hetkellä Jev 1.13; vastanneen version näkee kentästä `model`, esimerkiksi `jev-1.13.0`. Uuden version ilmestyessä alias siirtyy siihen, ja vastaukset voivat muuttua ilman omia muutoksiasi – seuraa kenttää, jos kynnykset on valittu tietylle versiolle.\n- **Konteksti** on 64K tokenia pyyntöä kohden: tila ja kaikki kysymykset yhdessä; tila ja pisin kysymys enintään 32K. Malli lukee tilan kerran ja tarkistaa kaikki kysymykset sitä vasten rinnakkain.\n- **Syöte** on vain tekstiä: merkkijono, JSON-objekti tai tekstitaulukko. Kuvia, ääntä ja videota ei vielä tueta – muunna ne tekstiksi etukäteen.\n- **Kieli**: pääasiallinen koulutuskieli on englanti, jolla tarkkuus on tällä hetkellä paras. Malli vastaanottaa muita kieliä, myös kiinaa, japania ja koreaa, mutta tarkkuus on heikompi – tarkista omilla aineistoillasi.\n- **Hinnat ja laskutus Ailoot API:ssa** — ehdot riippuvat valitusta metodista, ja ne on ilmoitettu sen kortissa.\n- **Asetukset**: Jeviä ei jatkokouluteta asiakkaan aineistolla: omat aineistot kenttään `state`, alan säännöt kenttiin `instructions` ja `criteria`.\n- **Tiedot**: TypeSafe ilmoittaa, ettei Jeviä kouluteta asiakkaiden pyynnöillä eikä vastauksilla.\n\n### Jev 1.13:n tunnetut heikkoudet\n\nTypeSafe luettelee avoimesti nykyversion heikkoudet ja lupaa korjata monia seuraavissa versioissa. Malli on nopea, kalibroitu ja arvioi hyvin terveen järjen perusteella, mutta:\n\n1. **Lukee kirjaimellisesti.** Se vastaa kirjoitettuun kysymykseen, ei tarkoitettuun: varaukset, kiellot ja epäsuorat ehdot ymmärretään sanatarkasti. Kirjoita täsmällinen ehto ja rajatapaukset kenttään `criteria`; jaa väistämätön tulkinta kahdeksi kirjaimelliseksi kysymykseksi.\n2. **Ei laskin.** Merkkien, toistojen ja luetteloelementtien laskeminen on epäluotettavaa, ja virhe kasvaa koon mukana – laske koodissa ja esitä yksi kysymys ehdokasta kohden. Malli ymmärtää hex- tai RGB-värejä huonommin kuin värinimiä. `score` sopii kynnykseen, ei tasojen väliseen tarkkaan lukuun.\n3. **Päivämäärät ja aika.** Päivämäärien järjestys, niiden välinen aika ja kuuluminen ajanjaksoon ovat epäluotettavia, etenkin yhdistetyillä formaateilla ja suhteellisilla päivämäärillä. Poimi päivämäärän osat choice-tyypillä ja ”ei määritetty” -vaihtoehdolla ja vertaa koodissa.\n4. **Epäsuoruus.** Kaksoiskiellot ja ominaisuuden ominaisuutta koskevat kysymykset heikentävät tarkkuutta. Kirjoita suoraan ja nimeä tilan osat.\n5. **Ylimääräinen tilassa.** Asiaankuulumaton teksti heikentää tarkkuutta. Suodata koodissa tai, jos se ei ole mahdollista, karsi epäolennaiset noul-kysymyksillä.\n6. **Vihamielinen teksti.** Malli ei oletuksena odota tilaan kätkettyjä ansaohjeita: upotettu ohje tai omasta luokituksestaan väittelevä teksti voi siirtää vastausta. Kirjoita täsmälliset kriteerit ja tarkista rajatapaukset ennen käynnistystä.\n7. **Ristiriidat.** Jos `instructions` ja `criteria` pyytävät eri asioita – esimerkiksi noul-tyypin ”kyllä” kuvataan ”ei”-vastauksena – tarkkuus laskee. Kriteerit jatkavat kysymystä.\n8. **Vaihtoehtojen järjestys.** Malli kallistuu joskus ensimmäiseen choice-vaihtoehtoon. Vaihda järjestystä ja tarkista, ettei vastaus muutu.\n9. **Generointi.** Jeviä ei ole koulutettu kirjoittamaan tekstiä. Tietojen poiminnassa etsi ehdokkaat säännöllisellä lausekkeella tai generatiivisella mallilla ja anna Jevin valita oikea choice-tyypillä.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "543151ab1952bca533eb0b43308851567dc3718a574b555d6c677a1dd4dc1f0d",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fi",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">TS</span><h2 id=\"sheet-title\">jev-latest</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Sulje\">×</button></div><div class=\"idline\"><span>TypeSafe /</span><code>jev-latest</code><button type=\"button\" id=\"copy-id\">Kopioi ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Mallikortin osiot\"><button type=\"button\" data-card-jump=\"overview\">Aloitus</button><button type=\"button\" data-card-jump=\"methods\">Syötteet &amp; menetelmät</button><button type=\"button\" data-card-jump=\"pricing\">Hinnoittelu</button><button type=\"button\" data-card-jump=\"examples\">Esimerkit</button><button type=\"button\" data-card-jump=\"results\">Tulokset</button><button type=\"button\" data-card-jump=\"aliases\">Aliakset</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-menetelmät\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|systemone|/v1/systemone|jev-latest\">System One</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Aloitus</h3><p class=\"mdesc-full\">TypeSafen päätösmalli: se ei kirjoita tekstiä, vaan vastaa tekstiä tai JSON-dataa koskeviin tyypitettyihin kysymyksiin valitsemalla vaihtoehdon, arvioimalla asteikolla tai antamalla kyllä/ei-tuloksen todennäköisyyksineen. Se sopii reititykseen, yhteydenottojen lajitteluun, moderointiin ja pisteytykseen; saman pyynnön kaikki kysymykset arvioidaan rinnakkain.</p><dl class=\"card-io\" data-card-io><div><dt>Hyväksytyt syötteet</dt><dd>Teksti</dd></div><div><dt>Tulokset</dt><dd>structured</dd></div></dl><details class=\"card-about\"><summary>Tietoa mallista</summary><p class=\"note-s\" data-model-method-boundary>Tämä kuvaus kattaa mallin ominaisuudet. Ailootissa saatavilla olevat syötteet, tulosteet ja asetukset luetellaan alla valitulle menetelmälle.</p><div class=\"mabout\" id=\"m-about\"><p>Jev on TypeSafen lippulaivamalli ja uuden <strong>System One</strong> -luokan ensimmäinen malli. Se ei kirjoita tekstiä, vaan tekee nopeasti päätöksiä, joita ohjelma voi käyttää suoraan: annat <strong>tilan</strong> (<code>state</code>), tekstin tai JSON-datan, ja joukon <strong>kysymyksiä</strong>, ja saat vastaukseksi tyypitetyt arvot kalibroituine todennäköisyyksineen.</p><p>Kielimallit kirjoittavat sanoja ihmisille, kun taas Jev on TypeSafen mukaan lähempänä koodia: vastaus on heti koodin tarvitsemaa muotoa, nopeus suuri eikä yksikään arvo jää määritettyjen vaihtoehtojen ulkopuolelle. Malli on suunniteltu antamaan vakaita vastauksia toistuvissa pyynnöissä.</p><h4>Miten System One eroaa kielimallista</h4><ul><li><strong>Ei generoi.</strong> Jev ei kirjoita käyttäjävastauksia, koodia eikä selitä päättelyä. Määrität mahdolliset vastaukset itse yhdellä kolmesta kysymystyypistä.</li><li><strong>Koulutettu kalibroituihin päätöksiin.</strong> TypeSafe kouluttaa mallia RLCD-menetelmällä (Reinforcement Learning for Calibrated Decisions): todennäköisyydet sovitetaan todellisiin lopputuloksiin ja ne kuvaavat epävarmuutta. Suuresta joukosta vastauksia, joiden todennäköisyys on 0,8, noin 80%:n tulisi olla oikein. Kalibrointi on suuren otoksen ominaisuus, ei yksittäisen vastauksen oikeellisuuden takuu.</li><li><strong>Eri koulutustavoite.</strong> Chat-malleja koulutetaan miellyttämään ihmisiä (RLHF), mikä TypeSafen havaintojen mukaan kannustaa myötäilyyn ja varman kuuloisiin virheisiin. Yksi RLHF:n tekijöistä, Diogo Almeida, on TypeSafen toinen perustaja.</li></ul><p>Nimi viittaa Daniel Kahnemanin ”Ajattelu, nopeasti ja hitaasti” -kirjan ”järjestelmään 1”: nopeaan intuitiiviseen arvioon vastakohtana ”järjestelmän 2” hitaalle harkitulle ajattelulle. Jev on luotu nopeisiin, rajattuihin arvioihin.</p><h4>Kolme kysymystyyppiä</h4><p>Kysymys on yksi tilaa koskeva arvio, ja vastaus on arvo, jota koodi vertaa kynnykseen, lajittelee tai välittää eteenpäin.</p><ol><li><strong>Choice – vaihtoehdon valinta.</strong> Yhteydenoton osasto, tuoteluokka tai koodijakson kieli. Vaihtoehdot ovat ”vaihtoehto → kuvaus” -sanakirja, enintään 255 kappaletta. Vastauksessa ovat valittu <code>choice</code>, kaikkien vaihtoehtojen <code>probabilities</code> (yhteensä 1) ja varmuus <code>confidence</code>. Jos luettelo ei ehkä kata kaikkia tapauksia, lisää ”muu” tai ”ei mikään näistä”.</li><li><strong>Score – arvio asteikolla.</strong> Sijainti itse kuvaamallasi järjestetyllä asteikolla: virheen vakavuus, asiakkaan ärtymys tai taitotaso. Tasoja on 2–10 alimmasta ylimpään; malli arvioi jokaisen erikseen näkemättä sen numeroa tai naapuritasoja. Vastauksessa ovat <code>score</code> (tasojen numeroiden ja niitä vastaavien todennäköisyyksien tulojen summa, joten arvo voi olla tasojen välissä), tasokuvaukset sisältävä <code>legend</code>, <code>probabilities</code> ja <code>confidence</code>.</li><li><strong>Noul – kyllä tai ei.</strong> Pitääkö väite paikkansa. Vastaus <code>noul</code> on ”kyllä”-vastauksen todennäköisyys välillä 0–1: lähellä 1:tä on varma ”kyllä”, lähellä 0:aa varma ”ei” ja lähellä 0,5:tä malli epäröi. Erillistä <code>confidence</code>-arvoa ei ole: yksi luku kuvaa koko vastauksen. Valinnainen <code>criteria</code> täsmentää, mikä lasketaan ”kyllä”- ja mikä ”ei”-vastaukseksi.</li></ol><p>Valintaperuste: tunnetut järjestämättömät vaihtoehdot – choice; jatkumon portaat – score; puhdas ”kyllä/ei”, jossa itse todennäköisyys ratkaisee – noul. Noul 0,5 tarkoittaa ”kyllä”- ja ”ei”-vastauksen tasaisia mahdollisuuksia, ei ”keskitasoa”: astetta mittaa score. Kahdesta sopivasta tyypistä valitse se, jonka perusteella koodi toimii heti: choice – haarat, score – kynnys, noul – <code>if</code>.</p><p>Tyyppejä voi yhdistää samassa pyynnössä. Vastaus on aina rajattu vaihtoehtoihisi eikä riipu muista kysymyksistä: kysymyksiä voi lisätä ja poistaa muiden vastausten muuttumatta.</p><h4>Tila</h4><p>Tila on mallin arvioitava kohde: asiakkaan viesti, asiakirjajakso, tietokannan tietue tai sovelluksesi tila.</p><ul><li><strong>Merkkijono</strong>, kun tekstiä on yksi: viesti, artikkeli tai katkelma.</li><li><strong>Objekti</strong>: nimetyt kentät, toisiinsa liittyvät tietueet tai sovelluksen tila. TypeSafe suosittelee objektia useimpiin pyyntöihin: jokaisella osalla on selkeä nimi.</li><li><strong>Taulukko</strong>: viestien tai tietueiden sarja.</li></ul><p>Valmistele tila kuten aineisto asiantuntijoille: kokoa viestit, tilaus ja palautussäännöt yhteen, jos päätös edellyttää niiden vertailua. Pidä sisältö tilassa ja arviot kysymyksissä. Jos kysymys koskee yhtä tilan osaa, nimeä sen polku käänteisten heittomerkkien sisällä, esimerkiksi <code>ticket.messages[0].text</code>.</p><h4>Kysymysten laatiminen</h4><ul><li><strong>Yksi nopea arvio kysymystä kohden.</strong> Hyvä kysymys on sellainen, johon asiantunteva ihminen vastaa sopivalla kontekstilla sekunnissa: ”Ilmaiseeko viesti kiireellisyyttä?” ”Analysoi viesti ja päätä, mitä tehdä” vaatii jo hidasta päättelyä ja on jaettava yksinkertaisiin kysymyksiin.</li><li><strong>Koko kysymys kenttään <code>instructions</code>.</strong> Kysymysavain, kuten <code>refund_requested</code>, on vain koodiasi varten eikä sitä välitetä mallille.</li><li><strong>Kaikki saman tilan kysymykset yhdessä pyynnössä.</strong> Malli arvioi ne rinnakkain: TypeSafen mukaan lisäkysymykset eivät juuri pidennä vastausaikaa ja maksavat vain omat tokeninsa. ”Varmuuden vuoksi” esitetty kysymys on lähes ilmainen – koodi päättää itse, mitä vastauksia tarvitaan.</li><li><strong>Vaativa arvio osiin.</strong> ”Arvioi startup-hakemus” -pyynnön sijaan kysy erikseen markkinan koosta, teknisestä toteutettavuudesta ja eroista kilpailijoihin ja laske lopputulos koodissa painoilla. Painopisteiden muuttuessa muutat painoja etkä kirjoita kysymystä uudelleen.</li><li><strong>Riippuvat kysymykset toiseen pyyntöön.</strong> Saman pyynnön vastaukset eivät toimi toistensa kontekstina. Toinen pyyntö tarvitaan vain, jos sitä ei voi koostaa ilman ensimmäistä vastausta: tietoja on ladattava tai seuraavan kysymyksen vaihtoehdot valittava.</li><li><strong>Pitkä kysymys objektina.</strong> <code>instructions</code> ja <code>criteria</code> ovat tavallisesti merkkijonoja mutta voivat olla objekti tai taulukko: kysymys yhdessä kentässä ja tiedot muissa. Näin ansioluetteloa voi verrata tietokantatietueisiin yhdellä kysymyksellä.</li></ul><h4>Varmuus</h4><p>Tyypeissä choice ja score <code>confidence</code> välillä 0–1 osoittaa, kuinka keskittynyt todennäköisyys on yhteen vastaukseen: 1 tarkoittaa kaikkea yhdellä vaihtoehdolla ja 0 tasajakoa kaikille. Tyypissä score viereinen taso alentaa varmuutta vähemmän kuin kaukainen. Tyypissä noul varmuus on itse arvo: mitä kauempana 0,5:stä, sitä varmempi vastaus.</p><p>TypeSafe suosittelee kolmea aluetta:</p><ol><li><strong>Suuri varmuus</strong> – toimi automaattisesti.</li><li><strong>Keskisuuri varmuus</strong> – toimi varovasti, esimerkiksi pyydä käyttäjän vahvistus.</li><li><strong>Pieni varmuus</strong> – anna tapaus ihmiselle, täsmennä pyyntöä tai käytä varareittiä, kuten tehokkaampaa päättelymallia.</li></ol><p>Mitä kalliimpi virhe, sitä tiukempi kynnys: peruuttamattomissa toimissa korkeampi kuin lukemisessa. Vastaus kertoo valinnan ja varmuus sen, kannattaako toimia. Valitse kynnykset omilla aineistoillasi vertaamalla varmuutta tarkkuuteen.</p><h4>Järjestelmän rakentaminen Jevin ympärille</h4><p>Jev on suunniteltu ohjelmiin, joissa koodi ohjaa prosessia ja malli vastaa rajattuihin merkityskysymyksiin, ei agenteille, jotka valitsevat seuraavan vaiheen itse ja voivat eksyä jokaisella kierroksella. TypeSafen kahdeksan suunnitteluvaihetta:</p><ol><li>Tee koodilla kaikki, minkä voi tehdä koodilla – luotettavasti ja edullisesti.</li><li>Tilaan vain nykyisten kysymysten tarvitsema sisältö; tuoreet faktat omasta tietopohjasta, eivät mallin muistista.</li><li>Tilaan rakenne: sisäkkäinen JSON ja kysymykseen tarvittavan kentän polku käänteisissä heittomerkeissä, jos se vähentää monitulkintaisuutta.</li><li>Mahdollisimman rajatut ja konkreettiset kysymykset – TypeSafen mukaan ehkä tärkein sääntö: laaja kysymys kätkee useita arvioita yhteen vastaukseen.</li><li>Kysymyksiin rakenne: itse kysymys lyhyenä; selitykset, esimerkit ja oman tietokannan arvot objektin <code>instructions</code> tai <code>criteria</code> viereisiin kenttiin, ei yhteen pitkään merkkijonoon.</li><li>Monta riippumatonta saman tilan kysymystä yhdessä pyynnössä – enemmän hyötyä jokaista dollaria kohden.</li><li>Koodi yhdistää vastaukset säännöillä, painotetulla summalla tai perinteisen koneoppimismallin piirteinä.</li><li>Haarautuminen varmuuden mukaan: epävarmat tapaukset ihmiselle tai päättelymallille.</li></ol><p>Jev ei ole chat eikä koodin täydennysmalli, eikä sitä voi sijoittaa ohjelmointiagenttiin kielimallin tilalle. Agentti voi kuitenkin kirjoittaa sinulle koodin, joka kutsuu Jeviä siellä, missä tarvitaan nopea kalibroitu vastaus.</p><h4>Käyttökohteet</h4><ul><li><strong>Tausta-automaatio</strong> – päätökset, joita suoritetaan miljoona kertaa ilman läsnä olevaa ihmistä.</li><li><strong>Reaaliaikaisuus</strong> – TypeSafen mukaan useimmat pyynnöt valmistuvat noin 100 ms:ssa: tämä riittää lennossa tapahtuvaan käsittelyyn ja käyttöliittymiin.</li><li><strong>Suuret tietoaineistot</strong> – valtavien aineistokokoelmien haku, agenttien työlokien merkintä ja ennusteiden piirteet.</li><li><strong>Muiden mallien tarkistus</strong> – pyynnöt, poiminnat, päättelyt ja työkalukutsut: rajoitusten kierto, viittausvirheet ja keksityt tiedot.</li><li><strong>Haku ja järjestäminen</strong> – ”kysely – ehdokas” -parin relevanssi, uudelleenjärjestäminen ja kontekstin valinta.</li><li><strong>Haarautuminen aikomuksen perusteella</strong> – mitä käyttäjä haluaa ja mikä käsittelijä tarvitaan: yksinkertainen logiikka, erikoismalli tai ihminen; aihe, vaikeus ja riski määräävät, mille kielimallille pyyntö annetaan.</li><li><strong>Suojatarkistukset</strong> – kielimallin syöte, tuloste ja työkalukutsut: upotetut ohjeet, sääntörikkomukset ja henkilötietovuodot.</li><li><strong>Tuki</strong> – yhteydenoton aihe ja aikomus, kiireellisyys, ärtymys, poistumisen riski, palautuspyyntö ja jono.</li><li><strong>Moderointi</strong> – oman alustan sääntöjen mukaan: toksisuus, kiusaaminen, roskaposti, petokset, vaaralliset neuvot ja henkilötiedot; vakavuuden ja varmuuden perusteella hyväksy, varoita, tarkista tai estä.</li><li><strong>Toimialat</strong> – vakuutustapaukset, taloustutkinnat ja KYC, sopimukset ja mainonta, tuotekortit, rekrytointi, liidit, pelit, riskit, kysynnän ennusteet, tietograafit, tieteelliset katsaukset ja koodin merkitystarkistukset CI:ssä.</li></ul><h4>Ominaisuudet</h4><ul><li><strong><code>jev-latest</code></strong> on viimeisimmän vakaan version alias, tällä hetkellä Jev 1.13; vastanneen version näkee kentästä <code>model</code>, esimerkiksi <code>jev-1.13.0</code>. Uuden version ilmestyessä alias siirtyy siihen, ja vastaukset voivat muuttua ilman omia muutoksiasi – seuraa kenttää, jos kynnykset on valittu tietylle versiolle.</li><li><strong>Konteksti</strong> on 64K tokenia pyyntöä kohden: tila ja kaikki kysymykset yhdessä; tila ja pisin kysymys enintään 32K. Malli lukee tilan kerran ja tarkistaa kaikki kysymykset sitä vasten rinnakkain.</li><li><strong>Syöte</strong> on vain tekstiä: merkkijono, JSON-objekti tai tekstitaulukko. Kuvia, ääntä ja videota ei vielä tueta – muunna ne tekstiksi etukäteen.</li><li><strong>Kieli</strong>: pääasiallinen koulutuskieli on englanti, jolla tarkkuus on tällä hetkellä paras. Malli vastaanottaa muita kieliä, myös kiinaa, japania ja koreaa, mutta tarkkuus on heikompi – tarkista omilla aineistoillasi.</li><li><strong>Hinnat ja laskutus Ailoot API:ssa</strong> — ehdot riippuvat valitusta metodista, ja ne on ilmoitettu sen kortissa.</li><li><strong>Asetukset</strong>: Jeviä ei jatkokouluteta asiakkaan aineistolla: omat aineistot kenttään <code>state</code>, alan säännöt kenttiin <code>instructions</code> ja <code>criteria</code>.</li><li><strong>Tiedot</strong>: TypeSafe ilmoittaa, ettei Jeviä kouluteta asiakkaiden pyynnöillä eikä vastauksilla.</li></ul><h4>Jev 1.13:n tunnetut heikkoudet</h4><p>TypeSafe luettelee avoimesti nykyversion heikkoudet ja lupaa korjata monia seuraavissa versioissa. Malli on nopea, kalibroitu ja arvioi hyvin terveen järjen perusteella, mutta:</p><ol><li><strong>Lukee kirjaimellisesti.</strong> Se vastaa kirjoitettuun kysymykseen, ei tarkoitettuun: varaukset, kiellot ja epäsuorat ehdot ymmärretään sanatarkasti. Kirjoita täsmällinen ehto ja rajatapaukset kenttään <code>criteria</code>; jaa väistämätön tulkinta kahdeksi kirjaimelliseksi kysymykseksi.</li><li><strong>Ei laskin.</strong> Merkkien, toistojen ja luetteloelementtien laskeminen on epäluotettavaa, ja virhe kasvaa koon mukana – laske koodissa ja esitä yksi kysymys ehdokasta kohden. Malli ymmärtää hex- tai RGB-värejä huonommin kuin värinimiä. <code>score</code> sopii kynnykseen, ei tasojen väliseen tarkkaan lukuun.</li><li><strong>Päivämäärät ja aika.</strong> Päivämäärien järjestys, niiden välinen aika ja kuuluminen ajanjaksoon ovat epäluotettavia, etenkin yhdistetyillä formaateilla ja suhteellisilla päivämäärillä. Poimi päivämäärän osat choice-tyypillä ja ”ei määritetty” -vaihtoehdolla ja vertaa koodissa.</li><li><strong>Epäsuoruus.</strong> Kaksoiskiellot ja ominaisuuden ominaisuutta koskevat kysymykset heikentävät tarkkuutta. Kirjoita suoraan ja nimeä tilan osat.</li><li><strong>Ylimääräinen tilassa.</strong> Asiaankuulumaton teksti heikentää tarkkuutta. Suodata koodissa tai, jos se ei ole mahdollista, karsi epäolennaiset noul-kysymyksillä.</li><li><strong>Vihamielinen teksti.</strong> Malli ei oletuksena odota tilaan kätkettyjä ansaohjeita: upotettu ohje tai omasta luokituksestaan väittelevä teksti voi siirtää vastausta. Kirjoita täsmälliset kriteerit ja tarkista rajatapaukset ennen käynnistystä.</li><li><strong>Ristiriidat.</strong> Jos <code>instructions</code> ja <code>criteria</code> pyytävät eri asioita – esimerkiksi noul-tyypin ”kyllä” kuvataan ”ei”-vastauksena – tarkkuus laskee. Kriteerit jatkavat kysymystä.</li><li><strong>Vaihtoehtojen järjestys.</strong> Malli kallistuu joskus ensimmäiseen choice-vaihtoehtoon. Vaihda järjestystä ja tarkista, ettei vastaus muutu.</li><li><strong>Generointi.</strong> Jeviä ei ole koulutettu kirjoittamaan tekstiä. Tietojen poiminnassa etsi ehdokkaat säännöllisellä lausekkeella tai generatiivisella mallilla ja anna Jevin valita oikea choice-tyypillä.</li></ol></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Saatavilla Ailootissa · syötteet &amp; menetelmät</h3><details class=\"card-method\" open><summary><b>Ailoot · System One</b> <code>POST /v1/systemone</code></summary><dl class=\"method-capabilities\"><div><dt>Syötetyypit</dt><dd><code>text</code></dd></div><div><dt>Tulostyypit</dt><dd><code>structured</code></dd></div><div><dt>Konteksti</dt><dd>64 000 tokens</dd></div><div><dt>Tulosteen muoto</dt><dd>json</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Kenttä</th><th>Tyyppi</th><th>Vaatimus</th><th>Arvot &amp; rajat</th><th>Oletus</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>jev-latest</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">state</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string|object|array</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">questions</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>object</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Objektin kenttien vähimmäismäärä: 1</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">questions.&lt;id&gt;.type</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Pakollinen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>noul, choice, score</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">questions.&lt;id&gt;.instructions</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>string|object|array|null</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">questions.&lt;id&gt;.criteria</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>object|array|null</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>Ehdot: noul: valinnaiset true/false-kuvaukset, jotka voivat olla null; choice: kriteeriolio; score: ei-tyhjä kriteeritaulukko</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span><code>boolean|null</code></td><td data-cell-label=\"Vaatimus\"><span class=\"card-cell-label\">Vaatimus</span>Valinnainen</td><td data-cell-label=\"Arvot &amp; rajat\"><span class=\"card-cell-label\">Arvot &amp; rajat</span><div>false, null</div></td><td data-cell-label=\"Oletus\" data-default=\"unspecified\"><span class=\"card-cell-label\">Oletus</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Syöteaineistojen yhdistelmät</summary><p class=\"note-s\"><b>noul</b> · Pakollinen: state, questions.&lt;id&gt;.type=noul</p><p class=\"note-s\"><b>choice</b> · Pakollinen: state, questions.&lt;id&gt;.type=choice, criteria object</p><p class=\"note-s\"><b>score</b> · Pakollinen: state, questions.&lt;id&gt;.type=score, nonemptycriteriaarray</p></details><details class=\"note-s\" data-method-contract><summary>Menetelmän parametrit ja elinkaari</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parametri</th><th>Sopimus</th></tr></thead><tbody><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>material_types</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>text</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>required</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>model, state, questions</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>optional_controls</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>null</td></tr><tr><th data-cell-label=\"Parametri\" scope=\"row\"><span class=\"card-cell-label\">Parametri</span><code>content_type</code></th><td data-cell-label=\"Sopimus\"><span class=\"card-cell-label\">Sopimus</span>application/json</td></tr></tbody></table></div><p>Elinkaari: <code>exact retained published method</code></p><p class=\"note-s\">Menetelmien rakenteet ja ID:t ovat täsmällisiä; toimittajan kyvykkyys on erillinen pyynnön hyväksymisestä.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Hinnoittelu</h3><h4>Ailoot-menetelmien hinnat</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> System One</b><code>POST /v1/systemone</code></header><dl><div><dt>Syöte</dt><dd>≈0,000084 $ <em>/ 1K</em></dd></div><div><dt>Tuloste</dt><dd>0,00 $ <em>/ 1K</em></dd></div></dl></section><p class=\"note-s\">Ailoot varaa arvioidun summan ennen pyyntöä. Tuloksen jälkeen lopullinen veloitus toteutetaan mitatun käytön perusteella. Suoratoiston veloituksessa käytetään lopullista käyttötietuetta. <a href=\"/docs/fi/billing/reserve/\">Varauksen ja lopullisen veloituksen toiminta →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Esimerkkipyynnöt</h3><h4>Ailoot · System One</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Koodivaihtoehdot\"><button class=\"cg-tab\" id=\"model-code-665-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-665-panel-0\" aria-selected=\"true\" tabindex=\"0\">Luokitteluesimerkki</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopioi koodi\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-665-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-665-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;jev-latest&quot;, &quot;state&quot;: &quot;&quot;, &quot;questions&quot;: {&quot;is_urgent&quot;: {&quot;type&quot;: &quot;noul&quot;, &quot;instructions&quot;: &quot;Does the supplied customer message express urgency?&quot;}}}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;state&quot;]=text\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;result.json&quot;).read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Vastaanota ja tallenna tulokset</h3><h4>Ailoot · System One</h4><p class=\"note-s\">json</p><div class=\"card-result-process\" data-all-results><h5>Säilytä kaikki valmistuneet tulokset</h5><p class=\"note-s\">Säilytä jokainen kokonainen palautettu vastaus, tiedosto ja sisällön osa.</p><p class=\"note-s\">Säilytä jokainen vastaus sen annetun kysymystunnisteen, todennäköisyyden ja selitteen kanssa; n:ää käyttävä luottamusarvon kaava edellyttää n&gt;1 ilman, että tästä vahvistetaan API-sääntöä valintojen vähimmäismäärälle.</p></div><details class=\"card-about\" data-output-fields><summary>Vastauksen kentät</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Kenttä</th><th>Tyyppi</th></tr></thead><tbody><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">answers.&lt;id&gt;.type</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">answers.&lt;id&gt;.noul</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>number</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">answers.&lt;id&gt;.choice</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>string</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">answers.&lt;id&gt;.score</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>number</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">answers.&lt;id&gt;.confidence</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>number</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">answers.&lt;id&gt;.probabilities</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>object</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">answers.&lt;id&gt;.legend</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>object</td></tr><tr><th data-cell-label=\"Kenttä\" scope=\"row\"><span class=\"card-cell-label\">Kenttä</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Tyyppi\" data-field-type><span class=\"card-cell-label\">Tyyppi</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Virheet ja seuraavat vaiheet</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Vastaus</th><th>Ehto</th><th>Seuraava vaihe</th></tr></thead><tbody><tr><th data-cell-label=\"Vastaus\" scope=\"row\"><span class=\"card-cell-label\">Vastaus</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Ehto\"><span class=\"card-cell-label\">Ehto</span>Virheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo</td><td data-cell-label=\"Seuraava vaihe\"><span class=\"card-cell-label\">Seuraava vaihe</span>Korjaa ilmoitetut kentät ennen uutta luontipyyntöä.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliakset</h3><h4>Mallin aliakset</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=jev-latest&amp;route=Core&amp;caller=jev-latest&amp;fmt=systemone\"><code>jev-latest</code></a></span></p><h4>Menetelmäpolkujen aliakset</h4><p class=\"note-s\">Käytä yllä näytettyjä menetelmäpolkuja.</p><h4>Liittyvät kutsujan ID:t</h4><p class=\"note-s\"><a href=\"#m=jev-latest&amp;route=Core&amp;caller=jev-latest&amp;fmt=systemone\"><code>jev-latest</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "jev-latest",
        "fmt": "systemone",
        "http": "POST",
        "path": "/v1/systemone",
        "request_model_id": "jev-latest",
        "route_label": "Core"
      },
      "method_key": "Core|systemone|/v1/systemone|jev-latest",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Retain every answer by its supplied question ID, probability and legend; confidenceformulausingnrequiresn>1withoutassertinganAPIminchoicesrule.",
            "errors": [
              {
                "code": null,
                "condition": "Virheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo",
                "http_status": 400,
                "recovery": "Korjaa ilmoitetut kentät ennen uutta luontipyyntöä.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "mode": "exact retained published method"
            },
            "material_combinations": [
              {
                "mode": "noul",
                "required": [
                  "state",
                  "questions.<id>.type=noul"
                ]
              },
              {
                "mode": "choice",
                "required": [
                  "state",
                  "questions.<id>.type=choice",
                  "criteria object"
                ]
              },
              {
                "mode": "score",
                "required": [
                  "state",
                  "questions.<id>.type=score",
                  "nonemptycriteriaarray"
                ]
              }
            ],
            "operation_modes": [
              "noul",
              "choice",
              "score"
            ],
            "outputs": {
              "all_results": "Säilytä jokainen vastaus sen annetun kysymystunnisteen, todennäköisyyden ja selitteen kanssa; n:ää käyttävä luottamusarvon kaava edellyttää n>1 ilman, että tästä vahvistetaan API-sääntöä valintojen vähimmäismäärälle.",
              "family": "structured",
              "fields": [
                {
                  "description": null,
                  "name": "answers.<id>.type",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.noul",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.choice",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.score",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.confidence",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.probabilities",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "answers.<id>.legend",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "jev-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "state",
                "required": true,
                "type": "string|object|array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_properties": 1,
                "name": "questions",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "noul",
                  "choice",
                  "score"
                ],
                "enum_known": true,
                "name": "questions.<id>.type",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.instructions",
                "required": false,
                "type": "string|object|array|null"
              },
              {
                "availability": "source_interface",
                "conditions": "noul: valinnaiset true/false-kuvaukset, jotka voivat olla null; choice: kriteeriolio; score: ei-tyhjä kriteeritaulukko",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.criteria",
                "required": false,
                "type": "object|array|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  null
                ],
                "enum_known": true,
                "name": "stream",
                "required": false,
                "type": "boolean|null"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "stream=true",
              "duplicateandcase-variedcanonicalkeys"
            ]
          },
          "hints": [
            "Menetelmien rakenteet ja ID:t ovat täsmällisiä; toimittajan kyvykkyys on erillinen pyynnön hyväksymisestä."
          ],
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": [
              "model",
              "state",
              "questions"
            ]
          },
          "lifecycle": {
            "mode": "exact retained published method"
          },
          "method": {
            "http": "POST",
            "path": "/v1/systemone"
          },
          "operation_modes": [
            "systemone"
          ],
          "output": {
            "family": [
              "structured"
            ],
            "format": "structured decisions JSON",
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": 64000,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"jev-latest\", \"state\": \"\", \"questions\": {\"is_urgent\": {\"type\": \"noul\", \"instructions\": \"Does the supplied customer message express urgency?\"}}}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"state\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n",
            "label": "Classify your actual customer message",
            "language": "bash"
          }
        ],
        "family": "systemone",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "systemone",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": 0.084,
        "input": [
          "text"
        ],
        "label": "System One",
        "max_out": 0,
        "max_tool_calls": null,
        "out": 0,
        "output": [
          "structured"
        ],
        "path": "/v1/systemone",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.084,
                "amount_unit": "usd_per_million_tokens",
                "key": "in",
                "label": "Input",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_million_tokens",
                "key": "out",
                "label": "Output",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "jev-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "token",
        "units": []
      }
    }
  ],
  "model_id": "jev-latest",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "179f2759dfcd42710acf6c7d58c6114b768b020a6974e5c4e63fc978d5ee86cb",
    "input_html_sha256": "b0485188e61bc613a8068b8abfb44866b71d5d1a7ac60245a68aaf81c36a7290",
    "private_audit_sha256": "edae2eac14d855211b31218900e19800965e8f98e3bfc0fe3305ac6b5c440f5c",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fi/jev-latest/",
    "description": "TypeSafen päätösmalli: se ei kirjoita tekstiä, vaan vastaa tekstiä tai JSON-dataa koskeviin tyypitettyihin kysymyksiin valitsemalla vaihtoehdon, arvioimalla asteikolla tai antamalla kyllä/ei-tuloksen todennäköisyyksineen. Se sopii reititykseen, yhteydenottojen lajitteluun, moderointiin ja pisteytykseen; saman pyynnön kaikki kysymykset arvioidaan rinnakkain.",
    "locale": "fi",
    "md_url": "https://ailoot.ai/models/fi/jev-latest/index.md",
    "title": "jev-latest — Ailoot",
    "url": "https://ailoot.ai/models/fi/jev-latest/"
  },
  "rawModel": {
    "about": "Jev on TypeSafen lippulaivamalli ja uuden **System One** -luokan ensimmäinen malli. Se ei kirjoita tekstiä, vaan tekee nopeasti päätöksiä, joita ohjelma voi käyttää suoraan: annat **tilan** (`state`), tekstin tai JSON-datan, ja joukon **kysymyksiä**, ja saat vastaukseksi tyypitetyt arvot kalibroituine todennäköisyyksineen.\n\nKielimallit kirjoittavat sanoja ihmisille, kun taas Jev on TypeSafen mukaan lähempänä koodia: vastaus on heti koodin tarvitsemaa muotoa, nopeus suuri eikä yksikään arvo jää määritettyjen vaihtoehtojen ulkopuolelle. Malli on suunniteltu antamaan vakaita vastauksia toistuvissa pyynnöissä.\n\n### Miten System One eroaa kielimallista\n\n- **Ei generoi.** Jev ei kirjoita käyttäjävastauksia, koodia eikä selitä päättelyä. Määrität mahdolliset vastaukset itse yhdellä kolmesta kysymystyypistä.\n- **Koulutettu kalibroituihin päätöksiin.** TypeSafe kouluttaa mallia RLCD-menetelmällä (Reinforcement Learning for Calibrated Decisions): todennäköisyydet sovitetaan todellisiin lopputuloksiin ja ne kuvaavat epävarmuutta. Suuresta joukosta vastauksia, joiden todennäköisyys on 0,8, noin 80%:n tulisi olla oikein. Kalibrointi on suuren otoksen ominaisuus, ei yksittäisen vastauksen oikeellisuuden takuu.\n- **Eri koulutustavoite.** Chat-malleja koulutetaan miellyttämään ihmisiä (RLHF), mikä TypeSafen havaintojen mukaan kannustaa myötäilyyn ja varman kuuloisiin virheisiin. Yksi RLHF:n tekijöistä, Diogo Almeida, on TypeSafen toinen perustaja.\n\nNimi viittaa Daniel Kahnemanin ”Ajattelu, nopeasti ja hitaasti” -kirjan ”järjestelmään 1”: nopeaan intuitiiviseen arvioon vastakohtana ”järjestelmän 2” hitaalle harkitulle ajattelulle. Jev on luotu nopeisiin, rajattuihin arvioihin.\n\n### Kolme kysymystyyppiä\n\nKysymys on yksi tilaa koskeva arvio, ja vastaus on arvo, jota koodi vertaa kynnykseen, lajittelee tai välittää eteenpäin.\n\n1. **Choice – vaihtoehdon valinta.** Yhteydenoton osasto, tuoteluokka tai koodijakson kieli. Vaihtoehdot ovat ”vaihtoehto → kuvaus” -sanakirja, enintään 255 kappaletta. Vastauksessa ovat valittu `choice`, kaikkien vaihtoehtojen `probabilities` (yhteensä 1) ja varmuus `confidence`. Jos luettelo ei ehkä kata kaikkia tapauksia, lisää ”muu” tai ”ei mikään näistä”.\n2. **Score – arvio asteikolla.** Sijainti itse kuvaamallasi järjestetyllä asteikolla: virheen vakavuus, asiakkaan ärtymys tai taitotaso. Tasoja on 2–10 alimmasta ylimpään; malli arvioi jokaisen erikseen näkemättä sen numeroa tai naapuritasoja. Vastauksessa ovat `score` (tasojen numeroiden ja niitä vastaavien todennäköisyyksien tulojen summa, joten arvo voi olla tasojen välissä), tasokuvaukset sisältävä `legend`, `probabilities` ja `confidence`.\n3. **Noul – kyllä tai ei.** Pitääkö väite paikkansa. Vastaus `noul` on ”kyllä”-vastauksen todennäköisyys välillä 0–1: lähellä 1:tä on varma ”kyllä”, lähellä 0:aa varma ”ei” ja lähellä 0,5:tä malli epäröi. Erillistä `confidence`-arvoa ei ole: yksi luku kuvaa koko vastauksen. Valinnainen `criteria` täsmentää, mikä lasketaan ”kyllä”- ja mikä ”ei”-vastaukseksi.\n\nValintaperuste: tunnetut järjestämättömät vaihtoehdot – choice; jatkumon portaat – score; puhdas ”kyllä/ei”, jossa itse todennäköisyys ratkaisee – noul. Noul 0,5 tarkoittaa ”kyllä”- ja ”ei”-vastauksen tasaisia mahdollisuuksia, ei ”keskitasoa”: astetta mittaa score. Kahdesta sopivasta tyypistä valitse se, jonka perusteella koodi toimii heti: choice – haarat, score – kynnys, noul – `if`.\n\nTyyppejä voi yhdistää samassa pyynnössä. Vastaus on aina rajattu vaihtoehtoihisi eikä riipu muista kysymyksistä: kysymyksiä voi lisätä ja poistaa muiden vastausten muuttumatta.\n\n### Tila\n\nTila on mallin arvioitava kohde: asiakkaan viesti, asiakirjajakso, tietokannan tietue tai sovelluksesi tila.\n\n- **Merkkijono**, kun tekstiä on yksi: viesti, artikkeli tai katkelma.\n- **Objekti**: nimetyt kentät, toisiinsa liittyvät tietueet tai sovelluksen tila. TypeSafe suosittelee objektia useimpiin pyyntöihin: jokaisella osalla on selkeä nimi.\n- **Taulukko**: viestien tai tietueiden sarja.\n\nValmistele tila kuten aineisto asiantuntijoille: kokoa viestit, tilaus ja palautussäännöt yhteen, jos päätös edellyttää niiden vertailua. Pidä sisältö tilassa ja arviot kysymyksissä. Jos kysymys koskee yhtä tilan osaa, nimeä sen polku käänteisten heittomerkkien sisällä, esimerkiksi `ticket.messages[0].text`.\n\n### Kysymysten laatiminen\n\n- **Yksi nopea arvio kysymystä kohden.** Hyvä kysymys on sellainen, johon asiantunteva ihminen vastaa sopivalla kontekstilla sekunnissa: ”Ilmaiseeko viesti kiireellisyyttä?” ”Analysoi viesti ja päätä, mitä tehdä” vaatii jo hidasta päättelyä ja on jaettava yksinkertaisiin kysymyksiin.\n- **Koko kysymys kenttään `instructions`.** Kysymysavain, kuten `refund_requested`, on vain koodiasi varten eikä sitä välitetä mallille.\n- **Kaikki saman tilan kysymykset yhdessä pyynnössä.** Malli arvioi ne rinnakkain: TypeSafen mukaan lisäkysymykset eivät juuri pidennä vastausaikaa ja maksavat vain omat tokeninsa. ”Varmuuden vuoksi” esitetty kysymys on lähes ilmainen – koodi päättää itse, mitä vastauksia tarvitaan.\n- **Vaativa arvio osiin.** ”Arvioi startup-hakemus” -pyynnön sijaan kysy erikseen markkinan koosta, teknisestä toteutettavuudesta ja eroista kilpailijoihin ja laske lopputulos koodissa painoilla. Painopisteiden muuttuessa muutat painoja etkä kirjoita kysymystä uudelleen.\n- **Riippuvat kysymykset toiseen pyyntöön.** Saman pyynnön vastaukset eivät toimi toistensa kontekstina. Toinen pyyntö tarvitaan vain, jos sitä ei voi koostaa ilman ensimmäistä vastausta: tietoja on ladattava tai seuraavan kysymyksen vaihtoehdot valittava.\n- **Pitkä kysymys objektina.** `instructions` ja `criteria` ovat tavallisesti merkkijonoja mutta voivat olla objekti tai taulukko: kysymys yhdessä kentässä ja tiedot muissa. Näin ansioluetteloa voi verrata tietokantatietueisiin yhdellä kysymyksellä.\n\n### Varmuus\n\nTyypeissä choice ja score `confidence` välillä 0–1 osoittaa, kuinka keskittynyt todennäköisyys on yhteen vastaukseen: 1 tarkoittaa kaikkea yhdellä vaihtoehdolla ja 0 tasajakoa kaikille. Tyypissä score viereinen taso alentaa varmuutta vähemmän kuin kaukainen. Tyypissä noul varmuus on itse arvo: mitä kauempana 0,5:stä, sitä varmempi vastaus.\n\nTypeSafe suosittelee kolmea aluetta:\n\n1. **Suuri varmuus** – toimi automaattisesti.\n2. **Keskisuuri varmuus** – toimi varovasti, esimerkiksi pyydä käyttäjän vahvistus.\n3. **Pieni varmuus** – anna tapaus ihmiselle, täsmennä pyyntöä tai käytä varareittiä, kuten tehokkaampaa päättelymallia.\n\nMitä kalliimpi virhe, sitä tiukempi kynnys: peruuttamattomissa toimissa korkeampi kuin lukemisessa. Vastaus kertoo valinnan ja varmuus sen, kannattaako toimia. Valitse kynnykset omilla aineistoillasi vertaamalla varmuutta tarkkuuteen.\n\n### Järjestelmän rakentaminen Jevin ympärille\n\nJev on suunniteltu ohjelmiin, joissa koodi ohjaa prosessia ja malli vastaa rajattuihin merkityskysymyksiin, ei agenteille, jotka valitsevat seuraavan vaiheen itse ja voivat eksyä jokaisella kierroksella. TypeSafen kahdeksan suunnitteluvaihetta:\n\n1. Tee koodilla kaikki, minkä voi tehdä koodilla – luotettavasti ja edullisesti.\n2. Tilaan vain nykyisten kysymysten tarvitsema sisältö; tuoreet faktat omasta tietopohjasta, eivät mallin muistista.\n3. Tilaan rakenne: sisäkkäinen JSON ja kysymykseen tarvittavan kentän polku käänteisissä heittomerkeissä, jos se vähentää monitulkintaisuutta.\n4. Mahdollisimman rajatut ja konkreettiset kysymykset – TypeSafen mukaan ehkä tärkein sääntö: laaja kysymys kätkee useita arvioita yhteen vastaukseen.\n5. Kysymyksiin rakenne: itse kysymys lyhyenä; selitykset, esimerkit ja oman tietokannan arvot objektin `instructions` tai `criteria` viereisiin kenttiin, ei yhteen pitkään merkkijonoon.\n6. Monta riippumatonta saman tilan kysymystä yhdessä pyynnössä – enemmän hyötyä jokaista dollaria kohden.\n7. Koodi yhdistää vastaukset säännöillä, painotetulla summalla tai perinteisen koneoppimismallin piirteinä.\n8. Haarautuminen varmuuden mukaan: epävarmat tapaukset ihmiselle tai päättelymallille.\n\nJev ei ole chat eikä koodin täydennysmalli, eikä sitä voi sijoittaa ohjelmointiagenttiin kielimallin tilalle. Agentti voi kuitenkin kirjoittaa sinulle koodin, joka kutsuu Jeviä siellä, missä tarvitaan nopea kalibroitu vastaus.\n\n### Käyttökohteet\n\n- **Tausta-automaatio** – päätökset, joita suoritetaan miljoona kertaa ilman läsnä olevaa ihmistä.\n- **Reaaliaikaisuus** – TypeSafen mukaan useimmat pyynnöt valmistuvat noin 100 ms:ssa: tämä riittää lennossa tapahtuvaan käsittelyyn ja käyttöliittymiin.\n- **Suuret tietoaineistot** – valtavien aineistokokoelmien haku, agenttien työlokien merkintä ja ennusteiden piirteet.\n- **Muiden mallien tarkistus** – pyynnöt, poiminnat, päättelyt ja työkalukutsut: rajoitusten kierto, viittausvirheet ja keksityt tiedot.\n- **Haku ja järjestäminen** – ”kysely – ehdokas” -parin relevanssi, uudelleenjärjestäminen ja kontekstin valinta.\n- **Haarautuminen aikomuksen perusteella** – mitä käyttäjä haluaa ja mikä käsittelijä tarvitaan: yksinkertainen logiikka, erikoismalli tai ihminen; aihe, vaikeus ja riski määräävät, mille kielimallille pyyntö annetaan.\n- **Suojatarkistukset** – kielimallin syöte, tuloste ja työkalukutsut: upotetut ohjeet, sääntörikkomukset ja henkilötietovuodot.\n- **Tuki** – yhteydenoton aihe ja aikomus, kiireellisyys, ärtymys, poistumisen riski, palautuspyyntö ja jono.\n- **Moderointi** – oman alustan sääntöjen mukaan: toksisuus, kiusaaminen, roskaposti, petokset, vaaralliset neuvot ja henkilötiedot; vakavuuden ja varmuuden perusteella hyväksy, varoita, tarkista tai estä.\n- **Toimialat** – vakuutustapaukset, taloustutkinnat ja KYC, sopimukset ja mainonta, tuotekortit, rekrytointi, liidit, pelit, riskit, kysynnän ennusteet, tietograafit, tieteelliset katsaukset ja koodin merkitystarkistukset CI:ssä.\n\n### Ominaisuudet\n\n- **`jev-latest`** on viimeisimmän vakaan version alias, tällä hetkellä Jev 1.13; vastanneen version näkee kentästä `model`, esimerkiksi `jev-1.13.0`. Uuden version ilmestyessä alias siirtyy siihen, ja vastaukset voivat muuttua ilman omia muutoksiasi – seuraa kenttää, jos kynnykset on valittu tietylle versiolle.\n- **Konteksti** on 64K tokenia pyyntöä kohden: tila ja kaikki kysymykset yhdessä; tila ja pisin kysymys enintään 32K. Malli lukee tilan kerran ja tarkistaa kaikki kysymykset sitä vasten rinnakkain.\n- **Syöte** on vain tekstiä: merkkijono, JSON-objekti tai tekstitaulukko. Kuvia, ääntä ja videota ei vielä tueta – muunna ne tekstiksi etukäteen.\n- **Kieli**: pääasiallinen koulutuskieli on englanti, jolla tarkkuus on tällä hetkellä paras. Malli vastaanottaa muita kieliä, myös kiinaa, japania ja koreaa, mutta tarkkuus on heikompi – tarkista omilla aineistoillasi.\n- **Hinnat ja laskutus Ailoot API:ssa** — ehdot riippuvat valitusta metodista, ja ne on ilmoitettu sen kortissa.\n- **Asetukset**: Jeviä ei jatkokouluteta asiakkaan aineistolla: omat aineistot kenttään `state`, alan säännöt kenttiin `instructions` ja `criteria`.\n- **Tiedot**: TypeSafe ilmoittaa, ettei Jeviä kouluteta asiakkaiden pyynnöillä eikä vastauksilla.\n\n### Jev 1.13:n tunnetut heikkoudet\n\nTypeSafe luettelee avoimesti nykyversion heikkoudet ja lupaa korjata monia seuraavissa versioissa. Malli on nopea, kalibroitu ja arvioi hyvin terveen järjen perusteella, mutta:\n\n1. **Lukee kirjaimellisesti.** Se vastaa kirjoitettuun kysymykseen, ei tarkoitettuun: varaukset, kiellot ja epäsuorat ehdot ymmärretään sanatarkasti. Kirjoita täsmällinen ehto ja rajatapaukset kenttään `criteria`; jaa väistämätön tulkinta kahdeksi kirjaimelliseksi kysymykseksi.\n2. **Ei laskin.** Merkkien, toistojen ja luetteloelementtien laskeminen on epäluotettavaa, ja virhe kasvaa koon mukana – laske koodissa ja esitä yksi kysymys ehdokasta kohden. Malli ymmärtää hex- tai RGB-värejä huonommin kuin värinimiä. `score` sopii kynnykseen, ei tasojen väliseen tarkkaan lukuun.\n3. **Päivämäärät ja aika.** Päivämäärien järjestys, niiden välinen aika ja kuuluminen ajanjaksoon ovat epäluotettavia, etenkin yhdistetyillä formaateilla ja suhteellisilla päivämäärillä. Poimi päivämäärän osat choice-tyypillä ja ”ei määritetty” -vaihtoehdolla ja vertaa koodissa.\n4. **Epäsuoruus.** Kaksoiskiellot ja ominaisuuden ominaisuutta koskevat kysymykset heikentävät tarkkuutta. Kirjoita suoraan ja nimeä tilan osat.\n5. **Ylimääräinen tilassa.** Asiaankuulumaton teksti heikentää tarkkuutta. Suodata koodissa tai, jos se ei ole mahdollista, karsi epäolennaiset noul-kysymyksillä.\n6. **Vihamielinen teksti.** Malli ei oletuksena odota tilaan kätkettyjä ansaohjeita: upotettu ohje tai omasta luokituksestaan väittelevä teksti voi siirtää vastausta. Kirjoita täsmälliset kriteerit ja tarkista rajatapaukset ennen käynnistystä.\n7. **Ristiriidat.** Jos `instructions` ja `criteria` pyytävät eri asioita – esimerkiksi noul-tyypin ”kyllä” kuvataan ”ei”-vastauksena – tarkkuus laskee. Kriteerit jatkavat kysymystä.\n8. **Vaihtoehtojen järjestys.** Malli kallistuu joskus ensimmäiseen choice-vaihtoehtoon. Vaihda järjestystä ja tarkista, ettei vastaus muutu.\n9. **Generointi.** Jeviä ei ole koulutettu kirjoittamaan tekstiä. Tietojen poiminnassa etsi ehdokkaat säännöllisellä lausekkeella tai generatiivisella mallilla ja anna Jevin valita oikea choice-tyypillä.",
    "alias_of": null,
    "aliases": [],
    "author": "TypeSafe",
    "ctx": 64000,
    "formats": [
      "systemone"
    ],
    "guide": "/docs/api/systemone/",
    "id": "jev-latest",
    "input": [
      "text"
    ],
    "kind": "decision",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Retain every answer by its supplied question ID, probability and legend; confidenceformulausingnrequiresn>1withoutassertinganAPIminchoicesrule.",
            "errors": [
              {
                "code": null,
                "condition": "Virheelliset pakolliset kentät, aineiston esitysmuoto tai parametrin arvo",
                "http_status": 400,
                "recovery": "Korjaa ilmoitetut kentät ennen uutta luontipyyntöä.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "mode": "exact retained published method"
            },
            "material_combinations": [
              {
                "mode": "noul",
                "required": [
                  "state",
                  "questions.<id>.type=noul"
                ]
              },
              {
                "mode": "choice",
                "required": [
                  "state",
                  "questions.<id>.type=choice",
                  "criteria object"
                ]
              },
              {
                "mode": "score",
                "required": [
                  "state",
                  "questions.<id>.type=score",
                  "nonemptycriteriaarray"
                ]
              }
            ],
            "operation_modes": [
              "noul",
              "choice",
              "score"
            ],
            "outputs": {
              "all_results": "Säilytä jokainen vastaus sen annetun kysymystunnisteen, todennäköisyyden ja selitteen kanssa; n:ää käyttävä luottamusarvon kaava edellyttää n>1 ilman, että tästä vahvistetaan API-sääntöä valintojen vähimmäismäärälle.",
              "family": "structured",
              "fields": [
                {
                  "description": null,
                  "name": "answers.<id>.type",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.noul",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.choice",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.score",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.confidence",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.probabilities",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "answers.<id>.legend",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "jev-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "state",
                "required": true,
                "type": "string|object|array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_properties": 1,
                "name": "questions",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "noul",
                  "choice",
                  "score"
                ],
                "enum_known": true,
                "name": "questions.<id>.type",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.instructions",
                "required": false,
                "type": "string|object|array|null"
              },
              {
                "availability": "source_interface",
                "conditions": "noul: valinnaiset true/false-kuvaukset, jotka voivat olla null; choice: kriteeriolio; score: ei-tyhjä kriteeritaulukko",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.criteria",
                "required": false,
                "type": "object|array|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  null
                ],
                "enum_known": true,
                "name": "stream",
                "required": false,
                "type": "boolean|null"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "stream=true",
              "duplicateandcase-variedcanonicalkeys"
            ]
          },
          "hints": [
            "Menetelmien rakenteet ja ID:t ovat täsmällisiä; toimittajan kyvykkyys on erillinen pyynnön hyväksymisestä."
          ],
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": [
              "model",
              "state",
              "questions"
            ]
          },
          "lifecycle": {
            "mode": "exact retained published method"
          },
          "method": {
            "http": "POST",
            "path": "/v1/systemone"
          },
          "operation_modes": [
            "systemone"
          ],
          "output": {
            "family": [
              "structured"
            ],
            "format": "structured decisions JSON",
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": 64000,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"jev-latest\", \"state\": \"\", \"questions\": {\"is_urgent\": {\"type\": \"noul\", \"instructions\": \"Does the supplied customer message express urgency?\"}}}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"state\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n",
            "label": "Classify your actual customer message",
            "language": "bash"
          }
        ],
        "family": "systemone",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "systemone",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": 0.084,
        "input": [
          "text"
        ],
        "label": "System One",
        "max_out": 0,
        "max_tool_calls": null,
        "out": 0,
        "output": [
          "structured"
        ],
        "path": "/v1/systemone",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.084,
                "amount_unit": "usd_per_million_tokens",
                "key": "in",
                "label": "Input",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_million_tokens",
                "key": "out",
                "label": "Output",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "jev-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "token",
        "units": []
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "jev-latest",
        "request_model_id": "jev-latest",
        "route_label": "Core"
      }
    ],
    "name": "jev-latest",
    "price": {
      "in": 0.084,
      "in_label": null,
      "out": 0,
      "out_label": null,
      "sort_in": 0.084,
      "sort_out": 0,
      "varies": false
    },
    "short": "TypeSafen päätösmalli: se ei kirjoita tekstiä, vaan vastaa tekstiä tai JSON-dataa koskeviin tyypitettyihin kysymyksiin valitsemalla vaihtoehdon, arvioimalla asteikolla tai antamalla kyllä/ei-tuloksen todennäköisyyksineen. Se sopii reititykseen, yhteydenottojen lajitteluun, moderointiin ja pisteytykseen; saman pyynnön kaikki kysymykset arvioidaan rinnakkain."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "TypeSafen päätösmalli: se ei kirjoita tekstiä, vaan vastaa tekstiä tai JSON-dataa koskeviin tyypitettyihin kysymyksiin valitsemalla vaihtoehdon, arvioimalla asteikolla tai antamalla kyllä/ei-tuloksen todennäköisyyksineen. Se sopii reititykseen, yhteydenottojen lajitteluun, moderointiin ja pisteytykseen; saman pyynnön kaikki kysymykset arvioidaan rinnakkain.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "a8ade53a06a596e9c9aae7e1e503e24040efe076bd8101fbbfe1276bc40888e5",
    "renderer_sha256": "303a59603e2bc29ba8fda690e95fd32cec68de223d92e26054a88babff801dd7"
  },
  "sourceRevision": "9619646c3d7989f87af67cd6a0f081e52e92d94294b048ae22b5618018685509"
}
