diff --git a/web/src/components/next-message-item/index.tsx b/web/src/components/next-message-item/index.tsx
index dd7fc104f..1379560c7 100644
--- a/web/src/components/next-message-item/index.tsx
+++ b/web/src/components/next-message-item/index.tsx
@@ -170,13 +170,15 @@ function MessageItem({
>
)}
{isAssistant && currentEventListWithoutMessageById && (
-
+
+
+
)}
{isUser && (
diff --git a/web/src/components/originui/time-range-picker.tsx b/web/src/components/originui/time-range-picker.tsx
index 0ec1790ac..e117f74c9 100644
--- a/web/src/components/originui/time-range-picker.tsx
+++ b/web/src/components/originui/time-range-picker.tsx
@@ -143,6 +143,9 @@ const TimeRangePicker = ({
const [date, setDate] = useState(
selectDateRange || { from: today, to: today },
);
+ useEffect(() => {
+ setDate(selectDateRange);
+ }, [selectDateRange]);
const onChange = (e: DateRange | undefined) => {
if (!e) return;
setDate(e);
diff --git a/web/src/hooks/use-send-message.ts b/web/src/hooks/use-send-message.ts
index 3361a149e..a5c635575 100644
--- a/web/src/hooks/use-send-message.ts
+++ b/web/src/hooks/use-send-message.ts
@@ -20,6 +20,7 @@ export enum MessageEventType {
export interface IAnswerEvent {
event: MessageEventType;
message_id: string;
+ session_id: string;
created_at: number;
task_id: string;
data: T;
diff --git a/web/src/pages/agent/chat/use-send-agent-message.ts b/web/src/pages/agent/chat/use-send-agent-message.ts
index cf1ef9ea7..9a262d44d 100644
--- a/web/src/pages/agent/chat/use-send-agent-message.ts
+++ b/web/src/pages/agent/chat/use-send-agent-message.ts
@@ -180,6 +180,7 @@ export const useSendAgentMessage = (
const { id: agentId } = useParams();
const { handleInputChange, value, setValue } = useHandleMessageInputChange();
const inputs = useSelectBeginNodeDataInputs();
+ const [sessionId, setSessionId] = useState(null);
const { send, answerList, done, stopOutputMessage } = useSendMessageBySSE(
url || api.runCanvas,
);
@@ -187,6 +188,12 @@ export const useSendAgentMessage = (
return answerList[0]?.message_id;
}, [answerList]);
+ useEffect(() => {
+ if (answerList[0]?.session_id) {
+ setSessionId(answerList[0]?.session_id);
+ }
+ }, [answerList]);
+
const { findReferenceByMessageId } = useFindMessageReference(answerList);
const prologue = useGetBeginNodePrologue();
const {
@@ -222,6 +229,8 @@ export const useSendAgentMessage = (
params.inputs = transferInputsArrayToObject(query); // begin operator inputs
params.files = uploadResponseList;
+
+ params.session_id = sessionId;
}
const res = await send(params);
@@ -239,6 +248,7 @@ export const useSendAgentMessage = (
},
[
agentId,
+ sessionId,
send,
inputs,
uploadResponseList,
diff --git a/web/src/pages/agent/hooks/use-cache-chat-log.ts b/web/src/pages/agent/hooks/use-cache-chat-log.ts
index 293ea6688..85365c949 100644
--- a/web/src/pages/agent/hooks/use-cache-chat-log.ts
+++ b/web/src/pages/agent/hooks/use-cache-chat-log.ts
@@ -43,19 +43,13 @@ export function useCacheChatLog() {
setEventList([]);
}, []);
- const addEventList = useCallback(
- (events: IEventList, message_id: string) => {
- const nextList = [...eventList];
- events.forEach((x) => {
- if (nextList.every((y) => y !== x)) {
- nextList.push(x);
- }
- });
- setEventList(nextList);
- setMessageIdPool((prev) => ({ ...prev, [message_id]: nextList }));
- },
- [eventList],
- );
+ const addEventList = useCallback((events: IEventList, message_id: string) => {
+ setEventList((x) => {
+ const list = [...x, ...events];
+ setMessageIdPool((prev) => ({ ...prev, [message_id]: list }));
+ return list;
+ });
+ }, []);
const currentEventListWithoutMessage = useMemo(() => {
const list = messageIdPool[currentMessageId]?.filter(
diff --git a/web/src/pages/agent/log-sheet/toolTimelineItem.tsx b/web/src/pages/agent/log-sheet/toolTimelineItem.tsx
index 4cdcbd8f3..7c3a00184 100644
--- a/web/src/pages/agent/log-sheet/toolTimelineItem.tsx
+++ b/web/src/pages/agent/log-sheet/toolTimelineItem.tsx
@@ -18,16 +18,26 @@ import { JsonViewer } from './workFlowTimeline';
const ToolTimelineItem = ({ tools }: { tools: Record[] }) => {
if (!tools || tools.length === 0 || !Array.isArray(tools)) return null;
- const blackList = ['analyze_task', 'add_memory', 'gen_citations'];
+ const blackList = ['add_memory', 'gen_citations'];
const filteredTools = tools.filter(
(tool) => !blackList.includes(tool.tool_name),
);
+ const capitalizeWords = (str: string, separator: string = '_'): string => {
+ if (!str) return '';
+
+ return str
+ .split(separator)
+ .map((word) => {
+ return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
+ })
+ .join(' ');
+ };
return (
<>
{filteredTools?.map((tool, idx) => {
return (
@@ -82,7 +92,10 @@ const ToolTimelineItem = ({ tools }: { tools: Record[] }) => {
-
{tool.tool_name}
+
+ {tool.path + ' '}
+ {capitalizeWords(tool.tool_name, '_')}
+
{/* 0:00
{x.data.elapsed_time?.toString().slice(0, 6)} */}
diff --git a/web/src/pages/agents/agent-log-detail-modal.tsx b/web/src/pages/agents/agent-log-detail-modal.tsx
new file mode 100644
index 000000000..bf8a6b01c
--- /dev/null
+++ b/web/src/pages/agents/agent-log-detail-modal.tsx
@@ -0,0 +1,58 @@
+import MessageItem from '@/components/next-message-item';
+import { Modal } from '@/components/ui/modal';
+import { useFetchAgent } from '@/hooks/use-agent-request';
+import { useFetchUserInfo } from '@/hooks/user-setting-hooks';
+import { IAgentLogMessage } from '@/interfaces/database/agent';
+import { IReferenceObject, Message } from '@/interfaces/database/chat';
+import { buildMessageUuidWithRole } from '@/utils/chat';
+import React from 'react';
+import { IMessage } from '../chat/interface';
+
+interface CustomModalProps {
+ isOpen: boolean;
+ onClose: () => void;
+ message: IAgentLogMessage[];
+ reference: IReferenceObject;
+}
+
+export const AgentLogDetailModal: React.FC = ({
+ isOpen,
+ onClose,
+ message: derivedMessages,
+ reference,
+}) => {
+ const { data: userInfo } = useFetchUserInfo();
+ const { data: canvasInfo } = useFetchAgent();
+ return (
+
+
+
+ {derivedMessages?.map((message, i) => {
+ return (
+ ,
+ )}
+ nickname={userInfo.nickname}
+ avatar={userInfo.avatar}
+ avatarDialog={canvasInfo.avatar}
+ item={message as IMessage}
+ reference={reference}
+ index={i}
+ showLikeButton={false}
+ showLog={false}
+ >
+ );
+ })}
+
+
+
+ );
+};
diff --git a/web/src/pages/agents/agent-log-page.tsx b/web/src/pages/agents/agent-log-page.tsx
index 02e508e4a..00c8ccf36 100644
--- a/web/src/pages/agents/agent-log-page.tsx
+++ b/web/src/pages/agents/agent-log-page.tsx
@@ -13,7 +13,12 @@ import { RAGFlowPagination } from '@/components/ui/ragflow-pagination';
import { Spin } from '@/components/ui/spin';
import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
import { useFetchAgentLog } from '@/hooks/use-agent-request';
-import { IAgentLogResponse } from '@/interfaces/database/agent';
+import {
+ IAgentLogMessage,
+ IAgentLogResponse,
+} from '@/interfaces/database/agent';
+import { IReferenceObject } from '@/interfaces/database/chat';
+import { useQueryClient } from '@tanstack/react-query';
import React, { useEffect, useState } from 'react';
import { useParams } from 'umi';
import { DateRange } from '../../components/originui/calendar/index';
@@ -26,16 +31,27 @@ import {
TableRow,
} from '../../components/ui/table';
import { useFetchDataOnMount } from '../agent/hooks/use-fetch-data';
+import { AgentLogDetailModal } from './agent-log-detail-modal';
+const getStartOfToday = (): Date => {
+ const today = new Date();
+ today.setHours(0, 0, 0, 0);
+ return today;
+};
+const getEndOfToday = (): Date => {
+ const today = new Date();
+ today.setHours(23, 59, 59, 999);
+ return today;
+};
const AgentLogPage: React.FC = () => {
const { navigateToAgentList, navigateToAgent } = useNavigatePage();
const { flowDetail: agentDetail } = useFetchDataOnMount();
const { id: canvasId } = useParams();
- const today = new Date();
+ const queryClient = useQueryClient();
const init = {
keywords: '',
- from_date: today,
- to_date: today,
+ from_date: getStartOfToday(),
+ to_date: getEndOfToday(),
orderby: 'create_time',
desc: false,
page: 1,
@@ -152,6 +168,13 @@ const AgentLogPage: React.FC = () => {
});
};
+ const handleClickSearch = () => {
+ setPagination({ ...pagination, current: 1 });
+ handleSearch();
+ queryClient.invalidateQueries({
+ queryKey: ['fetchAgentLog'],
+ });
+ };
useEffect(() => {
handleSearch();
}, [pagination.current, pagination.pageSize, sortConfig]);
@@ -166,7 +189,17 @@ const AgentLogPage: React.FC = () => {
const handleReset = () => {
setSearchParams(init);
+ setKeywords(init.keywords);
+ setCurrentDate({ from: init.from_date, to: init.to_date });
};
+
+ const [openModal, setOpenModal] = useState(false);
+ const [modalData, setModalData] = useState();
+ const showLogDetail = (item: IAgentLogResponse) => {
+ setModalData(item);
+ setOpenModal(true);
+ };
+
return (
@@ -209,15 +242,14 @@ const AgentLogPage: React.FC = () => {
Latest Date
+ setOpenModal(false)}
+ />
);
};
diff --git a/web/src/pages/next-chats/share/index.tsx b/web/src/pages/next-chats/share/index.tsx
index 0a02464bd..aef9b1e1a 100644
--- a/web/src/pages/next-chats/share/index.tsx
+++ b/web/src/pages/next-chats/share/index.tsx
@@ -91,55 +91,63 @@ const ChatContainer = () => {
}
return (
-
-
-
-
- {derivedMessages?.map((message, i) => {
- return (
-
- );
- })}
+
+
+
+
+
+ {derivedMessages?.map((message, i) => {
+ return (
+
+ );
+ })}
+
+
+
+
-
-
-
+
{visible && (