Skip to content

Streaming balasan ​

Ikuti run secara langsung lewat Server-Sent Events:

GET /agent-runs/{runId}/events

Di browser, pakai EventSource dengan credentials:

ts
const es = new EventSource(`https://api.lexcetha.com/api/v1/agent-runs/${runId}/events`, { withCredentials: true });
let reply = '';
es.addEventListener('assistant.delta', (e) => { reply += JSON.parse(e.data).text; render(reply); });
es.addEventListener('approval.required', (e) => askUser(JSON.parse(e.data)));
es.addEventListener('run.completed', (e) => { render(JSON.parse(e.data).output); es.close(); });
es.addEventListener('run.failed', (e) => { showError(JSON.parse(e.data).message); es.close(); });
es.addEventListener('run.cancelled', () => es.close());

Dari server, baca stream dengan client SSE apa pun beserta header Authorization: Bearer.

Event ​

Setiap event punya id yang terus bertambah, nama, dan payload data berformat JSON.

EventDataKapan
run.started{ mode, botId }Run dimulai
assistant.delta{ text }Potongan balasan berikutnya. Tambahkan ke teks sebelumnya.
tool.proposed{ callId, toolSlug, arguments }Bot ingin memakai tool (argumen disamarkan)
approval.required{ approvalId, callId, toolSlug, risk, summary, expiresAt }Tool perlu persetujuan Anda, lihat Approval
run.waiting{ approvals: [approvalId] }Run berhenti sampai approval itu diputuskan
tool.started{ callId, toolSlug }Tool sedang berjalan
tool.completed{ callId, toolSlug, status, result? }status adalah succeeded (dengan result), failed, denied, rejected, expired, connection_required, atau duplicate
run.completed{ output, stopReason }Selesai. output adalah balasan lengkap.
run.failed{ code, message }Berhenti karena error
run.cancelled{}Dibatalkan

run.completed, run.failed, dan run.cancelled adalah event terakhir: tutup stream setelahnya.

stopReason bernilai needs_setup ketika bot meminta Anda menghubungkan atau memasang sesuatu yang Anda tag; lihat Lampiran & tag.

Menyambung ulang ​

Koneksi bisa terputus. Sambungkan ulang dengan id event terakhir, dan stream berlanjut dari sana tanpa mengulang atau kehilangan apa pun:

  • EventSource mengirim Last-Event-ID secara otomatis.
  • Client lain bisa mengirim header Last-Event-ID, atau ?after={id}.

Server mengirim komentar setiap 15 detik agar koneksi tetap hidup, dan menutup stream setelah 30 menit; sambungkan ulang untuk melanjutkan dari titik terakhir.

Lex oleh Gavalytics AI