diff --git a/packages/components/nodes/prompts/PromptTemplate/PromptTemplate.ts b/packages/components/nodes/prompts/PromptTemplate/PromptTemplate.ts index f976d64c..cfa2c488 100644 --- a/packages/components/nodes/prompts/PromptTemplate/PromptTemplate.ts +++ b/packages/components/nodes/prompts/PromptTemplate/PromptTemplate.ts @@ -1,5 +1,5 @@ import { ICommonObject, INode, INodeData, INodeParams, PromptTemplate } from '../../../src/Interface' -import { getBaseClasses, getInputVariables } from '../../../src/utils' +import { getBaseClasses, getInputVariables, returnJSONStr } from '../../../src/utils' import { PromptTemplateInput } from 'langchain/prompts' class PromptTemplate_Prompts implements INode { @@ -46,11 +46,12 @@ class PromptTemplate_Prompts implements INode { async init(nodeData: INodeData): Promise { const template = nodeData.inputs?.template as string - const promptValuesStr = nodeData.inputs?.promptValues as string + let promptValuesStr = nodeData.inputs?.promptValues as string let promptValues: ICommonObject = {} if (promptValuesStr) { - promptValues = JSON.parse(promptValuesStr.replace(/\s/g, '')) + promptValuesStr = promptValuesStr.replace(/\s/g, '') + promptValues = JSON.parse(returnJSONStr(promptValuesStr)) } const inputVariables = getInputVariables(template) diff --git a/packages/components/src/utils.ts b/packages/components/src/utils.ts index 08d32bab..22a09d34 100644 --- a/packages/components/src/utils.ts +++ b/packages/components/src/utils.ts @@ -234,3 +234,44 @@ export class CustomChainHandler extends BaseCallbackHandler { this.socketIO.to(this.socketIOClientId).emit('end') } } + +export const returnJSONStr = (jsonStr: string): string => { + let jsonStrArray = jsonStr.split(':') + + let wholeString = '' + for (let i = 0; i < jsonStrArray.length; i++) { + if (jsonStrArray[i].includes(',') && jsonStrArray[i + 1] !== undefined) { + const splitValueAndTitle = jsonStrArray[i].split(',') + const value = splitValueAndTitle[0] + const newTitle = splitValueAndTitle[1] + wholeString += handleEscapeDoubleQuote(value) + ',' + newTitle + ':' + } else { + wholeString += wholeString === '' ? jsonStrArray[i] + ':' : handleEscapeDoubleQuote(jsonStrArray[i]) + } + } + return wholeString +} + +const handleEscapeDoubleQuote = (value: string): string => { + let newValue = '' + if (value.includes('"')) { + const valueArray = value.split('"') + for (let i = 0; i < valueArray.length; i++) { + if ((i + 1) % 2 !== 0) { + switch (valueArray[i]) { + case '': + newValue += '"' + break + case '}': + newValue += '"}' + break + default: + newValue += '\\"' + valueArray[i] + '\\"' + } + } else { + newValue += valueArray[i] + } + } + } + return newValue === '' ? value : newValue +}