Преглед изворни кода

按照parent message 计算 messages

visuddhinanda пре 8 месеци
родитељ
комит
234e2286dd
1 измењених фајлова са 27 додато и 32 уклоњено
  1. 27 32
      dashboard-v4/dashboard/src/hooks/useSessionGroups.ts

+ 27 - 32
dashboard-v4/dashboard/src/hooks/useSessionGroups.ts

@@ -1,3 +1,4 @@
+// dashboard-v4/dashboard/src/hooks/useSessionGroups.ts
 import { useMemo, useCallback } from "react";
 import { MessageNode, SessionInfo, VersionInfo } from "../types/chat";
 
@@ -7,44 +8,38 @@ export function useSessionGroups(
 ) {
   const computeSessionVersions = useCallback(
     (sessionId: string): VersionInfo[] => {
+      /**
+       * 找到session的parent message
+       * parent message children 就是versions
+       */
       // 找到该session的所有消息
       const sessionMessages = rawMessages.filter(
         (m) => m.session_id === sessionId
       );
 
-      // 按不同的创建时间和父消息分组,计算版本
-      const versionMap = new Map<string, MessageNode[]>();
-
-      sessionMessages.forEach((msg) => {
-        // 使用第一个AI消息的创建时间作为版本标识
-        const firstAiMsg = sessionMessages
-          .filter((m) => m.role === "assistant")
-          .sort((a, b) => a.id - b.id)[0];
-
-        const versionKey = firstAiMsg ? firstAiMsg.created_at : msg.created_at;
+      if (sessionMessages.length === 0) {
+        return [];
+      }
+      const firstMsg = sessionMessages.sort((a, b) => a.id - b.id)[0];
+      const parentMsg = rawMessages.find(
+        (value) => value.uid === firstMsg.parent_id
+      );
 
-        if (!versionMap.has(versionKey)) {
-          versionMap.set(versionKey, []);
-        }
-        versionMap.get(versionKey)!.push(msg);
-      });
+      if (!parentMsg) {
+        return [];
+      }
+      const childrenMsg = rawMessages.filter(
+        (value) => value.parent_id === parentMsg.uid
+      );
+      console.debug("parentMsg", parentMsg, childrenMsg);
 
       // 转换为VersionInfo数组
-      const versions: VersionInfo[] = Array.from(versionMap.entries())
-        .map(([timestamp, messages], index) => {
-          const aiMessage = messages.find((m) => m.role === "assistant");
-          return {
-            version_index: index,
-            model_id: aiMessage?.model_id,
-            created_at: timestamp,
-            message_count: messages.length,
-            token_usage: aiMessage?.metadata?.token_usage?.total_tokens,
-          };
-        })
-        .sort(
-          (a, b) =>
-            new Date(a.created_at).getTime() - new Date(b.created_at).getTime()
-        );
+      const versions: VersionInfo[] = childrenMsg.map((msg, index) => {
+        return {
+          version_index: index,
+          message_id: msg.uid,
+        };
+      });
 
       return versions;
     },
@@ -57,11 +52,11 @@ export function useSessionGroups(
       const activeAiMsg = sessionMessages.find(
         (m) => m.role === "assistant" && m.is_active
       );
-      if (!activeAiMsg) return 0;
+      if (!activeAiMsg) return versions.length - 1;
 
       // 根据创建时间找到对应的版本索引
       const versionIndex = versions.findIndex(
-        (v) => v.created_at === activeAiMsg.created_at
+        (v) => v.message_id === activeAiMsg.uid
       );
       return Math.max(0, versionIndex);
     },