Korte antwoord: jev-1.13 genereert geen tekst. Je POST een stuk tekst plus een set benoemde vragen naar https://aihubmix.com/v1/systemone, en je krijgt getypte antwoorden terug die zijn gekoppeld aan je vraagnamen — een categorie, een score of een waarschijnlijkheid. Niets om te parseren. Hieronder staat een werkende aanvraag, het volledige antwoordformaat en de ene ontwerpfout die je stilletjes nauwkeurigheid zal kosten.
Waar Jev voor is
Gebruik het wanneer je een oordeel nodig hebt, geen alinea: het routeren van een supportticket, het scoren van ernst, het markeren van urgentie, het afsluiten van inhoud. De modelpagina stelt het duidelijk — "Geen tekstgeneratie, niets om te parseren."
Gebruik in plaats daarvan een normaal chatmodel wanneer je uitleg, samenvattingen of enige vrije tekstoutput nodig hebt. jev kan die niet produceren.
Voordat je begint
- [ ] Python 3 geïnstalleerd (de standaardbibliotheek is voldoende)
- [ ] Een AiHubMix-account en API-sleutel
- [ ] Sleutel geëxporteerd als
AIHUBMIX_API_KEY, nooit hardcoded in de bron
Je hebt geen OpenAI SDK, LangChain of het requests pakket nodig.
Stap 1 — Ken de endpoint
POST https://aihubmix.com/v1/systemone
Authorization: Bearer YOUR_KEY
Content-Type: application/json
Dit is een model-specifieke route, niet /v1/chat/completions. OpenAI-compatibele clients kunnen het niet aanroepen. Gebruik gewone HTTP.
Stap 2 — Kies je vraagtypes
Er zijn er drie, en je kunt ze vrij mengen in één aanvraag:
| Type | Gebruik het voor | Jij levert |
|---|---|---|
keuze | Een categorie kiezen | criteria als een dict: label → definitie |
score | Beoordeling op een geordende schaal | criteria als een lijst, laagste eerst |
noul | Een ja/nee oordeel | niets verder dan instructies |
Stap 3 — Bouw de aanvraag
state is de tekst die beoordeeld moet worden. questions sleutels zijn namen die je uitvindt; het antwoord gebruikt dezelfde namen.
payload = {
"model": "jev-1.13",
"state": "Hallo, ik probeer mijn Stripe-account al 3 dagen te verbinden "
"en het blijft falen. Ik verlies verkopen. Help alsjeblieft ASAP.",
"questions": {
"department": {
"type": "choice",
"instructions": "Welke team moet dit behandelen",
"criteria": {
"billing": "Betalings- of abonnementsproblemen",
"technical": "Fouten of integratieproblemen",
"sales": "Prijs- of accountvragen",
},
},
"frustration": {
"type": "score",
"instructions": "Hoe gefrustreerd de klant lijkt",
"criteria": [
"Kalm, gewoon feiten stating",
"Gefrustreerd maar beleefd",
"Zeer boos, sterke taal",
],
},
"is_urgent": {
"type": "noul",
"instructions": "De boodschap geeft urgentie of tijdsgevoeligheid aan",
},
},
}
Stap 4 — Stuur het met de standaardbibliotheek
import json, os, urllib.error, urllib.request
def ask(payload):
req = urllib.request.Request(
"https://aihubmix.com/v1/systemone",
data=json.dumps(payload).encode(),
headers={"Authorization": "Bearer " + os.environ["AIHUBMIX_API_KEY"],
"Content-Type": "application/json"},
method="POST",
)
try:
with urllib.request.urlopen(req, timeout=60) as r:
return json.loads(r.read())
except urllib.error.HTTPError as e:
raise SystemExit(f"HTTP {e.code}: {e.read().decode(errors='replace')[:500]}")
Houd de aanvraagconstructie binnen een functie. Als je op module-niveau bouwt en verzendt, wordt de oproep opnieuw uitgevoerd bij het importeren van het bestand en worden tokens verbruikt.
Stap 5 — Lees de antwoorden
Elk antwoord slaat zijn waarde op onder een sleutel die overeenkomt met zijn type, zodat één accessor alle drie de dekt:
data = ask(payload)
for name, ans in data["answers"].items():
kind = ans["type"]
print(name, kind, ans[kind], ans.get("confidence"))
print("gebruik:", data.get("usage"))
Geverifieerde output:
department choice billing 0.51
frustration score 1 1
is_urgent noul 1 None
gebruik: {'input_tokens': 424, 'output_tokens': 73}
Stap 6 — Begrijp de volledige envelop
De printlus verbergt nuttige velden. De ruwe JSON voor een score antwoord:
{
"type": "score",
"score": 1,
"legend": {"0": "Kalm, gewoon feiten stating", "1": "Gefrustreerd maar beleefd", "2": "Zeer boos, sterke taal"},
"probabilities": {"0": 0, "1": 1, "2": 0},
"confidence": 1
}
legendkoppelt de index terug naar jouw eigen bewoording — het geheel is zelfbeschrijvend, dus je hebt geen opzoektafel in je code nodig.probabilitiesgeeft de volledige verdeling, nuttig voor het detecteren van een bijna gelijke stand.noulheeft geenconfidenceveld. De waarschijnlijkheid is het signaal.
Het hoogste niveau retourneert ook usage, id, provider (TypeSafe), en de opgeloste backendversie typesafe/jev-1.13-20260917.
De fout die je nauwkeurigheid kost
In de bovenstaande aanvraag heeft department billing teruggegeven met een zekerheid van 0.51. Het herhalen van dezelfde aanvraag gaf hetzelfde label terug bij 0.38 — het antwoord was stabiel, de aangegeven zekerheid niet.
De oorzaak ligt in de criteria, niet in het model. billing is "Betalings- of abonnementsproblemen" en technical is "Fouten of integratieproblemen." Een Stripe integratie die blijft falen komt echt overeen met beide. Het model rapporteerde een ambiguïteit die in het schema was geschreven.
Twee regels voor productie:
- Schrijf
choicecriteria die onderling exclusief zijn. Als een mens zou aarzelen tussen twee labels, zal het model dat ook doen. - Stel een vertrouwensdrempel in en routeer laagvertrouwensresultaten naar een menselijke wachtrij in plaats van ze als beslissingen te accepteren. Een model dat onzekerheid toestaat, is waardevoller dan een die het verbergt.
Pre-launch checklist
- [ ] Sleutel geladen vanuit de omgeving of een
600-modusbestand dat je VCS negeert - [ ]
choicecriteria gecontroleerd op overlap - [ ] Vertrouwensdrempel gedefinieerd, met een fallback-pad eronder
- [ ]
noulantwoorden apart behandeld — ze dragen geenconfidence - [ ] Ongebruikte vragen verwijderd (3 vragen kosten 424 inputtokens; 2 kosten 355)
- [ ] Niet-2xx-antwoorden gelogd met de ruwe body
FAQ
Kan ik de OpenAI SDK gebruiken? Nee. /v1/systemone is geen OpenAI-compatibele route.
Kan jev een zin of samenvatting teruggeven? Nee. Het beantwoordt alleen de getypte vragen die je definieert.
Hoeveel vragen per aanvraag? De geverifieerde tests gebruikten twee en drie. Elke vraag voegt input- en outputtokens toe, dus neem alleen op wat je gaat gebruiken.
Is er een versie-alias? De modelpagina vermeldt een jev-latest alias naast jev-1.13. Pin de expliciete versie als reproduceerbaarheid belangrijk is.
Wat kost het? De modelpagina publiceert $0.0462 / M inputtokens en $0 / M outputtokens. Dit zijn leverancierscijfers — bevestig de huidige prijzen voordat je budgetteert.
Wat is de contextvenster? De modelpagina is inconsistent: 64K in de header, 32K in de provider tabel. Verifieer tegen je eigen langste input voordat je op een van beide vertrouwt.
Reikwijdte van deze gids
Alles hierboven is geverifieerd met drie live oproepen tegen één enkele input. Het dekt geen latentie, batching, doorvoer of gedrag op inputs die anders zijn dan het voorbeeld. De vertrouwensafwijking is een gereproduceerde observatie, geen gemeten foutpercentage — herhaal het op je eigen gegevens voordat je een drempel instelt.
Begin met AiHubMix
jev-1.13 is beschikbaar via AiHubMix, en de modelpagina bevat alles waar deze tutorial naar verwees: de /v1/systemone endpoint, de drie vraagtypes met hun criteria formaten, de volledige antwoordvelden en de gepubliceerde prijs van $0.0462 / M inputtokens met $0 / M outputtokens. De jev-latest alias verwijst naar de nieuwste release, zodat het actueel blijft naarmate versies veranderen.
Begin hier: https://aihubmix.com/model/jev-latest
Volgende stappen:
- Maak een AiHubMix-account aan en genereer een API-sleutel
- Kopieer de aanvraag van Stap 3 en de
ask()functie van Stap 4 - Vervang
statedoor een echt record uit je eigen wachtrij - Vergelijk het resultaat met hoe je dat record vandaag classificeert
Als deze gids nuttig was, abonneer je dan voor toekomstige berichten over gestructureerde-outputmodellen en classificatiepijplijnen.



