EmitMessages assumes that only the last message can change or new messages can be added. If a new message is injected between existing messages (identified by Id), the behavior is undefined.
(newMessages []st.ConversationMessage)
| 163 | // EmitMessages assumes that only the last message can change or new messages can be added. |
| 164 | // If a new message is injected between existing messages (identified by Id), the behavior is undefined. |
| 165 | func (e *EventEmitter) EmitMessages(newMessages []st.ConversationMessage) { |
| 166 | e.mu.Lock() |
| 167 | defer e.mu.Unlock() |
| 168 | |
| 169 | maxLength := max(len(e.messages), len(newMessages)) |
| 170 | for i := range maxLength { |
| 171 | var oldMsg st.ConversationMessage |
| 172 | var newMsg st.ConversationMessage |
| 173 | if i < len(e.messages) { |
| 174 | oldMsg = e.messages[i] |
| 175 | } |
| 176 | if i < len(newMessages) { |
| 177 | newMsg = newMessages[i] |
| 178 | } |
| 179 | if oldMsg != newMsg { |
| 180 | if i >= len(newMessages) { |
| 181 | continue |
| 182 | } |
| 183 | e.notifyChannels(EventTypeMessageUpdate, MessageUpdateBody{ |
| 184 | Id: newMessages[i].Id, |
| 185 | Role: newMessages[i].Role, |
| 186 | Message: newMessages[i].Message, |
| 187 | Time: newMessages[i].Time, |
| 188 | }) |
| 189 | } |
| 190 | } |
| 191 | |
| 192 | e.messages = newMessages |
| 193 | } |
| 194 | |
| 195 | func (e *EventEmitter) EmitStatus(newStatus st.ConversationStatus) { |
| 196 | e.mu.Lock() |