feat: unique chat id

This commit is contained in:
Jeffrey-Wang
2023-06-11 13:14:53 +08:00
parent 011f6afcb3
commit 023967e0c2
5 changed files with 19 additions and 11 deletions
@@ -2,6 +2,7 @@ import { SystemChatMessage } from 'langchain/schema'
import { INode, INodeData, INodeParams } from '../../../src/Interface'
import { getBaseClasses } from '../../../src/utils'
import { ZepMemory, ZepMemoryInput } from 'langchain/memory/zep'
import { ICommonObject } from '../../../src'
class ZepMemory_Memory implements INode {
label: string
@@ -28,13 +29,6 @@ class ZepMemory_Memory implements INode {
type: 'string',
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',
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 sessionId = nodeData.inputs?.sessionId as string
const aiPrefix = nodeData.inputs?.aiPrefix as string
const humanPrefix = nodeData.inputs?.humanPrefix as string
const memoryKey = nodeData.inputs?.memoryKey as string
const inputKey = nodeData.inputs?.inputKey as string
const autoSummaryTemplate = nodeData.inputs?.autoSummaryTemplate as string
const autoSummary = nodeData.inputs?.autoSummary as boolean
const sessionId = options?.chatId as string
const obj: ZepMemoryInput = {
baseURL,
+1
View File
@@ -83,6 +83,7 @@ export class ChildProcess {
depthQueue,
componentNodes,
incomingInput.question,
'',
incomingInput?.overrideConfig
)
+11
View File
@@ -506,6 +506,16 @@ export class App {
})
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) {
await this.validateKey(req, res, chatflow)
}
@@ -618,6 +628,7 @@ export class App {
depthQueue,
this.nodesPool.componentNodes,
incomingInput.question,
chatId,
incomingInput?.overrideConfig
)
+2 -1
View File
@@ -182,6 +182,7 @@ export const buildLangchain = async (
depthQueue: IDepthQueue,
componentNodes: IComponentNodes,
question: string,
chatId: string,
overrideConfig?: ICommonObject
) => {
const flowNodes = cloneDeep(reactFlowNodes)
@@ -214,7 +215,7 @@ export const buildLangchain = async (
if (overrideConfig) flowNodeData = replaceInputsWithConfig(flowNodeData, overrideConfig)
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) {
console.error(e)
throw new Error(e)
@@ -118,7 +118,8 @@ export const ChatMessage = ({ open, chatflowid, isDialog }) => {
setLoading(true)
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
try {