Skip to content

Commit 0c2e53a

Browse files
feat: add sse chat endpoint with arbitrary chunks (#12)
This change adds a new endpoint which streams server-sent events in arbitrarily sized chunks to exercise the buffering and scanning functionality in SDKs.
1 parent ad5c46f commit 0c2e53a

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

cmd/server/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ func main() {
5151
r.HandleFunc("/eventstreams/multiline", eventstreams.HandleEventStreamMultiLine).Methods(http.MethodPost)
5252
r.HandleFunc("/eventstreams/rich", eventstreams.HandleEventStreamRich).Methods(http.MethodPost)
5353
r.HandleFunc("/eventstreams/chat", eventstreams.HandleEventStreamChat).Methods(http.MethodPost)
54+
r.HandleFunc("/eventstreams/chat-chunked", eventstreams.HandleEventStreamChat).Methods(http.MethodPost)
5455
r.HandleFunc("/eventstreams/differentdataschemas", eventstreams.HandleEventStreamDifferentDataSchemas).Methods(http.MethodPost)
5556
r.HandleFunc("/clientcredentials/token", clientcredentials.HandleTokenRequest).Methods(http.MethodPost)
5657
r.HandleFunc("/clientcredentials/authenticatedrequest", clientcredentials.HandleAuthenticatedRequest).Methods(http.MethodPost)

internal/eventstreams/service.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@ import (
66
"time"
77
)
88

9+
func pushChunks(rw http.ResponseWriter, chunks []string) {
10+
for _, chunk := range chunks {
11+
fmt.Fprintln(rw, chunk)
12+
13+
if f, ok := rw.(http.Flusher); ok {
14+
f.Flush()
15+
}
16+
17+
time.Sleep(100 * time.Millisecond)
18+
}
19+
}
20+
921
func pushEvents(rw http.ResponseWriter, events [][]string) {
1022
for _, event := range events {
1123
for _, line := range event {
@@ -127,6 +139,18 @@ func HandleEventStreamChat(rw http.ResponseWriter, _ *http.Request) {
127139
})
128140
}
129141

142+
func HandleEventStreamChatChunked(rw http.ResponseWriter, _ *http.Request) {
143+
rw.Header().Add("Content-Type", "text/event-stream")
144+
145+
pushChunks(rw, []string{
146+
"data: {\"content\": ",
147+
"\"Hello\"}\n\ndata: {\"content\": \" \"}",
148+
"data: {\"content\": \"world\"}",
149+
"data: {\"content\": \"!\"}\n\ndata: [DONE]\n",
150+
"\ndata: {\"content\": \"Post sentinel data\"}\n\n",
151+
})
152+
}
153+
130154
func HandleEventStreamDifferentDataSchemas(rw http.ResponseWriter, _ *http.Request) {
131155
rw.Header().Add("Content-Type", "text/event-stream")
132156

0 commit comments

Comments
 (0)