{
  "aboutHtml": "<p>Jev er TypeSafes flagskibsmodel og den første model i den nye klasse <strong>System One</strong>. Den skriver ikke tekst, men træffer hurtigt beslutninger, som programmet kan bruge direkte: du sender en <strong>tilstand</strong> (<code>state</code>) — tekst eller JSON — og et sæt <strong>spørgsmål</strong> og får typede værdier med kalibrerede sandsynligheder tilbage.</p><p>Sprogmodeller skriver ord til mennesker, mens Jev ifølge TypeSafe ligger tættere på kode: svaret er straks i den form, koden kræver, med høj hastighed og ingen værdier uden for de fastlagte muligheder. Modellen er udformet til stabile svar ved gentagne forespørgsler.</p><h4>Hvordan System One adskiller sig fra en sprogmodel</h4><ul><li><strong>Genererer ikke.</strong> Jev skriver ikke brugersvar eller kode og forklarer ikke ræsonnementet. Du fastlægger svarmulighederne gennem én af tre spørgsmålstyper.</li><li><strong>Trænet til kalibrerede beslutninger.</strong> TypeSafe træner modellen med RLCD (Reinforcement Learning for Calibrated Decisions): sandsynligheder tilpasses faktiske udfald og afspejler usikkerhed. Blandt mange svar med sandsynlighed 0,8 bør cirka 80% være korrekte. Kalibrering er en egenskab ved en stor stikprøve, ikke en garanti for et enkelt svar.</li><li><strong>Et andet træningsmål.</strong> Chatmodeller trænes til at behage mennesker (RLHF), hvilket ifølge TypeSafe fremmer føjelighed og selvsikkert formulerede fejl. En af medskaberne af RLHF, Diogo Almeida, er medstifter af TypeSafe.</li></ul><p>Navnet henviser til «System 1» fra Daniel Kahnemans bog «At tænke – hurtigt og langsomt»: hurtig intuitiv vurdering over for den langsomme, overvejede tænkning i «System 2». Jev er skabt til hurtige, snævre vurderinger.</p><h4>Tre spørgsmålstyper</h4><p>Et spørgsmål er én vurdering af tilstanden, og svaret en værdi, som koden sammenligner med en tærskel, sorterer eller sender videre.</p><ol><li><strong>Choice — valg af mulighed.</strong> Afdeling for en henvendelse, produktkategori eller et kodeuddrags sprog. Mulighederne er en ordbog «mulighed → beskrivelse» med op til 255 poster. Svaret indeholder valgt <code>choice</code>, <code>probabilities</code> for alle muligheder (sum 1) og <code>confidence</code>. Hvis listen ikke nødvendigvis dækker alle tilfælde, tilføj «andet» eller «ingen af ovenstående».</li><li><strong>Score — vurdering på en skala.</strong> Placering på en ordnet skala, du beskriver: fejlens alvor, kundens irritation eller færdighedsniveau. Fra 2 til 10 niveauer, lavest til højest; modellen vurderer hvert niveau separat uden at se nummeret eller naboniveauerne. Svaret indeholder <code>score</code> (summen af niveaunumre ganget med deres sandsynligheder, så værdien kan ligge mellem niveauer), <code>legend</code> med niveauernes beskrivelser, <code>probabilities</code> og <code>confidence</code>.</li><li><strong>Noul — ja eller nej.</strong> Om en påstand er sand. <code>noul</code> er sandsynligheden for «ja» fra 0 til 1: tæt på 1 er sikkert «ja», tæt på 0 sikkert «nej», og tæt på 0,5 er modellen i tvivl. Der er ingen særskilt <code>confidence</code>: ét tal beskriver hele svaret. Valgfrit <code>criteria</code> præciserer, hvad der tæller som «ja» og «nej».</li></ol><p>Sådan vælges typen: kendte uordnede muligheder — choice; trin i et spektrum — score; rent «ja/nej», hvor sandsynligheden selv er vigtig — noul. Noul 0,5 er lige sandsynlighed for «ja» og «nej», ikke «mellemste niveau»: score måler graden. Hvis to typer passer, vælg den, koden kan handle direkte på: choice til forgrening, score til tærskler og noul til <code>if</code>.</p><p>Typer kan blandes i samme forespørgsel. Svaret er altid begrænset til dine muligheder og afhænger ikke af andre spørgsmål: spørgsmål kan tilføjes eller fjernes uden at ændre de øvrige svar.</p><h4>Tilstand</h4><p>Tilstanden er det, modellen vurderer: en kundebesked, et dokumentuddrag, en databasepost eller din applikations tilstand.</p><ul><li><strong>Streng</strong> — ét tekststykke: besked, artikel eller uddrag.</li><li><strong>Objekt</strong> — navngivne felter, forbundne poster eller applikationstilstand. TypeSafe anbefaler objekter til de fleste forespørgsler: hver del har et forståeligt navn.</li><li><strong>Array</strong> — en sekvens af beskeder eller poster.</li></ul><p>Forbered den som materiale til eksperter: læg korrespondance, ordre og returregler sammen, hvis beslutningen kræver sammenligning. Hold indhold i tilstanden og vurderinger i spørgsmålene. Ved et spørgsmål om én tilstandsdel angives stien i backticks, eksempelvis <code>ticket.messages[0].text</code>.</p><h4>Sådan stilles spørgsmål</h4><ul><li><strong>Én hurtig vurdering pr. spørgsmål.</strong> Et godt spørgsmål kan en vidende person med den rette kontekst besvare på et sekund: «Udtrykker beskeden hast?». «Analysér beskeden og beslut, hvad der skal gøres» er langsomt ræsonnement og skal opdeles i enkle spørgsmål.</li><li><strong>Hele spørgsmålet i <code>instructions</code>.</strong> Spørgsmålsnøglen, eksempelvis <code>refund_requested</code>, bruges kun af din kode og sendes ikke til modellen.</li><li><strong>Alle spørgsmål om én tilstand i én forespørgsel.</strong> Modellen vurderer dem parallelt: ifølge TypeSafe øger ekstra spørgsmål næsten ikke svartiden og koster kun deres egne tokens. Et spørgsmål «for en sikkerheds skyld» koster næsten intet — koden afgør selv, hvilke svar der er nødvendige.</li><li><strong>Komplekse vurderinger i dele.</strong> I stedet for «vurdér startupansøgningen» spørges separat om markedsstørrelse, teknisk gennemførlighed og forskelle fra konkurrenterne, og resultatet beregnes i kode med vægte. Ved ændrede prioriteter ændres vægtene, ikke spørgsmålet.</li><li><strong>Afhængige spørgsmål i anden forespørgsel.</strong> Svar i samme forespørgsel er ikke kontekst for hinanden. En anden forespørgsel kræves kun, hvis den ikke kan samles uden første svar: data skal hentes, eller næste spørgsmåls muligheder vælges.</li><li><strong>Lange spørgsmål som objekter.</strong> <code>instructions</code> og <code>criteria</code> er normalt strenge, men kan være objekter eller arrays: spørgsmålet i ét felt og data i andre. Det gør det muligt at sammenholde et CV med databaseposter i ét spørgsmål.</li></ul><h4>Sikkerhed i svaret</h4><p>For choice og score viser <code>confidence</code> fra 0 til 1, hvor koncentreret sandsynligheden er på ét svar: 1 er alt på én mulighed, 0 ligeligt på alle. Ved score sænker et naboniveau sikkerheden mindre end et fjernt. For noul er sikkerheden selve værdien: jo længere fra 0,5, desto mere sikkert er svaret.</p><p>TypeSafe anbefaler tre intervaller:</p><ol><li><strong>Høj sikkerhed</strong> — handl automatisk.</li><li><strong>Mellem</strong> — handl forsigtigt, eksempelvis ved at bede brugeren bekræfte.</li><li><strong>Lav</strong> — send sagen til et menneske, præcisér forespørgslen eller tilslut en reservevej, eksempelvis en stærkere model med ræsonnement.</li></ol><p>Jo dyrere fejlen er, desto strengere tærskel: højere for uigenkaldelige handlinger end læsning. Svaret siger, hvad der skal vælges, og sikkerheden, om der bør handles. Vælg tærskler på egne data ved at sammenligne sikkerhed med præcision.</p><h4>Sådan bygges et system omkring Jev</h4><p>Jev er ikke beregnet til agenter, der selv vælger næste trin og kan komme på afveje i hver runde, men til programmer, hvor kode styrer processen, og modellen besvarer snævre betydningsspørgsmål. TypeSafes otte designtrin:</p><ol><li>Alt, der kan gøres med kode, gøres med kode — pålideligt og billigt.</li><li>Kun det, de aktuelle spørgsmål kræver, i tilstanden; nye fakta fra egen vidensbase, ikke modelhukommelse.</li><li>Struktur i tilstanden: indlejret JSON, og en sti til det relevante felt i backticks i spørgsmålet, hvis det mindsker tvetydighed.</li><li>Snævrest mulige, konkrete spørgsmål er ifølge TypeSafe måske hovedreglen: et bredt spørgsmål skjuler flere vurderinger i ét svar.</li><li>Struktur i spørgsmålene: selve spørgsmålet kort; forklaringer, eksempler og vidensbaseværdier i nabofelter i et <code>instructions</code>- eller <code>criteria</code>-objekt, ikke én lang streng.</li><li>Mange uafhængige spørgsmål om én tilstand i samme forespørgsel — mere nytte pr. dollar.</li><li>Koden kombinerer svar med regler, vægtede summer eller som features i en klassisk maskinlæringsmodel.</li><li>Forgrening efter sikkerhed: usikre tilfælde til et menneske eller en model med ræsonnement.</li></ol><p>Jev er ikke chat eller kodefuldførelse og kan ikke erstatte en sprogmodel i en programmeringsagent. En agent kan derimod skrive kode, der kalder Jev, hvor et hurtigt kalibreret svar er nødvendigt.</p><h4>Anvendelser</h4><ul><li><strong>Baggrundsautomatisering</strong> — beslutninger, der køres en million gange uden et menneske ved siden af.</li><li><strong>Realtid</strong> — ifølge TypeSafe tager de fleste forespørgsler cirka 100 ms, nok til behandling undervejs og interfaces.</li><li><strong>Store data</strong> — søgning i enorme korpora, mærkning af agentlogs og features til prognoser.</li><li><strong>Kontrol af andre modeller</strong> — forespørgsler, udtræk, ræsonnement og værktøjskald: omgåelse af begrænsninger, citationsfejl og opdigtede oplysninger.</li><li><strong>Søgning og rangering</strong> — relevans mellem «forespørgsel — kandidat», genrangering og kontekstvalg.</li><li><strong>Forgrening efter hensigt</strong> — hvad brugeren ønsker, og hvilken behandler der kræves: enkel logik, specialmodel eller menneske; emne, kompleksitet og risiko afgør sprogmodelvalget.</li><li><strong>Beskyttelseskontroller</strong> — sprogmodellens input, output og værktøjskald: indskudte instruktioner, regelbrud og læk af personoplysninger.</li><li><strong>Support</strong> — henvendelsens emne og hensigt, hast, irritation, frafaldsrisiko, returønske og kø.</li><li><strong>Moderering</strong> — platformens regler om toksicitet, chikane, spam, svig, farlige råd og personoplysninger; alvor og sikkerhed styrer godkendelse, advarsel, kontrol eller blokering.</li><li><strong>Brancher</strong> — forsikring, finansielle undersøgelser og KYC, kontrakter og reklamer, produktkort, rekruttering, leads, spil, risici, efterspørgselsprognoser, vidensgrafer, videnskabelige oversigter og semantisk kodekontrol i CI.</li></ul><h4>Egenskaber</h4><ul><li><strong><code>jev-latest</code></strong> — alias for seneste stabile version, aktuelt Jev 1.13; den svarende version står i <code>model</code>, eksempelvis <code>jev-1.13.0</code>. Ved nye versioner flyttes aliaset, og svar kan ændres uden egne rettelser — følg feltet, hvis tærskler er tilpasset versionen.</li><li><strong>Kontekst</strong> — 64K tokens pr. forespørgsel: tilstand og alle spørgsmål sammen; tilstanden med det længste spørgsmål op til 32K. Modellen læser tilstanden én gang og kontrollerer alle spørgsmål parallelt mod den.</li><li><strong>Input</strong> — kun tekst: streng, JSON-objekt eller tekstarray. Billeder, lyd og video understøttes endnu ikke — omsæt dem til tekst først.</li><li><strong>Sprog</strong> — træningen er primært engelsk, som aktuelt har højest præcision. Andre sprog, herunder kinesisk, japansk og koreansk, accepteres, men med lavere præcision — kontrollér på egne data.</li><li><strong>Priser og fakturering i Ailoot API</strong> — vilkårene afhænger af den valgte metode og fremgår af metodens kort.</li><li><strong>Tilpasning</strong> — Jev finjusteres ikke på kundedata: eget materiale i <code>state</code>, fagområdets regler i <code>instructions</code> og <code>criteria</code>.</li><li><strong>Data</strong> — TypeSafe oplyser, at Jev ikke trænes på kundernes forespørgsler og svar.</li></ul><h4>Kendte svagheder i Jev 1.13</h4><p>TypeSafe angiver åbent versionens svagheder og lover mange rettelser i senere versioner. Modellen er hurtig, kalibreret og vurderer med sund fornuft, men:</p><ol><li><strong>Læser bogstaveligt.</strong> Besvarer det skrevne, ikke underforståede spørgsmål: forbehold, negationer og implicitte vilkår læses ordret. Skriv præcise vilkår og grænsetilfælde i <code>criteria</code>; nødvendig fortolkning opdeles i to bogstavelige spørgsmål.</li><li><strong>Ikke en lommeregner.</strong> Tegn-, gentagelses- og listetælling er upålidelig, og fejlen vokser med størrelsen — tæl i kode med ét spørgsmål pr. kandidat. Farver i hex eller RGB forstås dårligere end farvenavne. <code>score</code> passer til tærskler, ikke et præcist tal mellem niveauer.</li><li><strong>Datoer og tid.</strong> Datorækkefølge, tidsafstand og placering i en periode er upålidelige, især ved blandede formater og relative datoer. Udtræk datodele med choice (og «ikke angivet»), og sammenlign i kode.</li><li><strong>Indirekte formulering.</strong> Dobbelte negationer og spørgsmål om en egenskabs egenskab sænker præcisionen. Skriv direkte og navngiv tilstandsdelene.</li><li><strong>Overflødigt indhold i tilstanden.</strong> Uvedkommende tekst sænker præcisionen. Filtrér i kode eller, hvis det ikke er muligt, frasortér irrelevant materiale med noul-spørgsmål.</li><li><strong>Fjendtlig tekst.</strong> Modellen forventer ikke fælder i tilstanden som standard: en indskudt instruktion eller tekst, der diskuterer egen klassifikation, kan påvirke svaret. Skriv præcise kriterier, og test grænsetilfælde før drift.</li><li><strong>Modstrid.</strong> Hvis <code>instructions</code> og <code>criteria</code> kræver forskelligt, eksempelvis noul-«ja» beskrevet som «nej», falder præcisionen. Kriterierne er en fortsættelse af spørgsmålet.</li><li><strong>Mulighedernes rækkefølge.</strong> Modellen foretrækker undertiden første choice-mulighed. Byt rundt, og kontrollér at svaret er uændret.</li><li><strong>Generering.</strong> Jev er ikke trænet til at skrive tekst. Find dataudtrækskandidater med et regulært udtryk eller en generativ model, og lad Jev vælge den korrekte med choice.</li></ol>",
  "aboutText": "Jev er TypeSafes flagskibsmodel og den første model i den nye klasse **System One**. Den skriver ikke tekst, men træffer hurtigt beslutninger, som programmet kan bruge direkte: du sender en **tilstand** (`state`) — tekst eller JSON — og et sæt **spørgsmål** og får typede værdier med kalibrerede sandsynligheder tilbage.\n\nSprogmodeller skriver ord til mennesker, mens Jev ifølge TypeSafe ligger tættere på kode: svaret er straks i den form, koden kræver, med høj hastighed og ingen værdier uden for de fastlagte muligheder. Modellen er udformet til stabile svar ved gentagne forespørgsler.\n\n### Hvordan System One adskiller sig fra en sprogmodel\n\n- **Genererer ikke.** Jev skriver ikke brugersvar eller kode og forklarer ikke ræsonnementet. Du fastlægger svarmulighederne gennem én af tre spørgsmålstyper.\n- **Trænet til kalibrerede beslutninger.** TypeSafe træner modellen med RLCD (Reinforcement Learning for Calibrated Decisions): sandsynligheder tilpasses faktiske udfald og afspejler usikkerhed. Blandt mange svar med sandsynlighed 0,8 bør cirka 80% være korrekte. Kalibrering er en egenskab ved en stor stikprøve, ikke en garanti for et enkelt svar.\n- **Et andet træningsmål.** Chatmodeller trænes til at behage mennesker (RLHF), hvilket ifølge TypeSafe fremmer føjelighed og selvsikkert formulerede fejl. En af medskaberne af RLHF, Diogo Almeida, er medstifter af TypeSafe.\n\nNavnet henviser til «System 1» fra Daniel Kahnemans bog «At tænke – hurtigt og langsomt»: hurtig intuitiv vurdering over for den langsomme, overvejede tænkning i «System 2». Jev er skabt til hurtige, snævre vurderinger.\n\n### Tre spørgsmålstyper\n\nEt spørgsmål er én vurdering af tilstanden, og svaret en værdi, som koden sammenligner med en tærskel, sorterer eller sender videre.\n\n1. **Choice — valg af mulighed.** Afdeling for en henvendelse, produktkategori eller et kodeuddrags sprog. Mulighederne er en ordbog «mulighed → beskrivelse» med op til 255 poster. Svaret indeholder valgt `choice`, `probabilities` for alle muligheder (sum 1) og `confidence`. Hvis listen ikke nødvendigvis dækker alle tilfælde, tilføj «andet» eller «ingen af ovenstående».\n2. **Score — vurdering på en skala.** Placering på en ordnet skala, du beskriver: fejlens alvor, kundens irritation eller færdighedsniveau. Fra 2 til 10 niveauer, lavest til højest; modellen vurderer hvert niveau separat uden at se nummeret eller naboniveauerne. Svaret indeholder `score` (summen af niveaunumre ganget med deres sandsynligheder, så værdien kan ligge mellem niveauer), `legend` med niveauernes beskrivelser, `probabilities` og `confidence`.\n3. **Noul — ja eller nej.** Om en påstand er sand. `noul` er sandsynligheden for «ja» fra 0 til 1: tæt på 1 er sikkert «ja», tæt på 0 sikkert «nej», og tæt på 0,5 er modellen i tvivl. Der er ingen særskilt `confidence`: ét tal beskriver hele svaret. Valgfrit `criteria` præciserer, hvad der tæller som «ja» og «nej».\n\nSådan vælges typen: kendte uordnede muligheder — choice; trin i et spektrum — score; rent «ja/nej», hvor sandsynligheden selv er vigtig — noul. Noul 0,5 er lige sandsynlighed for «ja» og «nej», ikke «mellemste niveau»: score måler graden. Hvis to typer passer, vælg den, koden kan handle direkte på: choice til forgrening, score til tærskler og noul til `if`.\n\nTyper kan blandes i samme forespørgsel. Svaret er altid begrænset til dine muligheder og afhænger ikke af andre spørgsmål: spørgsmål kan tilføjes eller fjernes uden at ændre de øvrige svar.\n\n### Tilstand\n\nTilstanden er det, modellen vurderer: en kundebesked, et dokumentuddrag, en databasepost eller din applikations tilstand.\n\n- **Streng** — ét tekststykke: besked, artikel eller uddrag.\n- **Objekt** — navngivne felter, forbundne poster eller applikationstilstand. TypeSafe anbefaler objekter til de fleste forespørgsler: hver del har et forståeligt navn.\n- **Array** — en sekvens af beskeder eller poster.\n\nForbered den som materiale til eksperter: læg korrespondance, ordre og returregler sammen, hvis beslutningen kræver sammenligning. Hold indhold i tilstanden og vurderinger i spørgsmålene. Ved et spørgsmål om én tilstandsdel angives stien i backticks, eksempelvis `ticket.messages[0].text`.\n\n### Sådan stilles spørgsmål\n\n- **Én hurtig vurdering pr. spørgsmål.** Et godt spørgsmål kan en vidende person med den rette kontekst besvare på et sekund: «Udtrykker beskeden hast?». «Analysér beskeden og beslut, hvad der skal gøres» er langsomt ræsonnement og skal opdeles i enkle spørgsmål.\n- **Hele spørgsmålet i `instructions`.** Spørgsmålsnøglen, eksempelvis `refund_requested`, bruges kun af din kode og sendes ikke til modellen.\n- **Alle spørgsmål om én tilstand i én forespørgsel.** Modellen vurderer dem parallelt: ifølge TypeSafe øger ekstra spørgsmål næsten ikke svartiden og koster kun deres egne tokens. Et spørgsmål «for en sikkerheds skyld» koster næsten intet — koden afgør selv, hvilke svar der er nødvendige.\n- **Komplekse vurderinger i dele.** I stedet for «vurdér startupansøgningen» spørges separat om markedsstørrelse, teknisk gennemførlighed og forskelle fra konkurrenterne, og resultatet beregnes i kode med vægte. Ved ændrede prioriteter ændres vægtene, ikke spørgsmålet.\n- **Afhængige spørgsmål i anden forespørgsel.** Svar i samme forespørgsel er ikke kontekst for hinanden. En anden forespørgsel kræves kun, hvis den ikke kan samles uden første svar: data skal hentes, eller næste spørgsmåls muligheder vælges.\n- **Lange spørgsmål som objekter.** `instructions` og `criteria` er normalt strenge, men kan være objekter eller arrays: spørgsmålet i ét felt og data i andre. Det gør det muligt at sammenholde et CV med databaseposter i ét spørgsmål.\n\n### Sikkerhed i svaret\n\nFor choice og score viser `confidence` fra 0 til 1, hvor koncentreret sandsynligheden er på ét svar: 1 er alt på én mulighed, 0 ligeligt på alle. Ved score sænker et naboniveau sikkerheden mindre end et fjernt. For noul er sikkerheden selve værdien: jo længere fra 0,5, desto mere sikkert er svaret.\n\nTypeSafe anbefaler tre intervaller:\n\n1. **Høj sikkerhed** — handl automatisk.\n2. **Mellem** — handl forsigtigt, eksempelvis ved at bede brugeren bekræfte.\n3. **Lav** — send sagen til et menneske, præcisér forespørgslen eller tilslut en reservevej, eksempelvis en stærkere model med ræsonnement.\n\nJo dyrere fejlen er, desto strengere tærskel: højere for uigenkaldelige handlinger end læsning. Svaret siger, hvad der skal vælges, og sikkerheden, om der bør handles. Vælg tærskler på egne data ved at sammenligne sikkerhed med præcision.\n\n### Sådan bygges et system omkring Jev\n\nJev er ikke beregnet til agenter, der selv vælger næste trin og kan komme på afveje i hver runde, men til programmer, hvor kode styrer processen, og modellen besvarer snævre betydningsspørgsmål. TypeSafes otte designtrin:\n\n1. Alt, der kan gøres med kode, gøres med kode — pålideligt og billigt.\n2. Kun det, de aktuelle spørgsmål kræver, i tilstanden; nye fakta fra egen vidensbase, ikke modelhukommelse.\n3. Struktur i tilstanden: indlejret JSON, og en sti til det relevante felt i backticks i spørgsmålet, hvis det mindsker tvetydighed.\n4. Snævrest mulige, konkrete spørgsmål er ifølge TypeSafe måske hovedreglen: et bredt spørgsmål skjuler flere vurderinger i ét svar.\n5. Struktur i spørgsmålene: selve spørgsmålet kort; forklaringer, eksempler og vidensbaseværdier i nabofelter i et `instructions`- eller `criteria`-objekt, ikke én lang streng.\n6. Mange uafhængige spørgsmål om én tilstand i samme forespørgsel — mere nytte pr. dollar.\n7. Koden kombinerer svar med regler, vægtede summer eller som features i en klassisk maskinlæringsmodel.\n8. Forgrening efter sikkerhed: usikre tilfælde til et menneske eller en model med ræsonnement.\n\nJev er ikke chat eller kodefuldførelse og kan ikke erstatte en sprogmodel i en programmeringsagent. En agent kan derimod skrive kode, der kalder Jev, hvor et hurtigt kalibreret svar er nødvendigt.\n\n### Anvendelser\n\n- **Baggrundsautomatisering** — beslutninger, der køres en million gange uden et menneske ved siden af.\n- **Realtid** — ifølge TypeSafe tager de fleste forespørgsler cirka 100 ms, nok til behandling undervejs og interfaces.\n- **Store data** — søgning i enorme korpora, mærkning af agentlogs og features til prognoser.\n- **Kontrol af andre modeller** — forespørgsler, udtræk, ræsonnement og værktøjskald: omgåelse af begrænsninger, citationsfejl og opdigtede oplysninger.\n- **Søgning og rangering** — relevans mellem «forespørgsel — kandidat», genrangering og kontekstvalg.\n- **Forgrening efter hensigt** — hvad brugeren ønsker, og hvilken behandler der kræves: enkel logik, specialmodel eller menneske; emne, kompleksitet og risiko afgør sprogmodelvalget.\n- **Beskyttelseskontroller** — sprogmodellens input, output og værktøjskald: indskudte instruktioner, regelbrud og læk af personoplysninger.\n- **Support** — henvendelsens emne og hensigt, hast, irritation, frafaldsrisiko, returønske og kø.\n- **Moderering** — platformens regler om toksicitet, chikane, spam, svig, farlige råd og personoplysninger; alvor og sikkerhed styrer godkendelse, advarsel, kontrol eller blokering.\n- **Brancher** — forsikring, finansielle undersøgelser og KYC, kontrakter og reklamer, produktkort, rekruttering, leads, spil, risici, efterspørgselsprognoser, vidensgrafer, videnskabelige oversigter og semantisk kodekontrol i CI.\n\n### Egenskaber\n\n- **`jev-latest`** — alias for seneste stabile version, aktuelt Jev 1.13; den svarende version står i `model`, eksempelvis `jev-1.13.0`. Ved nye versioner flyttes aliaset, og svar kan ændres uden egne rettelser — følg feltet, hvis tærskler er tilpasset versionen.\n- **Kontekst** — 64K tokens pr. forespørgsel: tilstand og alle spørgsmål sammen; tilstanden med det længste spørgsmål op til 32K. Modellen læser tilstanden én gang og kontrollerer alle spørgsmål parallelt mod den.\n- **Input** — kun tekst: streng, JSON-objekt eller tekstarray. Billeder, lyd og video understøttes endnu ikke — omsæt dem til tekst først.\n- **Sprog** — træningen er primært engelsk, som aktuelt har højest præcision. Andre sprog, herunder kinesisk, japansk og koreansk, accepteres, men med lavere præcision — kontrollér på egne data.\n- **Priser og fakturering i Ailoot API** — vilkårene afhænger af den valgte metode og fremgår af metodens kort.\n- **Tilpasning** — Jev finjusteres ikke på kundedata: eget materiale i `state`, fagområdets regler i `instructions` og `criteria`.\n- **Data** — TypeSafe oplyser, at Jev ikke trænes på kundernes forespørgsler og svar.\n\n### Kendte svagheder i Jev 1.13\n\nTypeSafe angiver åbent versionens svagheder og lover mange rettelser i senere versioner. Modellen er hurtig, kalibreret og vurderer med sund fornuft, men:\n\n1. **Læser bogstaveligt.** Besvarer det skrevne, ikke underforståede spørgsmål: forbehold, negationer og implicitte vilkår læses ordret. Skriv præcise vilkår og grænsetilfælde i `criteria`; nødvendig fortolkning opdeles i to bogstavelige spørgsmål.\n2. **Ikke en lommeregner.** Tegn-, gentagelses- og listetælling er upålidelig, og fejlen vokser med størrelsen — tæl i kode med ét spørgsmål pr. kandidat. Farver i hex eller RGB forstås dårligere end farvenavne. `score` passer til tærskler, ikke et præcist tal mellem niveauer.\n3. **Datoer og tid.** Datorækkefølge, tidsafstand og placering i en periode er upålidelige, især ved blandede formater og relative datoer. Udtræk datodele med choice (og «ikke angivet»), og sammenlign i kode.\n4. **Indirekte formulering.** Dobbelte negationer og spørgsmål om en egenskabs egenskab sænker præcisionen. Skriv direkte og navngiv tilstandsdelene.\n5. **Overflødigt indhold i tilstanden.** Uvedkommende tekst sænker præcisionen. Filtrér i kode eller, hvis det ikke er muligt, frasortér irrelevant materiale med noul-spørgsmål.\n6. **Fjendtlig tekst.** Modellen forventer ikke fælder i tilstanden som standard: en indskudt instruktion eller tekst, der diskuterer egen klassifikation, kan påvirke svaret. Skriv præcise kriterier, og test grænsetilfælde før drift.\n7. **Modstrid.** Hvis `instructions` og `criteria` kræver forskelligt, eksempelvis noul-«ja» beskrevet som «nej», falder præcisionen. Kriterierne er en fortsættelse af spørgsmålet.\n8. **Mulighedernes rækkefølge.** Modellen foretrækker undertiden første choice-mulighed. Byt rundt, og kontrollér at svaret er uændret.\n9. **Generering.** Jev er ikke trænet til at skrive tekst. Find dataudtrækskandidater med et regulært udtryk eller en generativ model, og lad Jev vælge den korrekte med choice.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "1c41ff74a53ae97e1f3ccaa48b54b88fbe09aaef69983640e0ddb5e77357c5ba",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "da",
  "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=\"Luk\">×</button></div><div class=\"idline\"><span>TypeSafe /</span><code>jev-latest</code><button type=\"button\" id=\"copy-id\">Kopiér ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Modelkortets afsnit\"><button type=\"button\" data-card-jump=\"overview\">Start</button><button type=\"button\" data-card-jump=\"methods\">Input og metoder</button><button type=\"button\" data-card-jump=\"pricing\">Priser</button><button type=\"button\" data-card-jump=\"examples\">Eksempler</button><button type=\"button\" data-card-jump=\"results\">Resultater</button><button type=\"button\" data-card-jump=\"aliases\">Aliaser</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API-metoder\"><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\">Start</h3><p class=\"mdesc-full\">Beslutningsmodel fra TypeSafe: skriver ikke tekst, men besvarer typede spørgsmål om tekst eller JSON — valg, skalavurdering eller «ja/nej» med sandsynligheder. Egner sig til routing, henvendelsessortering, moderering og scoring; alle spørgsmål i en forespørgsel vurderes parallelt.</p><dl class=\"card-io\" data-card-io><div><dt>Accepterede input</dt><dd>Tekst</dd></div><div><dt>Resultater</dt><dd>structured</dd></div></dl><details class=\"card-about\"><summary>Om modellen</summary><p class=\"note-s\" data-model-method-boundary>Denne beskrivelse dækker modellens funktioner. Tilgængelige input, output og indstillinger i Ailoot står nedenfor for den valgte metode.</p><div class=\"mabout\" id=\"m-about\"><p>Jev er TypeSafes flagskibsmodel og den første model i den nye klasse <strong>System One</strong>. Den skriver ikke tekst, men træffer hurtigt beslutninger, som programmet kan bruge direkte: du sender en <strong>tilstand</strong> (<code>state</code>) — tekst eller JSON — og et sæt <strong>spørgsmål</strong> og får typede værdier med kalibrerede sandsynligheder tilbage.</p><p>Sprogmodeller skriver ord til mennesker, mens Jev ifølge TypeSafe ligger tættere på kode: svaret er straks i den form, koden kræver, med høj hastighed og ingen værdier uden for de fastlagte muligheder. Modellen er udformet til stabile svar ved gentagne forespørgsler.</p><h4>Hvordan System One adskiller sig fra en sprogmodel</h4><ul><li><strong>Genererer ikke.</strong> Jev skriver ikke brugersvar eller kode og forklarer ikke ræsonnementet. Du fastlægger svarmulighederne gennem én af tre spørgsmålstyper.</li><li><strong>Trænet til kalibrerede beslutninger.</strong> TypeSafe træner modellen med RLCD (Reinforcement Learning for Calibrated Decisions): sandsynligheder tilpasses faktiske udfald og afspejler usikkerhed. Blandt mange svar med sandsynlighed 0,8 bør cirka 80% være korrekte. Kalibrering er en egenskab ved en stor stikprøve, ikke en garanti for et enkelt svar.</li><li><strong>Et andet træningsmål.</strong> Chatmodeller trænes til at behage mennesker (RLHF), hvilket ifølge TypeSafe fremmer føjelighed og selvsikkert formulerede fejl. En af medskaberne af RLHF, Diogo Almeida, er medstifter af TypeSafe.</li></ul><p>Navnet henviser til «System 1» fra Daniel Kahnemans bog «At tænke – hurtigt og langsomt»: hurtig intuitiv vurdering over for den langsomme, overvejede tænkning i «System 2». Jev er skabt til hurtige, snævre vurderinger.</p><h4>Tre spørgsmålstyper</h4><p>Et spørgsmål er én vurdering af tilstanden, og svaret en værdi, som koden sammenligner med en tærskel, sorterer eller sender videre.</p><ol><li><strong>Choice — valg af mulighed.</strong> Afdeling for en henvendelse, produktkategori eller et kodeuddrags sprog. Mulighederne er en ordbog «mulighed → beskrivelse» med op til 255 poster. Svaret indeholder valgt <code>choice</code>, <code>probabilities</code> for alle muligheder (sum 1) og <code>confidence</code>. Hvis listen ikke nødvendigvis dækker alle tilfælde, tilføj «andet» eller «ingen af ovenstående».</li><li><strong>Score — vurdering på en skala.</strong> Placering på en ordnet skala, du beskriver: fejlens alvor, kundens irritation eller færdighedsniveau. Fra 2 til 10 niveauer, lavest til højest; modellen vurderer hvert niveau separat uden at se nummeret eller naboniveauerne. Svaret indeholder <code>score</code> (summen af niveaunumre ganget med deres sandsynligheder, så værdien kan ligge mellem niveauer), <code>legend</code> med niveauernes beskrivelser, <code>probabilities</code> og <code>confidence</code>.</li><li><strong>Noul — ja eller nej.</strong> Om en påstand er sand. <code>noul</code> er sandsynligheden for «ja» fra 0 til 1: tæt på 1 er sikkert «ja», tæt på 0 sikkert «nej», og tæt på 0,5 er modellen i tvivl. Der er ingen særskilt <code>confidence</code>: ét tal beskriver hele svaret. Valgfrit <code>criteria</code> præciserer, hvad der tæller som «ja» og «nej».</li></ol><p>Sådan vælges typen: kendte uordnede muligheder — choice; trin i et spektrum — score; rent «ja/nej», hvor sandsynligheden selv er vigtig — noul. Noul 0,5 er lige sandsynlighed for «ja» og «nej», ikke «mellemste niveau»: score måler graden. Hvis to typer passer, vælg den, koden kan handle direkte på: choice til forgrening, score til tærskler og noul til <code>if</code>.</p><p>Typer kan blandes i samme forespørgsel. Svaret er altid begrænset til dine muligheder og afhænger ikke af andre spørgsmål: spørgsmål kan tilføjes eller fjernes uden at ændre de øvrige svar.</p><h4>Tilstand</h4><p>Tilstanden er det, modellen vurderer: en kundebesked, et dokumentuddrag, en databasepost eller din applikations tilstand.</p><ul><li><strong>Streng</strong> — ét tekststykke: besked, artikel eller uddrag.</li><li><strong>Objekt</strong> — navngivne felter, forbundne poster eller applikationstilstand. TypeSafe anbefaler objekter til de fleste forespørgsler: hver del har et forståeligt navn.</li><li><strong>Array</strong> — en sekvens af beskeder eller poster.</li></ul><p>Forbered den som materiale til eksperter: læg korrespondance, ordre og returregler sammen, hvis beslutningen kræver sammenligning. Hold indhold i tilstanden og vurderinger i spørgsmålene. Ved et spørgsmål om én tilstandsdel angives stien i backticks, eksempelvis <code>ticket.messages[0].text</code>.</p><h4>Sådan stilles spørgsmål</h4><ul><li><strong>Én hurtig vurdering pr. spørgsmål.</strong> Et godt spørgsmål kan en vidende person med den rette kontekst besvare på et sekund: «Udtrykker beskeden hast?». «Analysér beskeden og beslut, hvad der skal gøres» er langsomt ræsonnement og skal opdeles i enkle spørgsmål.</li><li><strong>Hele spørgsmålet i <code>instructions</code>.</strong> Spørgsmålsnøglen, eksempelvis <code>refund_requested</code>, bruges kun af din kode og sendes ikke til modellen.</li><li><strong>Alle spørgsmål om én tilstand i én forespørgsel.</strong> Modellen vurderer dem parallelt: ifølge TypeSafe øger ekstra spørgsmål næsten ikke svartiden og koster kun deres egne tokens. Et spørgsmål «for en sikkerheds skyld» koster næsten intet — koden afgør selv, hvilke svar der er nødvendige.</li><li><strong>Komplekse vurderinger i dele.</strong> I stedet for «vurdér startupansøgningen» spørges separat om markedsstørrelse, teknisk gennemførlighed og forskelle fra konkurrenterne, og resultatet beregnes i kode med vægte. Ved ændrede prioriteter ændres vægtene, ikke spørgsmålet.</li><li><strong>Afhængige spørgsmål i anden forespørgsel.</strong> Svar i samme forespørgsel er ikke kontekst for hinanden. En anden forespørgsel kræves kun, hvis den ikke kan samles uden første svar: data skal hentes, eller næste spørgsmåls muligheder vælges.</li><li><strong>Lange spørgsmål som objekter.</strong> <code>instructions</code> og <code>criteria</code> er normalt strenge, men kan være objekter eller arrays: spørgsmålet i ét felt og data i andre. Det gør det muligt at sammenholde et CV med databaseposter i ét spørgsmål.</li></ul><h4>Sikkerhed i svaret</h4><p>For choice og score viser <code>confidence</code> fra 0 til 1, hvor koncentreret sandsynligheden er på ét svar: 1 er alt på én mulighed, 0 ligeligt på alle. Ved score sænker et naboniveau sikkerheden mindre end et fjernt. For noul er sikkerheden selve værdien: jo længere fra 0,5, desto mere sikkert er svaret.</p><p>TypeSafe anbefaler tre intervaller:</p><ol><li><strong>Høj sikkerhed</strong> — handl automatisk.</li><li><strong>Mellem</strong> — handl forsigtigt, eksempelvis ved at bede brugeren bekræfte.</li><li><strong>Lav</strong> — send sagen til et menneske, præcisér forespørgslen eller tilslut en reservevej, eksempelvis en stærkere model med ræsonnement.</li></ol><p>Jo dyrere fejlen er, desto strengere tærskel: højere for uigenkaldelige handlinger end læsning. Svaret siger, hvad der skal vælges, og sikkerheden, om der bør handles. Vælg tærskler på egne data ved at sammenligne sikkerhed med præcision.</p><h4>Sådan bygges et system omkring Jev</h4><p>Jev er ikke beregnet til agenter, der selv vælger næste trin og kan komme på afveje i hver runde, men til programmer, hvor kode styrer processen, og modellen besvarer snævre betydningsspørgsmål. TypeSafes otte designtrin:</p><ol><li>Alt, der kan gøres med kode, gøres med kode — pålideligt og billigt.</li><li>Kun det, de aktuelle spørgsmål kræver, i tilstanden; nye fakta fra egen vidensbase, ikke modelhukommelse.</li><li>Struktur i tilstanden: indlejret JSON, og en sti til det relevante felt i backticks i spørgsmålet, hvis det mindsker tvetydighed.</li><li>Snævrest mulige, konkrete spørgsmål er ifølge TypeSafe måske hovedreglen: et bredt spørgsmål skjuler flere vurderinger i ét svar.</li><li>Struktur i spørgsmålene: selve spørgsmålet kort; forklaringer, eksempler og vidensbaseværdier i nabofelter i et <code>instructions</code>- eller <code>criteria</code>-objekt, ikke én lang streng.</li><li>Mange uafhængige spørgsmål om én tilstand i samme forespørgsel — mere nytte pr. dollar.</li><li>Koden kombinerer svar med regler, vægtede summer eller som features i en klassisk maskinlæringsmodel.</li><li>Forgrening efter sikkerhed: usikre tilfælde til et menneske eller en model med ræsonnement.</li></ol><p>Jev er ikke chat eller kodefuldførelse og kan ikke erstatte en sprogmodel i en programmeringsagent. En agent kan derimod skrive kode, der kalder Jev, hvor et hurtigt kalibreret svar er nødvendigt.</p><h4>Anvendelser</h4><ul><li><strong>Baggrundsautomatisering</strong> — beslutninger, der køres en million gange uden et menneske ved siden af.</li><li><strong>Realtid</strong> — ifølge TypeSafe tager de fleste forespørgsler cirka 100 ms, nok til behandling undervejs og interfaces.</li><li><strong>Store data</strong> — søgning i enorme korpora, mærkning af agentlogs og features til prognoser.</li><li><strong>Kontrol af andre modeller</strong> — forespørgsler, udtræk, ræsonnement og værktøjskald: omgåelse af begrænsninger, citationsfejl og opdigtede oplysninger.</li><li><strong>Søgning og rangering</strong> — relevans mellem «forespørgsel — kandidat», genrangering og kontekstvalg.</li><li><strong>Forgrening efter hensigt</strong> — hvad brugeren ønsker, og hvilken behandler der kræves: enkel logik, specialmodel eller menneske; emne, kompleksitet og risiko afgør sprogmodelvalget.</li><li><strong>Beskyttelseskontroller</strong> — sprogmodellens input, output og værktøjskald: indskudte instruktioner, regelbrud og læk af personoplysninger.</li><li><strong>Support</strong> — henvendelsens emne og hensigt, hast, irritation, frafaldsrisiko, returønske og kø.</li><li><strong>Moderering</strong> — platformens regler om toksicitet, chikane, spam, svig, farlige råd og personoplysninger; alvor og sikkerhed styrer godkendelse, advarsel, kontrol eller blokering.</li><li><strong>Brancher</strong> — forsikring, finansielle undersøgelser og KYC, kontrakter og reklamer, produktkort, rekruttering, leads, spil, risici, efterspørgselsprognoser, vidensgrafer, videnskabelige oversigter og semantisk kodekontrol i CI.</li></ul><h4>Egenskaber</h4><ul><li><strong><code>jev-latest</code></strong> — alias for seneste stabile version, aktuelt Jev 1.13; den svarende version står i <code>model</code>, eksempelvis <code>jev-1.13.0</code>. Ved nye versioner flyttes aliaset, og svar kan ændres uden egne rettelser — følg feltet, hvis tærskler er tilpasset versionen.</li><li><strong>Kontekst</strong> — 64K tokens pr. forespørgsel: tilstand og alle spørgsmål sammen; tilstanden med det længste spørgsmål op til 32K. Modellen læser tilstanden én gang og kontrollerer alle spørgsmål parallelt mod den.</li><li><strong>Input</strong> — kun tekst: streng, JSON-objekt eller tekstarray. Billeder, lyd og video understøttes endnu ikke — omsæt dem til tekst først.</li><li><strong>Sprog</strong> — træningen er primært engelsk, som aktuelt har højest præcision. Andre sprog, herunder kinesisk, japansk og koreansk, accepteres, men med lavere præcision — kontrollér på egne data.</li><li><strong>Priser og fakturering i Ailoot API</strong> — vilkårene afhænger af den valgte metode og fremgår af metodens kort.</li><li><strong>Tilpasning</strong> — Jev finjusteres ikke på kundedata: eget materiale i <code>state</code>, fagområdets regler i <code>instructions</code> og <code>criteria</code>.</li><li><strong>Data</strong> — TypeSafe oplyser, at Jev ikke trænes på kundernes forespørgsler og svar.</li></ul><h4>Kendte svagheder i Jev 1.13</h4><p>TypeSafe angiver åbent versionens svagheder og lover mange rettelser i senere versioner. Modellen er hurtig, kalibreret og vurderer med sund fornuft, men:</p><ol><li><strong>Læser bogstaveligt.</strong> Besvarer det skrevne, ikke underforståede spørgsmål: forbehold, negationer og implicitte vilkår læses ordret. Skriv præcise vilkår og grænsetilfælde i <code>criteria</code>; nødvendig fortolkning opdeles i to bogstavelige spørgsmål.</li><li><strong>Ikke en lommeregner.</strong> Tegn-, gentagelses- og listetælling er upålidelig, og fejlen vokser med størrelsen — tæl i kode med ét spørgsmål pr. kandidat. Farver i hex eller RGB forstås dårligere end farvenavne. <code>score</code> passer til tærskler, ikke et præcist tal mellem niveauer.</li><li><strong>Datoer og tid.</strong> Datorækkefølge, tidsafstand og placering i en periode er upålidelige, især ved blandede formater og relative datoer. Udtræk datodele med choice (og «ikke angivet»), og sammenlign i kode.</li><li><strong>Indirekte formulering.</strong> Dobbelte negationer og spørgsmål om en egenskabs egenskab sænker præcisionen. Skriv direkte og navngiv tilstandsdelene.</li><li><strong>Overflødigt indhold i tilstanden.</strong> Uvedkommende tekst sænker præcisionen. Filtrér i kode eller, hvis det ikke er muligt, frasortér irrelevant materiale med noul-spørgsmål.</li><li><strong>Fjendtlig tekst.</strong> Modellen forventer ikke fælder i tilstanden som standard: en indskudt instruktion eller tekst, der diskuterer egen klassifikation, kan påvirke svaret. Skriv præcise kriterier, og test grænsetilfælde før drift.</li><li><strong>Modstrid.</strong> Hvis <code>instructions</code> og <code>criteria</code> kræver forskelligt, eksempelvis noul-«ja» beskrevet som «nej», falder præcisionen. Kriterierne er en fortsættelse af spørgsmålet.</li><li><strong>Mulighedernes rækkefølge.</strong> Modellen foretrækker undertiden første choice-mulighed. Byt rundt, og kontrollér at svaret er uændret.</li><li><strong>Generering.</strong> Jev er ikke trænet til at skrive tekst. Find dataudtrækskandidater med et regulært udtryk eller en generativ model, og lad Jev vælge den korrekte med choice.</li></ol></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Tilgængelig i Ailoot · input og metoder</h3><details class=\"card-method\" open><summary><b>Ailoot · System One</b> <code>POST /v1/systemone</code></summary><dl class=\"method-capabilities\"><div><dt>Inputtyper</dt><dd><code>text</code></dd></div><div><dt>Outputtyper</dt><dd><code>structured</code></dd></div><div><dt>Kontekst</dt><dd>64.000 tokens</dd></div><div><dt>Outputformat</dt><dd>json</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Felt</th><th>Type</th><th>Krav</th><th>Værdier og grænser</th><th>Standard</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>jev-latest</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">state</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string|object|array</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">questions</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>object</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>Minimumsantal objektfelter: 1</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">questions.&lt;id&gt;.type</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Påkrævet</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>noul, choice, score</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">questions.&lt;id&gt;.instructions</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string|object|array|null</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">questions.&lt;id&gt;.criteria</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>object|array|null</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>Betingelser: noul: valgfrie beskrivelser for true/false, der også kan være null; choice: kriterieobjekt; score: ikke-tomt kriteriearray</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>boolean|null</code></td><td data-cell-label=\"Krav\"><span class=\"card-cell-label\">Krav</span>Valgfrit</td><td data-cell-label=\"Værdier og grænser\"><span class=\"card-cell-label\">Værdier og grænser</span><div>false, null</div></td><td data-cell-label=\"Standard\" data-default=\"unspecified\"><span class=\"card-cell-label\">Standard</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Kombinationer af inputmaterialer</summary><p class=\"note-s\"><b>noul</b> · Påkrævet: state, questions.&lt;id&gt;.type=noul</p><p class=\"note-s\"><b>choice</b> · Påkrævet: state, questions.&lt;id&gt;.type=choice, criteria object</p><p class=\"note-s\"><b>score</b> · Påkrævet: state, questions.&lt;id&gt;.type=score, nonemptycriteriaarray</p></details><details class=\"note-s\" data-method-contract><summary>Metodeparametre og livscyklus</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Kontrakt</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>text</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>model, state, questions</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>null</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Kontrakt\"><span class=\"card-cell-label\">Kontrakt</span>application/json</td></tr></tbody></table></div><p>Livscyklus: <code>exact retained published method</code></p><p class=\"note-s\">Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Priser</h3><h4>Ailoot-metodetakster</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>Input</dt><dd>≈0,000084 US$ <em>/ 1K</em></dd></div><div><dt>Output</dt><dd>0,00 US$ <em>/ 1K</em></dd></div></dl></section><p class=\"note-s\">Ailoot reserverer et estimeret beløb før en anmodning. Efter resultatet afregnes det endelige beløb ud fra det målte forbrug. Ved streaming bruges den endelige forbrugsregistrering til afregningen. <a href=\"/docs/da/billing/reserve/\">Sådan fungerer reservation og afregning →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Eksempelanmodninger</h3><h4>Ailoot · System One</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Kodevarianter\"><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\">Klassifikationseksempel</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Kopiér kode\"><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\">Hent og gem resultater</h3><h4>Ailoot · System One</h4><p class=\"note-s\">json</p><div class=\"card-result-process\" data-all-results><h5>Behold alle færdige resultater</h5><p class=\"note-s\">Gem hvert fuldstændigt returneret svar, hver fil og hver indholdsdel.</p><p class=\"note-s\">Behold hvert svar med det angivne spørgsmåls-ID, sandsynligheden og forklaringen; konfidensformlen med n kræver n&gt;1 uden at fastslå en API-regel om minimumsantal valgmuligheder.</p></div><details class=\"card-about\" data-output-fields><summary>Svarfelter</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Felt</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">answers.&lt;id&gt;.type</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">answers.&lt;id&gt;.noul</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>number</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">answers.&lt;id&gt;.choice</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">answers.&lt;id&gt;.score</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>number</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">answers.&lt;id&gt;.confidence</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>number</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">answers.&lt;id&gt;.probabilities</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>object</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">answers.&lt;id&gt;.legend</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>object</td></tr><tr><th data-cell-label=\"Felt\" scope=\"row\"><span class=\"card-cell-label\">Felt</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Fejl og næste trin</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Svar</th><th>Betingelse</th><th>Næste trin</th></tr></thead><tbody><tr><th data-cell-label=\"Svar\" scope=\"row\"><span class=\"card-cell-label\">Svar</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Betingelse\"><span class=\"card-cell-label\">Betingelse</span>Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi</td><td data-cell-label=\"Næste trin\"><span class=\"card-cell-label\">Næste trin</span>Ret de angivne felter før en ny oprettelsesanmodning.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliaser</h3><h4>Modelaliaser</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>Aliaser for metodestier</h4><p class=\"note-s\">Brug metodestierne vist ovenfor.</p><h4>Relaterede kalder-ID’er</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": "Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi",
                "http_status": 400,
                "recovery": "Ret de angivne felter før en ny oprettelsesanmodning.",
                "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": "Behold hvert svar med det angivne spørgsmåls-ID, sandsynligheden og forklaringen; konfidensformlen med n kræver n>1 uden at fastslå en API-regel om minimumsantal valgmuligheder.",
              "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: valgfrie beskrivelser for true/false, der også kan være null; choice: kriterieobjekt; score: ikke-tomt kriteriearray",
                "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": [
            "Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse."
          ],
          "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": "c5cc6f9d61d717d4cded7748a39a3ad44529fd95e98175a123f7dbea22ebc395",
    "input_html_sha256": "40cf46cca84980f13d07bd1b8cbb1585f1ffa8c5f678cf9c9431456af06b69e8",
    "private_audit_sha256": "214d5803ebd9d5cd5dc8d444aac1fd968be45b21a3e3ce35267af732ebf3e119",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/da/jev-latest/",
    "description": "Beslutningsmodel fra TypeSafe: skriver ikke tekst, men besvarer typede spørgsmål om tekst eller JSON — valg, skalavurdering eller «ja/nej» med sandsynligheder. Egner sig til routing, henvendelsessortering, moderering og scoring; alle spørgsmål i en forespørgsel vurderes parallelt.",
    "locale": "da",
    "md_url": "https://ailoot.ai/models/da/jev-latest/index.md",
    "title": "jev-latest — Ailoot",
    "url": "https://ailoot.ai/models/da/jev-latest/"
  },
  "rawModel": {
    "about": "Jev er TypeSafes flagskibsmodel og den første model i den nye klasse **System One**. Den skriver ikke tekst, men træffer hurtigt beslutninger, som programmet kan bruge direkte: du sender en **tilstand** (`state`) — tekst eller JSON — og et sæt **spørgsmål** og får typede værdier med kalibrerede sandsynligheder tilbage.\n\nSprogmodeller skriver ord til mennesker, mens Jev ifølge TypeSafe ligger tættere på kode: svaret er straks i den form, koden kræver, med høj hastighed og ingen værdier uden for de fastlagte muligheder. Modellen er udformet til stabile svar ved gentagne forespørgsler.\n\n### Hvordan System One adskiller sig fra en sprogmodel\n\n- **Genererer ikke.** Jev skriver ikke brugersvar eller kode og forklarer ikke ræsonnementet. Du fastlægger svarmulighederne gennem én af tre spørgsmålstyper.\n- **Trænet til kalibrerede beslutninger.** TypeSafe træner modellen med RLCD (Reinforcement Learning for Calibrated Decisions): sandsynligheder tilpasses faktiske udfald og afspejler usikkerhed. Blandt mange svar med sandsynlighed 0,8 bør cirka 80% være korrekte. Kalibrering er en egenskab ved en stor stikprøve, ikke en garanti for et enkelt svar.\n- **Et andet træningsmål.** Chatmodeller trænes til at behage mennesker (RLHF), hvilket ifølge TypeSafe fremmer føjelighed og selvsikkert formulerede fejl. En af medskaberne af RLHF, Diogo Almeida, er medstifter af TypeSafe.\n\nNavnet henviser til «System 1» fra Daniel Kahnemans bog «At tænke – hurtigt og langsomt»: hurtig intuitiv vurdering over for den langsomme, overvejede tænkning i «System 2». Jev er skabt til hurtige, snævre vurderinger.\n\n### Tre spørgsmålstyper\n\nEt spørgsmål er én vurdering af tilstanden, og svaret en værdi, som koden sammenligner med en tærskel, sorterer eller sender videre.\n\n1. **Choice — valg af mulighed.** Afdeling for en henvendelse, produktkategori eller et kodeuddrags sprog. Mulighederne er en ordbog «mulighed → beskrivelse» med op til 255 poster. Svaret indeholder valgt `choice`, `probabilities` for alle muligheder (sum 1) og `confidence`. Hvis listen ikke nødvendigvis dækker alle tilfælde, tilføj «andet» eller «ingen af ovenstående».\n2. **Score — vurdering på en skala.** Placering på en ordnet skala, du beskriver: fejlens alvor, kundens irritation eller færdighedsniveau. Fra 2 til 10 niveauer, lavest til højest; modellen vurderer hvert niveau separat uden at se nummeret eller naboniveauerne. Svaret indeholder `score` (summen af niveaunumre ganget med deres sandsynligheder, så værdien kan ligge mellem niveauer), `legend` med niveauernes beskrivelser, `probabilities` og `confidence`.\n3. **Noul — ja eller nej.** Om en påstand er sand. `noul` er sandsynligheden for «ja» fra 0 til 1: tæt på 1 er sikkert «ja», tæt på 0 sikkert «nej», og tæt på 0,5 er modellen i tvivl. Der er ingen særskilt `confidence`: ét tal beskriver hele svaret. Valgfrit `criteria` præciserer, hvad der tæller som «ja» og «nej».\n\nSådan vælges typen: kendte uordnede muligheder — choice; trin i et spektrum — score; rent «ja/nej», hvor sandsynligheden selv er vigtig — noul. Noul 0,5 er lige sandsynlighed for «ja» og «nej», ikke «mellemste niveau»: score måler graden. Hvis to typer passer, vælg den, koden kan handle direkte på: choice til forgrening, score til tærskler og noul til `if`.\n\nTyper kan blandes i samme forespørgsel. Svaret er altid begrænset til dine muligheder og afhænger ikke af andre spørgsmål: spørgsmål kan tilføjes eller fjernes uden at ændre de øvrige svar.\n\n### Tilstand\n\nTilstanden er det, modellen vurderer: en kundebesked, et dokumentuddrag, en databasepost eller din applikations tilstand.\n\n- **Streng** — ét tekststykke: besked, artikel eller uddrag.\n- **Objekt** — navngivne felter, forbundne poster eller applikationstilstand. TypeSafe anbefaler objekter til de fleste forespørgsler: hver del har et forståeligt navn.\n- **Array** — en sekvens af beskeder eller poster.\n\nForbered den som materiale til eksperter: læg korrespondance, ordre og returregler sammen, hvis beslutningen kræver sammenligning. Hold indhold i tilstanden og vurderinger i spørgsmålene. Ved et spørgsmål om én tilstandsdel angives stien i backticks, eksempelvis `ticket.messages[0].text`.\n\n### Sådan stilles spørgsmål\n\n- **Én hurtig vurdering pr. spørgsmål.** Et godt spørgsmål kan en vidende person med den rette kontekst besvare på et sekund: «Udtrykker beskeden hast?». «Analysér beskeden og beslut, hvad der skal gøres» er langsomt ræsonnement og skal opdeles i enkle spørgsmål.\n- **Hele spørgsmålet i `instructions`.** Spørgsmålsnøglen, eksempelvis `refund_requested`, bruges kun af din kode og sendes ikke til modellen.\n- **Alle spørgsmål om én tilstand i én forespørgsel.** Modellen vurderer dem parallelt: ifølge TypeSafe øger ekstra spørgsmål næsten ikke svartiden og koster kun deres egne tokens. Et spørgsmål «for en sikkerheds skyld» koster næsten intet — koden afgør selv, hvilke svar der er nødvendige.\n- **Komplekse vurderinger i dele.** I stedet for «vurdér startupansøgningen» spørges separat om markedsstørrelse, teknisk gennemførlighed og forskelle fra konkurrenterne, og resultatet beregnes i kode med vægte. Ved ændrede prioriteter ændres vægtene, ikke spørgsmålet.\n- **Afhængige spørgsmål i anden forespørgsel.** Svar i samme forespørgsel er ikke kontekst for hinanden. En anden forespørgsel kræves kun, hvis den ikke kan samles uden første svar: data skal hentes, eller næste spørgsmåls muligheder vælges.\n- **Lange spørgsmål som objekter.** `instructions` og `criteria` er normalt strenge, men kan være objekter eller arrays: spørgsmålet i ét felt og data i andre. Det gør det muligt at sammenholde et CV med databaseposter i ét spørgsmål.\n\n### Sikkerhed i svaret\n\nFor choice og score viser `confidence` fra 0 til 1, hvor koncentreret sandsynligheden er på ét svar: 1 er alt på én mulighed, 0 ligeligt på alle. Ved score sænker et naboniveau sikkerheden mindre end et fjernt. For noul er sikkerheden selve værdien: jo længere fra 0,5, desto mere sikkert er svaret.\n\nTypeSafe anbefaler tre intervaller:\n\n1. **Høj sikkerhed** — handl automatisk.\n2. **Mellem** — handl forsigtigt, eksempelvis ved at bede brugeren bekræfte.\n3. **Lav** — send sagen til et menneske, præcisér forespørgslen eller tilslut en reservevej, eksempelvis en stærkere model med ræsonnement.\n\nJo dyrere fejlen er, desto strengere tærskel: højere for uigenkaldelige handlinger end læsning. Svaret siger, hvad der skal vælges, og sikkerheden, om der bør handles. Vælg tærskler på egne data ved at sammenligne sikkerhed med præcision.\n\n### Sådan bygges et system omkring Jev\n\nJev er ikke beregnet til agenter, der selv vælger næste trin og kan komme på afveje i hver runde, men til programmer, hvor kode styrer processen, og modellen besvarer snævre betydningsspørgsmål. TypeSafes otte designtrin:\n\n1. Alt, der kan gøres med kode, gøres med kode — pålideligt og billigt.\n2. Kun det, de aktuelle spørgsmål kræver, i tilstanden; nye fakta fra egen vidensbase, ikke modelhukommelse.\n3. Struktur i tilstanden: indlejret JSON, og en sti til det relevante felt i backticks i spørgsmålet, hvis det mindsker tvetydighed.\n4. Snævrest mulige, konkrete spørgsmål er ifølge TypeSafe måske hovedreglen: et bredt spørgsmål skjuler flere vurderinger i ét svar.\n5. Struktur i spørgsmålene: selve spørgsmålet kort; forklaringer, eksempler og vidensbaseværdier i nabofelter i et `instructions`- eller `criteria`-objekt, ikke én lang streng.\n6. Mange uafhængige spørgsmål om én tilstand i samme forespørgsel — mere nytte pr. dollar.\n7. Koden kombinerer svar med regler, vægtede summer eller som features i en klassisk maskinlæringsmodel.\n8. Forgrening efter sikkerhed: usikre tilfælde til et menneske eller en model med ræsonnement.\n\nJev er ikke chat eller kodefuldførelse og kan ikke erstatte en sprogmodel i en programmeringsagent. En agent kan derimod skrive kode, der kalder Jev, hvor et hurtigt kalibreret svar er nødvendigt.\n\n### Anvendelser\n\n- **Baggrundsautomatisering** — beslutninger, der køres en million gange uden et menneske ved siden af.\n- **Realtid** — ifølge TypeSafe tager de fleste forespørgsler cirka 100 ms, nok til behandling undervejs og interfaces.\n- **Store data** — søgning i enorme korpora, mærkning af agentlogs og features til prognoser.\n- **Kontrol af andre modeller** — forespørgsler, udtræk, ræsonnement og værktøjskald: omgåelse af begrænsninger, citationsfejl og opdigtede oplysninger.\n- **Søgning og rangering** — relevans mellem «forespørgsel — kandidat», genrangering og kontekstvalg.\n- **Forgrening efter hensigt** — hvad brugeren ønsker, og hvilken behandler der kræves: enkel logik, specialmodel eller menneske; emne, kompleksitet og risiko afgør sprogmodelvalget.\n- **Beskyttelseskontroller** — sprogmodellens input, output og værktøjskald: indskudte instruktioner, regelbrud og læk af personoplysninger.\n- **Support** — henvendelsens emne og hensigt, hast, irritation, frafaldsrisiko, returønske og kø.\n- **Moderering** — platformens regler om toksicitet, chikane, spam, svig, farlige råd og personoplysninger; alvor og sikkerhed styrer godkendelse, advarsel, kontrol eller blokering.\n- **Brancher** — forsikring, finansielle undersøgelser og KYC, kontrakter og reklamer, produktkort, rekruttering, leads, spil, risici, efterspørgselsprognoser, vidensgrafer, videnskabelige oversigter og semantisk kodekontrol i CI.\n\n### Egenskaber\n\n- **`jev-latest`** — alias for seneste stabile version, aktuelt Jev 1.13; den svarende version står i `model`, eksempelvis `jev-1.13.0`. Ved nye versioner flyttes aliaset, og svar kan ændres uden egne rettelser — følg feltet, hvis tærskler er tilpasset versionen.\n- **Kontekst** — 64K tokens pr. forespørgsel: tilstand og alle spørgsmål sammen; tilstanden med det længste spørgsmål op til 32K. Modellen læser tilstanden én gang og kontrollerer alle spørgsmål parallelt mod den.\n- **Input** — kun tekst: streng, JSON-objekt eller tekstarray. Billeder, lyd og video understøttes endnu ikke — omsæt dem til tekst først.\n- **Sprog** — træningen er primært engelsk, som aktuelt har højest præcision. Andre sprog, herunder kinesisk, japansk og koreansk, accepteres, men med lavere præcision — kontrollér på egne data.\n- **Priser og fakturering i Ailoot API** — vilkårene afhænger af den valgte metode og fremgår af metodens kort.\n- **Tilpasning** — Jev finjusteres ikke på kundedata: eget materiale i `state`, fagområdets regler i `instructions` og `criteria`.\n- **Data** — TypeSafe oplyser, at Jev ikke trænes på kundernes forespørgsler og svar.\n\n### Kendte svagheder i Jev 1.13\n\nTypeSafe angiver åbent versionens svagheder og lover mange rettelser i senere versioner. Modellen er hurtig, kalibreret og vurderer med sund fornuft, men:\n\n1. **Læser bogstaveligt.** Besvarer det skrevne, ikke underforståede spørgsmål: forbehold, negationer og implicitte vilkår læses ordret. Skriv præcise vilkår og grænsetilfælde i `criteria`; nødvendig fortolkning opdeles i to bogstavelige spørgsmål.\n2. **Ikke en lommeregner.** Tegn-, gentagelses- og listetælling er upålidelig, og fejlen vokser med størrelsen — tæl i kode med ét spørgsmål pr. kandidat. Farver i hex eller RGB forstås dårligere end farvenavne. `score` passer til tærskler, ikke et præcist tal mellem niveauer.\n3. **Datoer og tid.** Datorækkefølge, tidsafstand og placering i en periode er upålidelige, især ved blandede formater og relative datoer. Udtræk datodele med choice (og «ikke angivet»), og sammenlign i kode.\n4. **Indirekte formulering.** Dobbelte negationer og spørgsmål om en egenskabs egenskab sænker præcisionen. Skriv direkte og navngiv tilstandsdelene.\n5. **Overflødigt indhold i tilstanden.** Uvedkommende tekst sænker præcisionen. Filtrér i kode eller, hvis det ikke er muligt, frasortér irrelevant materiale med noul-spørgsmål.\n6. **Fjendtlig tekst.** Modellen forventer ikke fælder i tilstanden som standard: en indskudt instruktion eller tekst, der diskuterer egen klassifikation, kan påvirke svaret. Skriv præcise kriterier, og test grænsetilfælde før drift.\n7. **Modstrid.** Hvis `instructions` og `criteria` kræver forskelligt, eksempelvis noul-«ja» beskrevet som «nej», falder præcisionen. Kriterierne er en fortsættelse af spørgsmålet.\n8. **Mulighedernes rækkefølge.** Modellen foretrækker undertiden første choice-mulighed. Byt rundt, og kontrollér at svaret er uændret.\n9. **Generering.** Jev er ikke trænet til at skrive tekst. Find dataudtrækskandidater med et regulært udtryk eller en generativ model, og lad Jev vælge den korrekte med choice.",
    "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": "Ugyldige obligatoriske felter, materialerepræsentation eller parameterværdi",
                "http_status": 400,
                "recovery": "Ret de angivne felter før en ny oprettelsesanmodning.",
                "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": "Behold hvert svar med det angivne spørgsmåls-ID, sandsynligheden og forklaringen; konfidensformlen med n kræver n>1 uden at fastslå en API-regel om minimumsantal valgmuligheder.",
              "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: valgfrie beskrivelser for true/false, der også kan være null; choice: kriterieobjekt; score: ikke-tomt kriteriearray",
                "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": [
            "Metodernes strukturer og ID’er er præcise; leverandørens muligheder er adskilt fra adgangstilladelse."
          ],
          "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": "Beslutningsmodel fra TypeSafe: skriver ikke tekst, men besvarer typede spørgsmål om tekst eller JSON — valg, skalavurdering eller «ja/nej» med sandsynligheder. Egner sig til routing, henvendelsessortering, moderering og scoring; alle spørgsmål i en forespørgsel vurderes parallelt."
  },
  "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": "Beslutningsmodel fra TypeSafe: skriver ikke tekst, men besvarer typede spørgsmål om tekst eller JSON — valg, skalavurdering eller «ja/nej» med sandsynligheder. Egner sig til routing, henvendelsessortering, moderering og scoring; alle spørgsmål i en forespørgsel vurderes parallelt.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "160fd522a8d16ee7a914a758921ec30a8017bcf3936ac3426485ed6469e27bf9",
    "renderer_sha256": "2bf9f26ea9bfd57ed53d867671d8f05b41a6ea85089f48039e3365dc2b92ec2c"
  },
  "sourceRevision": "884f45e0aef1112e9ae03378ffd78db46fd22b5755c1265a59e1eed4f5cf68ad"
}
