mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-28 07:00:49 +03:00
Merge branch 'main' into BUGFIX/XSS
# Conflicts: # packages/server/src/index.ts
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
export function parsePrompt(prompt: string): any[] {
|
||||
const promptObj = JSON.parse(prompt)
|
||||
let response = []
|
||||
if (promptObj.kwargs.messages) {
|
||||
promptObj.kwargs.messages.forEach((message: any) => {
|
||||
let messageType = message.id.includes('SystemMessagePromptTemplate')
|
||||
? 'systemMessagePrompt'
|
||||
: message.id.includes('HumanMessagePromptTemplate')
|
||||
? 'humanMessagePrompt'
|
||||
: message.id.includes('AIMessagePromptTemplate')
|
||||
? 'aiMessagePrompt'
|
||||
: 'template'
|
||||
let messageTypeDisplay = message.id.includes('SystemMessagePromptTemplate')
|
||||
? 'System Message'
|
||||
: message.id.includes('HumanMessagePromptTemplate')
|
||||
? 'Human Message'
|
||||
: message.id.includes('AIMessagePromptTemplate')
|
||||
? 'AI Message'
|
||||
: 'Message'
|
||||
let template = message.kwargs.prompt.kwargs.template
|
||||
response.push({
|
||||
type: messageType,
|
||||
typeDisplay: messageTypeDisplay,
|
||||
template: template
|
||||
})
|
||||
})
|
||||
} else if (promptObj.kwargs.template) {
|
||||
let template = promptObj.kwargs.template
|
||||
response.push({
|
||||
type: 'template',
|
||||
typeDisplay: 'Prompt',
|
||||
template: template
|
||||
})
|
||||
}
|
||||
return response
|
||||
}
|
||||
@@ -558,9 +558,20 @@ export const isStartNodeDependOnInput = (startingNodes: IReactFlowNode[], nodes:
|
||||
if (inputVariables.length > 0) return true
|
||||
}
|
||||
}
|
||||
const whitelistNodeNames = ['vectorStoreToDocument', 'autoGPT']
|
||||
const whitelistNodeNames = ['vectorStoreToDocument', 'autoGPT', 'chatPromptTemplate', 'promptTemplate'] //If these nodes are found, chatflow cannot be reused
|
||||
for (const node of nodes) {
|
||||
if (whitelistNodeNames.includes(node.data.name)) return true
|
||||
if (node.data.name === 'chatPromptTemplate' || node.data.name === 'promptTemplate') {
|
||||
let promptValues: ICommonObject = {}
|
||||
const promptValuesRaw = node.data.inputs?.promptValues
|
||||
if (promptValuesRaw) {
|
||||
try {
|
||||
promptValues = typeof promptValuesRaw === 'object' ? promptValuesRaw : JSON.parse(promptValuesRaw)
|
||||
} catch (exception) {
|
||||
console.error(exception)
|
||||
}
|
||||
}
|
||||
if (getAllValuesFromJson(promptValues).includes(`{{${QUESTION_VAR_PREFIX}}}`)) return true
|
||||
} else if (whitelistNodeNames.includes(node.data.name)) return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
@@ -913,3 +924,31 @@ export const replaceChatHistory = async (
|
||||
|
||||
return ''
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all values from a JSON object
|
||||
* @param {any} obj
|
||||
* @returns {any[]}
|
||||
*/
|
||||
export const getAllValuesFromJson = (obj: any): any[] => {
|
||||
const values: any[] = []
|
||||
|
||||
function extractValues(data: any) {
|
||||
if (typeof data === 'object' && data !== null) {
|
||||
if (Array.isArray(data)) {
|
||||
for (const item of data) {
|
||||
extractValues(item)
|
||||
}
|
||||
} else {
|
||||
for (const key in data) {
|
||||
extractValues(data[key])
|
||||
}
|
||||
}
|
||||
} else {
|
||||
values.push(data)
|
||||
}
|
||||
}
|
||||
|
||||
extractValues(obj)
|
||||
return values
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user