MCPcopy Index your code
hub / github.com/the-open-agent/openagent / writeMessageErrorStream

Function writeMessageErrorStream

controllers/message_util.go:32–69  ·  view source on GitHub ↗
(responseWriter http.ResponseWriter, lang string, message *object.Message, errorText string)

Source from the content-addressed store, hash-verified

30)
31
32func writeMessageErrorStream(responseWriter http.ResponseWriter, lang string, message *object.Message, errorText string) error {
33 var err error
34 if message != nil {
35 if !message.IsAlerted {
36 err = message.SendErrorEmail(errorText, lang)
37 if err != nil {
38 errorText = fmt.Sprintf("%s\n%s", errorText, err.Error())
39 }
40 }
41
42 if message.ErrorText != errorText || !message.IsAlerted || err != nil {
43 message.ErrorText = errorText
44 message.IsAlerted = true
45 _, err = object.UpdateMessage(message.GetId(), message, false)
46 if err != nil {
47 errorText = fmt.Sprintf("%s\n%s", errorText, err.Error())
48 }
49
50 if chatErr := clearMessageChatGenerating(message); chatErr != nil {
51 errorText = fmt.Sprintf("%s\n%s", errorText, chatErr.Error())
52 }
53 }
54 }
55
56 // SSE requires newlines in data to be escaped as "\ndata: " so the event
57 // is not prematurely terminated (a blank line ends an SSE event).
58 sseData := strings.ReplaceAll(errorText, "\n", "\ndata: ")
59 event := fmt.Sprintf("event: myerror\ndata: %s\n\n", sseData)
60 _, err = responseWriter.Write([]byte(event))
61 if err != nil {
62 return err
63 }
64
65 if flusher, ok := responseWriter.(http.Flusher); ok {
66 flusher.Flush()
67 }
68 return nil
69}
70
71func clearMessageChatGenerating(message *object.Message) error {
72 chatId := util.GetId(message.Owner, message.Chat)

Callers 2

ResponseErrorStreamMethod · 0.85
generateMessageAnswerFunction · 0.85

Calls 7

UpdateMessageFunction · 0.92
SendErrorEmailMethod · 0.80
ErrorMethod · 0.80
GetIdMethod · 0.45
WriteMethod · 0.45
FlushMethod · 0.45

Tested by

no test coverage detected