maximem-vity-sdk
Vity by Maximem AI — a lightweight Python SDK for cross-session semantic memory. Store facts and preferences, recall relevant context for a prompt, run semantic search, and capture whole conversation turns — all over the Maximem REST API.
from maximem_vity import VityClient
client = VityClient(api_key="mx_...")
# Recall context ready to inject into a system prompt
context = client.recall(current_prompt="What color theme does the user like?")
# Store an explicit fact
client.store("User prefers dark mode", memory_type="preference")
# Semantic search
hits = client.search("editor preferences", top_k=5)
Installation
pip install maximem-vity-sdk
Requires Python ≥ 3.9. The only runtime dependency is httpx.
Authentication
Every request is authenticated with a Maximem API key (it starts with mx_).
The API key owns the memory space — VityClient takes no channel or user
ID. Use a separate API key whenever memories must be isolated between users
or accounts.
Get your key at app.maximem.ai/api-keys.
import os
from maximem_vity import VityClient
client = VityClient(api_key=os.environ["MAXIMEM_API_KEY"])
export MAXIMEM_API_KEY="mx_..."
API
recall(current_prompt, recent_messages=None, max_tokens=1000, strategy="hybrid") -> str
Returns a plain-text context block for the current prompt, ready to inject into
a system prompt (empty string if nothing relevant). strategy is one of
"semantic", "recency", or "hybrid".
context = client.recall(
current_prompt="Remind me what we decided about the API.",
recent_messages=[{"role": "user", "content": "Let's revisit the API."}],
max_tokens=800,
)
store(content, memory_type="fact", category="", importance="medium") -> dict
Stores a single explicit memory. memory_type accepts the high-level aliases
fact, preference, emotion, episode, knowledge, profile (mapped to
Maximem categories automatically), or pass category directly to override.
importance is "low", "medium", or "high". Returns {"id": ..., "stored": True}.
client.store("User's timezone is IST", memory_type="fact", importance="high")
search(query, top_k=10, limit=0, category="", min_score=0.0) -> list[dict]
Semantic search. Returns a list of dicts shaped as
{"content", "type", "score", "id", "created_at"}. top_k is the convenience
limit (capped at 20 by the API); limit overrides it when set.
for hit in client.search("favourite languages", top_k=5, min_score=0.3):
print(hit["score"], hit["content"])
capture(messages, agent_id="hermes", session_key="") -> dict
Captures a full conversation turn into long-term memory. messages is a list
of {"role", "content", "timestamp"} dicts (timestamps are filled in if
omitted). Returns {"captured": N, "deduplicated": M}.
client.capture([
{"role": "user", "content": "I hate comic sans"},
{"role": "assistant", "content": "Noted — I'll avoid it."},
])
forget(query="", dry_run=True) -> dict
Deletes memories matching a query. Defaults to a dry run — pass
dry_run=False to actually delete. Returns {"count": N, "ids": [...]}.
preview = client.forget(query="old project notes") # safe preview
client.forget(query="old project notes", dry_run=False) # actually delete
Convenience shims
ingest(messages, session_id="")— alias forcapture().get_profile()— a broad search returning the user's stored memories.
Lifecycle
VityClient holds a pooled HTTP connection. Close it explicitly or use it as a
context manager:
with VityClient(api_key="mx_...") as client:
client.store("User prefers tabs over spaces")
# connection closed automatically
Error handling
All errors derive from VityError:
| Exception | Raised when |
|---|---|
VityAuthError |
API key missing or invalid (HTTP 401) |
VityRateLimitError |
Rate limit exceeded (HTTP 429) — back off and retry |
VityUnavailableError |
Network error, timeout, or service error (HTTP 5xx) |
VityError |
Any other API error |
from maximem_vity import VityClient, VityError
try:
client.store("...")
except VityError as e:
logger.warning("Memory write failed: %s", e)
Configuration
| Option | Default | Description |
|---|---|---|
api_key |
— | Required. Maximem API key (mx_...). |
endpoint |
https://agenticrouter-prod.maximem.ai |
Override for staging. |
timeout |
30.0 |
Per-request timeout in seconds. |
Development
pip install -e ".[dev]"
pytest # run the test suite
python -m build # build the wheel + sdist into dist/
License
MIT © Maximem AI
Release files for maximem-vity-sdk 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| maximem_vity_sdk-0.2.3.tar.gz | 13.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| maximem_vity_sdk-0.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.3 kB
Release files / maximem_vity_sdk-0.2.3.tar.gz
| Download URL | maximem_vity_sdk-0.2.3.tar.gz |
|---|---|
| Size | 13.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bcb6fa069940e4798c26d7447f84a9ff546ddbb39738d832bd7a654fcd7fb5d8
|
|
BLAKE2b-256 checksum How to use checksums |
ded1d33d3a12a24bd141b623fb7b3b77080f9df8f4212820b53f586ae374524f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.9
|
Release files / maximem_vity_sdk-0.2.3-py3-none-any.whl
| Download URL | maximem_vity_sdk-0.2.3-py3-none-any.whl |
|---|---|
| Size | 10.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5d3e24c89d4af27e9d4d721459eb0276ac6b4ee8515308c265700dadf9a62e9d
|
|
BLAKE2b-256 checksum How to use checksums |
6099e19f9a3c2adf660861e3ec08b64dda3bc83600474a4c2c9bf09faab478fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.9
|