LangGraph BaseStore backend for Pixeltable — persistent, versioned, multimodal agent memory.
Project description
langgraph-store-pixeltable
LangGraph BaseStore backend for Pixeltable — persistent, versioned, multimodal agent memory.
Installation
pip install langgraph-store-pixeltable
Quick Start
from langgraph.store.pixeltable import PixeltableStore
store = PixeltableStore(table_name="agent_memory.items")
store.setup()
# Store a memory
store.put(("users", "alice"), "prefs", {"color": "blue", "language": "Python"})
# Retrieve it
item = store.get(("users", "alice"), "prefs")
print(item.value) # {"color": "blue", "language": "Python"}
# List namespaces
namespaces = store.list_namespaces(prefix=("users",))
Filtered Search
The filter parameter maps to Pixeltable's .where() clause — predicates are evaluated server-side, not in Python:
store.put(("team", "eng"), "alice", {"role": "senior", "level": 5, "lang": "Python"})
store.put(("team", "eng"), "bob", {"role": "junior", "level": 2, "lang": "Go"})
store.put(("team", "eng"), "carol", {"role": "senior", "level": 4, "lang": "Python"})
# Exact match (shorthand)
results = store.search(("team",), filter={"role": "senior"})
# Comparison operators
results = store.search(("team",), filter={"level": {"$gt": 3}})
results = store.search(("team",), filter={"role": {"$ne": "junior"}})
# Multiple conditions (AND)
results = store.search(("team", "eng"), filter={"role": "senior", "lang": "Python"})
Supported operators: $eq, $ne, $gt, $gte, $lt, $lte.
Semantic Search
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")
store = PixeltableStore(
table_name="agent_memory.semantic",
index={
"dims": 384,
"embed": lambda texts: model.encode(texts).tolist(),
"fields": ["text"],
},
)
store.setup()
store.put(("docs",), "d1", {"text": "Pixeltable handles multimodal data", "domain": "infra"})
store.put(("docs",), "d2", {"text": "LangGraph builds stateful agents", "domain": "framework"})
store.put(("docs",), "d3", {"text": "React is a frontend library", "domain": "frontend"})
# Semantic search
results = store.search(("docs",), query="multimodal AI pipelines", limit=2)
for r in results:
print(f"{r.key}: {r.value['text']} (score={r.score:.3f})")
# Semantic search + filter (narrowed by domain)
results = store.search(
("docs",), query="data infrastructure", limit=3, filter={"domain": "infra"},
)
With LangGraph Agents
from langgraph.prebuilt import create_react_agent
from langgraph.store.pixeltable import PixeltableStore
store = PixeltableStore(table_name="agent_memory.items")
store.setup()
agent = create_react_agent(model, tools=tools, store=store)
Access the Underlying Pixeltable Table
The .table property gives direct access to the Pixeltable table for operations beyond the Store interface — computed columns, lineage, version history, and arbitrary predicates:
import pixeltable as pxt
t = store.table
# Inspect all data
t.select(t.key, t.value, t.created_at).collect()
# Add a computed column — auto-backfills all existing rows
t.add_computed_column(word_count=my_word_counter(t.value['text'].astype(pxt.String)))
# Add a classification UDF — runs on every new insert
t.add_computed_column(auto_domain=classify_domain(t.value['text'].astype(pxt.String)))
# WHERE on computed columns
results = t.where(t.auto_domain == 'infra').select(t.key, t.value).collect()
# Compound WHERE on multiple computed columns
results = (
t.where((t.word_count > 5) & (t.auto_domain == 'infra'))
.select(t.key, t.value, t.word_count, t.auto_domain)
.collect()
)
# New inserts via the store auto-compute all lineage columns
store.put(("docs",), "d4", {"text": "Kubernetes orchestrates containers"})
# word_count and auto_domain are already computed for d4
Why Pixeltable for LangGraph Memory?
- Metadata filtering via
.where(): Filter on value fields with$eq/$ne/$gt/$gte/$lt/$lte, evaluated server-side - Computed column lineage: Add derived columns that auto-backfill and auto-compute on new inserts
- Persistent and versioned: Data survives restarts; every update is tracked with full version history
- Incremental: Only new/changed rows get re-embedded
- Multimodal native: Images, video, audio, and documents alongside text via
.table - Any embedding model: Works with sentence-transformers, OpenAI, or any callable
- No external services: Embedded PostgreSQL, no Docker required
| Feature | PostgresStore | PixeltableStore |
|---|---|---|
| Persistence | Yes | Yes + versioned |
| Vector search | pgvector only | Any embedding model |
| Multimodal values | JSON only | Image, Video, Audio via .table |
| Incremental embedding | Manual | Automatic via computed columns |
| History | No | Full version history per row |
| Computed columns | No | Arbitrary UDFs with lineage |
| External service | Requires PostgreSQL + pgvector | Embedded, no Docker |
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file langgraph_store_pixeltable-0.1.1.tar.gz.
File metadata
- Download URL: langgraph_store_pixeltable-0.1.1.tar.gz
- Upload date:
- Size: 11.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
faf4362cc08ae04a0873deeb8c5484fbae002137ddc35cc9aa4a2d37ea871262
|
|
| MD5 |
7cf3569dc51cfba6660acb734cbd2be1
|
|
| BLAKE2b-256 |
94927c567163790261d927f950924c8eed9f8a157199b52307b760255168b20e
|
Provenance
The following attestation bundles were made for langgraph_store_pixeltable-0.1.1.tar.gz:
Publisher:
release.yml on pixeltable/langgraph-store-pixeltable
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
langgraph_store_pixeltable-0.1.1.tar.gz -
Subject digest:
faf4362cc08ae04a0873deeb8c5484fbae002137ddc35cc9aa4a2d37ea871262 - Sigstore transparency entry: 1638461115
- Sigstore integration time:
-
Permalink:
pixeltable/langgraph-store-pixeltable@3e1a42e27d4a718762a8ac0f567a83aa131da717 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/pixeltable
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3e1a42e27d4a718762a8ac0f567a83aa131da717 -
Trigger Event:
release
-
Statement type:
File details
Details for the file langgraph_store_pixeltable-0.1.1-py3-none-any.whl.
File metadata
- Download URL: langgraph_store_pixeltable-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3ed3d5dcf768809df8fd7bb6ec67ae6e38b59f5fb7f160c8be15588fd36865f
|
|
| MD5 |
a71bc0eaef9868d84c435c9b169737f8
|
|
| BLAKE2b-256 |
2e0ccfd0d03fdc24055a02f89744b31590c7bb4fe3a4d3888dbea06297d7b5dd
|
Provenance
The following attestation bundles were made for langgraph_store_pixeltable-0.1.1-py3-none-any.whl:
Publisher:
release.yml on pixeltable/langgraph-store-pixeltable
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
langgraph_store_pixeltable-0.1.1-py3-none-any.whl -
Subject digest:
f3ed3d5dcf768809df8fd7bb6ec67ae6e38b59f5fb7f160c8be15588fd36865f - Sigstore transparency entry: 1638461190
- Sigstore integration time:
-
Permalink:
pixeltable/langgraph-store-pixeltable@3e1a42e27d4a718762a8ac0f567a83aa131da717 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/pixeltable
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3e1a42e27d4a718762a8ac0f567a83aa131da717 -
Trigger Event:
release
-
Statement type: