Skip to main content

Adding memory

This shows how to add memory to an arbitrary chain. Right now, you can use the memory classes but need to hook them up manually.

final openaiApiKey = Platform.environment['OPENAI_API_KEY'];
final model = ChatOpenAI(apiKey: openaiApiKey);
const stringOutputParser = StringOutputParser<ChatResult>();
final memory = ConversationBufferMemory(returnMessages: true);

final promptTemplate = ChatPromptTemplate.fromPromptMessages([
SystemChatMessagePromptTemplate.fromTemplate(
'You are a helpful chatbot',
),
const MessagesPlaceholder(variableName: 'history'),
HumanChatMessagePromptTemplate.fromTemplate('{input}'),
]);

final chain = Runnable.fromMap({
'input': Runnable.passthrough(),
'history': Runnable.mapInput(
(_) async {
final m = await memory.loadMemoryVariables();
return m['history'];
},
),
}) |
promptTemplate |
model |
stringOutputParser;

const input1 = 'Hi, I am Bob';
final output1 = await chain.invoke(input1);
print(output1);
// Hello Bob! How can I assist you today?

await memory.saveContext(
inputValues: {'input': input1},
outputValues: {'output': output1},
);

const input2 = "What's my name?";
final output2 = await chain.invoke(input2);
print(output2);
// Your name is Bob, as you mentioned earlier.