dokumentation
API

Jev — beslutsmodell

Markdown

Beslutsmodellen Jev från TypeSafe besvarar typade frågor om text eller JSON: val av alternativ, bedömning på en skala eller ”ja/nej” med sannolikheter. Det är varken chatt eller textgenerering.

Fullständig guide
POSThttps://api.ailoot.ai/v1/systemone
Jev — beslutsmodell
curl https://api.ailoot.ai/v1/systemone \
  -H "Authorization: Bearer $AILOOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jev-latest",
    "state": "Hjälp! Mina utbetalningar har misslyckats i 3 dagar.",
    "questions": {
      "is_urgent": {
        "type": "noul",
        "instructions": "Uttrycker detta brådska?"
      }
    }
  }' 
200 OK
{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": {
      "type": "noul",
      "noul": 0.95
    }
  },
  "usage": { "input_tokens": 296, "output_tokens": 20 }
}

Jev är en beslutsmodell i klassen System One från TypeSafe. Den skriver inte text och för inte någon dialog: du skickar ett tillstånd (state) — text eller JSON — och en uppsättning frågor, och får typade värden med sannolikheter tillbaka. Koden kan direkt använda dem för förgrening, sortering och routning utan att tolka fri text.

Alla frågor i ett anrop bedöms parallellt och oberoende av varandra utifrån samma state. Enligt TypeSafe påverkar fler frågor knappt svarstiden, och frågorna stör inte varandra.

VadKortfattat
Modelljev-latest — ett alias för den senaste stabila versionen av Jev; posten i katalogen
MetodPOST /v1/systemone. Detta är inte chatt: formaten OpenAI, Anthropic och Gemini passar inte för Jev. Svaret levereras i sin helhet som ett JSON-objekt
Indata som stödsEndast text: en sträng, ett JSON-objekt eller en array med texter. Omvandla först bilder, ljud och video till text
Kontext64K token per anrop — state och alla frågor tillsammans; state tillsammans med den längsta frågan — högst 32K
SpråkEnligt TypeSafe är modellen mest träffsäker på engelska; den godtar andra språk, men träffsäkerheten är lägre — testa med dina egna data
PrisIndata $0.084 per 1 miljon token, utdata utan kostnad

Anrop

Autentisering

  • Authorizationheaderobligatoriskt

    Ailoot-nyckel i formatet Bearer sk-….

Anropskropp

  • modelstringobligatoriskt

    jev-latest.

  • statestring | object | arrayobligatoriskt

    Det som ska bedömas: en textsträng eller JSON — ett kundärende, en databaspost, en konversation eller appens aktuella tillstånd. Ett objekt med tydliga fältnamn är vanligen enklare att använda än en enda sträng.

  • questionsobjectobligatoriskt

    Frågor. Du väljer nycklarna, och svaren returneras med samma nycklar; nyckeln påverkar inte svaret — själva frågan anges i instructions.

  • questions.*.typestringobligatoriskt

    noul, choice eller score — se nedan.

  • questions.*.instructionsstring | object | arrayobligatoriskt

    Själva frågan. En lång fråga med data kan skickas som ett objekt: frågan i ett fält och data i andra; hänvisa till fälten med deras namn inom bakåtriktade apostrofer.

  • questions.*.criteriaobject | array

    Svarsalternativ som skiljer sig mellan typerna: beskrivningar av ”ja” och ”nej” för noul (valfritt), en uppsättning namngivna alternativ för choice och en ordnad lista av nivåer för score.

Frågetyper

TypVad frågan gällerVad som returneras
noulOm påståendet är sant: ja eller nejnoul — sannolikheten för ”ja” från 0 till 1
choiceVilket av de angivna alternativen som passarchoice, probabilities, confidence
scoreVar state ligger på din nivåskalascore, legend, probabilities, confidence

Typerna kan kombineras i samma anrop.

noul — ja eller nej

Fältet criteria är valfritt: här kan du beskriva vad ”ja” (true) och ”nej” (false) betyder. Svaret noul — ett tal från 0 (nej) till 1 (ja).

"is_urgent": {
  "type": "noul",
  "instructions": "Uttrycker detta brådska?",
  "criteria": {
    "true": "Uttryckligen tidskänsligt",
    "false": "Ingen brådska uttrycks"
  }
}

choice — val av alternativ

criteria — en uppsättning ”alternativ → beskrivning”; om beskrivningen inte behövs anger du null. Högst 255 alternativ. I svaret är choice — det mest sannolika alternativet, probabilities — sannolikheten för varje alternativ (summan är 1), confidence — säkerhet från 0 till 1.

"department": {
  "type": "choice",
  "instructions": "Vilket team bör hantera detta?",
  "criteria": {
    "billing": "Betalningar, fakturering, återbetalningar",
    "technical": "Buggar, avbrott, integrationer",
    "sales": "Prissättning, uppgraderingar, nya kunder"
  }
}

score — bedömning på en skala

criteria — nivåer från lägst till högst, högst 10 (TypeSafe rekommenderar minst två). Svaret innehåller score — ett värde viktat efter nivåernas sannolikheter (kan hamna mellan nivåerna), legend — nivåns nummer och beskrivning, probabilities och confidence. Enligt TypeSafe är score lämpligt för jämförelser med ett tröskelvärde, men inte för att ange ett exakt tal mellan nivåerna.

"frustration": {
  "type": "score",
  "instructions": "Hur frustrerad är kunden?",
  "criteria": ["Lugn", "Frustrerad", "Mycket arg"]
}

Svar

  • modelstring

    Vilken modellversion som svarade. Aliaset jev-latest pekar med tiden på nya versioner: om du har anpassat tröskelvärdena confidence till en viss version bör du hålla koll på detta fält.

  • answersobject

    Ett svar per fråga, med samma nycklar. Varje svar har type, choice och score har dessutom confidence.

  • usageobject

    input_tokens och output_tokens. Endast indatatoken debiteras.

Flera frågor i ett anrop

Ställ alla frågor om samma state i ett anrop: de bedöms parallellt, och state skickas bara en gång. Enligt TypeSafe var ett gemensamt anrop i deras exempel med 13 frågor 12,2 gånger billigare och 10 gånger snabbare än 13 separata anrop som skickades efter varandra, med samma svar.

Dela gärna upp en komplex bedömning i enkla frågor och kombinera svaren i koden: till exempel separata bedömningar av marknad, genomförbarhet och skillnader mot konkurrenter i stället för ”bedöm ansökan”. Då ändras vikterna i koden, inte i frågetexten.

{
  "model": "jev-latest",
  "state": "Hjälp! Mina utbetalningar har misslyckats i 3 dagar.",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Vilket team bör hantera detta?",
      "criteria": {
        "billing": "Betalningar, fakturering, återbetalningar",
        "technical": "Buggar, avbrott, integrationer",
        "sales": "Prissättning, uppgraderingar, nya kunder"
      }
    },
    "frustration": {
      "type": "score",
      "instructions": "Hur frustrerad är kunden?",
      "criteria": ["Lugn", "Frustrerad", "Mycket arg"]
    },
    "is_urgent": {
      "type": "noul",
      "instructions": "Uttrycker detta brådska?"
    }
  }
}

När den passar

  • Routning. Skicka ett ärende till rätt avdelning och ett anrop till rätt hanterare: enkel kod, en stor modell eller en människa.
  • Sortering och prioritering. Brådskandegrad, ton och risk — på en skala, med tröskelvärden i koden.
  • Moderering och kontroller. Om ett meddelande bryter mot reglerna, om en källa styrker ett citat eller om ett dokument innehåller svaret på en fråga — innan texten skickas vidare.
  • Poängsättning och rangordning. Bedöm dokument, kandidater eller sökträffar efter dina egna kriterier och avgör i koden vad som går vidare.
  • I stället för ett skört ”returnera JSON”. Ett anrop som är utformat för att returnera typade värden, inte text som måste tolkas.

När den inte passar

  • Chatt, användarsvar och generering av text eller kod. Jev skriver inte text — för det finns textmodeller.
  • Som modell för Claude Code, Cursor och andra agenter. Det går inte att ersätta agentens modell med jev-latest: agenten behöver en modell som skriver text och anropar verktyg. Jev kan anropas från koden som agenten skriver åt dig.
  • Aritmetik, räkning och jämförelse av datum. Enligt TypeSafe är detta mer tillförlitligt i kod; fråga modellen endast om den innehållsmässiga delen — exempelvis att extrahera datumdelar med choice.
  • Bilder, ljud och video. Modellen godtar endast text — omvandla sådana data till text i förväg.

Pris

Endast indatatoken debiteras — fältet usage.input_tokens i svaret: $0.084 per 1 miljon. Utdatatoken är kostnadsfria.

Exempelanropet på den här sidan (296 indatatoken) kostar mindre än $0.0001.

Före anropet reserverar Ailoot ett belopp på saldot och debiterar sedan en gång efter svaret utifrån faktisk förbrukning — så fungerar det.

Gränser

VadGräns
Hela anropet: state och alla frågor64K token
state tillsammans med den längsta frågan32K token
Alternativ i ett choicehögst 255
Nivåer i ett scorefrån 2 till 10
Indataendast text: en sträng, ett JSON-objekt eller en array med texter

Modellens gränser är uppgifter från TypeSafe. Begränsningar för din nyckel och ditt saldo gäller som för alla Ailoot-modeller: Fel och gränser.

Fel

Fel returneras i Ailoot API:s gemensamma format: kod, begriplig text och Request ID. Vanligast för denna metod är:

KodNärVad du ska göra
400 invalid_requestAnropskroppen klarade inte valideringen: state, model eller questions saknas, okänd type, fler än 255 alternativ i choice eller fler än 10 nivåer i scoreRätta anropet enligt felmeddelandet: utan ändring avvisas det igen
400 context_length_exceededstate och frågorna tillsammans överskrider modellens gränsFiltrera state i koden och behåll det som frågorna behöver
401 invalid_api_keyNyckeln saknas eller är ogiltigSkicka nyckeln i Authorization-headern
402 insufficient_balanceTillgängligt saldo räcker inte till reserveringenFyll på saldot
404 model_not_found, unsupported_endpointFelaktigt ID eller modellen anropas med fel metod, till exempel via /v1/chat/completionsAnropa jev-latest endast via POST /v1/systemone
429 rate_limit_exceededFör många anropVänta det antal sekunder som anges i Retry-After-headern och försök igen
503 model_overloaded, model_unavailableModellen är tillfälligt överbelastad eller otillgängligOm X-Should-Retry: true — försök igen efter Retry-After sekunder; om false — kontrollera först Request ID i historiken
504 model_timeoutModellen svarade inte inom tidsgränsenSkicka inte anropet på nytt förrän du har kontrollerat Request ID i historiken

Den fullständiga kodlistan finns på sidan Fel och gränser.

Har du fler frågor? Skicka Request ID och en beskrivning, så hjälper vi dig.Kontakta supporten