From 88b3f09a702f8f8515af43bc14242ecca2a667db Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 19 三月 2026 11:10:45 +0800
Subject: [PATCH] #AI2. 对话执行链路治理

---
 rsf-admin/src/layout/AiChatDrawer.jsx |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/rsf-admin/src/layout/AiChatDrawer.jsx b/rsf-admin/src/layout/AiChatDrawer.jsx
index d837069..c86e221 100644
--- a/rsf-admin/src/layout/AiChatDrawer.jsx
+++ b/rsf-admin/src/layout/AiChatDrawer.jsx
@@ -56,6 +56,7 @@
 
     const runtimeSummary = useMemo(() => {
         return {
+            requestId: runtime?.requestId || "--",
             promptName: runtime?.promptName || "--",
             model: runtime?.model || "--",
             mountedMcpCount: runtime?.mountedMcpCount ?? 0,
@@ -234,8 +235,9 @@
                         }
                         if (eventName === "error") {
                             const message = payload?.message || "AI 瀵硅瘽澶辫触";
-                            setDrawerError(message);
-                            notify(message, { type: "error" });
+                            const displayMessage = payload?.requestId ? `${message} [${payload.requestId}]` : message;
+                            setDrawerError(displayMessage);
+                            notify(displayMessage, { type: "error" });
                         }
                     },
                 }
@@ -363,6 +365,7 @@
                     <Box flex={1} display="flex" flexDirection="column" minHeight={0}>
                         <Box px={2} py={1.5}>
                             <Stack direction="row" spacing={1} flexWrap="wrap" useFlexGap>
+                                <Chip size="small" label={`Req: ${runtimeSummary.requestId}`} />
                                 <Chip size="small" label={`Session: ${sessionId || "--"}`} />
                                 <Chip size="small" label={`Prompt: ${runtimeSummary.promptName}`} />
                                 <Chip size="small" label={`Model: ${runtimeSummary.model}`} />
@@ -437,6 +440,11 @@
                         <Divider />
 
                         <Box px={2} py={1.5}>
+                            {usage?.elapsedMs != null && (
+                                <Typography variant="caption" color="text.secondary" display="block" mb={0.5}>
+                                    Elapsed: {usage.elapsedMs} ms{usage?.firstTokenLatencyMs != null ? ` / First token: ${usage.firstTokenLatencyMs} ms` : ""}
+                                </Typography>
+                            )}
                             {usage?.totalTokens != null && (
                                 <Typography variant="caption" color="text.secondary" display="block" mb={1}>
                                     Tokens: prompt {usage?.promptTokens ?? 0} / completion {usage?.completionTokens ?? 0} / total {usage?.totalTokens ?? 0}

--
Gitblit v1.9.1