Procházet zdrojové kódy

fix: chat history might be empty in log detail view (#10905)

Hash Brown před 5 měsíci
rodič
revize
ea0ebc020c

+ 250 - 1
web/app/components/base/chat/__tests__/__snapshots__/utils.spec.ts.snap

@@ -1804,8 +1804,85 @@ exports[`build chat item tree and get thread messages should get thread messages
 ]
 `;
 
-exports[`build chat item tree and get thread messages should work with partial messages 1`] = `
+exports[`build chat item tree and get thread messages should work with partial messages 1 1`] = `
 [
+  {
+    "children": [
+      {
+        "agent_thoughts": [
+          {
+            "chain_id": null,
+            "created_at": 1726105799,
+            "files": [],
+            "id": "9730d587-9268-4683-9dd9-91a1cab9510b",
+            "message_id": "4c5d0841-1206-463e-95d8-71f812877658",
+            "observation": "",
+            "position": 1,
+            "thought": "I'll go with 112. Your turn!",
+            "tool": "",
+            "tool_input": "",
+            "tool_labels": {},
+          },
+        ],
+        "children": [],
+        "content": "I'll go with 112. Your turn!",
+        "conversationId": "dd6c9cfd-2656-48ec-bd51-2139c1790d80",
+        "feedbackDisabled": false,
+        "id": "4c5d0841-1206-463e-95d8-71f812877658",
+        "input": {
+          "inputs": {},
+          "query": "99",
+        },
+        "isAnswer": true,
+        "log": [
+          {
+            "files": [],
+            "role": "user",
+            "text": "Let's play a game, I say a number , and you response me with another bigger, yet randomly number. I'll start first, 38",
+          },
+          {
+            "files": [],
+            "role": "assistant",
+            "text": "Sure, I'll play! My number is 57. Your turn!",
+          },
+          {
+            "files": [],
+            "role": "user",
+            "text": "58",
+          },
+          {
+            "files": [],
+            "role": "assistant",
+            "text": "I choose 83. What's your next number?",
+          },
+          {
+            "files": [],
+            "role": "user",
+            "text": "99",
+          },
+          {
+            "files": [],
+            "role": "assistant",
+            "text": "I'll go with 112. Your turn!",
+          },
+        ],
+        "message_files": [],
+        "more": {
+          "latency": "1.49",
+          "time": "09/11/2024 09:50 PM",
+          "tokens": 86,
+        },
+        "parentMessageId": "question-4c5d0841-1206-463e-95d8-71f812877658",
+        "siblingIndex": 0,
+        "workflow_run_id": null,
+      },
+    ],
+    "content": "99",
+    "id": "question-4c5d0841-1206-463e-95d8-71f812877658",
+    "isAnswer": false,
+    "message_files": [],
+    "parentMessageId": "73bbad14-d915-499d-87bf-0df14d40779d",
+  },
   {
     "children": [
       {
@@ -2078,6 +2155,178 @@ exports[`build chat item tree and get thread messages should work with partial m
 ]
 `;
 
+exports[`build chat item tree and get thread messages should work with partial messages 2 1`] = `
+[
+  {
+    "children": [
+      {
+        "children": [],
+        "content": "237.",
+        "id": "ebb73fe2-15de-46dd-aab5-75416d8448eb",
+        "isAnswer": true,
+        "parentMessageId": "question-ebb73fe2-15de-46dd-aab5-75416d8448eb",
+        "siblingIndex": 0,
+      },
+    ],
+    "content": "123",
+    "id": "question-ebb73fe2-15de-46dd-aab5-75416d8448eb",
+    "isAnswer": false,
+    "parentMessageId": "57c989f9-3fa4-4dec-9ee5-c3568dd27418",
+  },
+  {
+    "children": [
+      {
+        "children": [],
+        "content": "My number is 256.",
+        "id": "3553d508-3850-462e-8594-078539f940f9",
+        "isAnswer": true,
+        "parentMessageId": "question-3553d508-3850-462e-8594-078539f940f9",
+        "siblingIndex": 1,
+      },
+    ],
+    "content": "123",
+    "id": "question-3553d508-3850-462e-8594-078539f940f9",
+    "isAnswer": false,
+    "parentMessageId": "57c989f9-3fa4-4dec-9ee5-c3568dd27418",
+  },
+  {
+    "children": [
+      {
+        "children": [
+          {
+            "children": [
+              {
+                "children": [
+                  {
+                    "children": [
+                      {
+                        "children": [
+                          {
+                            "children": [
+                              {
+                                "children": [
+                                  {
+                                    "children": [
+                                      {
+                                        "children": [
+                                          {
+                                            "children": [
+                                              {
+                                                "children": [
+                                                  {
+                                                    "children": [
+                                                      {
+                                                        "children": [
+                                                          {
+                                                            "children": [
+                                                              {
+                                                                "children": [],
+                                                                "content": "My number is 3e (approximately 8.15).",
+                                                                "id": "9eac3bcc-8d3b-4e56-a12b-44c34cebc719",
+                                                                "isAnswer": true,
+                                                                "parentMessageId": "question-9eac3bcc-8d3b-4e56-a12b-44c34cebc719",
+                                                                "siblingIndex": 0,
+                                                              },
+                                                            ],
+                                                            "content": "e",
+                                                            "id": "question-9eac3bcc-8d3b-4e56-a12b-44c34cebc719",
+                                                            "isAnswer": false,
+                                                            "parentMessageId": "5c56a2b3-f057-42a0-9b2c-52a35713cd8c",
+                                                          },
+                                                        ],
+                                                        "content": "My number is 2π (approximately 6.28).",
+                                                        "id": "5c56a2b3-f057-42a0-9b2c-52a35713cd8c",
+                                                        "isAnswer": true,
+                                                        "parentMessageId": "question-5c56a2b3-f057-42a0-9b2c-52a35713cd8c",
+                                                        "siblingIndex": 0,
+                                                      },
+                                                    ],
+                                                    "content": "π",
+                                                    "id": "question-5c56a2b3-f057-42a0-9b2c-52a35713cd8c",
+                                                    "isAnswer": false,
+                                                    "parentMessageId": "46a49bb9-0881-459e-8c6a-24d20ae48d2f",
+                                                  },
+                                                ],
+                                                "content": "My number is 145.",
+                                                "id": "46a49bb9-0881-459e-8c6a-24d20ae48d2f",
+                                                "isAnswer": true,
+                                                "parentMessageId": "question-46a49bb9-0881-459e-8c6a-24d20ae48d2f",
+                                                "siblingIndex": 0,
+                                              },
+                                            ],
+                                            "content": "78",
+                                            "id": "question-46a49bb9-0881-459e-8c6a-24d20ae48d2f",
+                                            "isAnswer": false,
+                                            "parentMessageId": "3cded945-855a-4a24-aab7-43c7dd54664c",
+                                          },
+                                        ],
+                                        "content": "My number is 7.89.",
+                                        "id": "3cded945-855a-4a24-aab7-43c7dd54664c",
+                                        "isAnswer": true,
+                                        "parentMessageId": "question-3cded945-855a-4a24-aab7-43c7dd54664c",
+                                        "siblingIndex": 0,
+                                      },
+                                    ],
+                                    "content": "3.11",
+                                    "id": "question-3cded945-855a-4a24-aab7-43c7dd54664c",
+                                    "isAnswer": false,
+                                    "parentMessageId": "a956de3d-ef95-4d90-84fe-f7a26ef28cd7",
+                                  },
+                                ],
+                                "content": "My number is 22.",
+                                "id": "a956de3d-ef95-4d90-84fe-f7a26ef28cd7",
+                                "isAnswer": true,
+                                "parentMessageId": "question-a956de3d-ef95-4d90-84fe-f7a26ef28cd7",
+                                "siblingIndex": 0,
+                              },
+                            ],
+                            "content": "-5",
+                            "id": "question-a956de3d-ef95-4d90-84fe-f7a26ef28cd7",
+                            "isAnswer": false,
+                            "parentMessageId": "93bac05d-1470-4ac9-b090-fe21cd7c3d55",
+                          },
+                        ],
+                        "content": "My number is 4782.",
+                        "id": "93bac05d-1470-4ac9-b090-fe21cd7c3d55",
+                        "isAnswer": true,
+                        "parentMessageId": "question-93bac05d-1470-4ac9-b090-fe21cd7c3d55",
+                        "siblingIndex": 0,
+                      },
+                    ],
+                    "content": "3306",
+                    "id": "question-93bac05d-1470-4ac9-b090-fe21cd7c3d55",
+                    "isAnswer": false,
+                    "parentMessageId": "9e51a13b-7780-4565-98dc-f2d8c3b1758f",
+                  },
+                ],
+                "content": "My number is 2048.",
+                "id": "9e51a13b-7780-4565-98dc-f2d8c3b1758f",
+                "isAnswer": true,
+                "parentMessageId": "question-9e51a13b-7780-4565-98dc-f2d8c3b1758f",
+                "siblingIndex": 0,
+              },
+            ],
+            "content": "1024",
+            "id": "question-9e51a13b-7780-4565-98dc-f2d8c3b1758f",
+            "isAnswer": false,
+            "parentMessageId": "507f9df9-1f06-4a57-bb38-f00228c42c22",
+          },
+        ],
+        "content": "My number is 259.",
+        "id": "507f9df9-1f06-4a57-bb38-f00228c42c22",
+        "isAnswer": true,
+        "parentMessageId": "question-507f9df9-1f06-4a57-bb38-f00228c42c22",
+        "siblingIndex": 2,
+      },
+    ],
+    "content": "123",
+    "id": "question-507f9df9-1f06-4a57-bb38-f00228c42c22",
+    "isAnswer": false,
+    "parentMessageId": "57c989f9-3fa4-4dec-9ee5-c3568dd27418",
+  },
+]
+`;
+
 exports[`build chat item tree and get thread messages should work with real world messages 1`] = `
 [
   {

+ 122 - 0
web/app/components/base/chat/__tests__/partialMessages.json

@@ -0,0 +1,122 @@
+[
+  {
+    "id": "question-ebb73fe2-15de-46dd-aab5-75416d8448eb",
+    "content": "123",
+    "isAnswer": false,
+    "parentMessageId": "57c989f9-3fa4-4dec-9ee5-c3568dd27418"
+  },
+  {
+    "id": "ebb73fe2-15de-46dd-aab5-75416d8448eb",
+    "content": "237.",
+    "isAnswer": true,
+    "parentMessageId": "question-ebb73fe2-15de-46dd-aab5-75416d8448eb"
+  },
+  {
+    "id": "question-3553d508-3850-462e-8594-078539f940f9",
+    "content": "123",
+    "isAnswer": false,
+    "parentMessageId": "57c989f9-3fa4-4dec-9ee5-c3568dd27418"
+  },
+  {
+    "id": "3553d508-3850-462e-8594-078539f940f9",
+    "content": "My number is 256.",
+    "isAnswer": true,
+    "parentMessageId": "question-3553d508-3850-462e-8594-078539f940f9"
+  },
+  {
+    "id": "question-507f9df9-1f06-4a57-bb38-f00228c42c22",
+    "content": "123",
+    "isAnswer": false,
+    "parentMessageId": "57c989f9-3fa4-4dec-9ee5-c3568dd27418"
+  },
+  {
+    "id": "507f9df9-1f06-4a57-bb38-f00228c42c22",
+    "content": "My number is 259.",
+    "isAnswer": true,
+    "parentMessageId": "question-507f9df9-1f06-4a57-bb38-f00228c42c22"
+  },
+  {
+    "id": "question-9e51a13b-7780-4565-98dc-f2d8c3b1758f",
+    "content": "1024",
+    "isAnswer": false,
+    "parentMessageId": "507f9df9-1f06-4a57-bb38-f00228c42c22"
+  },
+  {
+    "id": "9e51a13b-7780-4565-98dc-f2d8c3b1758f",
+    "content": "My number is 2048.",
+    "isAnswer": true,
+    "parentMessageId": "question-9e51a13b-7780-4565-98dc-f2d8c3b1758f"
+  },
+  {
+    "id": "question-93bac05d-1470-4ac9-b090-fe21cd7c3d55",
+    "content": "3306",
+    "isAnswer": false,
+    "parentMessageId": "9e51a13b-7780-4565-98dc-f2d8c3b1758f"
+  },
+  {
+    "id": "93bac05d-1470-4ac9-b090-fe21cd7c3d55",
+    "content": "My number is 4782.",
+    "isAnswer": true,
+    "parentMessageId": "question-93bac05d-1470-4ac9-b090-fe21cd7c3d55"
+  },
+  {
+    "id": "question-a956de3d-ef95-4d90-84fe-f7a26ef28cd7",
+    "content": "-5",
+    "isAnswer": false,
+    "parentMessageId": "93bac05d-1470-4ac9-b090-fe21cd7c3d55"
+  },
+  {
+    "id": "a956de3d-ef95-4d90-84fe-f7a26ef28cd7",
+    "content": "My number is 22.",
+    "isAnswer": true,
+    "parentMessageId": "question-a956de3d-ef95-4d90-84fe-f7a26ef28cd7"
+  },
+  {
+    "id": "question-3cded945-855a-4a24-aab7-43c7dd54664c",
+    "content": "3.11",
+    "isAnswer": false,
+    "parentMessageId": "a956de3d-ef95-4d90-84fe-f7a26ef28cd7"
+  },
+  {
+    "id": "3cded945-855a-4a24-aab7-43c7dd54664c",
+    "content": "My number is 7.89.",
+    "isAnswer": true,
+    "parentMessageId": "question-3cded945-855a-4a24-aab7-43c7dd54664c"
+  },
+  {
+    "id": "question-46a49bb9-0881-459e-8c6a-24d20ae48d2f",
+    "content": "78",
+    "isAnswer": false,
+    "parentMessageId": "3cded945-855a-4a24-aab7-43c7dd54664c"
+  },
+  {
+    "id": "46a49bb9-0881-459e-8c6a-24d20ae48d2f",
+    "content": "My number is 145.",
+    "isAnswer": true,
+    "parentMessageId": "question-46a49bb9-0881-459e-8c6a-24d20ae48d2f"
+  },
+  {
+    "id": "question-5c56a2b3-f057-42a0-9b2c-52a35713cd8c",
+    "content": "π",
+    "isAnswer": false,
+    "parentMessageId": "46a49bb9-0881-459e-8c6a-24d20ae48d2f"
+  },
+  {
+    "id": "5c56a2b3-f057-42a0-9b2c-52a35713cd8c",
+    "content": "My number is 2π (approximately 6.28).",
+    "isAnswer": true,
+    "parentMessageId": "question-5c56a2b3-f057-42a0-9b2c-52a35713cd8c"
+  },
+  {
+    "id": "question-9eac3bcc-8d3b-4e56-a12b-44c34cebc719",
+    "content": "e",
+    "isAnswer": false,
+    "parentMessageId": "5c56a2b3-f057-42a0-9b2c-52a35713cd8c"
+  },
+  {
+    "id": "9eac3bcc-8d3b-4e56-a12b-44c34cebc719",
+    "content": "My number is 3e (approximately 8.15).",
+    "isAnswer": true,
+    "parentMessageId": "question-9eac3bcc-8d3b-4e56-a12b-44c34cebc719"
+  }
+]

+ 10 - 3
web/app/components/base/chat/__tests__/utils.spec.ts

@@ -7,6 +7,7 @@ import mixedTestMessages from './mixedTestMessages.json'
 import multiRootNodesMessages from './multiRootNodesMessages.json'
 import multiRootNodesWithLegacyTestMessages from './multiRootNodesWithLegacyTestMessages.json'
 import realWorldMessages from './realWorldMessages.json'
+import partialMessages from './partialMessages.json'
 
 function visitNode(tree: ChatItemInTree | ChatItemInTree[], path: string): ChatItemInTree {
   return get(tree, path)
@@ -256,9 +257,15 @@ describe('build chat item tree and get thread messages', () => {
     expect(threadMessages6_2).toMatchSnapshot()
   })
 
-  const partialMessages = (realWorldMessages as ChatItemInTree[]).slice(-10)
-  const tree7 = buildChatItemTree(partialMessages)
-  it('should work with partial messages', () => {
+  const partialMessages1 = (realWorldMessages as ChatItemInTree[]).slice(-10)
+  const tree7 = buildChatItemTree(partialMessages1)
+  it('should work with partial messages 1', () => {
     expect(tree7).toMatchSnapshot()
   })
+
+  const partialMessages2 = (partialMessages as ChatItemInTree[])
+  const tree8 = buildChatItemTree(partialMessages2)
+  it('should work with partial messages 2', () => {
+    expect(tree8).toMatchSnapshot()
+  })
 })

+ 4 - 7
web/app/components/base/chat/utils.ts

@@ -127,19 +127,16 @@ function buildChatItemTree(allMessages: IChatItem[]): ChatItemInTree[] {
       lastAppendedLegacyAnswer = answerNode
     }
     else {
-      if (!parentMessageId)
+      if (
+        !parentMessageId
+        || !allMessages.some(item => item.id === parentMessageId) // parent message might not be fetched yet, in this case we will append the question to the root nodes
+      )
         rootNodes.push(questionNode)
       else
         map[parentMessageId]?.children!.push(questionNode)
     }
   }
 
-  // If no messages have parentMessageId=null (indicating a root node),
-  // then we likely have a partial chat history. In this case,
-  // use the first available message as the root node.
-  if (rootNodes.length === 0 && allMessages.length > 0)
-    rootNodes.push(map[allMessages[0]!.id]!)
-
   return rootNodes
 }