-

+
+

{t(`userMemory.${item.name}`)}
))}
@@ -244,27 +234,35 @@ const RelationshipNetwork:FC = () => {
headerType="borderless"
headerClassName="rb:text-[18px]! rb:leading-[24px]"
>
- {(!selectedNode || (!selectedNode?.description && !selectedNode?.entity_type))
+ {!selectedNode
?
: <>
- {selectedNode?.description &&
-
- {t('userMemory.description')}
-
{selectedNode.description}
+
+
+ {t('userMemory.memoryContent')}
+
+ {['Chunk', 'Dialogue', 'MemorySummary'].includes(selectedNode.label) && 'content' in selectedNode.properties
+ ? selectedNode.properties.content
+ : selectedNode.label === 'ExtractedEntity' && 'description' in selectedNode.properties
+ ? selectedNode.properties.description
+ : selectedNode.label === 'Statement' && 'statement' in selectedNode.properties
+ ? selectedNode.properties.statement
+ : ''
+ }
- }
- {selectedNode?.entity_type &&
-
- {t('userMemory.entityType')}
-
{selectedNode.entity_type}
+
+
+ {t('userMemory.created_at')}
+
+ {dayjs(selectedNode?.properties.created_at).format('YYYY/MM/DD HH:mm:ss')}
- }
+
>
}
diff --git a/web/src/views/UserMemoryDetail/components/Suggestions.tsx b/web/src/views/UserMemoryDetail/components/Suggestions.tsx
index 1c1792fb..0346f9dc 100644
--- a/web/src/views/UserMemoryDetail/components/Suggestions.tsx
+++ b/web/src/views/UserMemoryDetail/components/Suggestions.tsx
@@ -39,11 +39,11 @@ const Suggestions: FC = () => {
return (
- {suggestions
+ {suggestions?.suggestions && suggestions?.suggestions.length > 0
? <>
{suggestions.health_summary}
{suggestions.suggestions.map((item, index) => (
@@ -54,7 +54,7 @@ const Suggestions: FC = () => {
))}
>
- :
+ :
}
)
diff --git a/web/src/views/UserMemoryDetail/components/WordCloud.tsx b/web/src/views/UserMemoryDetail/components/WordCloud.tsx
index 7d59763b..64f2bfaa 100644
--- a/web/src/views/UserMemoryDetail/components/WordCloud.tsx
+++ b/web/src/views/UserMemoryDetail/components/WordCloud.tsx
@@ -81,7 +81,7 @@ const WordCloud: FC = () => {
},
radar: {
indicator: radarData.map(item => ({
- name: t(`emotionDetail.${item.name}`),
+ name: t(`statementDetail.${item.name}`),
max: 100,
min: 1
}))
@@ -99,12 +99,12 @@ const WordCloud: FC = () => {
return (
- {wordCloud
+ {wordCloud?.total_count && wordCloud?.total_count > 0
?
@@ -113,8 +113,8 @@ const WordCloud: FC = () => {
{wordCloud.tags.map(item => (
- {t(`emotionDetail.${item.emotion_type}`)}
-
{item.count}{t('emotionDetail.pieces')}
+ {t(`statementDetail.${item.emotion_type}`)}
+
{item.count}{t('statementDetail.pieces')}
@@ -122,7 +122,7 @@ const WordCloud: FC = () => {
- :
+ :
}
)
diff --git a/web/src/views/UserMemoryDetail/pages/EmotionDetail.tsx b/web/src/views/UserMemoryDetail/pages/StatementDetail.tsx
similarity index 59%
rename from web/src/views/UserMemoryDetail/pages/EmotionDetail.tsx
rename to web/src/views/UserMemoryDetail/pages/StatementDetail.tsx
index 987c7a3f..e6ddfd20 100644
--- a/web/src/views/UserMemoryDetail/pages/EmotionDetail.tsx
+++ b/web/src/views/UserMemoryDetail/pages/StatementDetail.tsx
@@ -1,5 +1,5 @@
import { type FC } from 'react'
-import { Row, Col } from 'antd';
+import { Row, Col, Space } from 'antd';
import WordCloud from '../components/WordCloud'
import EmotionTags from '../components/EmotionTags'
@@ -7,17 +7,15 @@ import Health from '../components/Health'
import Suggestions from '../components/Suggestions'
-const EmotionDetail: FC = () => {
+const StatementDetail: FC = () => {
return (
-
-
-
-
-
-
-
+
+
+
+
+
@@ -26,4 +24,4 @@ const EmotionDetail: FC = () => {
)
}
-export default EmotionDetail
\ No newline at end of file
+export default StatementDetail
\ No newline at end of file
diff --git a/web/src/views/UserMemoryDetail/types.ts b/web/src/views/UserMemoryDetail/types.ts
index e2f31adf..10b0c2fa 100644
--- a/web/src/views/UserMemoryDetail/types.ts
+++ b/web/src/views/UserMemoryDetail/types.ts
@@ -1,3 +1,5 @@
+import type { Dayjs } from "dayjs";
+
export interface Data {
id: string | number
name: string;
@@ -39,30 +41,93 @@ export interface Data {
}[];
[key: string]: unknown;
}
+export interface BaseProperties {
+ content: string;
+ created_at: number;
+}
+export interface StatementNodeProperties {
+ temporal_info: string;
+ stmt_type: string;
+ statement: string;
+ valid_at: string;
+ created_at: number;
+}
+export interface ExtractedEntityNodeProperties {
+ description: string;
+ name: string;
+ entity_type: string;
+ created_at: number;
+}
+export interface MemorySummaryNode {
+ id: string;
+ label: 'MemorySummary';
+ category: number;
+ symbolSize: number;
+ itemStyle: {
+ color: string;
+ }
+ name: string;
+ properties: {
+ content: string;
+ created_at: number;
+ }
+ caption: string;
+
+}
export interface Node {
id: string;
- description?: string;
+ label: 'Dialogue' | 'ExtractedEntity' | 'Chunk' | 'MemorySummary' | 'Statement';
+ category: number;
+ symbolSize: number;
name: string;
- connect_strength?: string;
- entity_idx: number;
- entity_type?: string;
- fact_summary?: string[];
- category?: number;
- symbolSize?: number;
+ itemStyle: {
+ color: string;
+ }
+ properties: BaseProperties | StatementNodeProperties | ExtractedEntityNodeProperties
+ caption: string;
}
export interface Edge {
- statement: string;
- rel_id: string;
- source_id: string;
- predicate: string;
- target_id: string;
- statement_id: string;
- target?: string;
- source?: string;
+ id: string;
+ source: string;
+ target: string;
+ type: string;
+ properties: {
+ run_id: string;
+ group_id: string;
+ created_at: string;
+ expired_at: string;
+ }
+ caption: string;
+ value: number;
+ weight: number;
}
-export interface EdgeData {
- sourceNode: Node;
- edge: Edge;
- targetNode: Node;
+export interface GraphData {
+ nodes: Node[];
+ edges: Edge[];
+ statistics: {
+ total_nodes: number;
+ total_edges: number;
+ node_types: Record;
+ edge_types: Record;
+ }
+}
+
+export interface NodeStatisticsItem {
+ type: string;
+ count: number;
+ percentage: number;
+}
+export interface EndUser {
+ end_user_id: string;
+ id: string;
+ name: string;
+ position: string;
+ department: string;
+ contact: string;
+ phone: string;
+ hire_date: string | number | Dayjs
+}
+export interface EndUserProfileModalRef {
+ handleOpen: (vo: EndUser) => void;
}
\ No newline at end of file
diff --git a/web/src/views/Workflow/components/Chat/Chat.tsx b/web/src/views/Workflow/components/Chat/Chat.tsx
index 09e47f61..340f4f31 100644
--- a/web/src/views/Workflow/components/Chat/Chat.tsx
+++ b/web/src/views/Workflow/components/Chat/Chat.tsx
@@ -54,7 +54,7 @@ const Chat = forwardRef(({ appId
setChatList([])
}
const handleEditVariables = () => {
- variableConfigModalRef.current?.handleOpen()
+ variableConfigModalRef.current?.handleOpen(variables)
}
const handleSave = (values: StartVariableItem[]) => {
setVariables([...values])
@@ -91,7 +91,7 @@ const Chat = forwardRef(({ appId
}])
setChatList(prev => [...prev, {
role: 'assistant',
- content: message,
+ content: '',
created_at: Date.now(),
}])
diff --git a/web/src/views/Workflow/components/Chat/VariableConfigModal.tsx b/web/src/views/Workflow/components/Chat/VariableConfigModal.tsx
index 22fe8f1b..fd422b42 100644
--- a/web/src/views/Workflow/components/Chat/VariableConfigModal.tsx
+++ b/web/src/views/Workflow/components/Chat/VariableConfigModal.tsx
@@ -12,12 +12,12 @@ interface VariableEditModalProps {
const VariableConfigModal = forwardRef(({
refresh,
- variables
}, ref) => {
const { t } = useTranslation();
const [visible, setVisible] = useState(false);
const [form] = Form.useForm<{variables: StartVariableItem[]}>();
const [loading, setLoading] = useState(false)
+ const [initialValues, setInitialValues] = useState([])
// 封装取消方法,添加关闭弹窗逻辑
const handleClose = () => {
@@ -26,9 +26,10 @@ const VariableConfigModal = forwardRef {
-
+ const handleOpen = (values: StartVariableItem[]) => {
setVisible(true);
+ form.setFieldsValue({variables: values})
+ setInitialValues([...values])
};
// 封装保存方法,添加提交逻辑
const handleSave = () => {
@@ -59,18 +60,18 @@ const VariableConfigModal = forwardRef
{(fields) => (
<>
{fields.map(({ name }, index) => {
- const field = variables[index]
+ const field = initialValues[index]
return (
vo !== null))
}
+
+ // 初始化完成后,将节点展示在可视区域内
+ if (nodes.length > 0 || edges.length > 0) {
+ setTimeout(() => {
+ if (graphRef.current) {
+ graphRef.current.centerContent()
+ }
+ }, 200)
+ }
}
const saveState = () => {
diff --git a/web/src/views/Workflow/types.ts b/web/src/views/Workflow/types.ts
index c9e76dad..6debcad6 100644
--- a/web/src/views/Workflow/types.ts
+++ b/web/src/views/Workflow/types.ts
@@ -75,7 +75,7 @@ export interface WorkflowConfig {
}
export interface VariableEditModalRef {
- handleOpen: (values?: StartVariableItem) => void;
+ handleOpen: (values: StartVariableItem[]) => void;
}
export interface StartVariableItem {
name: string;