Skip to main content

Chat API

Chat asinkron antara manusia dan agen LLM — polling, balas, riwayat, jumlah belum dibaca, unggah file.


Chat API

Chat API memungkinkan pesan asinkron antara manusia dan agen LLM. Berbeda dengan chat sinkron (gaya ChatGPT), manusia dapat meninggalkan pesan saat agen sedang bekerja — agen melakukan polling di antara pemanggilan alat.

Cara Kerja

Human (browser) ──POST /chat/send──▶ Synapse ◀──GET /chat/poll── Agent (LLM)
                                     │
                                     └── marks messages as read on poll
  1. Manusia mengirim pesan melalui web UI (menggunakan JWT)
  2. Pesan disimpan, ditandai sebagai belum dibaca
  3. Agen melakukan polling GET /chat/poll di antara pemanggilan alat
  4. Polling mengembalikan semua pesan belum dibaca dan menandainya sebagai sudah dibaca
  5. Agen memproses pesan, secara opsional membalas melalui POST /chat/reply

Endpoint

GET /chat/poll

Polling pesan baru dari manusia. Mengembalikan pesan belum dibaca dan menandainya sebagai sudah dibaca. Gunakan ini di antara pemanggilan alat.

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     https://synapse.schaefer.zone/chat/poll

Respons:

{
  "messages": [
    {
      "id": "msg_001",
      "role": "human",
      "content": "How's the deployment going?",
      "created_at": "2026-06-27T..."
    }
  ]
}

POST /chat/reply

Mengirim pesan sebagai agen.

curl -X POST https://synapse.schaefer.zone/chat/reply \
  -H "Authorization: Bearer YOUR_MIND_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "Deployment is 80% done. CI is green, just waiting for Docker push."}'

POST /chat/send

Mengirim pesan sebagai manusia (memerlukan JWT, bukan Mind Key).

curl -X POST https://synapse.schaefer.zone/chat/send \
  -H "Authorization: Bearer YOUR_JWT" \
  -H "Content-Type: application/json" \
  -d '{"content": "Can you check the logs?"}'

GET /chat/history

Mengambil riwayat chat terbaru (kedua peran).

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/chat/history?limit=50"

GET /chat/unread

Mengambil jumlah pesan belum dibaca.

# Menghitung pesan belum dibaca dari manusia (untuk agen)
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/chat/unread?role=agent"

# Menghitung pesan belum dibaca dari agen (untuk manusia)
curl -H "Authorization: Bearer YOUR_JWT" \
     "https://synapse.schaefer.zone/chat/unread?role=human"

GET /chat/status

Mengambil status sesi chat (timestamp pesan terakhir, jumlah belum dibaca).

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     https://synapse.schaefer.zone/chat/status

POST /chat/upload

Mengunggah lampiran file untuk pesan tertentu (form multipart).

curl -X POST https://synapse.schaefer.zone/chat/upload \
  -H "Authorization: Bearer YOUR_JWT" \
  -F "message_id=msg_001" \
  -F "file=@screenshot.png"

GET /chat/files/:message_id

Mendaftar lampiran file untuk sebuah pesan.

curl -H "Authorization: Bearer YOUR_JWT" \
     https://synapse.schaefer.zone/chat/files/msg_001

GET /chat/file/:file_id

Mengunduh lampiran file.

curl -H "Authorization: Bearer YOUR_JWT" \
     https://synapse.schaefer.zone/chat/file/file_001 --output download.png

Pola Polling

Lakukan polling setiap 30-60 detik di antara pemanggilan alat. Jangan polling lebih sering dari itu — ini membuang kuota API dan tidak memberikan manfaat.
# Pseudo-code
while working:
    messages = poll_chat()
    for msg in messages:
        process_message(msg)
        reply(f"Acknowledged: {msg.content}")
    do_one_tool_call()

Langkah Berikutnya