fix: zep memory

This commit is contained in:
Jeffrey-Wang 2023-06-11 23:30:26 +08:00
parent 023967e0c2
commit fd9d6fcb03
4 changed files with 30 additions and 13 deletions

View File

@ -35,6 +35,14 @@ class ZepMemory_Memory implements INode {
type: 'boolean',
default: true
},
{
label: 'Session Id',
name: 'sessionId',
type: 'string',
placeholder: 'if empty, chatId will be used automatically',
default: '',
additionalParams: true
},
{
label: 'Auto Summary Template',
name: 'autoSummaryTemplate',
@ -88,11 +96,13 @@ class ZepMemory_Memory implements INode {
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 sessionId = nodeData.inputs?.sessionId as string
const chatId = options?.chatId as string
const obj: ZepMemoryInput = {
baseURL,
sessionId,
sessionId: sessionId ? sessionId : chatId,
aiPrefix,
humanPrefix,
returnMessages: true,

View File

@ -1,5 +1,6 @@
import { IChildProcessMessage, IReactFlowNode, IReactFlowObject, IRunChatflowMessageValue, INodeData } from './Interface'
import { buildLangchain, constructGraphs, getEndingNode, getStartingNodes, resolveVariables } from './utils'
import { getChatId } from './index'
export class ChildProcess {
/**
@ -76,6 +77,7 @@ export class ChildProcess {
const { startingNodeIds, depthQueue } = getStartingNodes(nonDirectedGraph, endingNodeId)
/*** BFS to traverse from Starting Nodes to Ending Node ***/
const chatId = await getChatId(chatflow.id)
const reactFlowNodes = await buildLangchain(
startingNodeIds,
nodes,
@ -83,7 +85,7 @@ export class ChildProcess {
depthQueue,
componentNodes,
incomingInput.question,
'',
chatId,
incomingInput?.overrideConfig
)

View File

@ -506,15 +506,8 @@ 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
const chatId = await getChatId(chatflow.id)
if (!chatId) return res.status(500).send(`Chatflow ${chatflowid} first message not found`)
if (!isInternal) {
await this.validateKey(req, res, chatflow)
@ -672,6 +665,18 @@ export class App {
}
}
export async function getChatId(chatflowid: string) {
// first chatmessage id as the unique chat id
const firstChatMessage = await getDataSource()
.getRepository(ChatMessage)
.createQueryBuilder('cm')
.select('cm.id')
.where('chatflowid = :chatflowid', { chatflowid })
.orderBy('cm.createdDate', 'ASC')
.getOne()
return firstChatMessage ? firstChatMessage.id : ''
}
let serverApp: App | undefined
export async function start(): Promise<void> {

View File

@ -118,7 +118,7 @@ export const ChatMessage = ({ open, chatflowid, isDialog }) => {
setLoading(true)
setMessages((prevMessages) => [...prevMessages, { message: userInput, type: 'userMessage' }])
// waiting for first chatmessage uploaded, the first chatmessage id will be chatId for every components
// waiting for first chatmessage saved, the first chatmessage will be used in sendMessageAndGetPrediction
await addChatMessage(userInput, 'userMessage')
// Send user question and history to API