Title: Streaming %E2%80%94 LLM EU Canonical: https://llmeu.com/de/docs/streaming/ Markdown mirror: https://llmeu.com/de/docs/streaming.md Machine-readable: https://llmeu.com/llms.txt (index) - https://llmeu.com/llms-full.txt (full catalogue) - https://llmeu.com/llms-catalogue.json Einstieg - [Schnellstart](/de/docs/quickstart/) - [Konsole](/de/docs/console/) - [Migration](/de/docs/migration/) - [API-Referenz](/de/docs/api/) Referenz - [Authentifizierung](/de/docs/authentication/) - [Endpunkte](/de/docs/endpoints/) - [Fehler](/de/docs/errors/) - [Rate Limits](/de/docs/rate-limits/) - [Streaming](/de/docs/streaming/) - [Richtlinien](/de/docs/policies/) - [Routing und Richtlinien](/de/docs/routing/) - [Datenhaltung und Regionen](/de/docs/residency/) - [Nachweise und Pr%C3%BCfung](/de/docs/evidence/) - [OpenAI-Kompatibilit%C3%A4t](/de/docs/openai-compat/) Betrieb - [Selbst hosten](/de/docs/self-hosting/) # Streaming Wie eine gestreamte Completion %C3%BCber die Leitung kommt, was der letzte Frame tr%C3%A4gt und was passiert, wenn ein Client die Verbindung schlie%C3%9Ft. ## Der Transport Mit stream: true ist die Antwort text/event-stream: ein JSON-Objekt pro data:-Zeile, jeweils gefolgt von einer leeren Zeile. Pufferung ist abgeschaltet, damit ein Proxy keine Frames zur%C3%BCckh%C3%A4lt. ``` HTTP/1.1 200 OK content-type: text/event-stream; charset=utf-8 cache-control: no-cache, no-transform connection: keep-alive ``` ## Die Frames Der erste Frame tr%C3%A4gt die Rolle assistant, dann folgt ein Frame pro Delta, dann ein Frame mit finish_reason und dem Routing-Block, dann genau ein Abschluss. Ein Client, der das Format befolgt, liest den Abschluss und h%C3%B6rt auf; ein fehlender Abschluss darf nicht als vollst%C3%A4ndige Antwort gelten. ``` data: {"id":"chatcmpl-%E2%80%A6","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]} data: {"id":"chatcmpl-%E2%80%A6","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Hallo"},"finish_reason":null}]} data: {"id":"chatcmpl-%E2%80%A6","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"llmeu":{%E2%80%A6}} data: [DONE] ``` ## Der Routing-Block reist mit dem letzten Frame Der letzte Frame tr%C3%A4gt dasselbe llmeu-Objekt, das die nicht streamende Antwort zur%C3%BCckgibt: trace_id, model_used, model_version, provider, endpoint_id, inference_region, sovereignty_class, policy_id, retention und die Kostensch%C3%A4tzung. Im Streaming ist der Verbrauch erst am Ende bekannt, deshalb reist der Block mit dem letzten Frame statt mit dem ersten. ## Verbindungsabbruch durch den Client Das Schlie%C3%9Fen der Verbindung beendet die Arbeit und schreibt den Trace mit dem, was tats%C3%A4chlich entstanden ist. Eine abgebrochene Anfrage ist trotzdem ein Aufruf, der stattgefunden hat, und erscheint im Verbrauch; als abgeschlossene Completion wird sie nicht erfasst. ## Was sich nicht streamen l%C3%A4sst Embeddings und die Plattform-API sind einzelne JSON-Antworten. stream: true auf einer nicht streamenden Route ist ein Validierungsfehler und kein stiller R%C3%BCckfall auf einen einzelnen Frame.