diff --git a/web/src/components/confirm-delete-dialog.tsx b/web/src/components/confirm-delete-dialog.tsx
index 22ac73fcb..99859ccc7 100644
--- a/web/src/components/confirm-delete-dialog.tsx
+++ b/web/src/components/confirm-delete-dialog.tsx
@@ -91,13 +91,13 @@ export function ConfirmDeleteDialog({
- {okButtonText || t('common.cancel')}
+ {cancelButtonText || t('common.cancel')}
- {cancelButtonText || t('common.delete')}
+ {okButtonText || t('common.delete')}
diff --git a/web/src/locales/en.ts b/web/src/locales/en.ts
index 335e17ad6..9407cc7b4 100644
--- a/web/src/locales/en.ts
+++ b/web/src/locales/en.ts
@@ -112,6 +112,10 @@ export default {
Semantic Memory: General knowledge and facts about the user and world.
Episodic Memory: Time-stamped records of specific events and experiences.
Procedural Memory: Learned skills, habits, and automated procedures.`,
+ raw: 'raw',
+ semantic: 'semantic',
+ episodic: 'episodic',
+ procedural: 'procedural',
editName: 'Edit name',
memory: 'Memory',
createMemory: 'Create memory',
diff --git a/web/src/locales/zh.ts b/web/src/locales/zh.ts
index da3874bc0..de129bc8f 100644
--- a/web/src/locales/zh.ts
+++ b/web/src/locales/zh.ts
@@ -99,11 +99,15 @@ export default {
llmTooltip: '分析对话内容,提取关键信息,并生成结构化的记忆摘要。',
embeddingModelTooltip:
'将文本转换为数值向量,用于语义相似度搜索和记忆检索。',
- embeddingModelError: '记忆类型为必填项,且"原始"类型不可删除。',
+ embeddingModelError: '记忆类型为必填项,且"row"类型不可删除。',
memoryTypeTooltip: `原始: 用户与代理之间的原始对话内容(默认必需)。
语义记忆: 关于用户和世界的通用知识和事实。
情景记忆: 带时间戳的特定事件和经历记录。
程序记忆: 学习的技能、习惯和自动化程序。`,
+ raw: '原始',
+ semantic: '语义',
+ episodic: '情景',
+ procedural: '程序',
editName: '编辑名称',
memory: '记忆',
createMemory: '创建记忆',
diff --git a/web/src/pages/memories/constants/index.tsx b/web/src/pages/memories/constants/index.tsx
index 6b72cca81..8b4cfaa33 100644
--- a/web/src/pages/memories/constants/index.tsx
+++ b/web/src/pages/memories/constants/index.tsx
@@ -10,6 +10,12 @@ export enum MemoryType {
Episodic = 'episodic',
Procedural = 'procedural',
}
+export const MemoryOptions = (t: TFunction) => [
+ { label: t('memories.raw'), value: MemoryType.Raw },
+ { label: t('memories.semantic'), value: MemoryType.Semantic },
+ { label: t('memories.episodic'), value: MemoryType.Episodic },
+ { label: t('memories.procedural'), value: MemoryType.Procedural },
+];
export const createMemoryFields = (t: TFunction) =>
[
{
@@ -24,12 +30,7 @@ export const createMemoryFields = (t: TFunction) =>
type: FormFieldType.MultiSelect,
placeholder: t('memories.descriptionPlaceholder'),
tooltip: t('memories.memoryTypeTooltip'),
- options: [
- { label: 'Raw', value: MemoryType.Raw },
- { label: 'Semantic', value: MemoryType.Semantic },
- { label: 'Episodic', value: MemoryType.Episodic },
- { label: 'Procedural', value: MemoryType.Procedural },
- ],
+ options: MemoryOptions(t),
required: true,
customValidate: (value) => {
if (!value.includes(MemoryType.Raw) || !value.length) {
diff --git a/web/src/pages/memory/memory-message/message-table.tsx b/web/src/pages/memory/memory-message/message-table.tsx
index 1d9c486fb..237e20b66 100644
--- a/web/src/pages/memory/memory-message/message-table.tsx
+++ b/web/src/pages/memory/memory-message/message-table.tsx
@@ -251,6 +251,7 @@ export function MemoryTable({
title={t('memory.messages.forgetMessage')}
open={showDeleteDialog}
onOpenChange={setShowDeleteDialog}
+ okButtonText={t('common.confirm')}
content={{
title: t('memory.messages.forgetMessageTip'),
node: (
diff --git a/web/src/pages/memory/memory-setting/advanced-settings-form.tsx b/web/src/pages/memory/memory-setting/advanced-settings-form.tsx
index 088102cd6..fc2b1b48a 100644
--- a/web/src/pages/memory/memory-setting/advanced-settings-form.tsx
+++ b/web/src/pages/memory/memory-setting/advanced-settings-form.tsx
@@ -95,7 +95,7 @@ export const AdvancedSettingsForm = () => {
// placeholder: t('memory.config.storageTypePlaceholder'),
options: [
// { label: 'LRU', value: 'LRU' },
- { label: 'FIFO', value: 'FIFO' },
+ { label: 'FIFO', value: 'fifo' },
],
required: false,
}}
diff --git a/web/src/pages/memory/memory-setting/hook.ts b/web/src/pages/memory/memory-setting/hook.ts
index ed54d40b6..b838d0136 100644
--- a/web/src/pages/memory/memory-setting/hook.ts
+++ b/web/src/pages/memory/memory-setting/hook.ts
@@ -15,9 +15,9 @@ export const useUpdateMemoryConfig = () => {
try {
const params = omit(data, [
'id',
- 'memory_type',
- 'embd_id',
- 'storage_type',
+ // 'memory_type',
+ // 'embd_id',
+ // 'storage_type',
]);
res = await updateMemory({
// ...memoryDataTemp,
diff --git a/web/src/pages/memory/memory-setting/index.tsx b/web/src/pages/memory/memory-setting/index.tsx
index c0b82f97d..e290574a8 100644
--- a/web/src/pages/memory/memory-setting/index.tsx
+++ b/web/src/pages/memory/memory-setting/index.tsx
@@ -6,9 +6,9 @@ import { MainContainer } from '@/pages/dataset/dataset-setting/configuration-for
import { TopTitle } from '@/pages/dataset/dataset-title';
import { IMemory } from '@/pages/memories/interface';
import { zodResolver } from '@hookform/resolvers/zod';
-import { t } from 'i18next';
import { useEffect } from 'react';
import { useForm } from 'react-hook-form';
+import { useTranslation } from 'react-i18next';
import { z } from 'zod';
import { useFetchMemoryBaseConfiguration } from '../hooks/use-memory-setting';
import {
@@ -24,14 +24,15 @@ import {
memoryModelFormSchema,
} from './memory-model-form';
-const MemoryMessageSchema = z.object({
- id: z.string(),
- ...basicInfoSchema,
- ...memoryModelFormSchema,
- ...advancedSettingsFormSchema,
-});
// type MemoryMessageForm = z.infer;
export default function MemoryMessage() {
+ const { t } = useTranslation();
+ const MemoryMessageSchema = z.object({
+ id: z.string(),
+ ...basicInfoSchema,
+ ...memoryModelFormSchema(t),
+ ...advancedSettingsFormSchema,
+ });
const form = useForm({
resolver: zodResolver(MemoryMessageSchema),
defaultValues: {
@@ -58,11 +59,12 @@ export default function MemoryMessage() {
system_prompt: data?.system_prompt || '',
user_prompt: data?.user_prompt || '',
forgetting_policy: data?.forgetting_policy || 'FIFO',
- storage_type: data?.storage_type || 'table',
+ storage_type: data?.storage_type || 'Table',
permissions: data?.permissions || 'me',
});
}, [data, form]);
const onSubmit = (data: IMemory) => {
+ console.log('data', data);
onMemoryRenameOk(data);
};
return (
diff --git a/web/src/pages/memory/memory-setting/memory-model-form.tsx b/web/src/pages/memory/memory-setting/memory-model-form.tsx
index 97c64208b..353784733 100644
--- a/web/src/pages/memory/memory-setting/memory-model-form.tsx
+++ b/web/src/pages/memory/memory-setting/memory-model-form.tsx
@@ -1,21 +1,30 @@
import { FormFieldType, RenderField } from '@/components/dynamic-form';
import { useModelOptions } from '@/components/llm-setting-items/llm-form-field';
import { EmbeddingSelect } from '@/pages/dataset/dataset-setting/configuration/common-item';
-import { MemoryType } from '@/pages/memories/constants';
+import { MemoryOptions, MemoryType } from '@/pages/memories/constants';
+import { TFunction } from 'i18next';
import { useTranslation } from 'react-i18next';
import { z } from 'zod';
import { useFetchMemoryMessageList } from '../memory-message/hook';
-export const memoryModelFormSchema = {
+export const memoryModelFormSchema = (t: TFunction) => ({
embd_id: z.string(),
llm_id: z.string(),
- memory_type: z.array(z.string()).optional(),
+ memory_type: z.array(z.string()).superRefine((data, ctx) => {
+ if (!data.includes(MemoryType.Raw) || !data.length) {
+ ctx.addIssue({
+ // path: ['memory_type'],
+ message: t('memories.embeddingModelError'),
+ code: 'custom',
+ });
+ }
+ }),
memory_size: z.number().optional(),
-};
+});
export const defaultMemoryModelForm = {
embd_id: '',
llm_id: '',
- memory_type: [MemoryType.Raw],
+ memory_type: [],
memory_size: 0,
};
export const MemoryModelForm = () => {
@@ -66,13 +75,14 @@ export const MemoryModelForm = () => {
horizontal: true,
placeholder: t('memories.memoryTypePlaceholder'),
tooltip: t('memories.memoryTypeTooltip'),
- disabled: true,
- options: [
- { label: 'Raw', value: 'raw' },
- { label: 'Semantic', value: 'semantic' },
- { label: 'Episodic', value: 'episodic' },
- { label: 'Procedural', value: 'procedural' },
- ],
+ disabled: data?.messages?.total_count > 0,
+ options: MemoryOptions(t),
+ customValidate: (value) => {
+ if (!value.includes(MemoryType.Raw) || !value.length) {
+ return t('memories.embeddingModelError');
+ }
+ return true;
+ },
required: true,
}}
/>
diff --git a/web/src/services/memory-service.ts b/web/src/services/memory-service.ts
index dcb6df479..5cef6d6f3 100644
--- a/web/src/services/memory-service.ts
+++ b/web/src/services/memory-service.ts
@@ -34,7 +34,7 @@ const methods = {
} as const;
const memoryService = registerNextServer(methods);
export const updateMemoryById = (id: string, data: any) => {
- return request.put(updateMemorySetting(id), { data });
+ return request.put(updateMemorySetting(id), { ...data });
};
export const getMemoryDetailById = (id: string, data: any) => {
return request.get(getMemoryDetail(id), { params: data });