|
|
|
@@ -233,6 +233,16 @@ const matchNotSystemVars = (prompts: string[]) => { |
|
|
|
return uniqVars |
|
|
|
} |
|
|
|
|
|
|
|
const replaceOldVarInText = (text: string, oldVar: ValueSelector, newVar: ValueSelector) => { |
|
|
|
if (!text || typeof text !== 'string') |
|
|
|
return text |
|
|
|
|
|
|
|
if (!newVar || newVar.length === 0) |
|
|
|
return text |
|
|
|
|
|
|
|
return text.replaceAll(`{{#${oldVar.join('.')}#}}`, `{{#${newVar.join('.')}#}}`) |
|
|
|
} |
|
|
|
|
|
|
|
export const getNodeUsedVars = (node: Node): ValueSelector[] => { |
|
|
|
const { data } = node |
|
|
|
const { type } = data |
|
|
|
@@ -349,14 +359,21 @@ export const updateNodeVars = (oldNode: Node, oldVarSelector: ValueSelector, new |
|
|
|
} |
|
|
|
case BlockEnum.LLM: { |
|
|
|
const payload = data as LLMNodeType |
|
|
|
// TODO: update in inputs |
|
|
|
// if (payload.variables) { |
|
|
|
// payload.variables = payload.variables.map((v) => { |
|
|
|
// if (v.value_selector.join('.') === oldVarSelector.join('.')) |
|
|
|
// v.value_selector = newVarSelector |
|
|
|
// return v |
|
|
|
// }) |
|
|
|
// } |
|
|
|
const isChatModel = payload.model?.mode === 'chat' |
|
|
|
if (isChatModel) { |
|
|
|
payload.prompt_template = (payload.prompt_template as PromptItem[]).map((prompt) => { |
|
|
|
return { |
|
|
|
...prompt, |
|
|
|
text: replaceOldVarInText(prompt.text, oldVarSelector, newVarSelector), |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
else { |
|
|
|
payload.prompt_template = { |
|
|
|
...payload.prompt_template, |
|
|
|
text: replaceOldVarInText((payload.prompt_template as PromptItem).text, oldVarSelector, newVarSelector), |
|
|
|
} |
|
|
|
} |
|
|
|
if (payload.context?.variable_selector?.join('.') === oldVarSelector.join('.')) |
|
|
|
payload.context.variable_selector = newVarSelector |
|
|
|
|
|
|
|
@@ -408,30 +425,35 @@ export const updateNodeVars = (oldNode: Node, oldVarSelector: ValueSelector, new |
|
|
|
break |
|
|
|
} |
|
|
|
case BlockEnum.HttpRequest: { |
|
|
|
// TODO: update in inputs |
|
|
|
// const payload = data as HttpNodeType |
|
|
|
// if (payload.variables) { |
|
|
|
// payload.variables = payload.variables.map((v) => { |
|
|
|
// if (v.value_selector.join('.') === oldVarSelector.join('.')) |
|
|
|
// v.value_selector = newVarSelector |
|
|
|
// return v |
|
|
|
// }) |
|
|
|
// } |
|
|
|
const payload = data as HttpNodeType |
|
|
|
payload.url = replaceOldVarInText(payload.url, oldVarSelector, newVarSelector) |
|
|
|
payload.headers = replaceOldVarInText(payload.headers, oldVarSelector, newVarSelector) |
|
|
|
payload.params = replaceOldVarInText(payload.params, oldVarSelector, newVarSelector) |
|
|
|
payload.body.data = replaceOldVarInText(payload.body.data, oldVarSelector, newVarSelector) |
|
|
|
break |
|
|
|
} |
|
|
|
case BlockEnum.Tool: { |
|
|
|
// TODO: update in inputs |
|
|
|
// const payload = data as ToolNodeType |
|
|
|
// if (payload.tool_parameters) { |
|
|
|
// payload.tool_parameters = payload.tool_parameters.map((v) => { |
|
|
|
// if (v.type === VarKindType.static) |
|
|
|
// return v |
|
|
|
|
|
|
|
// if (v.value_selector?.join('.') === oldVarSelector.join('.')) |
|
|
|
// v.value_selector = newVarSelector |
|
|
|
// return v |
|
|
|
// }) |
|
|
|
// } |
|
|
|
const payload = data as ToolNodeType |
|
|
|
const hasShouldRenameVar = Object.keys(payload.tool_parameters)?.filter(key => payload.tool_parameters[key].type !== ToolVarType.constant) |
|
|
|
if (hasShouldRenameVar) { |
|
|
|
Object.keys(payload.tool_parameters).forEach((key) => { |
|
|
|
const value = payload.tool_parameters[key] |
|
|
|
const { type } = value |
|
|
|
if (type === ToolVarType.variable) { |
|
|
|
payload.tool_parameters[key] = { |
|
|
|
...value, |
|
|
|
value: newVarSelector, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (type === ToolVarType.mixed) { |
|
|
|
payload.tool_parameters[key] = { |
|
|
|
...value, |
|
|
|
value: replaceOldVarInText(payload.tool_parameters[key].value as string, oldVarSelector, newVarSelector), |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
break |
|
|
|
} |
|
|
|
case BlockEnum.VariableAssigner: { |