diff --git a/web/src/hooks/use-send-message.ts b/web/src/hooks/use-send-message.ts
index a5c635575..3be9eab32 100644
--- a/web/src/hooks/use-send-message.ts
+++ b/web/src/hooks/use-send-message.ts
@@ -1,3 +1,4 @@
+import message from '@/components/ui/message';
import { Authorization } from '@/constants/authorization';
import { IReferenceObject } from '@/interfaces/database/chat';
import { BeginQuery } from '@/pages/agent/interface';
@@ -136,6 +137,9 @@ export const useSendMessageBySSE = (url: string = api.completeConversation) => {
const val = JSON.parse(value?.data || '');
console.info('data:', val);
+ if (val.code === 500) {
+ message.error(val.message);
+ }
setAnswerList((list) => {
const nextList = [...list];
diff --git a/web/src/pages/agent/canvas/index.tsx b/web/src/pages/agent/canvas/index.tsx
index 95cd4a0ab..d7186eae7 100644
--- a/web/src/pages/agent/canvas/index.tsx
+++ b/web/src/pages/agent/canvas/index.tsx
@@ -32,7 +32,11 @@ import { useAddNode } from '../hooks/use-add-node';
import { useBeforeDelete } from '../hooks/use-before-delete';
import { useCacheChatLog } from '../hooks/use-cache-chat-log';
import { useMoveNote } from '../hooks/use-move-note';
-import { useShowDrawer, useShowLogSheet } from '../hooks/use-show-drawer';
+import {
+ useHideFormSheetOnNodeDeletion,
+ useShowDrawer,
+ useShowLogSheet,
+} from '../hooks/use-show-drawer';
import { LogSheet } from '../log-sheet';
import RunSheet from '../run-sheet';
import { ButtonEdge } from './edge';
@@ -160,6 +164,9 @@ function AgentCanvas({ drawerVisible, hideDrawer }: IProps) {
setLastSendLoading(false);
}
};
+
+ useHideFormSheetOnNodeDeletion({ hideFormDrawer });
+
return (
{
>
>
);
-};
+}
-export default AgentChatBox;
+export default memo(AgentChatBox);
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 0a8a045aa..27dead043 100644
--- a/web/src/pages/agent/chat/use-send-agent-message.ts
+++ b/web/src/pages/agent/chat/use-send-agent-message.ts
@@ -235,18 +235,23 @@ export const useSendAgentMessage = (
params.session_id = sessionId;
}
- const res = await send(params);
- clearUploadResponseList();
+ try {
+ const res = await send(params);
- if (receiveMessageError(res)) {
- sonnerMessage.error(res?.data?.message);
+ clearUploadResponseList();
- // cancel loading
- setValue(message.content);
- removeLatestMessage();
- } else {
- // refetch(); // pull the message list after sending the message successfully
+ if (receiveMessageError(res)) {
+ sonnerMessage.error(res?.data?.message);
+
+ // cancel loading
+ setValue(message.content);
+ removeLatestMessage();
+ } else {
+ // refetch(); // pull the message list after sending the message successfully
+ }
+ } catch (error) {
+ console.log('🚀 ~ useSendAgentMessage ~ error:', error);
}
},
[
diff --git a/web/src/pages/agent/hooks/use-show-drawer.tsx b/web/src/pages/agent/hooks/use-show-drawer.tsx
index 268697ed6..7eae28e38 100644
--- a/web/src/pages/agent/hooks/use-show-drawer.tsx
+++ b/web/src/pages/agent/hooks/use-show-drawer.tsx
@@ -167,3 +167,15 @@ export function useShowLogSheet({
showLogSheet: handleShow,
};
}
+
+export function useHideFormSheetOnNodeDeletion({
+ hideFormDrawer,
+}: Pick, 'hideFormDrawer'>) {
+ const { nodes, clickedNodeId } = useGraphStore((state) => state);
+
+ useEffect(() => {
+ if (!nodes.some((x) => x.id === clickedNodeId)) {
+ hideFormDrawer();
+ }
+ }, [clickedNodeId, hideFormDrawer, nodes]);
+}
diff --git a/web/src/pages/agent/operator-icon.tsx b/web/src/pages/agent/operator-icon.tsx
index 74127ff2b..00fdd6e0a 100644
--- a/web/src/pages/agent/operator-icon.tsx
+++ b/web/src/pages/agent/operator-icon.tsx
@@ -1,7 +1,7 @@
import { IconFont } from '@/components/icon-font';
import SvgIcon from '@/components/svg-icon';
import { cn } from '@/lib/utils';
-import { CirclePlay } from 'lucide-react';
+import { HousePlus } from 'lucide-react';
import { Operator } from './constant';
interface IProps {
@@ -11,7 +11,7 @@ interface IProps {
export const OperatorIconMap = {
[Operator.Retrieval]: 'KR',
- [Operator.Begin]: CirclePlay,
+ [Operator.Begin]: 'house-plus',
[Operator.Categorize]: 'a-QuestionClassification',
[Operator.Message]: 'reply',
[Operator.Iteration]: 'loop',
@@ -49,6 +49,14 @@ const Empty = () => {
const OperatorIcon = ({ name, className }: IProps) => {
const Icon = OperatorIconMap[name as keyof typeof OperatorIconMap] || Empty;
+ if (name === Operator.Begin) {
+ return (
+
+
+
+ );
+ }
+
if (name in SVGIconMap) {
return (