Jev — model pengambilan keputusan
MarkdownModel pengambilan keputusan Jev dari TypeSafe menjawab pertanyaan bertipe tentang teks atau JSON: memilih opsi, menilai pada skala, atau menjawab “ya/tidak” dengan probabilitas. Model ini bukan untuk chat atau generasi teks.
Panduan lengkap
https://api.ailoot.ai/v1/systemonecurl https://api.ailoot.ai/v1/systemone \
-H "Authorization: Bearer $AILOOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"state": "Tolong! Pencairan dana saya terus gagal selama 3 hari.",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Apakah ini menunjukkan keadaan mendesak?"
}
}
}' import json, os, urllib.request
body = {
"model": "jev-latest",
"state": "Tolong! Pencairan dana saya terus gagal selama 3 hari.",
"questions": {
"is_urgent": {"type": "noul", "instructions": "Apakah ini menunjukkan keadaan mendesak?"},
},
}
req = urllib.request.Request(
"https://api.ailoot.ai/v1/systemone",
data=json.dumps(body).encode(),
headers={"Authorization": "Bearer " + os.environ["AILOOT_API_KEY"],
"Content-Type": "application/json"},
)
with urllib.request.urlopen(req, timeout=60) as resp:
result = json.load(resp)
print(result["answers"]["is_urgent"]["noul"]) # 0.95const resp = await fetch("https://api.ailoot.ai/v1/systemone", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AILOOT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "jev-latest",
state: "Tolong! Pencairan dana saya terus gagal selama 3 hari.",
questions: {
is_urgent: { type: "noul", instructions: "Apakah ini menunjukkan keadaan mendesak?" },
},
}),
});
const result = await resp.json();
if (!resp.ok) throw new Error(`${resp.status} ${JSON.stringify(result)}`);
console.log(result.answers.is_urgent.noul); // 0.95{
"model": "jev-1.13.0",
"answers": {
"is_urgent": {
"type": "noul",
"noul": 0.95
}
},
"usage": { "input_tokens": 296, "output_tokens": 20 }
}Jev adalah model pengambilan keputusan kelas System One dari TypeSafe. Model ini tidak menulis teks atau melakukan percakapan: Anda mengirimkan keadaan (state) — teks atau JSON — serta sekumpulan pertanyaan, lalu menerima nilai bertipe beserta probabilitasnya. Berdasarkan nilai tersebut, kode dapat langsung bercabang, mengurutkan, dan merutekan tanpa mengurai teks bebas.
Semua pertanyaan dalam satu permintaan dinilai secara paralel dan saling independen berdasarkan stateyang sama. Menurut TypeSafe, menambah pertanyaan hampir tidak mengubah waktu respons, dan setiap pertanyaan tidak mengganggu pertanyaan lainnya.
| Aspek | Ringkasan |
|---|---|
| Model | jev-latest — alias versi stabil Jev terkini; kartu dalam katalog |
| Metode | POST /v1/systemone. Ini bukan chat: format OpenAI, Anthropic, dan Gemini tidak sesuai untuk Jev. Respons dikirim sekaligus sebagai satu JSON |
| Input yang diterima | Hanya teks: string, objek JSON, atau array teks. Ubah gambar, audio, dan video menjadi teks terlebih dahulu |
| Konteks | 64K token per permintaan — state dan semua pertanyaan digabung; state bersama pertanyaan terpanjang — hingga 32K |
| Bahasa | Menurut TypeSafe, model paling akurat dalam bahasa Inggris; bahasa lain diterima tetapi akurasinya lebih rendah — uji dengan data Anda |
| Harga | Input $0.084 per 1 juta token, output gratis |
Permintaan
Autentikasi
- Authorizationheaderwajib
Kunci Ailoot dalam format
Bearer sk-….
Isi permintaan
- modelstringwajib
jev-latest. - statestring | object | arraywajib
Yang akan dinilai: string teks atau JSON — pesan pelanggan, data dari basis data, percakapan, atau keadaan aplikasi saat ini. Objek dengan nama kolom yang jelas biasanya lebih praktis daripada satu string.
- questionsobjectwajib
Pertanyaan. Anda memilih kuncinya; respons dikembalikan dengan kunci yang sama. Kunci tidak memengaruhi jawaban — pertanyaannya ditentukan dalam
instructions. - questions.*.typestringwajib
noul,choiceatauscore— lihat di bawah. - questions.*.instructionsstring | object | arraywajib
Pertanyaan itu sendiri. Pertanyaan panjang beserta data dapat dikirim sebagai objek: pertanyaan di satu kolom, data di kolom lainnya; rujuk kolom dengan namanya di dalam tanda backtick.
- questions.*.criteriaobject | array
Opsi jawaban, berbeda untuk setiap jenis: deskripsi “ya” dan “tidak” untuk noul (opsional), kamus opsi untuk choice, dan daftar tingkat berurutan untuk score.
Jenis pertanyaan
| Jenis | Yang ditanyakan | Yang dikembalikan |
|---|---|---|
noul | Apakah pernyataan benar: ya atau tidak | noul — probabilitas “ya” dari 0 hingga 1 |
choice | Opsi mana yang sesuai dari pilihan yang diberikan | choice, probabilities, confidence |
score | Posisi state pada skala tingkat Anda | score, legend, probabilities, confidence |
Berbagai jenis dapat digabungkan dalam satu permintaan.
noul — ya atau tidak
Kolom criteria bersifat opsional: Anda dapat menjelaskan arti “ya” (true) dan “tidak” (false). Jawaban noul — angka dari 0 (tidak) hingga 1 (ya).
"is_urgent": {
"type": "noul",
"instructions": "Apakah ini menunjukkan keadaan mendesak?",
"criteria": {
"true": "Secara eksplisit membutuhkan penanganan tepat waktu",
"false": "Tidak ada urgensi yang diungkapkan"
}
}"is_urgent": {
"type": "noul",
"noul": 0.95
}choice — memilih opsi
criteria — kamus “opsi → deskripsi”; jika deskripsi tidak diperlukan, isi dengan null. Hingga 255 opsi. Dalam respons, choice — opsi yang paling mungkin, probabilities — probabilitas setiap opsi (totalnya 1), confidence — tingkat keyakinan dari 0 hingga 1.
"department": {
"type": "choice",
"instructions": "Tim mana yang seharusnya menangani ini?",
"criteria": {
"billing": "Pembayaran, penagihan, pengembalian dana",
"technical": "Bug, gangguan layanan, integrasi",
"sales": "Harga, peningkatan layanan, pelanggan baru"
}
}"department": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 0.88, "technical": 0.12, "sales": 0.0 },
"confidence": 0.81
}score — penilaian pada skala
criteria — tingkat dari terendah ke tertinggi, maksimal 10 (TypeSafe menyarankan setidaknya dua). Dalam respons, score — nilai yang dibobot berdasarkan probabilitas tingkat (dapat berada di antara dua tingkat), legend — nomor tingkat dan deskripsinya, probabilities dan confidence. Menurut TypeSafe, score cocok untuk dibandingkan dengan ambang batas, tetapi bukan sebagai angka pasti di antara tingkat.
"frustration": {
"type": "score",
"instructions": "Seberapa tinggi tingkat frustrasi pelanggan?",
"criteria": ["Tenang", "Frustrasi", "Sangat marah"]
}"frustration": {
"type": "score",
"score": 1.05,
"legend": { "0": "Tenang", "1": "Frustrasi", "2": "Sangat marah" },
"probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
"confidence": 0.92
}Respons
- modelstring
Versi model yang memberikan respons. Alias jev-latest beralih ke versi baru seiring waktu: jika Anda telah menyesuaikan ambang
confidenceuntuk versi tertentu, pantau kolom ini. - answersobject
Satu jawaban untuk setiap pertanyaan, dengan kunci yang sama. Setiap jawaban memiliki
type, sedangkan choice dan score juga memilikiconfidence. - usageobject
input_tokensdanoutput_tokens. Hanya token input yang dikenai biaya.
Beberapa pertanyaan dalam satu permintaan
Ajukan semua pertanyaan untuk satu state dalam satu permintaan: penilaiannya berlangsung paralel dan state hanya dikirim sekali. Menurut TypeSafe, pada contoh mereka dengan 13 pertanyaan, satu permintaan gabungan 12,2 kali lebih murah dan 10 kali lebih cepat daripada 13 permintaan terpisah yang dikirim berurutan, dengan jawaban yang sama.
Penilaian kompleks sebaiknya dipecah menjadi pertanyaan sederhana, lalu jawaban digabungkan dalam kode: misalnya, alih-alih “nilai pengajuan ini”, lakukan penilaian terpisah atas pasar, kelayakan, dan perbedaannya dari pesaing. Bobot kemudian diubah dalam kode, bukan dalam teks pertanyaan.
{
"model": "jev-latest",
"state": "Tolong! Pencairan dana saya terus gagal selama 3 hari.",
"questions": {
"department": {
"type": "choice",
"instructions": "Tim mana yang seharusnya menangani ini?",
"criteria": {
"billing": "Pembayaran, penagihan, pengembalian dana",
"technical": "Bug, gangguan layanan, integrasi",
"sales": "Harga, peningkatan layanan, pelanggan baru"
}
},
"frustration": {
"type": "score",
"instructions": "Seberapa tinggi tingkat frustrasi pelanggan?",
"criteria": ["Tenang", "Frustrasi", "Sangat marah"]
},
"is_urgent": {
"type": "noul",
"instructions": "Apakah ini menunjukkan keadaan mendesak?"
}
}
}Kapan cocok digunakan
- Perutean. Kirim pesan ke departemen yang tepat dan permintaan ke penangan yang sesuai: kode sederhana, model besar, atau manusia.
- Pengurutan dan prioritas. Urgensi, sentimen, risiko — dinilai pada skala, dengan ambang dalam kode.
- Moderasi dan pemeriksaan. Periksa apakah pesan melanggar aturan, sumber mendukung kutipan, atau dokumen memuat jawaban sebelum teks diproses lebih lanjut.
- Penilaian dan pemeringkatan. Nilai dokumen, kandidat, atau cuplikan yang ditemukan berdasarkan rubrik Anda, lalu tentukan langkah berikutnya dalam kode.
- Pengganti instruksi “kembalikan JSON” yang rentan gagal. Panggilan yang secara bawaan mengembalikan nilai bertipe, bukan teks yang perlu diurai.
Kapan tidak cocok digunakan
- Chat, jawaban kepada pengguna, generasi teks atau kode. Jev tidak menulis teks — untuk itu tersedia model teks.
- Model untuk Claude Code, Cursor, dan agen lainnya. jev-latest tidak dapat menggantikan model agen: agen memerlukan model yang menulis teks dan memanggil alat. Jev dapat dipanggil dari kode yang ditulis agen untuk Anda.
- Aritmetika, penghitungan, perbandingan tanggal. Menurut TypeSafe, hal tersebut lebih andal dilakukan dalam kode; tanyakan hanya aspek semantis kepada model — misalnya, ekstrak bagian tanggal melalui choice.
- Gambar, audio, dan video. Model hanya menerima teks — ubah data tersebut menjadi teks terlebih dahulu.
Harga
Hanya token input yang dikenai biaya — kolom usage.input_tokens dalam respons: $0.084 per 1 juta. Token output gratis.
Permintaan pada contoh di halaman ini (296 token input) berbiaya kurang dari $0.0001.
Sebelum permintaan, Ailoot menahan dana dari saldo; setelah respons diterima, biaya didebit sekali berdasarkan penggunaan aktual — cara kerjanya.
Batas
| Aspek | Batas |
|---|---|
| Seluruh permintaan: state dan semua pertanyaan | 64K token |
| state bersama pertanyaan terpanjang | 32K token |
| Opsi dalam satu choice | hingga 255 |
| Tingkat dalam satu score | dari 2 hingga 10 |
| Input | hanya teks: string, objek JSON, atau array teks |
Batas model berdasarkan informasi TypeSafe. Batasan kunci dan saldo Anda berlaku seperti pada model Ailoot lainnya: Kesalahan dan batas.
Kesalahan
Kesalahan dikembalikan dalam format umum Ailoot API: kode, pesan yang jelas, dan Request ID. Kesalahan yang paling sering terjadi pada metode ini:
| Kode | Kapan | Tindakan |
|---|---|---|
400 invalid_request | Isi permintaan gagal validasi: state, model, atau questions tidak ada; type tidak dikenal; choice memiliki lebih dari 255 opsi; score memiliki lebih dari 10 tingkat | Perbaiki permintaan sesuai pesan kesalahan: tanpa perubahan, validasi akan tetap gagal |
400 context_length_exceeded | Gabungan state dan pertanyaan melebihi batas model | Saring state dalam kode, sisakan data yang dibutuhkan pertanyaan |
401 invalid_api_key | Kunci tidak ada atau tidak valid | Kirim kunci melalui header Authorization |
402 insufficient_balance | Saldo bebas tidak cukup untuk saldo yang ditahan | Isi ulang saldo |
404 model_not_found, unsupported_endpoint | ID salah atau model dipanggil melalui metode yang tidak sesuai, misalnya /v1/chat/completions | Panggil jev-latest hanya melalui POST /v1/systemone |
429 rate_limit_exceeded | Terlalu banyak permintaan | Tunggu selama jumlah detik pada header Retry-After, lalu coba lagi |
503 model_overloaded, model_unavailable | Model sementara kelebihan beban atau tidak tersedia | Jika X-Should-Retry: true — coba lagi setelah jumlah detik pada Retry-After; jika false — periksa dahulu Request ID dalam riwayat |
504 model_timeout | Model tidak merespons tepat waktu | Jangan kirim ulang permintaan sebelum memeriksa Request ID dalam riwayat |
Daftar kode lengkap tersedia di halaman Kesalahan dan batas.