Streaming

Wie Streaming durch den Noirdoc-Proxy mit Echtzeit-Pseudonymisierung funktioniert.

Ueberblick

Noirdoc unterstützt Streaming für alle Provider. Pseudonymisierung und Wiederherstellung erfolgen in Echtzeit auf jedem Chunk — die vollstaendige Antwort wird nicht zwischengespeichert. Setzen Sie "stream": true im Request Body, um Streaming zu aktivieren.

Der Proxy faengt jeden Server-Sent Events (SSE) Chunk ab, reidentifiziert enthaltene Pseudonym-Tokens des Modells und leitet den wiederhergestellten Text an Ihre Anwendung weiter. Aus Sicht des Clients verhaelt sich Streaming durch Noirdoc identisch zum direkten Streaming vom Provider.

Python — OpenAI SDK

stream = client.chat.completions.create(
    model="gpt-5.4-mini",
    messages=[
        {"role": "user", "content": "Schreibe ein Anschreiben für Max Mustermann."}
    ],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

Python — Anthropic SDK

with client.messages.stream(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Schreibe ein Anschreiben für Anna Schmidt."}
    ],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

Node.js — OpenAI SDK

const stream = await client.chat.completions.create({
  model: "gpt-5.4-mini",
  messages: [
    { role: "user", content: "Schreibe ein Anschreiben für Max Mustermann." },
  ],
  stream: true,
});

for await (const chunk of stream) {
  const delta = chunk.choices[0]?.delta?.content;
  if (delta) process.stdout.write(delta);
}

Node.js — Anthropic SDK

const stream = client.messages.stream({
  model: "claude-sonnet-4-6",
  max_tokens: 1024,
  messages: [
    { role: "user", content: "Schreibe ein Anschreiben für Anna Schmidt." },
  ],
});

for await (const event of stream) {
  if (
    event.type === "content_block_delta" &&
    event.delta.type === "text_delta"
  ) {
    process.stdout.write(event.delta.text);
  }
}

cURL

curl https://api.noirdoc.de/v1/chat/completions \
  -H "Authorization: Bearer px-your-noirdoc-key" \
  -H "Content-Type: application/json" \
  -N \
  -d '{
    "model": "gpt-5.4-mini",
    "stream": true,
    "messages": [
      {"role": "user", "content": "Schreibe ein Anschreiben für Anna Schmidt, E-Mail anna@example.com."}
    ]
  }'

Das -N Flag deaktiviert die Ausgabe-Pufferung, sodass SSE-Chunks in Echtzeit erscheinen.

SSE-Format

Proxy-Endpunkte geben text/event-stream-Antworten gemaess der Server-Sent Events Spezifikation zurueck. Jedes Event ist eine data:-Zeile mit einem partiellen Antwortobjekt im JSON-Format:

data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"delta":{"content":"Sehr"},"index":0}]}

data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"delta":{"content":" geehrte"},"index":0}]}

data: [DONE]

Jede data:-Zeile enthaelt einen Chunk mit einer partiellen Antwort. Der Stream endet mit data: [DONE].