diff --git a/web/app/components/workflow/nodes/_base/components/memory-config.tsx b/web/app/components/workflow/nodes/_base/components/memory-config.tsx index 2f8849c811..390940bb7b 100644 --- a/web/app/components/workflow/nodes/_base/components/memory-config.tsx +++ b/web/app/components/workflow/nodes/_base/components/memory-config.tsx @@ -5,11 +5,42 @@ import { useTranslation } from 'react-i18next' import produce from 'immer' import cn from 'classnames' import type { Memory } from '../../../types' +import { MemoryRole } from '../../../types' import Field from '@/app/components/workflow/nodes/_base/components/field' import Switch from '@/app/components/base/switch' import Slider from '@/app/components/base/slider' const i18nPrefix = 'workflow.nodes.common.memory' +const WINDOW_SIZE_MIN = 1 +const WINDOW_SIZE_MAX = 100 +const WINDOW_SIZE_DEFAULT = 50 +type RoleItemProps = { + readonly: boolean + title: string + value: string + onChange: (value: string) => void +} +const RoleItem: FC = ({ + readonly, + title, + value, + onChange, +}) => { + const handleChange = useCallback((e: React.ChangeEvent) => { + onChange(e.target.value) + }, [onChange]) + return ( +
+
{title}
+ +
+ ) +} type Props = { className?: string @@ -19,10 +50,6 @@ type Props = { canSetRoleName?: boolean } -const WINDOW_SIZE_MIN = 1 -const WINDOW_SIZE_MAX = 100 -const WINDOW_SIZE_DEFAULT = 50 - const MemoryConfig: FC = ({ className, readonly, @@ -70,6 +97,21 @@ const MemoryConfig: FC = ({ if (payload.window.size === '' || payload.window.size === null) handleWindowSizeChange(WINDOW_SIZE_DEFAULT) }, [handleWindowSizeChange, payload.window?.size]) + + const handleRolePrefixChange = useCallback((role: MemoryRole) => { + return (value: string) => { + const newPayload = produce(payload, (draft) => { + if (!draft.role_prefix) { + draft.role_prefix = { + user: '', + assistant: '', + } + } + draft.role_prefix[role] = value + }) + onChange(newPayload) + } + }, [payload, onChange]) return (
= ({
{canSetRoleName && ( -
Role name
+
+
{t(`${i18nPrefix}.conversationRoleName`)}
+
+ + +
+
+ )} diff --git a/web/app/components/workflow/nodes/question-classifier/mock.ts b/web/app/components/workflow/nodes/question-classifier/mock.ts index 1698eee6e3..7c2b18eefd 100644 --- a/web/app/components/workflow/nodes/question-classifier/mock.ts +++ b/web/app/components/workflow/nodes/question-classifier/mock.ts @@ -1,10 +1,10 @@ -import { MemoryRole } from '../../types' +import { BlockEnum } from '../../types' import type { QuestionClassifierNodeType } from './types' export const mockData: QuestionClassifierNodeType = { title: 'Test', desc: 'Test', - type: 'Test', + type: BlockEnum.QuestionClassifier, query_variable_selector: ['aaa', 'name'], model: { provider: 'openai', @@ -28,7 +28,6 @@ export const mockData: QuestionClassifierNodeType = { ], instruction: 'You are an entity extraction model that accepts an input', memory: { - role_prefix: MemoryRole.assistant, window: { enabled: false, size: 0, diff --git a/web/app/components/workflow/types.ts b/web/app/components/workflow/types.ts index 2b77295d7c..abb0c910de 100644 --- a/web/app/components/workflow/types.ts +++ b/web/app/components/workflow/types.ts @@ -90,8 +90,13 @@ export enum MemoryRole { assistant = 'assistant', } +export type RolePrefix = { + user: string + assistant: string +} + export type Memory = { - role_prefix?: MemoryRole + role_prefix?: RolePrefix window: { enabled: boolean size: number | string | null diff --git a/web/i18n/en-US/workflow.ts b/web/i18n/en-US/workflow.ts index fc3a26ad19..14b59c4e8e 100644 --- a/web/i18n/en-US/workflow.ts +++ b/web/i18n/en-US/workflow.ts @@ -7,6 +7,9 @@ const translation = { memory: 'Memory', memoryTip: 'Chat memory settings', windowSize: 'Window Size', + conversationRoleName: 'Conversation Role Name', + user: 'User prefix', + assistant: 'Assistant prefix', }, }, start: { diff --git a/web/i18n/zh-Hans/workflow.ts b/web/i18n/zh-Hans/workflow.ts index 15d3766821..0950f6171a 100644 --- a/web/i18n/zh-Hans/workflow.ts +++ b/web/i18n/zh-Hans/workflow.ts @@ -7,6 +7,9 @@ const translation = { memory: '记忆', memoryTip: '聊天记忆设置', windowSize: '记忆窗口', + conversationRoleName: '对话角色名', + user: '用户前缀', + assistant: '助手前缀', }, }, start: {