-
Notifications
You must be signed in to change notification settings - Fork 0
/
example_test.go
56 lines (49 loc) · 1.54 KB
/
example_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package sseclient
import (
"context"
"encoding/json"
"log"
"net/http"
"time"
)
type ChatResponse struct {
Text string `json:"text"`
ThreadID string `json:"threadId"`
Sources []struct {
FileID string `json:"uuid"`
FileName string `json:"originalName"`
FileUrl string `json:"file"`
LocLinesFrom int `json:"loc.lines.from"`
LocLinesTo int `json:"loc.lines.to"`
Namespace string `json:"namespace"`
Source string `json:"source"`
} `json:"sources"`
SQLQuery string `json:"sqlQuery"`
}
func Example() {
req, _ := http.NewRequest("GET", "http://localhost:3000", nil)
c := New(req, "")
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
// Use the function signature expected by c.Start
eventHandler := func(event *Event) error {
log.Printf("eventHandler: %v", event)
// Log the raw event data for debugging
log.Printf("Raw Event: %s : %s : %d bytes", event.ID, event.Event, len(event.Data))
// Unmarshal the JSON within the 'data' field into ChatResponse
var chatResponse ChatResponse
if err := json.Unmarshal(event.Data, &chatResponse); err != nil {
log.Printf("Error unmarshaling JSON: %s", err)
return err
}
log.Println(chatResponse.Text)
return nil
}
errorHandler := func(err error) error {
log.Println("errorHandler", err)
return err
}
log.Printf("Starting SSE client: HttpRequest: %v, Headers: %v, Retry: %v, VerboseStatusCodes: %v",
c.HttpRequest, c.Headers, c.Retry, c.VerboseStatusCodes)
c.Start(ctx, eventHandler, errorHandler)
}