Official Python SDK for the Claiv Memory API (V6 - Catalog Memory + Deterministic Routing)
Project description
claiv-memory
Official Python SDK for the Claiv Memory API.
Installation
pip install claiv-memory
Quick Start
from claiv import ClaivClient
client = ClaivClient(api_key="your-api-key")
# Store a memory
result = client.ingest({
"user_id": "user-123",
"type": "message",
"content": "User prefers dark mode and uses VS Code",
})
print(result["event_id"])
# Recall relevant memory
result = client.recall({
"user_id": "user-123",
"conversation_id": "conv-session-456",
"query": "Help the user configure their editor",
})
# result["llm_context"]["text"] → pre-synthesized context, inject as system prompt
# result["answer_facts"] → [{"fact_id", "subject", "predicate", "object_text", ...}]
system_prompt = result["llm_context"]["text"] or "No memory found."
# Forget memory for a user
result = client.forget({"user_id": "user-123"})
print(f"Deleted: {result['deleted_counts']}")
Async Support
from claiv import AsyncClaivClient
async with AsyncClaivClient(api_key="your-api-key") as client:
result = await client.ingest({
"user_id": "user-123",
"type": "message",
"content": "User prefers dark mode",
})
API Reference
ClaivClient(*, api_key, base_url, timeout, max_retries, http_client)
| Parameter | Type | Default | Description |
|---|---|---|---|
api_key |
str |
required | API key (sent as Bearer token) |
base_url |
str |
https://api.claiv.io |
API base URL |
timeout |
float |
30.0 |
Request timeout in seconds |
max_retries |
int |
2 |
Retries on 429/5xx (0 to disable) |
http_client |
httpx.Client |
None |
Custom httpx client |
AsyncClaivClient accepts the same parameters (with httpx.AsyncClient).
Core Methods
client.ingest(request) -> IngestResponse
result = client.ingest({
"user_id": "user-123", # required
"type": "message", # required: "message" | "tool_call" | "app_event"
"content": "The actual text", # required
"thread_id": "thread-456", # optional
"metadata": {"source": "chat"},# optional
"event_time": "2025-01-01T00:00:00Z", # optional: ISO 8601
"idempotency_key": "unique-1", # optional: prevents duplicates
})
# result: {"event_id": str, "deduped": bool}
client.recall(request) -> RecallResponse
result = client.recall({
"user_id": "user-123", # required
"conversation_id": "conv-session-456", # required: stable ID for this conversation
"query": "Help configure their editor", # required: natural-language question
"reference_time": None, # optional: ISO datetime for temporal anchoring
"limits": {"answer_facts": 12}, # optional: per-tier fact limits
})
# result["llm_context"]["text"] → synthesized narrative, inject as system prompt
# result["answer_facts"] → [{"fact_id", "subject", "predicate", "object_text", ...}]
# result["supporting_facts"] → corroborating facts
# result["background_context"] → broader context facts
Use result["llm_context"]["text"] directly as your LLM system prompt:
system_prompt = result["llm_context"]["text"] or "No memory found."
client.forget(request) -> ForgetResponse
result = client.forget({
"user_id": "user-123", # required
"thread_id": "thread-456", # optional
"from_time": "2025-01-01T00:00:00Z", # optional
"to_time": "2025-06-01T00:00:00Z", # optional
})
# result: {"receipt_id": str, "deleted_counts": {...}}
Usage Methods
summary = client.get_usage_summary("30d") # "7d" | "30d" | "month" | "today"
breakdown = client.get_usage_breakdown("today")
limits = client.get_usage_limits()
Health Check
result = client.health_check() # no auth required
# {"ok": True}
Error Handling
All errors inherit from ClaivError.
from claiv import ClaivApiError, ClaivTimeoutError, ClaivNetworkError
try:
client.ingest({...})
except ClaivApiError as e:
print(e.status) # HTTP status code
print(e.code) # "invalid_request" | "unauthorized" | "quota_exceeded" | ...
print(e.request_id) # server request ID for support
print(e.details) # validation errors, quota info, etc.
except ClaivTimeoutError:
pass # request timed out
except ClaivNetworkError:
pass # DNS failure, connection refused, etc.
Retries
The SDK automatically retries on 429 (rate limited) and 5xx (server error) responses with exponential backoff and jitter. Client errors (400, 401, 403, 404) are never retried.
# Default: 2 retries (3 total attempts)
client = ClaivClient(api_key="key")
# Disable retries
client = ClaivClient(api_key="key", max_retries=0)
# More retries for critical paths
client = ClaivClient(api_key="key", max_retries=5)
Context Manager
Both clients support context managers for automatic cleanup:
with ClaivClient(api_key="key") as client:
client.ingest({...})
async with AsyncClaivClient(api_key="key") as client:
await client.ingest({...})
Type Hints
All request/response types are exported as TypedDicts:
from claiv import (
IngestRequest, IngestResponse,
RecallRequest, RecallResponse, RecallFact, V6LLMContext, ContextPack,
ForgetRequest, ForgetResponse, DeletedCounts,
UsageSummaryResponse, UsageBreakdownResponse, UsageLimitsResponse,
)
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 claiv_memory-0.6.1.tar.gz.
File metadata
- Download URL: claiv_memory-0.6.1.tar.gz
- Upload date:
- Size: 15.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94bd855a92ae2420b76e4e27fe21da028c2dd3c17117d8cdfaca4a734ac1e722
|
|
| MD5 |
5d0ef51429232d1e6fb410aa2cf54b58
|
|
| BLAKE2b-256 |
23c34b1dd63d83cb12befbb8339c0d33481c684f373987bb78eadfef9a948e2b
|
File details
Details for the file claiv_memory-0.6.1-py3-none-any.whl.
File metadata
- Download URL: claiv_memory-0.6.1-py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d2d72670cf4301c0630c438243aa97c240cd62810c4fcdced98745f0b05ae95
|
|
| MD5 |
4a1eed00b23992c7c5edf360f00445bd
|
|
| BLAKE2b-256 |
41b163a615755db3649d578b4820ad4f09bd1ec05af5d14586284ef939660401
|