Merge #95 into develop_web from feature/20251219_zy
fix(web): knowledge-retrieval node update * feature/20251219_zy: (2 commits) feat(web): hidden node fix(web): knowledge-retrieval node update Signed-off-by: zhaoying <zhaoying@redbearai.com> Merged-by: zhaoying <zhaoying@redbearai.com> CR-link: https://codeup.aliyun.com/redbearai/python/redbear-mem-open/change/95
This commit is contained in:
@@ -16,6 +16,7 @@ import KnowledgeListModal from './KnowledgeListModal'
|
||||
import KnowledgeConfigModal from './KnowledgeConfigModal'
|
||||
import KnowledgeGlobalConfigModal from './KnowledgeGlobalConfigModal'
|
||||
import Tag from '@/components/Tag'
|
||||
import { getKnowledgeBaseList } from '@/api/knowledgeBase'
|
||||
|
||||
const Knowledge: FC<{value?: KnowledgeConfig; onChange?: (config: KnowledgeConfig) => void}> = ({value = {knowledge_bases: []}, onChange}) => {
|
||||
const { t } = useTranslation()
|
||||
@@ -29,7 +30,26 @@ const Knowledge: FC<{value?: KnowledgeConfig; onChange?: (config: KnowledgeConfi
|
||||
if (value && JSON.stringify(value) !== JSON.stringify(editConfig)) {
|
||||
setEditConfig({ ...(value || {}) })
|
||||
const knowledge_bases = [...(value.knowledge_bases || [])]
|
||||
setKnowledgeList(knowledge_bases)
|
||||
|
||||
// 检查是否有knowledge_bases缺少name字段
|
||||
const basesWithoutName = knowledge_bases.filter(base => !base.name)
|
||||
if (basesWithoutName.length > 0) {
|
||||
// 调用接口获取完整的知识库信息
|
||||
getKnowledgeBaseList().then(res => {
|
||||
const fullBases = knowledge_bases.map(base => {
|
||||
if (!base.name) {
|
||||
const fullBase = res.items.find((item: any) => item.id === base.kb_id)
|
||||
return fullBase ? { ...base, ...fullBase } : base
|
||||
}
|
||||
return base
|
||||
})
|
||||
setKnowledgeList(fullBases)
|
||||
}).catch(() => {
|
||||
setKnowledgeList(knowledge_bases)
|
||||
})
|
||||
} else {
|
||||
setKnowledgeList(knowledge_bases)
|
||||
}
|
||||
}
|
||||
}, [value])
|
||||
|
||||
|
||||
@@ -318,7 +318,7 @@ const Properties: FC<PropertiesProps> = ({
|
||||
if (selectedNode?.data?.type === 'llm' && key === 'messages' && config.type === 'define') {
|
||||
return (
|
||||
<Form.Item key={key} name={key}>
|
||||
<MessageEditor options={variableList} />
|
||||
<MessageEditor options={variableList} parentName={key} />
|
||||
</Form.Item>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ export const nodeLibrary: NodeLibrary[] = [
|
||||
type: 'define',
|
||||
defaultValue: [
|
||||
{
|
||||
role: 'system',
|
||||
role: 'SYSTEM',
|
||||
content: undefined,
|
||||
readonly: true
|
||||
},
|
||||
@@ -142,27 +142,27 @@ export const nodeLibrary: NodeLibrary[] = [
|
||||
}
|
||||
},
|
||||
// { type: "classification", icon: classificationIcon },
|
||||
{ type: "parameter-extractor", icon: parameterExtractionIcon,
|
||||
config: {
|
||||
model_id: {
|
||||
type: 'customSelect',
|
||||
url: getModelListUrl,
|
||||
params: { type: 'llm,chat' }, // llm/chat
|
||||
valueKey: 'id',
|
||||
labelKey: 'name',
|
||||
},
|
||||
text: {
|
||||
type: 'variableList',
|
||||
},
|
||||
params: {
|
||||
type: 'paramList',
|
||||
},
|
||||
prompt: {
|
||||
type: 'messageEditor',
|
||||
isArray: false,
|
||||
},
|
||||
}
|
||||
}
|
||||
// { type: "parameter-extractor", icon: parameterExtractionIcon,
|
||||
// config: {
|
||||
// model_id: {
|
||||
// type: 'customSelect',
|
||||
// url: getModelListUrl,
|
||||
// params: { type: 'llm,chat' }, // llm/chat
|
||||
// valueKey: 'id',
|
||||
// labelKey: 'name',
|
||||
// },
|
||||
// text: {
|
||||
// type: 'variableList',
|
||||
// },
|
||||
// params: {
|
||||
// type: 'paramList',
|
||||
// },
|
||||
// prompt: {
|
||||
// type: 'messageEditor',
|
||||
// isArray: false,
|
||||
// },
|
||||
// }
|
||||
// }
|
||||
]
|
||||
},
|
||||
// {
|
||||
@@ -182,115 +182,115 @@ export const nodeLibrary: NodeLibrary[] = [
|
||||
// { type: "agent_arbitration", icon: agentArbitrationIcon }
|
||||
// ]
|
||||
// },
|
||||
{
|
||||
category: "flowControl",
|
||||
nodes: [
|
||||
{ type: "if-else", icon: conditionIcon,
|
||||
config: {
|
||||
cases: {
|
||||
type: 'caseList',
|
||||
defaultValue: [
|
||||
{
|
||||
logical_operator: 'and',
|
||||
expressions: []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
// { type: "iteration", icon: iterationIcon },
|
||||
// { type: "loop", icon: loopIcon },
|
||||
// { type: "parallel", icon: parallelIcon },
|
||||
{ type: "var-aggregator", icon: aggregatorIcon,
|
||||
config: {
|
||||
group: {
|
||||
type: 'switch',
|
||||
defaultValue: false
|
||||
},
|
||||
group_names: {
|
||||
type: 'groupVariableList',
|
||||
defaultValue: [{ key: 'Group1', value: []}]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
category: "externalInteraction",
|
||||
nodes: [
|
||||
{ type: "http-request", icon: httpRequestIcon,
|
||||
config: {
|
||||
method: {
|
||||
type: 'select',
|
||||
options: [
|
||||
{ label: 'GET', value: 'GET' },
|
||||
{ label: 'POST', value: 'POST' },
|
||||
{ label: 'HEAD', value: 'HEAD' },
|
||||
{ label: 'PATCH', value: 'PATCH' },
|
||||
{ label: 'PUT', value: 'PUT' },
|
||||
{ label: 'DELETE', value: 'DELETE' },
|
||||
],
|
||||
defaultValue: 'GET'
|
||||
},
|
||||
url: {
|
||||
type: 'messageEditor',
|
||||
isArray: false,
|
||||
},
|
||||
auth: {
|
||||
type: 'define',
|
||||
defaultValue: {
|
||||
auth_type: 'none'
|
||||
}
|
||||
},
|
||||
headers: {
|
||||
type: 'define',
|
||||
defaultValue: {}
|
||||
},
|
||||
params: {
|
||||
type: 'define',
|
||||
defaultValue: {}
|
||||
},
|
||||
body: {
|
||||
type: 'define',
|
||||
defaultValue: {
|
||||
'content_type': 'none'
|
||||
}
|
||||
},
|
||||
verify_ssl: {
|
||||
type: 'switch',
|
||||
defaultValue: false
|
||||
},
|
||||
timeouts: {
|
||||
type: 'define',
|
||||
defaultValue: {}
|
||||
},
|
||||
retry: {
|
||||
type: 'define',
|
||||
},
|
||||
error_handle: {
|
||||
type: 'define',
|
||||
defaultValue: {
|
||||
method: 'default'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
// { type: "tools", icon: toolsIcon },
|
||||
// { type: "code_execution", icon: codeExecutionIcon },
|
||||
{ type: "jinja-render", icon: templateRenderingIcon,
|
||||
config: {
|
||||
mapping: {
|
||||
type: 'mappingList',
|
||||
defaultValue: []
|
||||
},
|
||||
template: {
|
||||
type: 'messageEditor',
|
||||
isArray: false,
|
||||
},
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
// {
|
||||
// category: "flowControl",
|
||||
// nodes: [
|
||||
// { type: "if-else", icon: conditionIcon,
|
||||
// config: {
|
||||
// cases: {
|
||||
// type: 'caseList',
|
||||
// defaultValue: [
|
||||
// {
|
||||
// logical_operator: 'and',
|
||||
// expressions: []
|
||||
// }
|
||||
// ]
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// // { type: "iteration", icon: iterationIcon },
|
||||
// { type: "loop", icon: loopIcon },
|
||||
// // { type: "parallel", icon: parallelIcon },
|
||||
// { type: "var-aggregator", icon: aggregatorIcon,
|
||||
// config: {
|
||||
// group: {
|
||||
// type: 'switch',
|
||||
// defaultValue: false
|
||||
// },
|
||||
// group_names: {
|
||||
// type: 'groupVariableList',
|
||||
// defaultValue: [{ key: 'Group1', value: []}]
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// ]
|
||||
// },
|
||||
// {
|
||||
// category: "externalInteraction",
|
||||
// nodes: [
|
||||
// { type: "http-request", icon: httpRequestIcon,
|
||||
// config: {
|
||||
// method: {
|
||||
// type: 'select',
|
||||
// options: [
|
||||
// { label: 'GET', value: 'GET' },
|
||||
// { label: 'POST', value: 'POST' },
|
||||
// { label: 'HEAD', value: 'HEAD' },
|
||||
// { label: 'PATCH', value: 'PATCH' },
|
||||
// { label: 'PUT', value: 'PUT' },
|
||||
// { label: 'DELETE', value: 'DELETE' },
|
||||
// ],
|
||||
// defaultValue: 'GET'
|
||||
// },
|
||||
// url: {
|
||||
// type: 'messageEditor',
|
||||
// isArray: false,
|
||||
// },
|
||||
// auth: {
|
||||
// type: 'define',
|
||||
// defaultValue: {
|
||||
// auth_type: 'none'
|
||||
// }
|
||||
// },
|
||||
// headers: {
|
||||
// type: 'define',
|
||||
// defaultValue: {}
|
||||
// },
|
||||
// params: {
|
||||
// type: 'define',
|
||||
// defaultValue: {}
|
||||
// },
|
||||
// body: {
|
||||
// type: 'define',
|
||||
// defaultValue: {
|
||||
// 'content_type': 'none'
|
||||
// }
|
||||
// },
|
||||
// verify_ssl: {
|
||||
// type: 'switch',
|
||||
// defaultValue: false
|
||||
// },
|
||||
// timeouts: {
|
||||
// type: 'define',
|
||||
// defaultValue: {}
|
||||
// },
|
||||
// retry: {
|
||||
// type: 'define',
|
||||
// },
|
||||
// error_handle: {
|
||||
// type: 'define',
|
||||
// defaultValue: {
|
||||
// method: 'default'
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
// // { type: "tools", icon: toolsIcon },
|
||||
// // { type: "code_execution", icon: codeExecutionIcon },
|
||||
// { type: "jinja-render", icon: templateRenderingIcon,
|
||||
// config: {
|
||||
// mapping: {
|
||||
// type: 'mappingList',
|
||||
// defaultValue: []
|
||||
// },
|
||||
// template: {
|
||||
// type: 'messageEditor',
|
||||
// isArray: false,
|
||||
// },
|
||||
// }
|
||||
// }
|
||||
// ]
|
||||
// },
|
||||
// {
|
||||
// category: "safetyAndCompliance",
|
||||
// nodes: [
|
||||
@@ -311,8 +311,8 @@ export const nodeLibrary: NodeLibrary[] = [
|
||||
export const nodeRegisterLibrary: ReactShapeConfig[] = [
|
||||
{
|
||||
shape: 'loop-node',
|
||||
width: 200,
|
||||
height: 200,
|
||||
width: 240,
|
||||
height: 80,
|
||||
component: LoopNode,
|
||||
},
|
||||
{
|
||||
@@ -335,8 +335,8 @@ export const nodeRegisterLibrary: ReactShapeConfig[] = [
|
||||
},
|
||||
{
|
||||
shape: 'group-start-node',
|
||||
width: 120,
|
||||
height: 40,
|
||||
width: 44,
|
||||
height: 44,
|
||||
component: GroupStartNode,
|
||||
},
|
||||
{
|
||||
@@ -388,7 +388,7 @@ export const graphNodeLibrary: Record<string, NodeConfig> = {
|
||||
},
|
||||
loop: {
|
||||
width: 240,
|
||||
height: 200,
|
||||
height: 120,
|
||||
shape: 'loop-node',
|
||||
ports: {
|
||||
groups: defaultPortGroups,
|
||||
|
||||
@@ -762,9 +762,11 @@ export const useWorkflowGraph = ({
|
||||
if (data.config[key] && 'defaultValue' in data.config[key] && key !== 'knowledge_retrieval') {
|
||||
itemConfig[key] = data.config[key].defaultValue
|
||||
} else if (key === 'knowledge_retrieval' && data.config[key] && 'defaultValue' in data.config[key]) {
|
||||
const { knowledge_bases } = data.config[key].defaultValue
|
||||
itemConfig = {
|
||||
...itemConfig,
|
||||
...data.config[key].defaultValue
|
||||
...data.config[key].defaultValue,
|
||||
knowledge_bases: knowledge_bases.map((vo: any) => ({ kb_id: vo.id, ...vo.config }))
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user