novyx-langchain
Persistent memory + rollback + audit trail for LangChain agents.
The ONLY LangChain memory provider with Magic Rollback, cryptographic audit trails, and compliance-grade trace logging.
from novyx_langchain import NovyxMemory
from langchain.chains import ConversationChain
from langchain_openai import ChatOpenAI
memory = NovyxMemory(api_key="nram_xxx", session_id="user-123")
chain = ConversationChain(llm=ChatOpenAI(), memory=memory)
response = chain.invoke({"input": "My name is Alice"})
# NEW in v2.0: Rollback mistakes
memory.rollback("2 hours ago")
# Cryptographic audit trail
audit = memory.audit(limit=50)
What's New in v2.0
- 🔙 Magic Rollback - Undo memory mistakes with time-travel (
memory.rollback("2 hours ago")) - 📜 Cryptographic Audit Trail - SHA-256 hashing, tamper detection, built into all tiers
- 🔐 Trace Audit - Compliance-grade logging with RSA signatures (Pro+)
- 🚀 Unified API - All features in one package powered by Novyx Core
Features
Core Features (All Tiers)
- Semantic retrieval - Finds relevant context, not just recent messages
- LangGraph native - First-class checkpointer support with rollback
- Multi-tenant - Built for production SaaS applications
- < 100ms latency - Fast semantic search via Novyx Core
- Cryptographic audit - SHA-256 hashing on all writes (retention varies by tier)
Pro+ Features
- Magic Rollback - Time-travel debugging for memory
- Trace audit - RSA-signed compliance logging
- Extended retention - 30+ day audit retention
- Audit export - CSV/JSON export of full audit trail
- Anomaly detection - Real-time alerts on suspicious patterns
Installation
pip install novyx-langchain
For LangGraph support:
pip install "novyx-langchain[langgraph]"
Quick Start
1. Get an API Key
Sign up at novyxlabs.com to get your API key.
2. Basic Memory with Rollback
from novyx_langchain import NovyxMemory
from langchain.chains import ConversationChain
from langchain_openai import ChatOpenAI
# Create persistent memory
memory = NovyxMemory(
api_key="nram_tenant_xxx",
session_id="user-123",
k=10, # Retrieve top 10 relevant memories
)
# Use with any LangChain chain
chain = ConversationChain(
llm=ChatOpenAI(model="gpt-4"),
memory=memory,
)
# Conversations persist automatically
response = chain.invoke({"input": "Remember that I prefer dark mode"})
# Made a mistake? Roll back!
memory.rollback("1 hour ago")
# View audit trail
audit = memory.audit(limit=50)
for entry in audit:
print(f"{entry['timestamp']}: {entry['operation']}")
3. LangGraph Checkpointer with Rollback
from langgraph.graph import StateGraph, END
from novyx_langchain import NovyxCheckpointer
# Create checkpointer
checkpointer = NovyxCheckpointer(api_key="nram_tenant_xxx")
# Build your graph
builder = StateGraph(AgentState)
builder.add_node("agent", agent_node)
builder.add_node("tools", tool_node)
builder.set_entry_point("agent")
builder.add_edge("agent", END)
# Compile with persistence
graph = builder.compile(checkpointer=checkpointer)
# Run with thread_id
config = {"configurable": {"thread_id": "conv-123"}}
result = graph.invoke({"messages": [HumanMessage("Hello!")]}, config)
# NEW: Rollback checkpoint to any point
checkpointer.rollback_to_checkpoint(
thread_id="conv-123",
checkpoint_id="abc123"
)
4. Integrity-Protected Memory
from novyx_langchain import NovyxIntegrityMemory
# Cryptographic audit trail built-in (no extra credentials needed)
memory = NovyxIntegrityMemory(
api_key="nram_tenant_xxx",
session_id="user-123"
)
chain = ConversationChain(llm=llm, memory=memory)
# All writes are cryptographically audited
response = chain.invoke({"input": "Store sensitive context"})
# Verify audit integrity
verification = memory.verify_audit()
if verification['valid']:
print(f"✅ Verified {verification['total_entries']} audit entries")
else:
print(f"⚠️ Integrity issues: {verification['errors']}")
5. Compliance Mode (Pro+)
from novyx_langchain import NovyxTracedMemory
# Automatically traces all memory operations
memory = NovyxTracedMemory(
api_key="nram_tenant_xxx",
session_id="user-123",
agent_id="my-agent",
trace_reads=False, # Optional: trace read operations (verbose)
)
chain = ConversationChain(llm=llm, memory=memory)
# Every memory operation is automatically logged with RSA signature
response = chain.invoke({"input": "Remember my credit card ends in 1234"})
# Complete trace (auto-completed on cleanup)
result = memory.complete_trace()
print(f"Trace signature: {result['signature'][:32]}...")
print(f"Total steps: {result['total_steps']}")
# Verify trace integrity
verification = memory.verify_trace()
if verification['valid']:
print(f"✅ Verified {verification['steps_verified']} trace steps")
API Reference
NovyxMemory
Main memory class, compatible with ConversationBufferMemory.
NovyxMemory(
api_key: str, # Novyx API key
session_id: str, # Unique session identifier
k: int = 10, # Number of memories to retrieve
semantic_search: bool = True, # Use semantic (vs recency) retrieval
return_messages: bool = False, # Return Message objects vs string
min_relevance: float = 0.3, # Minimum relevance score
)
Core Methods:
load_memory_variables(inputs)- Load relevant memoriessave_context(inputs, outputs)- Save conversation turnclear()- Clear session memorysearch(query, limit)- Semantic searchstore_memory(content, tags, importance)- Store custom memory
NEW in v2.0 - Rollback & Audit:
rollback(target, dry_run=False)- Rollback to timestamp/relative time (Pro+)rollback_preview(target)- Preview rollback changes (Pro+)audit(limit, operation)- Get audit trail entriesaudit_export(format)- Export audit log (Pro+)usage()- Get current usage vs limits
NovyxChatMessageHistory
For use with RunnableWithMessageHistory:
from langchain_core.runnables.history import RunnableWithMessageHistory
from novyx_langchain import NovyxChatMessageHistory
def get_session_history(session_id: str):
return NovyxChatMessageHistory(
api_key="nram_xxx",
session_id=session_id,
)
chain_with_history = RunnableWithMessageHistory(
chain,
get_session_history,
)
NovyxCheckpointer
LangGraph checkpoint persistence:
NovyxCheckpointer(
api_key: str, # Novyx API key
namespace: str = "langgraph", # Namespace for isolation
)
Methods:
put(config, checkpoint, metadata)- Store checkpointget_tuple(config)- Get checkpointlist(config)- List checkpointsclear_thread(thread_id)- Clear thread checkpoints
NEW in v2.0 - Rollback:
rollback_to_checkpoint(thread_id, checkpoint_id, dry_run=False)- Rollback to specific checkpoint (Pro+)rollback_thread(thread_id, target, dry_run=False)- Rollback thread to relative time (Pro+)
NovyxIntegrityMemory
Memory with cryptographic audit trail:
NovyxIntegrityMemory(
api_key: str, # Novyx API key
session_id: str,
verify_on_read: bool = False, # Verify audit on every read
audit_checks: bool = True, # Enable automatic audit checks
# ... same options as NovyxMemory
)
Additional Methods:
verify_audit()- Verify cryptographic integrityget_audit_summary(limit)- Get audit summary statsexport_audit(format, output_file)- Export audit trail (Pro+)rollback_with_verification(target, dry_run)- Rollback + verify (Pro+)
NovyxTracedMemory (Pro+)
Compliance-grade memory with automatic trace logging:
NovyxTracedMemory(
api_key: str, # Novyx API key (must be Pro+ tier)
session_id: str,
agent_id: str = "langchain-agent", # Agent identifier for tracing
trace_reads: bool = False, # Trace read operations (verbose)
# ... same options as NovyxMemory
)
Additional Methods:
complete_trace()- Complete trace with RSA signatureverify_trace()- Verify trace integrityget_trace_status()- Get current trace status
Examples
Multi-Tenant Setup
def get_memory_for_user(user_id: str, tier: str = "free") -> NovyxMemory:
return NovyxMemory(
api_key=f"nram_{tenant_id}_xxx", # Tenant-specific key
session_id=f"user-{user_id}",
k=20 if tier == "pro" else 10, # More memories for Pro users
)
# Each user has isolated memory
alice_memory = get_memory_for_user("alice", tier="pro")
bob_memory = get_memory_for_user("bob", tier="free")
Rollback After Error
memory = NovyxMemory(api_key="nram_xxx", session_id="user-123")
# Store some memories
chain = ConversationChain(llm=llm, memory=memory)
response = chain.invoke({"input": "My password is hunter2"}) # Oops!
# Preview rollback
preview = memory.rollback_preview("1 minute ago")
print(f"Will restore {preview['artifacts_modified']} memories")
# Execute rollback
result = memory.rollback("1 minute ago")
print(f"Rolled back to {result['rolled_back_to']}")
Audit Compliance
memory = NovyxIntegrityMemory(api_key="nram_xxx", session_id="user-123")
# Run your agent
# ... agent operations ...
# Get audit summary
summary = memory.get_audit_summary(limit=100)
print(f"Total operations: {summary['total_operations']}")
print(f"Creates: {summary['by_type']['CREATE']}")
print(f"Deletes: {summary['by_type']['DELETE']}")
print(f"Integrity valid: {summary['integrity_valid']}")
# Export for compliance
memory.export_audit(format="csv", output_file="audit_2026-02.csv")
Trace Audit for Compliance
memory = NovyxTracedMemory(
api_key="nram_xxx",
session_id="user-123",
agent_id="customer-support-bot"
)
# All operations are automatically traced
chain = ConversationChain(llm=llm, memory=memory)
for user_input in customer_conversation:
response = chain.invoke({"input": user_input})
# Complete trace with RSA signature
result = memory.complete_trace()
print(f"Trace ID: {result['trace_id']}")
print(f"Signature: {result['signature']}")
print(f"Signed at: {result['signed_at']}")
# Verify later for compliance
verification = memory.verify_trace()
print(f"Trace valid: {verification['valid']}")
Comparison
novyx-langchain is the ONLY LangChain memory provider with rollback, cryptographic audit trails, and compliance-grade trace logging.
| Feature | novyx-langchain | Mem0 | Zep | Supermemory | ConversationBufferMemory |
|---|---|---|---|---|---|
| Semantic search | ✅ | ✅ | ✅ | ✅ | ❌ |
| Magic Rollback | ✅ (Pro+) | ❌ | ❌ | ❌ | ❌ |
| Cryptographic audit trail | ✅ (All tiers) | ❌ | ❌ | ❌ | ❌ |
| Compliance trace logging | ✅ (Pro+) | ❌ | ❌ | ❌ | ❌ |
| LangGraph native | ✅ | ❌ | ❌ | ❌ | ❌ |
| Multi-tenant | ✅ | ✅ | ✅ | ❌ | ❌ |
| Self-hostable | ✅ | ❌ | ✅ | ✅ | N/A |
| Open source | ✅ | ❌ | ❌ | ✅ | ✅ |
| < 100ms latency | ✅ | ✅ | ✅ | ❓ | ✅ |
| Tamper detection | ✅ | ❌ | ❌ | ❌ | ❌ |
| Policy enforcement | ✅ (Pro+) | ❌ | ❌ | ❌ | ❌ |
Why Choose Novyx?
- Only provider with rollback - Undo mistakes with time-travel
- Only provider with audit trails - Cryptographic verification on all tiers
- Only provider with compliance logging - RSA-signed trace audit for regulated industries
- LangGraph native - First-class checkpoint support with rollback
- Open source - Full transparency and self-hosting option
- Multi-tenant - Built for production SaaS from day one
Pricing
| Tier | Price | Memories | API Calls | Rollbacks | Audit | Trace Audit |
|---|---|---|---|---|---|---|
| Free | $0 | 5,000 | 5,000/mo | 10/month | 7 days | ❌ |
| Starter | $12/mo | 25,000 | 25,000/mo | 30/month | 14 days | ❌ |
| Pro | $39/mo | Unlimited | 100,000/mo | Unlimited | 30 days | ✅ |
| Enterprise | $199/mo | Unlimited | Unlimited | Unlimited | 90 days | ✅ + Priority |
Breaking Changes in v2.0
Removed
NovyxIntegrityMemoryno longer requiresintegrity_api_keyandintegrity_secret- audit is now built into Core
Changed
- All classes now use the unified Novyx SDK (
novyx>=2.0.0) NovyxRAMClientis now a wrapper around the Novyx SDK (backward compatible)- Audit features are built into all tiers (with retention limits)
Added
NovyxMemory.rollback()- Magic RollbackNovyxMemory.audit()- Audit trail accessNovyxCheckpointer.rollback_to_checkpoint()- Checkpoint rollbackNovyxTracedMemory- Compliance-grade trace logging (Pro+)- All new methods for rollback, audit, and trace features
Migration from v0.1.x
# v0.1.x
from novyx_langchain import NovyxIntegrityMemory
memory = NovyxIntegrityMemory(
api_key="nram_xxx",
integrity_api_key="int_xxx", # REMOVED in v2.0
integrity_secret="secret", # REMOVED in v2.0
session_id="user-123"
)
# v2.0
from novyx_langchain import NovyxIntegrityMemory
memory = NovyxIntegrityMemory(
api_key="nram_xxx", # Audit is now built-in!
session_id="user-123"
)
License
MIT License - see LICENSE for details.
Links
Metadata
Release files for novyx-langchain 2.9.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| novyx_langchain-2.9.4.tar.gz | 33.2 kB | Without provenance | Details for novyx_langchain-2.9.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| novyx_langchain-2.9.4-py3-none-any.whl | Python 3 | none | any | Details for novyx_langchain-2.9.4-py3-none-any.whl |
Total release size: 63.7 kB
Release files / novyx_langchain-2.9.4.tar.gz
| Download URL | novyx_langchain-2.9.4.tar.gz |
|---|---|
| Size | 33.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8dfe5f2b918bbff7370379c469eb3e16103711886003ef70eb75cfc85397ae28
|
|
BLAKE2b-256 checksum How to use checksums |
05808ba2d9d0b1448e1abf10fa6465f193aad8ca4151ec90a306387aabc9510a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / novyx_langchain-2.9.4-py3-none-any.whl
| Download URL | novyx_langchain-2.9.4-py3-none-any.whl |
|---|---|
| Size | 30.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
238e8a2344c9974bee113959378348d7fbe6d00d7713e53c43cf717e424571ec
|
|
BLAKE2b-256 checksum How to use checksums |
4b8634abbd06bfaac2defd7714dc8848a3ebc2931a3ad442a7bdceebced58c16
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Security for novyx-langchain 2.9.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.