Drop-in LangChain integration for Neruva agent memory substrate. v0.2.0 adds AUTO-PILOT: NeruvaAutoPilot (classify intent + reflect + extract via your LangChain LLM) and NeruvaAutoPilotCallback (BaseCallbackHandler). Plus NeruvaChatMessageHistory + NeruvaContextRetriever for memory + KG recall, NeruvaCodeGraph (5 code nav methods), NeruvaCognitive (13 cognitive primitives). Pattern-C: substrate stays $0/call.
Project description
neruva-langchain
Drop-in LangChain integration for Neruva agent memory + reasoning substrate. Three wrappers cover the common LangChain plug points: chat history, document retriever, and (new in 0.2.0) auto-pilot intent routing + reflection.
pip install neruva-langchain
What's new in 0.2.0 — Auto-pilot
Two new exports complete the auto-pilot integration. The agent now proactively uses the right Neruva cognitive tool (counterfactual / analogy / theory-of-mind / rule induction / EFE planning / causal / etc.) based on the user's intent — without you wiring each one.
NeruvaAutoPilot— framework-agnostic core. Pass your LangChain LLM; get backclassify_intent(),reflect(), andextract_facts()methods that round-trip through the substrate's canonical prompts (Layer 2 / 3 / 1 respectively).NeruvaAutoPilotCallback—BaseCallbackHandlersubclass that auto-fires intent classification onon_chain_startand (opt-in) reflection onon_chain_endafter every 10 turns. Drop into any chain viacallbacks=[NeruvaAutoPilotCallback(...)].
Plus NeruvaCodeGraph (5 sub-ms code-navigation methods —
callers / callees / class_of / module_of / imports) and
NeruvaCognitive (13 cognitive-primitive methods —
counterfactual rollout / theory-of-mind / schema lifting / EFE
planning / continual K-gram / hierarchical chunking / rule
induction). Thin wrappers over NeruvaClient so they're callable
from anywhere in your chain.
Pattern-C: substrate stays $0/call. The classification + extraction work runs in YOUR LangChain LLM's turn.
from langchain_anthropic import ChatAnthropic
from neruva_langchain import NeruvaAutoPilot, NeruvaAutoPilotCallback
llm = ChatAnthropic(model="claude-3-7-sonnet-20250219")
ap = NeruvaAutoPilot(api_key="nv_...", namespace="my_app", llm=llm)
# Layer 2 — classify a user message
result = ap.classify_intent("what if we had picked Mailgun?")
# {'primary_intent': 'counterfactual', 'confidence': 0.92,
# 'suggested_tool': 'agent_counterfactual_rollout', ...}
# Layer 3 — reflect over recent turns + auto-write durable records
ap.reflect(recent_turns=[
{"role": "user", "text": "ship the ticket system"},
{"role": "assistant", "text": "shipped 5 phases including notes + audit"},
])
# Auto-writes decisions/facts/mistakes to substrate.
# Or auto-fire via callback in any LCEL chain / agent:
chain = prompt | llm | parser
result = chain.invoke({"q": "..."}, config={"callbacks": [
NeruvaAutoPilotCallback(api_key="nv_...", namespace="my_app", llm=llm,
enable_route=True, enable_reflect=True),
]})
What's new in the substrate (v0.5.7, May 2026)
The substrate this adapter wraps has gained a lot since the last release.
All of it is available via the same agent_* API the wrappers already
call, so existing code keeps working — new capabilities just become
available.
- Deterministic replay — every query is bit-identical across reruns from the same seed. Replay any past state for audit or debugging.
- Typed-shape context — pull structured JSON from records with
per-field citations.
{question, shape: {field: type}}→ typed result without an LLM at query time. Natural fit for tool-calling chains that need a specific output schema. - Tenant-specific PII rules — register your custom ID formats (employee codes, patient codes, order IDs) from 3-5 examples. The substrate redacts them automatically. Sub-microsecond per span.
- Depth-unlimited nested-belief tracking — store and retrieve
chains like
Alice → Bob → Carol thinks Xat any depth, with inner-position-swap rejection. - Counterfactual rollouts — "what if action k had been a' instead?" Replay an action sequence with one step substituted.
- Active inference planning — score candidate action sequences by KL distance to a goal-marginal. Caller-owned dynamics.
- Continual K-gram learning — provable no-forgetting via
integer-add commutativity; repeated
train()calls accumulate.
NeruvaChatMessageHistory
Auto-records every turn into the Neruva Records substrate. Drop into any
LangChain primitive that accepts a BaseChatMessageHistory:
from neruva_langchain import NeruvaChatMessageHistory
history = NeruvaChatMessageHistory(
api_key="nv_...", # or env NERUVA_API_KEY
namespace="user_alice", # one per user / session
)
history.add_user_message("My name is Alice and I live in Toronto.")
history.add_ai_message("Nice to meet you, Alice!")
# Later — even after process restart, substrate-backed:
print(history.messages)
Use with RunnableWithMessageHistory (modern pattern)
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from neruva_langchain import NeruvaChatMessageHistory
prompt = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
MessagesPlaceholder(variable_name="history"),
("human", "{input}"),
])
chain = prompt | ChatAnthropic(model="claude-opus-4-7")
chain_with_history = RunnableWithMessageHistory(
chain,
lambda session_id: NeruvaChatMessageHistory(namespace=session_id),
input_messages_key="input",
history_messages_key="history",
)
chain_with_history.invoke(
{"input": "What did I tell you about my project last week?"},
config={"configurable": {"session_id": "user_alice"}},
)
NeruvaContextRetriever
BaseRetriever for RetrievalQA chains. Returns Document objects
sourced from federated agent_recall:
from neruva_langchain import NeruvaContextRetriever
from langchain.chains import RetrievalQA
from langchain_anthropic import ChatAnthropic
retriever = NeruvaContextRetriever(
api_key="nv_...",
namespaces=["session_a", "session_b"], # multi-session fan-out
)
qa = RetrievalQA.from_chain_type(
llm=ChatAnthropic(model="claude-opus-4-7"),
retriever=retriever,
)
qa.invoke("Where does Alice work?")
Why use Neruva instead of LangChain's built-in memory?
| Feature | LangChain default | Neruva |
|---|---|---|
| Persists across process restart | Manual setup | Built-in (GCS-backed) |
| Cross-session recall | No | Yes via namespaces=[...] |
| Fact extraction (KG) | No | Auto (hd_kg_extraction_prompt + caller LLM) |
| GDPR forget by user | Manual | user_id= auto-folds, one-call forget |
| Determinism / replayability | No | Bit-identical from seed |
| Portability | Pickle | .neruva zip container |
Get an API key · Docs · Status
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
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 neruva_langchain-0.2.0.tar.gz.
File metadata
- Download URL: neruva_langchain-0.2.0.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a38839289dfa6ddffdf864f342b2d350c5c016ee1f7b82cc2a20afcfb580a326
|
|
| MD5 |
63de4b4b3fcba22204d96029aee8251b
|
|
| BLAKE2b-256 |
eafef38ca120f7cf59fcfba0e38e135e7d1f51dbf1c552591e90ae8c4f65e1c1
|
File details
Details for the file neruva_langchain-0.2.0-py3-none-any.whl.
File metadata
- Download URL: neruva_langchain-0.2.0-py3-none-any.whl
- Upload date:
- Size: 16.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
54e298f97a4aa20b88d2c196305811df714ee6df2af230275dcc338c619529e8
|
|
| MD5 |
aa67f117d1ea96e0e81cf20d0ff3655c
|
|
| BLAKE2b-256 |
b870c6a35392bba0e46f87116800cdfd514207744c51286a7cde4a7eebb2b50d
|