DokumentasiReferensi API

Decisions

Menjawab pertanyaan atas sebuah state, dengan bentuk body milik modelnya.

Ringkasan

Satu rute untuk menjawab daftar pertanyaan atas sebuah state, dan tagihannya hanya token input.

POST/v1/decisionsbutuh API key

Kamu mengirim satu state — bisa teks, objek, atau array — beserta peta pertanyaan yang ingin dijawab atas state itu. Jawaban model diteruskan kembali apa adanya sebagai body respons.

Rute ini bukan rute chat dengan nama lain. Bentuk body-nya tidak memakai messages: yang dibaca model adalah state dan questions. Satu request, satu set jawaban, tanpa percakapan bertahap.

Responsnya sinkron, seperti rute media lain: satu body utuh, tanpa streaming. Rute chat yang sebenarnya, beserta bentuk pesannya, ada di Chat completions.

Body request

Bentuknya bentuk asli model, bukan bentuk chat. Ini bagian yang paling sering salah.

FieldTipeWajibArtinya
modelstringWajibId model, persis seperti yang ada di katalog.
statestring | object | arrayWajibBahan yang dinilai. Ketiga bentuk diterima, dan yang mana yang masuk akal ditentukan modelnya.
questionsobjectWajibPeta pertanyaan: nama pertanyaan sebagai kunci, objek pertanyaan sebagai nilai.
application/json
{
  "model": "<id-dari-katalog>",
  "state": "Pesanan belum sampai setelah sepuluh hari.",
  "questions": {
    "refund": { "type": "choice", "options": ["ya", "tidak"] }
  }
}

questions adalah peta, bukan daftar: tiap pertanyaan punya nama, dan nama itulah yang kamu pakai untuk mengenalinya. Bentuk jawaban yang kembali mengikuti model yang kamu panggil, jadi baca jawabannya sebagai respons model itu, bukan sebagai struktur yang dijamin platform.

Satuan tagihan

Decisions ditagih dalam input_token, dan output-nya gratis. Yang dihitung hanya token input dari request-mu; jawaban model tidak menambah tagihan, sepanjang apa pun jawaban itu.

Karena output tidak ditagih, tidak ada dana yang ditahan untuk output. Yang ditahan saat request masuk hanya bagian input, dan itulah yang diselesaikan setelah model menjawab.

Harga inputnya dibaca dari katalog seperti model chat: price.unit berisi input_token, dan tarif per satu juta token ada di price.unit_price_display. Pada satuan token, unit_price memang null — itu bukan tanda belum ada harga, karena angkanya ada di tarif per juta token. Model yang belum punya versi harga sama sekali tetap terdaftar dengan price bernilai null.

Kapabilitas yang dibutuhkan

Decisions tidak punya kapabilitas tersendiri. Rute ini menuntut capabilities.chat = true, karena ia menjawab lewat jalur chat di balik layar.

Artinya model yang bisa dipakai di POST /v1/chat/completions adalah kandidat yang sama di sini, dan model yang tidak mendeklarasikan chat ditolak dengan kode yang sama seperti rute chat: capability_mismatch kalau flag-nya false, capabilities_not_declared kalau flag-nya tidak ada.

Seperti rute media lain, pemeriksaan ini berjalan sebelum saldo ditahan, jadi penolakan tidak berbiaya.

Contoh

curl
export MODEL="<id-dari-katalog>"

curl "https://api.menvora.web.id/v1/decisions" \
  -H "Authorization: Bearer sk-nusa-..." \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"$MODEL\",\"state\":\"Pesanan belum sampai setelah sepuluh hari.\",\"questions\":{\"refund\":{\"type\":\"choice\",\"options\":[\"ya\",\"tidak\"]}}}"

Perhatikan bentuk questions: kuncinya refund, dan nilainya objek yang menjelaskan pertanyaannya. Kunci itulah namamu untuk pertanyaan tersebut; model tidak menerima daftar bernomor, jadi tidak ada urutan yang perlu kamu jaga.

Kalau kamu memakai SDK chat, jangan arahkan pemanggilan chat ke rute ini. SDK mengirim bentuk messages, dan rute ini membaca state serta questions. SDK tidak akan mengubah bentuknya untukmu.