mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-28 15:00:57 +03:00
Feature/Add message history to agents (#3031)
add message history to agents
This commit is contained in:
@@ -29,7 +29,8 @@ import {
|
||||
transformObjectPropertyToFunction,
|
||||
restructureMessages,
|
||||
MessagesState,
|
||||
RunnableCallable
|
||||
RunnableCallable,
|
||||
checkMessageHistory
|
||||
} from '../commonUtils'
|
||||
import { END, StateGraph } from '@langchain/langgraph'
|
||||
import { StructuredTool } from '@langchain/core/tools'
|
||||
@@ -149,6 +150,31 @@ const defaultFunc = `const result = $flow.output;
|
||||
return {
|
||||
aggregate: [result.content]
|
||||
};`
|
||||
|
||||
const messageHistoryExample = `const { AIMessage, HumanMessage, ToolMessage } = require('@langchain/core/messages');
|
||||
|
||||
return [
|
||||
new HumanMessage("What is 333382 🦜 1932?"),
|
||||
new AIMessage({
|
||||
content: "",
|
||||
tool_calls: [
|
||||
{
|
||||
id: "12345",
|
||||
name: "calulator",
|
||||
args: {
|
||||
number1: 333382,
|
||||
number2: 1932,
|
||||
operation: "divide",
|
||||
},
|
||||
},
|
||||
],
|
||||
}),
|
||||
new ToolMessage({
|
||||
tool_call_id: "12345",
|
||||
content: "The answer is 172.558.",
|
||||
}),
|
||||
new AIMessage("The answer is 172.558."),
|
||||
]`
|
||||
const TAB_IDENTIFIER = 'selectedUpdateStateMemoryTab'
|
||||
|
||||
class Agent_SeqAgents implements INode {
|
||||
@@ -168,7 +194,7 @@ class Agent_SeqAgents implements INode {
|
||||
constructor() {
|
||||
this.label = 'Agent'
|
||||
this.name = 'seqAgent'
|
||||
this.version = 2.0
|
||||
this.version = 3.0
|
||||
this.type = 'Agent'
|
||||
this.icon = 'seqAgent.png'
|
||||
this.category = 'Sequential Agents'
|
||||
@@ -199,6 +225,17 @@ class Agent_SeqAgents implements INode {
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Messages History',
|
||||
name: 'messageHistory',
|
||||
description:
|
||||
'Return a list of messages between System Prompt and Human Prompt. This is useful when you want to provide few shot examples',
|
||||
type: 'code',
|
||||
hideCodeExecute: true,
|
||||
codeExample: messageHistoryExample,
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Tools',
|
||||
name: 'tools',
|
||||
@@ -426,6 +463,8 @@ class Agent_SeqAgents implements INode {
|
||||
llm,
|
||||
interrupt,
|
||||
agent: await createAgent(
|
||||
nodeData,
|
||||
options,
|
||||
agentName,
|
||||
state,
|
||||
llm,
|
||||
@@ -515,6 +554,8 @@ class Agent_SeqAgents implements INode {
|
||||
}
|
||||
|
||||
async function createAgent(
|
||||
nodeData: INodeData,
|
||||
options: ICommonObject,
|
||||
agentName: string,
|
||||
state: ISeqAgentsState,
|
||||
llm: BaseChatModel,
|
||||
@@ -535,7 +576,8 @@ async function createAgent(
|
||||
if (systemPrompt) promptArrays.unshift(['system', systemPrompt])
|
||||
if (humanPrompt) promptArrays.push(['human', humanPrompt])
|
||||
|
||||
const prompt = ChatPromptTemplate.fromMessages(promptArrays)
|
||||
let prompt = ChatPromptTemplate.fromMessages(promptArrays)
|
||||
prompt = await checkMessageHistory(nodeData, options, prompt, promptArrays, systemPrompt)
|
||||
|
||||
if (multiModalMessageContent.length) {
|
||||
const msg = HumanMessagePromptTemplate.fromTemplate([...multiModalMessageContent])
|
||||
@@ -597,7 +639,9 @@ async function createAgent(
|
||||
if (systemPrompt) promptArrays.unshift(['system', systemPrompt])
|
||||
if (humanPrompt) promptArrays.push(['human', humanPrompt])
|
||||
|
||||
const prompt = ChatPromptTemplate.fromMessages(promptArrays)
|
||||
let prompt = ChatPromptTemplate.fromMessages(promptArrays)
|
||||
prompt = await checkMessageHistory(nodeData, options, prompt, promptArrays, systemPrompt)
|
||||
|
||||
if (multiModalMessageContent.length) {
|
||||
const msg = HumanMessagePromptTemplate.fromTemplate([...multiModalMessageContent])
|
||||
prompt.promptMessages.splice(1, 0, msg)
|
||||
@@ -624,7 +668,8 @@ async function createAgent(
|
||||
if (systemPrompt) promptArrays.unshift(['system', systemPrompt])
|
||||
if (humanPrompt) promptArrays.push(['human', humanPrompt])
|
||||
|
||||
const prompt = ChatPromptTemplate.fromMessages(promptArrays)
|
||||
let prompt = ChatPromptTemplate.fromMessages(promptArrays)
|
||||
prompt = await checkMessageHistory(nodeData, options, prompt, promptArrays, systemPrompt)
|
||||
|
||||
if (multiModalMessageContent.length) {
|
||||
const msg = HumanMessagePromptTemplate.fromTemplate([...multiModalMessageContent])
|
||||
|
||||
Reference in New Issue
Block a user