Chat completions
POST https://api.satupod.com/v1/chat/completionsBentuk permintaan dan jawabannya sama dengan Chat Completions OpenAI. Bagian di bawah hanya mencatat apa yang perlu diketahui di Satupod.
Contoh
Section titled “Contoh”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 }'from openai import OpenAI
client = OpenAI(base_url="https://api.satupod.com/v1", api_key=SATUPOD_API_KEY)response = client.chat.completions.create( model="NAMA_MODEL", messages=[{"role": "user", "content": "Apa itu VPS?"}], max_tokens=500,)print(response.choices[0].message.content)print(response.usage)Streaming
Section titled “Streaming”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.
Function calling
Section titled “Function calling”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.
JSON dan structured output
Section titled “JSON dan structured output”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 sebagai input
Section titled “Gambar sebagai input”Gambar dikirim di pesan dengan bentuk image_url milik OpenAI (URL publik atau data URL base64).
Batas dan perbedaan
Section titled “Batas dan perbedaan”- Satu pilihan per permintaan (
n= 1). max_tokensdanmax_completion_tokenssama-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 denganLLM_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.
/v1/completions
Section titled “/v1/completions”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.
prompthanya satu string (array berisi satu elemen juga diterima).echo,suffix, danlogprobsditolak.- Mendukung JSON maupun streaming.
Untuk aplikasi baru, pakai /v1/chat/completions.