Jev-API einbinden
Binde typisierte Entscheidungen über die Jev-API ein.
Die Jev-API bewertet Text anhand vorgegebener Fragen. Eine Anfrage enthält state, model und eine questions-Map; die typisierten Ergebnisse stehen unter denselben IDs in answers. Das ist kein Chat-Endpunkt, dessen Freitext du nachträglich in Kategorien zerlegen musst.
Diese Anleitung behandelt die Integration. Einsatzgebiete, Grenzen und den Preishintergrund erklärt die Einführung in das Jev-Modell.
Geprüft am 28. September 2026. Grundlage ist die TypeSafe-Dokumentation; die Gateway-Route wurde mit der OmniaKey-Implementierung abgeglichen. Die Beispiele wurden offline geprüft, nicht in einem neuen kostenpflichtigen Leistungstest. Direkte Anbieterpreise und Limits gelten nicht automatisch für ein Gateway-Konto.
Endpunkt und API-Schlüssel müssen zusammenpassen
| Zugang | POST-Endpunkt | Schlüssel |
|---|---|---|
| OmniaKey | https://api.omniakey.com/v1/alpha/search | OmniaKey-Key mit Zugriff auf jev-latest |
| TypeSafe direkt | https://api.typesafe.ai/v1/systemone | TypeSafe-Key |
Beide Varianten verwenden Authorization: Bearer ... und das native Jev-Format. Sende niemals den Schlüssel des einen Dienstes an den anderen. Die Gateway-Route ist nicht /v1/chat/completions; messages ist kein Ersatz für state.
Erstelle einen eingeschränkten Schlüssel, prüfe die aktuelle Jev-Route und setze OMNIAKEY_API_KEY lokal als Umgebungsvariable. Schlüssel gehören nicht in Browser-Code, Git oder Screenshots. Allgemeine Schritte stehen im API-Schnellstart (Englisch).
Vollständige JSON-Anfrage
Speichere das Beispiel als jev-request.json. Es ordnet eine Supportnachricht einer Abteilung zu und bewertet Frustration sowie Dringlichkeit. Der Beispieltext bleibt Englisch: Laut TypeSafe funktioniert diese Sprache derzeit am besten. Deutsche Eingaben solltest du mit eigenen repräsentativen Daten prüfen.
{
"model": "jev-latest",
"state": "My payouts have failed for three days. Please help me resolve this today.",
"questions": {
"department": {
"type": "choice",
"instructions": "Which team should handle this message?",
"criteria": {
"billing": "Payments, invoices, or refunds",
"technical": "Bugs, outages, or integrations",
"sales": "Pricing, upgrades, or new accounts"
}
},
"frustration": {
"type": "score",
"instructions": "How frustrated is the customer?",
"criteria": ["Calm", "Frustrated", "Very angry"]
},
"is_urgent": {
"type": "noul",
"instructions": "Does the message express a time-sensitive need?"
}
}
}
Die IDs verbinden Fragen und Antworten. Laut TypeSafe fließen die ID-Namen nicht in die Inferenz ein. Beschreibe die Aufgabe daher in instructions, nicht nur im Schlüsselnamen. state kann auch ein JSON-Objekt oder Array mit Textwerten sein, etwa ein strukturierter Supportfall.
curl --fail-with-body https://api.omniakey.com/v1/alpha/search \
-H "Authorization: Bearer $OMNIAKEY_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @jev-request.json
Für TypeSafe direkt verwendest du https://api.typesafe.ai/v1/systemone und $TYPESAFE_API_KEY. Das native JSON bleibt gleich; prüfe die für das Konto zulässigen Modellnamen.
Choice, Score und Noul auswerten
| Fragetyp | Definition | Antwortfelder | Bedeutung |
|---|---|---|---|
choice | Optionen mit Beschreibungen, höchstens 255 | choice, probabilities, confidence | Gewählte Kategorie und Verteilung über die Optionen |
score | Geordnete Skala mit 2–10 Stufen | score, legend, probabilities, confidence | Wahrscheinlichkeitsgewichtete Stufe, auch als Dezimalwert |
noul | Ja/Nein-Frage, optional mit true-/false-Kriterien | noul | Wahrscheinlichkeit für Ja zwischen 0 und 1, kein Boolean |
Zusätzlich kommen model und usage.input_tokens / usage.output_tokens zurück. jev-latest verweist derzeit auf jev-1.13.0; ein Alias kann sich später ändern. Halte die tatsächlich verwendete Version bei Auswertungen fest.
Bei drei Stufen liegt 1.05 knapp über Stufe 1, nicht bei 1,05 von 100 Punkten. Maßgeblich ist legend. Ein Noul-Wert von 0.8 ist keine automatische Freigabe für eine Rückzahlung. Bestimme Schwellen mit beschrifteten Beispielen. confidence wird aus der Verteilung berechnet und garantiert keine richtige Entscheidung.
Die folgende vollständige Antwort ist ein erklärendes Beispiel, kein gemessenes API-Ergebnis. Antwortwerte und Tokenzahlen veranschaulichen nur die Struktur; tatsächliche Ergebnisse können abweichen.
{
"model": "jev-1.13.0",
"answers": {
"department": {
"type": "choice",
"choice": "billing",
"probabilities": {
"billing": 0.88,
"technical": 0.12,
"sales": 0.0
},
"confidence": 0.81
},
"frustration": {
"type": "score",
"score": 1.05,
"legend": {
"0": "Calm",
"1": "Frustrated",
"2": "Very angry"
},
"probabilities": {
"0": 0.0,
"1": 0.95,
"2": 0.05
},
"confidence": 0.92
},
"is_urgent": {
"type": "noul",
"noul": 0.8
}
},
"usage": {
"input_tokens": 320,
"output_tokens": 72
}
}
Python und Node.js
Die Beispiele lesen jev-request.json und senden genau eine Anfrage. Sie geben native Antworten aus und erwarten kein OpenAI-Feld choices. Für den Betrieb ergänzt du die unten beschriebene begrenzte Wiederholungsstrategie.
import json
import os
import urllib.error
import urllib.request
from pathlib import Path
request = urllib.request.Request(
"https://api.omniakey.com/v1/alpha/search",
data=Path("jev-request.json").read_bytes(),
headers={
"Authorization": f"Bearer {os.environ['OMNIAKEY_API_KEY']}",
"Content-Type": "application/json",
},
method="POST",
)
try:
with urllib.request.urlopen(request, timeout=30) as response:
result = json.load(response)
except urllib.error.HTTPError as error:
raise SystemExit(f"Jev request failed: HTTP {error.code}") from None
print(result["model"])
print(json.dumps(result["answers"], indent=2))
import { readFile } from 'node:fs/promises';
const key = process.env.OMNIAKEY_API_KEY;
if (!key) throw new Error('Set OMNIAKEY_API_KEY first');
const response = await fetch('https://api.omniakey.com/v1/alpha/search', {
method: 'POST',
headers: {
Authorization: `Bearer ${key}`,
'Content-Type': 'application/json',
},
body: await readFile('jev-request.json', 'utf8'),
signal: AbortSignal.timeout(30_000),
});
if (!response.ok) throw new Error(`Jev request failed: HTTP ${response.status}`);
const result = await response.json();
console.log(result.model);
console.log(result.answers);
Erforderlich sind Python 3 beziehungsweise Node.js mit eingebautem fetch und AbortSignal.timeout. Das sind HTTP-Beispiele, keine Zusage, dass das OpenAI-SDK das Jev-Schema unterstützt. Eigene TypeSafe-SDKs beschreibt die offizielle Dokumentation.
Kontext, Rate Limits und Kosten
Es gelten gleichzeitig 64K Tokens für die gesamte Anfrage und 32K für state plus die längste einzelne Frage. Entferne irrelevanten Kontext und bündele nur Fragen, die denselben Zustand benötigen.
TypeSafe nennt 250,000 Tokens pro Sekunde und 1,200 Anfragen pro Minute, mit veränderlichen Limits während der frühen Bereitstellung. Das sind Kontolimits, keine Geschwindigkeit pro Anfrage und keine Zusage für OmniaKey. Ein Gateway kann weitere Grenzen setzen.
Der geprüfte Direktpreis beträgt $0.042 je Million Eingabetokens, Ausgabetokens sind kostenlos. Ihre Anzahl wird trotzdem zurückgegeben. Damit ist weder die gesamte API kostenlos noch die Abrechnungseinheit eines Gateways festgelegt. Prüfe dort den aktuellen Preis und die Nutzungsdaten; die Modelleinführung erläutert die Einordnung.
OmniaKey rechnet Jev im aktuellen Modellkatalog pro Anfrage ab. Prüfe für eine Kostenschätzung den aktuellen Modellpreis und die Nutzungsdaten im Dashboard.
Fehler behandeln und kontrolliert wiederholen
| Direkter TypeSafe-Status | Zuerst prüfen | Vorgehen |
|---|---|---|
401 | Richtiger Dienst für den Key, Bearer-Header | Zugang korrigieren, nicht denselben ungültigen Key wiederholen |
422 | Pflichtfelder, Fragetyp und criteria | Das im Fehler genannte Feld korrigieren |
429 | Anfrage- oder Tokenlimit | Retry-After beachten, falls vorhanden; begrenztes exponentielles Backoff mit Zufallsanteil |
529 | Vorübergehende Überlastung | Wiederholen mit maximaler Versuchszahl und Zeitgrenze |
Diese Statusbedeutungen stammen vom Direktanbieter. Gateways können eigene Authentifizierungs-, Validierungs- oder Upstream-Fehler zurückgeben. Prüfe bei nicht verfügbaren Routen auch Pfad und Modell-ID. Teile keine Schlüssel oder privaten Anfrageinhalte in Diagnoseberichten.
Trenne Modellaufruf und Geschäftsaktion: Ein Klassifizierungsversuch darf nicht zweimal dieselbe E-Mail oder Rückzahlung auslösen. Nach wiederholtem Scheitern folgt ein sichtbarer Fehler oder eine Prüfung, keine heimliche Standardentscheidung.
Häufige Fragen
Ist das die offizielle Jev-API-Dokumentation?
Dies ist eine OmniaKey-Integrationsanleitung. Das direkte Schema definiert die TypeSafe-API-Referenz, direkte Preise und Limits die Modellseite. Die Endpunkttabelle unterscheidet beide Dienste.
Kann Jev Bilder verarbeiten oder Text schreiben?
Jev 1.13 verarbeitet Text und liefert typisierte Entscheidungen. Nichttextuelle Inhalte müssen zunächst in Text oder Felder umgewandelt werden. Erklärungen, Bilder und Videos benötigen ein anderes Modell oder einen weiteren Anwendungsschritt.
Alias oder feste Modellversion?
Ein Alias ist beim Ausprobieren bequem. Für einen produktiven Ablauf mit Schwellenwerten prüfst du eine unterstützte feste Version, protokollierst model und validierst vor einem Wechsel erneut. Die Modellverfügbarkeit kann je Route abweichen.