Skip to content

Commit

Permalink
Feature/prepend messages to agent graph (#2897)
Browse files Browse the repository at this point in the history
prepend messages to agent graph
  • Loading branch information
HenryHengZJ committed Jul 29, 2024
1 parent e39fd13 commit b5d969b
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 6 deletions.
2 changes: 2 additions & 0 deletions packages/components/src/Interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,8 @@ export interface INodeCredential {
export interface IMessage {
message: string
type: MessageType
role?: MessageType
content?: string
}

export interface IUsedTool {
Expand Down
8 changes: 4 additions & 4 deletions packages/components/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -587,10 +587,10 @@ export const mapChatMessageToBaseMessage = (chatmessages: any[] = []): BaseMessa
const chatHistory = []

for (const message of chatmessages) {
if (message.role === 'apiMessage') {
chatHistory.push(new AIMessage(message.content))
} else if (message.role === 'userMessage') {
chatHistory.push(new HumanMessage(message.content))
if (message.role === 'apiMessage' || message.type === 'apiMessage') {
chatHistory.push(new AIMessage(message.content || ''))
} else if (message.role === 'userMessage' || message.role === 'userMessage') {
chatHistory.push(new HumanMessage(message.content || ''))
}
}
return chatHistory
Expand Down
2 changes: 2 additions & 0 deletions packages/server/src/Interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,8 @@ export interface IDepthQueue {
export interface IMessage {
message: string
type: MessageType
role?: MessageType
content?: string
}

export interface IncomingInput {
Expand Down
32 changes: 30 additions & 2 deletions packages/server/src/utils/buildAgentGraph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ export const buildAgentGraph = async (
options,
startingNodeIds,
incomingInput.question,
incomingInput.history,
chatHistory,
incomingInput?.overrideConfig,
sessionId || chatId,
Expand All @@ -196,6 +197,7 @@ export const buildAgentGraph = async (
appServer.nodesPool.componentNodes,
options,
incomingInput.question,
incomingInput.history,
chatHistory,
incomingInput?.overrideConfig,
sessionId || chatId,
Expand Down Expand Up @@ -447,6 +449,7 @@ const compileMultiAgentsGraph = async (
options: ICommonObject,
startingNodeIds: string[],
question: string,
prependHistoryMessages: IMessage[] = [],
chatHistory: IMessage[] = [],
overrideConfig?: ICommonObject,
threadId?: string,
Expand Down Expand Up @@ -570,10 +573,22 @@ const compileMultiAgentsGraph = async (
const callbacks = await additionalCallbacks(flowNodeData, options)
const config = { configurable: { thread_id: threadId } }

let prependMessages = []
// Only append in the first message
if (prependHistoryMessages.length === chatHistory.length) {
for (const message of prependHistoryMessages) {
if (message.role === 'apiMessage' || message.type === 'apiMessage') {
prependMessages.push(new AIMessage({ content: message.message || message.content || '' }))
} else if (message.role === 'userMessage' || message.type === 'userMessage') {
prependMessages.push(new HumanMessage({ content: message.message || message.content || '' }))
}
}
}

// Return stream result as we should only have 1 supervisor
return await graph.stream(
{
messages: [new HumanMessage({ content: question })]
messages: [...prependMessages, new HumanMessage({ content: question })]
},
{ recursionLimit: supervisorResult?.recursionLimit ?? 100, callbacks: [loggerHandler, ...callbacks], configurable: config }
)
Expand Down Expand Up @@ -605,6 +620,7 @@ const compileSeqAgentsGraph = async (
componentNodes: IComponentNodes,
options: ICommonObject,
question: string,
prependHistoryMessages: IMessage[] = [],
chatHistory: IMessage[] = [],
overrideConfig?: ICommonObject,
threadId?: string,
Expand Down Expand Up @@ -952,8 +968,20 @@ const compileSeqAgentsGraph = async (
const callbacks = await additionalCallbacks(flowNodeData as any, options)
const config = { configurable: { thread_id: threadId }, bindModel }

let prependMessages = []
// Only append in the first message
if (prependHistoryMessages.length === chatHistory.length) {
for (const message of prependHistoryMessages) {
if (message.role === 'apiMessage' || message.type === 'apiMessage') {
prependMessages.push(new AIMessage({ content: message.message || message.content || '' }))
} else if (message.role === 'userMessage' || message.type === 'userMessage') {
prependMessages.push(new HumanMessage({ content: message.message || message.content || '' }))
}
}
}

let humanMsg: { messages: HumanMessage[] | ToolMessage[] } | null = {
messages: [new HumanMessage({ content: question })]
messages: [...prependMessages, new HumanMessage({ content: question })]
}

if (action && action.mapping && question === action.mapping.approve) {
Expand Down

0 comments on commit b5d969b

Please sign in to comment.