Uygulamayı aç
Moonborn — Developers

Streaming pattern'leri

Generation pipeline ve chat endpoint'inden Server-Sent Events — event şekilleri, reconnect, abort.

İki endpoint stream eder:

  • POST /v1/personas?stream=true — altı adımlı generation pipeline.
  • POST /v1/chat/sessions/{id}/messages?stream=true — chat yanıtları.

İkisi de Server-Sent Events konuşur. Aynı envelope, farklı event tipleri.

Generation event'leri

event: step.started      data: { step: "soul_draft" }
event: step.completed    data: { step: "soul_draft", durationMs, model }
event: pipeline.completed data: { personaId, durationMs }

Altı adım sırayla step.started + step.completed yayar; terminal pipeline.completed final persona ID'yi taşır.

Chat event'leri

event: token       data: { delta: "Anlat..." }
event: token       data: { delta: " bana" }
event: completed   data: { messageId, driftScore, driftThreshold }

Token'lar sırayla stream eder; completed bir kez gelir, drift envelope'la.

Okuma döngüsü (TypeScript)

const res = await fetch(url, { method: 'POST', headers, body });
const reader = res.body!.getReader();
const decoder = new TextDecoder();
let buf = '';
while (true) {
  const { value, done } = await reader.read();
  if (done) break;
  buf += decoder.decode(value, { stream: true });
  let idx;
  while ((idx = buf.indexOf('\n\n')) !== -1) {
    const frame = buf.slice(0, idx);
    buf = buf.slice(idx + 2);
    const lines = frame.split('\n');
    const event = lines.find((l) => l.startsWith('event:'))?.slice(6).trim();
    const data = lines.find((l) => l.startsWith('data:'))?.slice(5).trim();
    if (event === 'token') process.stdout.write(JSON.parse(data!).delta);
  }
}

SDK bunu sana yapar — bkz. client.chat.streamMessage() ve client.personas.createStream().

Abort

fetch'e bir AbortController.signal geç. Client disconnect ettiği an Moonborn faturalandırmayı durdurur.

Reconnect

SSE'nin built-in resume'i yok. Client'ın stream ortasında düşerse, generation/reply sunucu tarafında zaten çalışıyor — generation için GET /v1/personas/{id} veya chat için GET /v1/chat/sessions/{id}/messages ile yeniden çek. Stream'i retry etme.

Tarif

Her tier.