mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-28 23:01:09 +03:00
feat: unique chat id
This commit is contained in:
@@ -2,6 +2,7 @@ import { SystemChatMessage } from 'langchain/schema'
|
|||||||
import { INode, INodeData, INodeParams } from '../../../src/Interface'
|
import { INode, INodeData, INodeParams } from '../../../src/Interface'
|
||||||
import { getBaseClasses } from '../../../src/utils'
|
import { getBaseClasses } from '../../../src/utils'
|
||||||
import { ZepMemory, ZepMemoryInput } from 'langchain/memory/zep'
|
import { ZepMemory, ZepMemoryInput } from 'langchain/memory/zep'
|
||||||
|
import { ICommonObject } from '../../../src'
|
||||||
|
|
||||||
class ZepMemory_Memory implements INode {
|
class ZepMemory_Memory implements INode {
|
||||||
label: string
|
label: string
|
||||||
@@ -28,13 +29,6 @@ class ZepMemory_Memory implements INode {
|
|||||||
type: 'string',
|
type: 'string',
|
||||||
default: 'http://127.0.0.1:8000'
|
default: 'http://127.0.0.1:8000'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
label: 'Session Id',
|
|
||||||
name: 'sessionId',
|
|
||||||
type: 'string',
|
|
||||||
placeholder: 'unique and manually change in every conversion!',
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: 'Auto Summary',
|
label: 'Auto Summary',
|
||||||
name: 'autoSummary',
|
name: 'autoSummary',
|
||||||
@@ -86,15 +80,15 @@ class ZepMemory_Memory implements INode {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
async init(nodeData: INodeData): Promise<any> {
|
async init(nodeData: INodeData, _: string, options: ICommonObject): Promise<any> {
|
||||||
const baseURL = nodeData.inputs?.baseURL as string
|
const baseURL = nodeData.inputs?.baseURL as string
|
||||||
const sessionId = nodeData.inputs?.sessionId as string
|
|
||||||
const aiPrefix = nodeData.inputs?.aiPrefix as string
|
const aiPrefix = nodeData.inputs?.aiPrefix as string
|
||||||
const humanPrefix = nodeData.inputs?.humanPrefix as string
|
const humanPrefix = nodeData.inputs?.humanPrefix as string
|
||||||
const memoryKey = nodeData.inputs?.memoryKey as string
|
const memoryKey = nodeData.inputs?.memoryKey as string
|
||||||
const inputKey = nodeData.inputs?.inputKey as string
|
const inputKey = nodeData.inputs?.inputKey as string
|
||||||
const autoSummaryTemplate = nodeData.inputs?.autoSummaryTemplate as string
|
const autoSummaryTemplate = nodeData.inputs?.autoSummaryTemplate as string
|
||||||
const autoSummary = nodeData.inputs?.autoSummary as boolean
|
const autoSummary = nodeData.inputs?.autoSummary as boolean
|
||||||
|
const sessionId = options?.chatId as string
|
||||||
|
|
||||||
const obj: ZepMemoryInput = {
|
const obj: ZepMemoryInput = {
|
||||||
baseURL,
|
baseURL,
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ export class ChildProcess {
|
|||||||
depthQueue,
|
depthQueue,
|
||||||
componentNodes,
|
componentNodes,
|
||||||
incomingInput.question,
|
incomingInput.question,
|
||||||
|
'',
|
||||||
incomingInput?.overrideConfig
|
incomingInput?.overrideConfig
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -506,6 +506,16 @@ export class App {
|
|||||||
})
|
})
|
||||||
if (!chatflow) return res.status(404).send(`Chatflow ${chatflowid} not found`)
|
if (!chatflow) return res.status(404).send(`Chatflow ${chatflowid} not found`)
|
||||||
|
|
||||||
|
// first chatmessage id as the unique chat id
|
||||||
|
const firstChatMessage = await this.AppDataSource.getRepository(ChatMessage)
|
||||||
|
.createQueryBuilder('cm')
|
||||||
|
.select('cm.id')
|
||||||
|
.where('chatflowid = :chatflowid', { chatflowid })
|
||||||
|
.orderBy('cm.createdDate', 'ASC')
|
||||||
|
.getOne()
|
||||||
|
if (!firstChatMessage) return res.status(500).send(`Chatflow ${chatflowid} first message not found`)
|
||||||
|
const chatId = firstChatMessage.id
|
||||||
|
|
||||||
if (!isInternal) {
|
if (!isInternal) {
|
||||||
await this.validateKey(req, res, chatflow)
|
await this.validateKey(req, res, chatflow)
|
||||||
}
|
}
|
||||||
@@ -618,6 +628,7 @@ export class App {
|
|||||||
depthQueue,
|
depthQueue,
|
||||||
this.nodesPool.componentNodes,
|
this.nodesPool.componentNodes,
|
||||||
incomingInput.question,
|
incomingInput.question,
|
||||||
|
chatId,
|
||||||
incomingInput?.overrideConfig
|
incomingInput?.overrideConfig
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -182,6 +182,7 @@ export const buildLangchain = async (
|
|||||||
depthQueue: IDepthQueue,
|
depthQueue: IDepthQueue,
|
||||||
componentNodes: IComponentNodes,
|
componentNodes: IComponentNodes,
|
||||||
question: string,
|
question: string,
|
||||||
|
chatId: string,
|
||||||
overrideConfig?: ICommonObject
|
overrideConfig?: ICommonObject
|
||||||
) => {
|
) => {
|
||||||
const flowNodes = cloneDeep(reactFlowNodes)
|
const flowNodes = cloneDeep(reactFlowNodes)
|
||||||
@@ -214,7 +215,7 @@ export const buildLangchain = async (
|
|||||||
if (overrideConfig) flowNodeData = replaceInputsWithConfig(flowNodeData, overrideConfig)
|
if (overrideConfig) flowNodeData = replaceInputsWithConfig(flowNodeData, overrideConfig)
|
||||||
const reactFlowNodeData: INodeData = resolveVariables(flowNodeData, flowNodes, question)
|
const reactFlowNodeData: INodeData = resolveVariables(flowNodeData, flowNodes, question)
|
||||||
|
|
||||||
flowNodes[nodeIndex].data.instance = await newNodeInstance.init(reactFlowNodeData, question)
|
flowNodes[nodeIndex].data.instance = await newNodeInstance.init(reactFlowNodeData, question, { chatId })
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
console.error(e)
|
console.error(e)
|
||||||
throw new Error(e)
|
throw new Error(e)
|
||||||
|
|||||||
@@ -118,7 +118,8 @@ export const ChatMessage = ({ open, chatflowid, isDialog }) => {
|
|||||||
|
|
||||||
setLoading(true)
|
setLoading(true)
|
||||||
setMessages((prevMessages) => [...prevMessages, { message: userInput, type: 'userMessage' }])
|
setMessages((prevMessages) => [...prevMessages, { message: userInput, type: 'userMessage' }])
|
||||||
addChatMessage(userInput, 'userMessage')
|
// waiting for first chatmessage uploaded, the first chatmessage id will be chatId for every components
|
||||||
|
await addChatMessage(userInput, 'userMessage')
|
||||||
|
|
||||||
// Send user question and history to API
|
// Send user question and history to API
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user