Skip to main content

LangGraph integration for Hindsight - persistent memory tools, nodes, and memory instructions for AI agents

Project description

hindsight-langgraph

LangGraph and LangChain integration for Hindsight — persistent long-term memory for AI agents.

Provides three integration patterns:

  • Tools — retain/recall/reflect as LangChain @tool functions for agent-driven memory. Works with both LangChain and LangGraph.
  • Nodes (LangGraph) — pre-built graph nodes for automatic memory injection and storage
  • Memory Instructions — pre-fetch memories into a system prompt string. Works with any LangChain model, no graph needed.

Prerequisites

Installation

pip install hindsight-langgraph

Quick Start: Tools

Bind Hindsight memory tools to your LangGraph agent so it can store and retrieve memories on demand.

from hindsight_langgraph import create_hindsight_tools
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent

# Set HINDSIGHT_API_KEY env var to authenticate
tools = create_hindsight_tools(bank_id="user-123")

agent = create_react_agent(
    ChatOpenAI(model="gpt-4o"),
    tools=tools,
)

result = await agent.ainvoke(
    {"messages": [{"role": "user", "content": "Remember that I prefer dark mode"}]}
)

Dynamic Bank IDs with Tools

If you build the agent once and serve multiple users, omit the static bank_id and resolve it per request from config["configurable"]:

tools = create_hindsight_tools(bank_id_from_config="user_id")
agent = create_react_agent(ChatOpenAI(model="gpt-4o"), tools=tools)

result = await agent.ainvoke(
    {"messages": [{"role": "user", "content": "Remember that I prefer dark mode"}]},
    config={"configurable": {"user_id": "user-456"}},
)

Passing bank_id="user-123" still pins all tool calls to that bank and takes precedence over bank_id_from_config.

Quick Start: Memory Nodes

Add recall and retain nodes to your graph for automatic memory injection before LLM calls and storage after responses.

from hindsight_langgraph import create_recall_node, create_retain_node
from langgraph.graph import StateGraph, MessagesState, START, END

recall = create_recall_node(bank_id="user-123")
retain = create_retain_node(bank_id="user-123")

builder = StateGraph(MessagesState)
builder.add_node("recall", recall)
builder.add_node("agent", agent_node)  # your LLM node
builder.add_node("retain", retain)

builder.add_edge(START, "recall")
builder.add_edge("recall", "agent")
builder.add_edge("agent", "retain")
builder.add_edge("retain", END)

graph = builder.compile()

Dynamic Bank IDs

Use bank_id_from_config to resolve the bank per-request from the graph's config:

recall = create_recall_node(bank_id_from_config="user_id")
retain = create_retain_node(bank_id_from_config="user_id")

# Bank ID resolved at runtime
result = await graph.ainvoke(
    {"messages": [{"role": "user", "content": "hello"}]},
    config={"configurable": {"user_id": "user-456"}},
)

Quick Start: Memory Instructions

Pre-fetch memories and inject them into a system prompt. Works with any LangChain model — no graph needed.

from hindsight_langgraph import memory_instructions
from langchain_openai import ChatOpenAI

get_instructions = memory_instructions(
    bank_id="user-123",
    base_instructions="You are a helpful assistant.",
)

# Each call re-fetches memories, so it stays up to date
instructions = await get_instructions()
response = await ChatOpenAI(model="gpt-4o").ainvoke([
    {"role": "system", "content": instructions},
    {"role": "user", "content": "What do you know about me?"},
])

Configuration

Global config

from hindsight_langgraph import configure

configure(
    api_key="your-api-key",  # or set HINDSIGHT_API_KEY env var
    budget="mid",
    tags=["source:langgraph"],
)

Self-hosted instance

To connect to a self-hosted Hindsight instance instead of Hindsight Cloud:

configure(
    hindsight_api_url="http://localhost:8888",
)

Or pass hindsight_api_url directly to any factory function:

tools = create_hindsight_tools(bank_id="user-123", hindsight_api_url="http://localhost:8888")

Per-call overrides

All factory functions accept client, hindsight_api_url, and api_key to override the global config.

Parameter Description Default
hindsight_api_url Hindsight API URL https://api.hindsight.vectorize.io
api_key API key (or HINDSIGHT_API_KEY env var) None
budget Recall budget: low, mid, high mid
max_tokens Max tokens for recall results 4096
tags Tags applied to retain operations None
recall_tags Tags to filter recall results None
recall_tags_match Tag matching: any, all, any_strict, all_strict any

Requirements

  • Python 3.10+
  • langchain-core >= 0.3.0
  • hindsight-client >= 0.4.0
  • langgraph >= 0.3.0 (only for nodes pattern — install with pip install hindsight-langgraph[langgraph])

Documentation

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hindsight_langgraph-0.3.0.tar.gz (166.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hindsight_langgraph-0.3.0-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file hindsight_langgraph-0.3.0.tar.gz.

File metadata

  • Download URL: hindsight_langgraph-0.3.0.tar.gz
  • Upload date:
  • Size: 166.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hindsight_langgraph-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e01950a9986612b997f48f45fb096c259b715f841a03cbad90b2abb08ecb60b8
MD5 403a637ff9f1db8a16f87f58b13077e0
BLAKE2b-256 1fa347991e04a5ab8a570339ca23966540390312bfc00f3f5bbc60f97e97d8a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for hindsight_langgraph-0.3.0.tar.gz:

Publisher: release-integration.yml on vectorize-io/hindsight

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hindsight_langgraph-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for hindsight_langgraph-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 70c5fbdf69f00dbf5b572177c01f187456eebec56524788b12335608b9c85e28
MD5 891b93d019f136ad91e395eff52dc2eb
BLAKE2b-256 c5f16ae13a6f41b64d38b4fbfcdec9a7790b7434359bd307e58ad7e6f7b50a2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for hindsight_langgraph-0.3.0-py3-none-any.whl:

Publisher: release-integration.yml on vectorize-io/hindsight

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page