Non-autoregressive decisions
Satu forward pass menjawab pertanyaan bertipe choice, score, dan noul atas state apa pun — teks, email, tiket, atau dokumen JSON. Tidak ada parsing, tidak ada hallucination.
Contoh aplikasi web di atas laya: engine keputusan non-autoregressive. Alih-alih menyintesis teks lalu di-parse, model menjawab langsung tiap pertanyaan sebagai distribusi — jadi hasilnya bisa dipakai langsung oleh kode, bukan perlu diurai regex.
Tidak ada teks yang digenerate, jadi tidak ada jawaban yang karangan. Yang keluar hanya label, skor, dan probabilitas.
Banyak pertanyaan dijawab sekaligus dalam satu kali jalankan model, bukan satu call per pertanyaan.
Jawaban diproyeksikan balik ke tipe aslinya: enum string, integer, atau boolean sesuai JSON Schema yang kamu kirim.
Bahasa dan kesulitan request memilih checkpoint secara otomatis; bisa dipaksa
per-request lewat model atau lang.
Tiap tipe punya bentuk jawaban dan cara baca confidence yang berbeda.
Dari daftar opsi yang kamu tentukan. Dipakai untuk routing, klasifikasi, atau keputusan diskret.
{ "type": "choice",
"instructions": "Which team?",
"criteria": { "billing": "refunds",
"tech": "bugs" } }
Level berurutan. Perhatikan: ini nilai harapan pada skala
0..N−1, bukan probabilitas — itu sebabnya
/guardrail menormalkan scale-nya.
{ "type": "score",
"instructions": "How urgent?",
"criteria": ["not urgent",
"soon",
"blocking"] }
Probabilitas langsung pada skala 0..1, jadi paling aman dipakai untuk gating dan guardrail.
{ "type": "noul",
"instructions": "Is the
customer blocked?" }
Sebelas endpoint, ditambah / untuk halaman playground.
Semua error memakai satu envelope yang sama.
| Method | Path | Guna |
|---|---|---|
| POST | /predict | Satu state + satu question set, auto-route bahasa |
| POST | /predict/batch | Banyak state, dikelompokkan per checkpoint |
| POST | /structured/questions | Lihat pertanyaan apa yang dipetakan dari sebuah JSON Schema |
| POST | /structured/decide | Jawab terhadap JSON Schema, hasil mengikuti tipe schema |
| POST | /shortlist | Persempit choice beroption banyak ke top-k via embedding |
| POST | /guardrail | Screening sebelum request diteruskan ke model lain |
| GET | /health | Liveness, config, dan batas request |
| GET | /models /qtypes /presets /redaction/kinds | Metadata |
Dua fitur keamanan yang melekat: redaction PII sebelum state menyentuh checkpoint
(regex plus validasi Luhn, termasuk bentuk NIK dan nomor telepon), dan guardrail
dengan annotate / filter / raise — yang
terakhir mengembalikan 403 supaya bisa ditegakkan di proxy.
# 1. install (butuh Python 3.10+)
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
# 2. jalankan, lalu buka http://127.0.0.1:8000
.\.venv\Scripts\python.exe app.py --device cpu --port 8000
# 3. satu request, satu forward pass
curl -s localhost:8000/predict -H 'content-type: application/json' -d '{
"state": {"body": "We were billed twice for March. Refund it today."},
"questions": {
"department": {"type": "choice", "instructions": "Which team?",
"criteria": {"billing": "refunds, invoices", "tech": "bugs"}},
"urgency": {"type": "score", "instructions": "How urgent?",
"criteria": ["not urgent", "soon", "blocking"]}
}
}'
Di CPU murni, request pertama ±100 detik (termasuk unduh checkpoint) dan
panggilan berikutnya 30–50 detik untuk 4 pertanyaan. Angka di README upstream
(33 ms) diukur di GPU T4. Untuk produksi, pakai --device cuda.
Diverifikasi lokal di laya 0.3.20 / torch 2.14.0+cpu / fastapi 0.141.1.
Selain happy path, yang diuji juga kontrak error: 422 untuk validasi,
413 untuk state kepanjangan, 404 untuk route asing,
403 untuk guardrail yang ditolak, dan 503 ketika checkpoint
gagal dimuat.