(
messages: Array<ChatMessage & { feedback: ChatMessageFeedback }>,
feedbackTypes: ChatMessageRatingType[]
)
| 296 | } |
| 297 | |
| 298 | function filterMessagesWithFeedback( |
| 299 | messages: Array<ChatMessage & { feedback: ChatMessageFeedback }>, |
| 300 | feedbackTypes: ChatMessageRatingType[] |
| 301 | ): ChatMessage[] { |
| 302 | // Group messages by session for proper filtering |
| 303 | const sessionGroups = new Map<string, Array<ChatMessage & { feedback: ChatMessageFeedback }>>() |
| 304 | |
| 305 | messages.forEach((message) => { |
| 306 | const sessionId = message.sessionId |
| 307 | if (!sessionId) return // Skip messages without sessionId |
| 308 | |
| 309 | if (!sessionGroups.has(sessionId)) { |
| 310 | sessionGroups.set(sessionId, []) |
| 311 | } |
| 312 | sessionGroups.get(sessionId)!.push(message) |
| 313 | }) |
| 314 | |
| 315 | const result: ChatMessage[] = [] |
| 316 | |
| 317 | // Process each session group |
| 318 | sessionGroups.forEach((sessionMessages) => { |
| 319 | // Sort by creation date to ensure proper order |
| 320 | sessionMessages.sort((a, b) => new Date(a.createdDate).getTime() - new Date(b.createdDate).getTime()) |
| 321 | |
| 322 | const toInclude = new Set<number>() |
| 323 | |
| 324 | sessionMessages.forEach((message, index) => { |
| 325 | if (message.role === 'apiMessage' && message.feedback && feedbackTypes.includes(message.feedback.rating)) { |
| 326 | // Include the feedback message |
| 327 | toInclude.add(index) |
| 328 | // Include the previous message (user message) if it exists |
| 329 | if (index > 0) { |
| 330 | toInclude.add(index - 1) |
| 331 | } |
| 332 | } |
| 333 | }) |
| 334 | |
| 335 | // Add filtered messages to result |
| 336 | sessionMessages.forEach((message, index) => { |
| 337 | if (toInclude.has(index)) { |
| 338 | result.push(message) |
| 339 | } |
| 340 | }) |
| 341 | }) |
| 342 | |
| 343 | // Sort final result by creation date |
| 344 | return result.sort((a, b) => new Date(a.createdDate).getTime() - new Date(b.createdDate).getTime()) |
| 345 | } |
no test coverage detected