Anoman Decision Models
Model keputusan bertipe — didukung oleh JEV / TypeSafe "System One" — yang menjawab pertanyaan ya/tidak, pilihan, dan penilaian yang sempit dengan probabilitas terkalibrasi. Bukan model chat: tidak ada teks bebas, tidak ada bentuk output yang berhalusinasi.
Konsep
Apa itu Decision Models?
Decision Models adalah juri keputusan bertipe (typed-decision judges), bukan model chat — model ini tidak menghasilkan teks bebas sama sekali.
Anda mengirim konten yang akan dinilai sebagai state, ditambah sekumpulan questions bertipe yang ingin Anda jawab tentang konten tersebut, dan model mengembalikan jawaban bertipe dengan probabilitas terkalibrasi untuk masing-masing, dalam satu proses paralel. Model ini tidak bisa mengembalikan apa pun di luar skema yang Anda minta — tidak ada bidang teks bebas untuk berhalusinasi.
noulPenilaian ya/tidak
Probabilitas 0–1 yang menjawab pertanyaan bersifat boolean (mis. "apakah ini mendesak?"). Tidak ada bidang confidence — probabilitas itu sendiri adalah tingkat keyakinannya.
choicePilih satu dari N label
Mengklasifikasikan ke salah satu opsi berlabel Anda dan mengembalikan distribusi probabilitas atas semua opsi, sehingga Anda bisa melihat seberapa dekat opsi runner-up.
scoreBeri nilai pada skala berurutan
Menempatkan konten pada skala berurutan yang Anda definisikan (2–10 tingkat), dengan distribusi probabilitas di tiap tingkat — cocok untuk penilaian tingkat keparahan, sentimen, atau kualitas.
Kasus penggunaan
Kasus penggunaan umum
Decision Models paling kuat pada penilaian yang sempit, terurai, dan bervolume tinggi — bukan generasi teks terbuka. Pola umum:
- Routing tiket dan intent — mengklasifikasikan pesan masuk ke tim atau cabang alur kerja.
- Klasifikasi konten dan tingkat keparahan — menandai konten yang berisiko, sensitif, atau relevan dengan kebijakan.
- Menilai output model LLM itu sendiri — menilai kualitas, nada, atau keakuratan sebuah chat completion sebelum ditampilkan ke pengguna.
- Gating risiko pemanggilan tool oleh agent — memutuskan apakah sebuah tool call yang diusulkan perlu persetujuan manusia.
- Klasifikasi PII dan sensitivitas — pemeriksaan awal sebelum konten mencapai sistem hilir.
- Penyaring murah di depan model chat yang mahal — hanya bayar untuk model besar pada request yang benar-benar membutuhkannya.
API
Endpoint decisions — POST /anoman/v1/decisions
Satu endpoint. Request mengikuti bentuk asli JEV {model, state, questions}, response mengikuti bentuk asli JEV {answers, usage} yang dibungkus dalam amplop standar Anoman.
Request
curl https://api.anoman.io/anoman/v1/decisions \
-H "Authorization: Bearer anm-sk-..." \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"state": "Customer: My invoice charged me twice this month and I need this fixed today.",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Is this ticket urgent and time-sensitive?"
},
"category": {
"type": "choice",
"instructions": "Which team should this ticket route to?",
"criteria": {
"billing": "Billing",
"technical": "Technical issue",
"account": "Account access"
}
},
"tone": {
"type": "score",
"instructions": "Rate the customer's tone.",
"criteria": ["Very negative", "Negative", "Neutral", "Positive", "Very positive"]
}
}
}'Response — 200 OK
{
"data": {
"model": "jev-1.13.0",
"answers": {
"is_urgent": { "type": "noul", "noul": 0.94 },
"category": {
"type": "choice",
"choice": "billing",
"confidence": 0.91,
"probabilities": { "billing": 0.91, "technical": 0.06, "account": 0.03 }
},
"tone": {
"type": "score",
"score": 0.18,
"confidence": 0.77,
"probabilities": { "Very negative": 0.31, "Negative": 0.46, "Neutral": 0.17, "Positive": 0.05, "Very positive": 0.01 }
}
},
"usage": { "input_tokens": 142, "output_tokens": 0 }
},
"error": null,
"meta": { "request_id": "req_...", "timestamp": "2026-09-22T10:00:00Z", "region": "id" }
}Kode error
| HTTP | Kode error | Arti |
|---|---|---|
| 401 | auth_invalid | API key hilang atau tidak valid. |
| 402 | token_quota_exceeded / insufficient_balance | Pendanaan akun Anda untuk request ini — kredit signup, bucket token pass, pool alokasi Pro, atau saldo top-up — telah habis. |
| 422 | invalid_request | Request melanggar batas skema: questions kosong, terlalu banyak questions, daftar criteria di luar rentang, atau body terlalu besar. |
| 429 | rate_limit_exceeded | Batas laju per-key atau batas request bersamaan Anda tercapai. |
| 502 | provider_error | JEV mengembalikan error, atau mengembalikan 200 dengan bentuk answer yang rusak sehingga tidak bisa diuraikan Anoman. |
| 503 | decisions_unavailable | Decision Models sementara tidak tersedia (feature flag mati, timeout provider, atau cost breaker sedang terbuka). |
/v1/chat/completions.Agent
Integrasi dengan AI agent
Panggil endpoint decisions sebagai langkah routing atau guard dalam alur kendali sebuah agent: kirim konten yang akan ditindaklanjuti agent sebagai state, ajukan pertanyaan routing, lalu cabangkan berdasarkan choice dan confidence yang dikembalikan sebelum membiarkan agent melanjutkan.
import httpx
async def route_ticket(ticket_text: str) -> str:
async with httpx.AsyncClient(timeout=10) as client:
resp = await client.post(
"https://api.anoman.io/anoman/v1/decisions",
headers={
"Authorization": "Bearer anm-sk-...",
"Content-Type": "application/json",
},
json={
"model": "jev-latest",
"state": ticket_text,
"questions": {
"route": {
"type": "choice",
"instructions": "Which team should handle this ticket?",
"criteria": {
"billing": "Billing",
"eng": "Engineering",
"cs": "General support",
},
}
},
},
)
resp.raise_for_status()
answer = resp.json()["data"]["answers"]["route"]
# Confidence-gate the routing decision before acting on it.
if answer["confidence"] < 0.6:
return "escalate_to_human"
return answer["choice"]Klien
Integrasi dengan klien AI umum
Decisions adalah endpoint asli Anoman, bukan endpoint chat yang kompatibel dengan OpenAI — panggil langsung lewat HTTP dengan klien standar bahasa pemrograman Anda, bukan SDK chat OpenAI atau Anthropic.
# Direct HTTP call — decisions is Anoman-native, not chat-shaped.
curl https://api.anoman.io/anoman/v1/decisions \
-H "Authorization: Bearer anm-sk-..." \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"state": "...",
"questions": { "is_spam": { "type": "noul", "instructions": "Is this spam?" } }
}'Untuk menyambungkan lapisan HTTP sebuah agent (header auth, base URL, retry), lihat panduan integrasi AI agent — pola API key dan Bearer-token yang sama berlaku untuk endpoint decisions.
Penanganan data
Penanganan data & residensi
Perutean ke AS. Berbeda dari sisa gateway Anoman (single-region Jakarta), Decision Models merutekan request Anda ke API JEV di Amerika Serikat. Jika konten Anda harus tetap berada dalam kawasan, jangan kirim ke endpoint ini.
Hanya state yang diredaksi. PII yang terdeteksi dalam state dimasking sebelum meninggalkan Anoman. questions/instructions Anda dikirim ke JEV persis seperti yang Anda tulis dan tidak dipindai atau diredaksi — jangan menaruh rahasia atau identitas sensitif di teks pertanyaan Anda.
Keputusan bersifat probabilistik. Setiap jawaban adalah probabilitas terkalibrasi, bukan kepastian. Tinjau keputusan penting sebelum menindaklanjutinya, terutama saat confidence yang dikembalikan rendah.
Coba Decision Models
Skema request dan response lengkap, plus setiap endpoint Anoman, tersedia di API reference.