Merge pull request #259 from FlowiseAI/bugfix/UnexpectedTokenInJSONError

bugfix/UnexpectedTokenInJSONError
This commit is contained in:
Ong Chung Yau
2023-06-07 14:40:38 +07:00
committed by GitHub
2 changed files with 45 additions and 3 deletions
@@ -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<any> {
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)
+41
View File
@@ -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
}