feat(web): llm node add memory config
This commit is contained in:
@@ -6,7 +6,7 @@ import { Graph, Node, MiniMap, Snapline, Clipboard, Keyboard, type Edge } from '
|
||||
import { register } from '@antv/x6-react-shape';
|
||||
|
||||
import { nodeRegisterLibrary, graphNodeLibrary, nodeLibrary, portMarkup, portAttrs } from '../constant';
|
||||
import type { WorkflowConfig, NodeProperties } from '../types';
|
||||
import type { WorkflowConfig, NodeProperties, ChatVariable } from '../types';
|
||||
import { getWorkflowConfig, saveWorkflowConfig } from '@/api/application'
|
||||
import type { PortMetadata } from '@antv/x6/lib/model/port';
|
||||
|
||||
@@ -35,6 +35,8 @@ export interface UseWorkflowGraphReturn {
|
||||
copyEvent: () => boolean | void;
|
||||
parseEvent: () => boolean | void;
|
||||
handleSave: (flag?: boolean) => Promise<unknown>;
|
||||
chatVariables: ChatVariable[];
|
||||
setChatVariables: React.Dispatch<React.SetStateAction<ChatVariable[]>>;
|
||||
}
|
||||
|
||||
export const edge_color = '#155EEF';
|
||||
@@ -54,6 +56,7 @@ export const useWorkflowGraph = ({
|
||||
const [canRedo, setCanRedo] = useState(false);
|
||||
const [isHandMode, setIsHandMode] = useState(false);
|
||||
const [config, setConfig] = useState<WorkflowConfig | null>(null);
|
||||
const [chatVariables, setChatVariables] = useState<ChatVariable[]>([])
|
||||
|
||||
useEffect(() => {
|
||||
getConfig()
|
||||
@@ -63,16 +66,15 @@ export const useWorkflowGraph = ({
|
||||
getWorkflowConfig(id)
|
||||
.then(res => {
|
||||
const { variables, ...rest } = res as WorkflowConfig
|
||||
setConfig({
|
||||
...rest,
|
||||
variables: variables.map(v => {
|
||||
const { default: _, ...cleanV } = v
|
||||
return {
|
||||
...cleanV,
|
||||
defaultValue: v.default ?? ''
|
||||
}
|
||||
})
|
||||
const initChatVariables = variables.map(v => {
|
||||
const { default: _, ...cleanV } = v
|
||||
return {
|
||||
...cleanV,
|
||||
defaultValue: v.default ?? ''
|
||||
}
|
||||
})
|
||||
setChatVariables(initChatVariables)
|
||||
setConfig({ ...rest, variables: initChatVariables })
|
||||
})
|
||||
}
|
||||
|
||||
@@ -94,7 +96,17 @@ export const useWorkflowGraph = ({
|
||||
|
||||
if (nodeLibraryConfig?.config) {
|
||||
Object.keys(nodeLibraryConfig.config).forEach(key => {
|
||||
if (key === 'knowledge_retrieval' && nodeLibraryConfig.config && nodeLibraryConfig.config[key]) {
|
||||
if (key === 'memory' && nodeLibraryConfig.config && nodeLibraryConfig.config[key]) {
|
||||
const { memory, messages } = config as any;
|
||||
if (memory?.enable && messages && messages.length > 0) {
|
||||
const lastMessage = messages[messages.length - 1]
|
||||
nodeLibraryConfig.config[key].defaultValue = {
|
||||
...memory,
|
||||
messages: lastMessage.content
|
||||
}
|
||||
nodeLibraryConfig.config.messages.defaultValue.splice(-1, 1)
|
||||
}
|
||||
} else if (key === 'knowledge_retrieval' && nodeLibraryConfig.config && nodeLibraryConfig.config[key]) {
|
||||
const { query, ...rest } = config
|
||||
nodeLibraryConfig.config[key].defaultValue = {
|
||||
...rest
|
||||
@@ -917,13 +929,13 @@ export const useWorkflowGraph = ({
|
||||
|
||||
const params = {
|
||||
...config,
|
||||
variables: config.variables.map(v => {
|
||||
const { defaultValue, ...cleanV } = v
|
||||
return {
|
||||
...cleanV,
|
||||
default: defaultValue ?? ''
|
||||
}
|
||||
}),
|
||||
variables: chatVariables.map(v => {
|
||||
const { defaultValue, ...cleanV } = v
|
||||
return {
|
||||
...cleanV,
|
||||
default: defaultValue ?? ''
|
||||
}
|
||||
}),
|
||||
nodes: nodes.map((node: Node) => {
|
||||
const data = node.getData();
|
||||
const position = node.getPosition();
|
||||
@@ -931,7 +943,15 @@ export const useWorkflowGraph = ({
|
||||
|
||||
if (data.config) {
|
||||
Object.keys(data.config).forEach(key => {
|
||||
if (data.config[key] && 'defaultValue' in data.config[key] && key === 'group_variables') {
|
||||
if (key === 'memory' && data.config[key] && 'defaultValue' in data.config[key]) {
|
||||
const { messages, ...rest } = data.config[key].defaultValue
|
||||
let memoryMessage = { role: 'USER', content: data.config[key].defaultValue.messages }
|
||||
itemConfig = {
|
||||
...itemConfig,
|
||||
messages: rest.enable ? [...itemConfig.messages, memoryMessage] : itemConfig.messages,
|
||||
memory: { ...rest },
|
||||
}
|
||||
} else if (data.config[key] && 'defaultValue' in data.config[key] && key === 'group_variables') {
|
||||
let group_variables = data.config.group.defaultValue ? {} : data.config[key].defaultValue
|
||||
if (data.config.group.defaultValue) {
|
||||
data.config[key].defaultValue.map((vo: any) => {
|
||||
@@ -1077,5 +1097,7 @@ export const useWorkflowGraph = ({
|
||||
copyEvent,
|
||||
parseEvent,
|
||||
handleSave,
|
||||
chatVariables,
|
||||
setChatVariables
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user