Lewati ke konten

Chat completions

POST https://api.satupod.com/v1/chat/completions

Bentuk permintaan dan jawabannya sama dengan Chat Completions OpenAI. Bagian di bawah hanya mencatat apa yang perlu diketahui di Satupod.

Terminal window
curl https://api.satupod.com/v1/chat/completions \
-H "Authorization: Bearer $SATUPOD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "NAMA_MODEL",
"messages": [
{"role": "system", "content": "Jawab singkat dalam bahasa Indonesia."},
{"role": "user", "content": "Apa itu VPS?"}
],
"max_tokens": 500
}'

Kirim "stream": true untuk menerima jawaban sebagai Server-Sent Events, sama seperti OpenAI.

stream = client.chat.completions.create(
model="NAMA_MODEL",
messages=[{"role": "user", "content": "Ceritakan sejarah Jakarta."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")

Kalau koneksi terputus di tengah stream, server mengirim event berisi error.code = LLM_STREAM_UNCERTAIN. Bagian yang sudah dihasilkan tetap ditagih. Periksa AI → Pemakaian sebelum mengulang, supaya tidak tertagih dua kali.

Semua model chat mendukung tools, sampai 128 tools per permintaan, dengan keempat bentuk tool_choice: none, auto, required, dan pilihan satu fungsi.

tools = [{
"type": "function",
"function": {
"name": "cek_status_pesanan",
"description": "Mengambil status pesanan berdasarkan nomor",
"parameters": {
"type": "object",
"properties": {"nomor": {"type": "string"}},
"required": ["nomor"],
},
},
}]
response = client.chat.completions.create(
model="NAMA_MODEL",
messages=[{"role": "user", "content": "Pesanan INV-123 sudah sampai mana?"}],
tools=tools,
max_tokens=1000,
)

Jalankan fungsinya di server Anda, lalu kirim hasilnya kembali sebagai pesan role: "tool" dengan tool_call_id yang sama.

response_format Model yang menerima
{"type": "text"} Semua model chat
{"type": "json_object"} Semua model chat. Ini instruksi agar model menjawab JSON, bukan jaminan, jadi tetap validasi hasilnya.
{"type": "json_schema", ...} Hanya model dengan fitur Structured output di katalog. Model lain menolak dengan LLM_STRUCTURED_COUNT_UNSUPPORTED.

Gambar dikirim di pesan dengan bentuk image_url milik OpenAI (URL publik atau data URL base64).

  • Satu pilihan per permintaan (n = 1).
  • max_tokens dan max_completion_tokens sama-sama diterima, dan diteruskan ke provider dalam bentuk yang dibaca provider itu. Kalau tidak diisi, batas bawaan model yang berlaku. Angka di atas batas platform ditolak dengan LLM_OUTPUT_LIMIT.
  • Panjang pesan, deskripsi tool, dan JSON schema tidak dibatasi tersendiri. Yang membatasi adalah ukuran body 128 MB dan context model.
  • Permintaan dengan bentuk yang salah ditolak dengan LLM_REQUEST_INVALID, dan pesannya menyebut field yang salah.

POST /v1/completions adalah bentuk teks lama OpenAI. Di Satupod, prompt diubah menjadi satu pesan user lalu dijalankan di jalur chat yang sama, jadi tarif dan batasnya sama.

  • prompt hanya satu string (array berisi satu elemen juga diterima).
  • echo, suffix, dan logprobs ditolak.
  • Mendukung JSON maupun streaming.

Untuk aplikasi baru, pakai /v1/chat/completions.