Skip to content

Python SDK

cognimemo-client — the official Python client.

bash
pip install cognimemo-client

Quickstart

python
from cognimemo_client import Cognimemo

cm = Cognimemo(base_url="https://api.cognimemo.com", api_key="cmk_live_…")

cm.retain(bank_id="jane@acme.com", content="Jane ships on Fridays.")
res = cm.recall(bank_id="jane@acme.com", query="when does Jane ship?")
for r in res.results:
    print(r.type, r.text, r.occurred_start, r.scores)

Prefer await cm.aretain(...) / await cm.arecall(...) in async code — every method has an a-prefixed async version. For clean shutdown, use it as a context manager:

python
with Cognimemo(base_url="https://api.cognimemo.com", api_key="cmk_live_…") as cm:
    cm.retain("jane@acme.com", "…")

Data model — space → bank → memories

python
cm.create_space("acme", name="Acme Corp")
cm.retain(bank_id="jane@acme.com", content="Jane prefers dark mode", space="acme")
cm.recall(bank_id="jane@acme.com", query="what does jane prefer?", space="acme")

cm.list_spaces()
cm.list_space_banks("acme")
cm.add_bank_to_space("acme", "raj@acme.com")
cm.remove_bank_from_space("acme", "raj@acme.com")   # person + memories kept

Typed memory blocks

python
cm.retain_preference("jane@acme.com", "For day-planning, use personal Gmail, never work mail.")
cm.retain_procedure("jane@acme.com", ["make build", "kubectl apply -f prod.yaml"], rationale="prod deploy")
cm.retain_reasoning("jane@acme.com", "Chose gRPC over REST: p99 latency mattered more.")
cm.retain_correction("jane@acme.com", "No — drain the pod before restart.")
cm.update_profile("jane@acme.com", "Admin on AWS, GitHub, Grafana.")

# any type directly:
cm.retain(bank_id="jane@acme.com", content="Acme HQ is in Berlin.", fact_type="world")

# type-filtered recall:
cm.recall(bank_id="jane@acme.com", query="how to deploy", types=["procedure"])

See Typed memory blocks for the full list.

Layered / org memory

python
cm.retain(bank_id="__org__:acme", content="Deploy freeze every December.")
cm.recall(bank_id="jane@acme.com", query="deploy policy", space="acme", include_org=True)
# or:
cm.recall_layered("jane@acme.com", "deploy policy", space="acme")

Entities

python
cm.retain(bank_id="jane@acme.com",
    content="Jane joined the DeepMind team on Gemini.",
    entities=[{"text": "Jane", "type": "PERSON"}, {"text": "Gemini", "type": "PROJECT"}])

cm.entities.list_entities("jane@acme.com")

# no-LLM auto-entities for verbatim ingest (off by default):
cm.update_bank_config("jane@acme.com", retain_auto_entities=True)

Encryption at rest

python
cm.enable_encryption("jane@acme.com")     # encryption="managed"; recall stays transparent
cm.disable_encryption("jane@acme.com")

Recall response

recall(...) returns RecallResponse with .results (a list of MemoryFact) and .usage. Each MemoryFact:

fieldmeaning
typefact type (worldprofile)
text, contextthe memory body (decrypted transparently)
occurred_start / occurred_end / mentioned_attemporal anchors
entitieslinked entity names
scores{final, semantic, keyword}
metadata, tags, document_id, chunk_idprovenance

.usage reports {tokens_used, max_tokens, truncated} (and org_blended for layered recall).

Reflect

python
answer = cm.reflect(bank_id="jane@acme.com", query="What is Jane's release cadence?")