LangChain Integration

Persist chat message history in Mnemora episodic memory so conversations survive process restarts.

Prerequisites

  • A Mnemora API key
  • LangChain 0.2+ (langchain-core)

Install

pip install "mnemora[langchain]"

How it works

MnemoraMemory extends LangChain's BaseChatMessageHistory. Each message is stored as an episodic memory episode of type "conversation".

Basic usage

from mnemora import MnemoraSync
from mnemora.integrations.langchain import MnemoraMemory

client = MnemoraSync(api_key="mnm_...")
memory = MnemoraMemory(client=client, agent_id="my-agent", session_id="sess-1")

memory.add_user_message("What is the capital of France?")
memory.add_ai_message("The capital of France is Paris.")

for msg in memory.messages:
    print(type(msg).__name__, ":", msg.content)

Use with RunnableWithMessageHistory

from mnemora import MnemoraSync
from mnemora.integrations.langchain import MnemoraMemory
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory

client = MnemoraSync(api_key="mnm_...")
llm = ChatOpenAI(model="gpt-4o-mini")

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful assistant."),
    MessagesPlaceholder(variable_name="history"),
    ("human", "{question}"),
])

chain = prompt | llm

chain_with_history = RunnableWithMessageHistory(
    chain,
    lambda session_id: MnemoraMemory(
        client=client,
        agent_id="support-agent",
        session_id=session_id,
    ),
    input_messages_key="question",
    history_messages_key="history",
)

response = chain_with_history.invoke(
    {"question": "My order ID is 12345."},
    config={"configurable": {"session_id": "user-alice"}},
)
print(response.content)

Troubleshooting

SymptomCauseFix
ImportErrorPackage not installedRun pip install "mnemora[langchain]"
Messages empty on second runWrong session_idUse a stable, deterministic session_id
clear() deleted more than expectedPurges all agent dataUse a dedicated agent_id per user