ComponentsRetrieversZepOn this pageZepRetriever Example for Zep - A long-term memory store for LLM applications.​More on Zep:​Zep stores, summarizes, embeds, indexes, and enriches conversational AI chat histories, and exposes them via simple, low-latency APIs.Key Features:Fast! Zep’s async extractors operate independently of the your chat loop, ensuring a snappy user experience.Long-term memory persistence, with access to historical messages irrespective of your summarization strategy.Auto-summarization of memory messages based on a configurable message window. A series of summaries are stored, providing flexibility for future summarization strategies.Hybrid search over memories and metadata, with messages automatically embedded on creation.Entity Extractor that automatically extracts named entities from messages and stores them in the message metadata.Auto-token counting of memories and summaries, allowing finer-grained control over prompt assembly.Python and JavaScript SDKs.Zep project: https://github.com/getzep/zep
Docs: https://docs.getzep.com/Retriever Example​This notebook demonstrates how to search historical chat message histories using the Zep Long-term Memory Store.We'll demonstrate:Adding conversation history to the Zep memory store.Vector search over the conversation history.import getpassimport timefrom uuid import uuid4from langchain.memory import ZepMemory, CombinedMemory, VectorStoreRetrieverMemoryfrom langchain.schema import HumanMessage, AIMessage# Set this to your Zep server URLZEP_API_URL = "http://localhost:8000"Initialize the Zep Chat Message History Class and add a chat message history to the memory store​NOTE: Unlike other Retrievers, the content returned by the Zep Retriever is session/user specific. A session_id is required when instantiating the Retriever.# Provide your Zep API key. Note that this is optional. See https://docs.getzep.com/deployment/authAUTHENTICATE = Falsezep_api_key = Noneif AUTHENTICATE:    zep_api_key = getpass.getpass()session_id = str(uuid4())  # This is a unique identifier for the user/session# Initialize the Zep Memory Classzep_memory = ZepMemory(    session_id=session_id, url=ZEP_API_URL, api_key=zep_api_key)# Preload some messages into the memory. The default message window is 12 messages. We want to push beyond this to demonstrate auto-summarization.test_history = [    {"role": "human", "content": "Who was Octavia Butler?"},    {        "role": "ai",        "content": (            "Octavia Estelle Butler (June 22, 1947 – February 24, 2006) was an American"            " science fiction author."        ),    },    {"role": "human", "content": "Which books of hers were made into movies?"},    {        "role": "ai",        "content": (            "The most well-known adaptation of Octavia Butler's work is the FX series"            " Kindred, based on her novel of the same name."        ),    },    {"role": "human", "content": "Who were her contemporaries?"},    {        "role": "ai",        "content": (            "Octavia Butler's contemporaries included Ursula K. Le Guin, Samuel R."            " Delany, and Joanna Russ."        ),    },    {"role": "human", "content": "What awards did she win?"},    {        "role": "ai",        "content": (            "Octavia Butler won the Hugo Award, the Nebula Award, and the MacArthur"            " Fellowship."        ),    },    {        "role": "human",        "content": "Which other women sci-fi writers might I want to read?",    },    {        "role": "ai",        "content": "You might want to read Ursula K. Le Guin or Joanna Russ.",    },    {        "role": "human",        "content": (            "Write a short synopsis of Butler's book, Parable of the Sower. What is it"            " about?"        ),    },    {        "role": "ai",        "content": (            "Parable of the Sower is a science fiction novel by Octavia Butler,"            " published in 1993. It follows the story of Lauren Olamina, a young woman"            " living in a dystopian future where society has collapsed due to"            " environmental disasters, poverty, and violence."        ),    },]for msg in test_history:    zep_memory.chat_memory.add_message(        HumanMessage(content=msg["content"])        if msg["role"] == "human"        else AIMessage(content=msg["content"])    )    time.sleep(2)  # Wait for the messages to be embeddedUse the Zep Retriever to vector search over the Zep memory​Zep provides native vector search over historical conversation memory. Embedding happens automatically.NOTE: Embedding of messages occurs asynchronously, so the first query may not return results. Subsequent queries will return results as the embeddings are generated.from langchain.retrievers import ZepRetrieverzep_retriever = ZepRetriever(    session_id=session_id,  # Ensure that you provide the session_id when instantiating the Retriever    url=ZEP_API_URL,    top_k=5,    api_key=zep_api_key,)await zep_retriever.aget_relevant_documents("Who wrote Parable of the Sower?")    [Document(page_content='Who was Octavia Butler?', metadata={'score': 0.7758688965570713, 'uuid': 'b3322d28-f589-48c7-9daf-5eb092d65976', 'created_at': '2023-08-11T20:31:12.3856Z', 'role': 'human', 'metadata': {'system': {'entities': [{'Label': 'PERSON', 'Matches': [{'End': 22, 'Start': 8, 'Text': 'Octavia Butler'}], 'Name': 'Octavia Butler'}]}}, 'token_count': 8}),     Document(page_content="Octavia Butler's contemporaries included Ursula K. Le Guin, Samuel R. Delany, and Joanna Russ.", metadata={'score': 0.7602672137411663, 'uuid': '756b7136-0b4c-4664-ad33-c4431670356c', 'created_at': '2023-08-11T20:31:12.420717Z', 'role': 'ai', 'metadata': {'system': {'entities': [{'Label': 'PERSON', 'Matches': [{'End': 16, 'Start': 0, 'Text': "Octavia Butler's"}], 'Name': "Octavia Butler's"}, {'Label': 'ORG', 'Matches': [{'End': 58, 'Start': 41, 'Text': 'Ursula K. Le Guin'}], 'Name': 'Ursula K. Le Guin'}, {'Label': 'PERSON', 'Matches': [{'End': 76, 'Start': 60, 'Text': 'Samuel R. Delany'}], 'Name': 'Samuel R. Delany'}, {'Label': 'PERSON', 'Matches': [{'End': 93, 'Start': 82, 'Text': 'Joanna Russ'}], 'Name': 'Joanna Russ'}]}}, 'token_count': 27}),     Document(page_content='You might want to read Ursula K. Le Guin or Joanna Russ.', metadata={'score': 0.7596040989115522, 'uuid': '166d9556-2d48-4237-8a84-5d8a1024d5f4', 'created_at': '2023-08-11T20:31:12.434522Z', 'role': 'ai', 'metadata': {'system': {'entities': [{'Label': 'ORG', 'Matches': [{'End': 40, 'Start': 23, 'Text': 'Ursula K. Le Guin'}], 'Name': 'Ursula K. Le Guin'}, {'Label': 'PERSON', 'Matches': [{'End': 55, 'Start': 44, 'Text': 'Joanna Russ'}], 'Name': 'Joanna Russ'}]}}, 'token_count': 18}),     Document(page_content='Who were her contemporaries?', metadata={'score': 0.7575531381951208, 'uuid': 'c6a16691-4012-439f-b223-84fd4e79c4cf', 'created_at': '2023-08-11T20:31:12.410336Z', 'role': 'human', 'token_count': 8}),     Document(page_content='Octavia Estelle Butler (June 22, 1947 – February 24, 2006) was an American science fiction author.', metadata={'score': 0.7546476914454683, 'uuid': '7c093a2a-0099-415a-95c5-615a8026a894', 'created_at': '2023-08-11T20:31:12.399979Z', 'role': 'ai', 'metadata': {'system': {'entities': [{'Label': 'PERSON', 'Matches': [{'End': 22, 'Start': 0, 'Text': 'Octavia Estelle Butler'}], 'Name': 'Octavia Estelle Butler'}, {'Label': 'DATE', 'Matches': [{'End': 37, 'Start': 24, 'Text': 'June 22, 1947'}], 'Name': 'June 22, 1947'}, {'Label': 'DATE', 'Matches': [{'End': 57, 'Start': 40, 'Text': 'February 24, 2006'}], 'Name': 'February 24, 2006'}, {'Label': 'NORP', 'Matches': [{'End': 74, 'Start': 66, 'Text': 'American'}], 'Name': 'American'}]}}, 'token_count': 31})]We can also use the Zep sync API to retrieve results:zep_retriever.get_relevant_documents("Who wrote Parable of the Sower?")    [Document(page_content="Write a short synopsis of Butler's book, Parable of the Sower. What is it about?", metadata={'score': 0.8857504413268114, 'uuid': '82f07ab5-9d4b-4db6-aaae-6028e6fd836b', 'created_at': '2023-08-11T20:31:12.437365Z', 'role': 'human', 'metadata': {'system': {'entities': [{'Label': 'ORG', 'Matches': [{'End': 32, 'Start': 26, 'Text': 'Butler'}], 'Name': 'Butler'}, {'Label': 'WORK_OF_ART', 'Matches': [{'End': 61, 'Start': 41, 'Text': 'Parable of the Sower'}], 'Name': 'Parable of the Sower'}]}}, 'token_count': 23}),     Document(page_content='Who was Octavia Butler?', metadata={'score': 0.7758688965570713, 'uuid': 'b3322d28-f589-48c7-9daf-5eb092d65976', 'created_at': '2023-08-11T20:31:12.3856Z', 'role': 'human', 'metadata': {'system': {'entities': [{'Label': 'PERSON', 'Matches': [{'End': 22, 'Start': 8, 'Text': 'Octavia Butler'}], 'Name': 'Octavia Butler'}]}}, 'token_count': 8}),     Document(page_content="Octavia Butler's contemporaries included Ursula K. Le Guin, Samuel R. Delany, and Joanna Russ.", metadata={'score': 0.7602672137411663, 'uuid': '756b7136-0b4c-4664-ad33-c4431670356c', 'created_at': '2023-08-11T20:31:12.420717Z', 'role': 'ai', 'metadata': {'system': {'entities': [{'Label': 'PERSON', 'Matches': [{'End': 16, 'Start': 0, 'Text': "Octavia Butler's"}], 'Name': "Octavia Butler's"}, {'Label': 'ORG', 'Matches': [{'End': 58, 'Start': 41, 'Text': 'Ursula K. Le Guin'}], 'Name': 'Ursula K. Le Guin'}, {'Label': 'PERSON', 'Matches': [{'End': 76, 'Start': 60, 'Text': 'Samuel R. Delany'}], 'Name': 'Samuel R. Delany'}, {'Label': 'PERSON', 'Matches': [{'End': 93, 'Start': 82, 'Text': 'Joanna Russ'}], 'Name': 'Joanna Russ'}]}}, 'token_count': 27}),     Document(page_content='You might want to read Ursula K. Le Guin or Joanna Russ.', metadata={'score': 0.7596040989115522, 'uuid': '166d9556-2d48-4237-8a84-5d8a1024d5f4', 'created_at': '2023-08-11T20:31:12.434522Z', 'role': 'ai', 'metadata': {'system': {'entities': [{'Label': 'ORG', 'Matches': [{'End': 40, 'Start': 23, 'Text': 'Ursula K. Le Guin'}], 'Name': 'Ursula K. Le Guin'}, {'Label': 'PERSON', 'Matches': [{'End': 55, 'Start': 44, 'Text': 'Joanna Russ'}], 'Name': 'Joanna Russ'}]}}, 'token_count': 18}),     Document(page_content='Who were her contemporaries?', metadata={'score': 0.7575531381951208, 'uuid': 'c6a16691-4012-439f-b223-84fd4e79c4cf', 'created_at': '2023-08-11T20:31:12.410336Z', 'role': 'human', 'token_count': 8})]Previousyou-retrieverNextToolsRetriever Example for Zep - A long-term memory store for LLM applications.More on Zep:Retriever ExampleInitialize the Zep Chat Message History Class and add a chat message history to the memory storeUse the Zep Retriever to vector search over the Zep memory