$ curl -N -i "$BASE/chat/stream?prompt=Why%20SSE%3F"
HTTP/1.1 200 OK
Content-Type: text/event-stream
Date: Sat, 17 Oct 2026 17:14:18 GMT
Server: Kestrel
Cache-Control: no-cache,no-store
Content-Encoding: identity
Pragma: no-cache
Transfer-Encoding: chunked
X-Accel-Buffering: no

event: token
data: {"text":"You"}
id: 1

event: token
data: {"text":" asked:"}
id: 2

event: token
data: {"text":" \"Why"}
id: 3

event: token
data: {"text":" SSE?\"."}
id: 4

event: token
data: {"text":" Server-Sent"}
id: 5

event: token
data: {"text":" Events"}
id: 6

event: token
data: {"text":" stream"}
id: 7

event: token
data: {"text":" one"}
id: 8

event: token
data: {"text":" token"}
id: 9

event: token
data: {"text":" at"}
id: 10

event: token
data: {"text":" a"}
id: 11

event: token
data: {"text":" time."}
id: 12

event: done
data: {"text":""}


# arrival time of each data line
  160 ms  data: {"text":"You"}
  313 ms  data: {"text":" asked:"}
  464 ms  data: {"text":" \"hi\"."}
  617 ms  data: {"text":" Server-Sent"}
  769 ms  data: {"text":" Events"}
  921 ms  data: {"text":" stream"}
 1073 ms  data: {"text":" one"}
 1223 ms  data: {"text":" token"}
 1376 ms  data: {"text":" at"}
 1529 ms  data: {"text":" a"}
 1680 ms  data: {"text":" time."}
 1681 ms  data: {"text":""}

$ curl -N -s --max-time 0.5 "$BASE/chat/stream?prompt=Cancel%20me"
event: token
data: {"text":"You"}
id: 1

event: token
data: {"text":" asked:"}
id: 2

event: token
data: {"text":" \"Cancel"}
id: 3

curl exit code: 28

# prompt longer than 500 characters
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
Date: Sat, 17 Oct 2026 17:14:22 GMT
Server: Kestrel
Transfer-Encoding: chunked

{"title":"One or more validation errors occurred.","errors":{"prompt":["The field prompt must be a string with a maximum length of 500."]}}

# server log
info: Program[0]
      Stream ended. Completed: True, tokens sent: 12, aborted: False
info: Program[0]
      Stream ended. Completed: True, tokens sent: 11, aborted: False
info: Program[0]
      Stream ended. Completed: False, tokens sent: 3, aborted: True
