Non-autoregressive decisions

Typed Decisions
tanpa text generation

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.

1 Apa ini

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.

Anti-hallucination

Tidak ada teks yang digenerate, jadi tidak ada jawaban yang karangan. Yang keluar hanya label, skor, dan probabilitas.

Satu forward pass

Banyak pertanyaan dijawab sekaligus dalam satu kali jalankan model, bukan satu call per pertanyaan.

Ter-tipikalisasi

Jawaban diproyeksikan balik ke tipe aslinya: enum string, integer, atau boolean sesuai JSON Schema yang kamu kirim.

Router multi-checkpoint

Bahasa dan kesulitan request memilih checkpoint secara otomatis; bisa dipaksa per-request lewat model atau lang.

2 Tiga tipe pertanyaan

Tiap tipe punya bentuk jawaban dan cara baca confidence yang berbeda.

choice

Pilih satu label

Dari daftar opsi yang kamu tentukan. Dipakai untuk routing, klasifikasi, atau keputusan diskret.

{ "type": "choice",
  "instructions": "Which team?",
  "criteria": { "billing": "refunds",
                "tech": "bugs" } }
score

Nilai pada skala

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"] }
noul

Ya atau tidak

Probabilitas langsung pada skala 0..1, jadi paling aman dipakai untuk gating dan guardrail.

{ "type": "noul",
  "instructions": "Is the
    customer blocked?" }

3 Endpoint

Sebelas endpoint, ditambah / untuk halaman playground. Semua error memakai satu envelope yang sama.

MethodPathGuna
POST/predictSatu state + satu question set, auto-route bahasa
POST/predict/batchBanyak state, dikelompokkan per checkpoint
POST/structured/questionsLihat pertanyaan apa yang dipetakan dari sebuah JSON Schema
POST/structured/decideJawab terhadap JSON Schema, hasil mengikuti tipe schema
POST/shortlistPersempit choice beroption banyak ke top-k via embedding
POST/guardrailScreening sebelum request diteruskan ke model lain
GET/healthLiveness, config, dan batas request
GET/models /qtypes /presets /redaction/kindsMetadata

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.

4 Mulai

# 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"]}
  }
}'

Catatan jujur soal performa

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.

5 Status verifikasi

Diverifikasi lokal di laya 0.3.20 / torch 2.14.0+cpu / fastapi 0.141.1.

✓
unit_test
✓
feature_test
✓
smoke_test
30–50s
per request di CPU

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.