Skip to main content

camel-memorysync

MemorySync memory for CAMEL agents.

Two pieces, use either or both:

  • MemorySyncMemory — a drop-in AgentMemory for ChatAgent(memory=...): verbatim chat history plus semantic recall from MemorySync, injected as one scored context record under a hard latency budget. Zero client-side embeddings.
  • MemorySyncStorage — a lossless BaseKeyValueStorage for ChatHistoryMemory that hands user/assistant turns to MemorySync out of band, where they are distilled server-side into durable facts (no raw transcript rows).
pip install camel-memorysync

Quickstart

from camel.agents import ChatAgent
from camel_memorysync import MemorySyncMemory

memory = MemorySyncMemory(
    user_id="customer-42",      # required — who these memories belong to
    session_id="support",       # transcript scope
)
agent = ChatAgent(system_message="You are a helpful travel assistant.", memory=memory)

agent.step("I always prefer window seats on long flights")
# … days later, a new session:
agent.step("which seat should I book for the Oslo flight?")   # remembers

The API key comes from the MEMORYSYNC_API_KEY environment variable (or api_key=...).

Why not the in-repo Mem0 storage?

CAMEL ships Mem0Storage in its repo. Verified against its source:

Behavior Mem0 (Mem0Storage, in-repo) camel-memorysync
History round-trip brokenload() returns extracted facts, not your messages byte-exact: from_dict reconstructs every record
Message roles every record hardcoded role=USER — OpenAI alternation breaks preserved exactly
clear() blast radius ✗ calls client.delete_users() — the entire user entity local window only; remote wipes are explicit (forget_session() / forget_user())
agent_id filter ✗ silently overwritten by user_id filter both preserved per record
Failures ✗ every exception swallowed — callers never know conversation always works, failures logged loudly; explicit deletes raise
Multimodal image_list / video_bytes silently discarded full media round-trip (base64)
Recall latency guard none 1.2 s hard budget, fails open to history-only
Retried saves duplicated deterministic idempotency seeds converge

VectorDBMemory (CAMEL's own long-term option) needs client-side embeddings — OpenAIEmbedding() by default (extra key, cost, latency) plus a vector DB you operate. Recall here is one MemorySync query; the index lives server-side.

How recall enters the context

ScoreBasedContextCreator sorts records by timestamp. The recall block is one SYSTEM-role record with timestamp=0.0, so it lands right after the system prompt — your history is never reordered, rewritten, or role-swapped:

[system]  You are a helpful travel assistant.
[system]  Relevant long-term memories about this user:
          - Prefers window seats on long flights
[user]    which seat should I book for the Oslo flight?

Memories created by other MemorySync surfaces (LangChain, the CLI, voice agents, coding agents…) are recallable inside CAMEL too — that is the point of memory-as-a-service.

Storage-seam usage (ChatHistoryMemory)

from camel.memories import ChatHistoryMemory, ScoreBasedContextCreator
from camel.types import ModelType
from camel.utils import OpenAITokenCounter
from camel_memorysync import MemorySyncStorage

memory = ChatHistoryMemory(
    context_creator=ScoreBasedContextCreator(OpenAITokenCounter(ModelType.GPT_4O_MINI), 2048),
    storage=MemorySyncStorage(user_id="customer-42", session_id="support"),
)

save() keeps verbatim records locally (exact round-trip) and hands user/assistant turns to MemorySync, which distils them into durable facts ("Prefers window seats") — no raw transcript row is kept server-side and filler turns are dropped there. System prompts and tool chatter are never shipped.

Deletion — designed against data loss

Call What happens
clear() resets the LOCAL conversation window only
forget_session() deletes THIS session's MemorySync rows — the facts distilled from its turns — and returns the number deleted (loud — failures raise)
forget_user() deletes all camel-surface rows for this user and returns the number deleted; other surfaces' memories survive

Configuration

Parameter Default Meaning
user_id — (required) End user the memories belong to
session_id default Transcript scope: camel::<session>
top_k 5 Memories per recall
recall_timeout 1.2 Hard recall budget (seconds)
min_query_chars 8 Skip recall for trivial topics
window_size unlimited History records per turn
extraction True Hand turns to MemorySync for server-side distillation
context_creator ScoreBased/GPT-4o-mini/2048 Any BaseContextCreator

Note on dependencies

camel-ai 0.2.x imports FastMCP from mcp.server, which mcp 2.0 moved — an unpinned install crashes at import camel.agents. This package pins mcp<2 until CAMEL supports mcp 2.

Tests

pip install -e . pytest
pytest tests -q   # 27 checks against the real camel-ai at latest

The suite drives a REAL ChatAgent turn via CAMEL's own StubModel and reproduces each in-repo Mem0Storage bug as a regression test.

License

MIT © MemorySync.

Download files

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

Source Distribution

camel_memorysync-1.0.3.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

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

camel_memorysync-1.0.3-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

Details for the file camel_memorysync-1.0.3.tar.gz.

File metadata

  • Download URL: camel_memorysync-1.0.3.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.9

File hashes

Hashes for camel_memorysync-1.0.3.tar.gz
Algorithm Hash digest
SHA256 6deeb81eb236f5f3e25dd7e7117e5ec960f37d92bc8f0871c3ef050ff8437544
MD5 baa91ef28360098b61928e88494160a7
BLAKE2b-256 3ffbb6162d4ae83c033e0e758877790a1db94d3d4cd81f2d963dcda8fa0a3ef6

See more details on using hashes here.

File details

Details for the file camel_memorysync-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for camel_memorysync-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 945a8c8a2ddf4063236ec040808d3fd5da3d2155dc1905c2844ace2d5b5fe507
MD5 a70d89b1f0d18c399d5cb6ab6cc10c05
BLAKE2b-256 362351c542d2feeb7df67bc83824a3a633ef3b9f3047995e94d3a56fca3b51fd

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.3 This release

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page