Skip to main content

Compact Qdrant-backed memory for host-owned LLM applications.

Project description

memory-os

Compact Qdrant-backed memory for AI applications.

MemoryOS does not generate final answers. Your application owns the chat flow and the user-facing LLM call. MemoryOS extracts multiple important memory chunks from the user's prompt, stores those chunks separately in Qdrant, applies forgetting-curve style decay to them over time, and also keeps a small rolling prompt/response history per session.

Public API

pip install pymemoryos
from memory_os import MemoryOS

memory = MemoryOS(
    qdrant_url="https://your-qdrant-url",
    qdrant_api_key="your-qdrant-api-key",
    llm=configured_llm,                    # any object with .invoke()
    session_id="user_123",
)

memory.store(prompt: str, response: str) -> None
memory.retrieve(prompt: str) -> dict

That is the entire intended surface.

Usage

context = memory.retrieve(user_prompt)

final_response = host_llm.invoke(
    f"Relevant memory:\n{context}\n\nUser:\n{user_prompt}"
)

memory.store(user_prompt, final_response)

Behavior

  • store(prompt, response) calls llm.invoke(...) once to distill the completed prompt into multiple important memory chunks.
  • store(prompt, response) embeds each extracted memory chunk with an internal SentenceTransformer model, then upserts those chunks separately to Qdrant.
  • store(prompt, response) also stores the raw prompt/response pair in a simple rolling session history capped at 7 pairs.
  • retrieve(prompt) embeds the current prompt with the same internal SentenceTransformer model, then queries Qdrant for relevant memories.
  • retrieve(prompt) reranks Qdrant hits using an Ebbinghaus-style decay score: similarity * decay_score * importance * emotional_weight.
  • retrieve(prompt) also returns the latest 4-5 stored prompt/response pairs for the same session as immediate context.
  • All Qdrant reads and writes are filtered by session_id.
  • When an old pair is evicted from the 7-pair history, the Qdrant memory chunks created from that prompt are also removed.
  • Each stored memory chunk keeps decay state in Qdrant payload, including last_accessed, access_count, stability, importance, emotion, emotional_weight, decay_score, final_score, and last_similarity.

Retrieve shape

{
    "recent_pairs": [
        {"prompt": "...", "response": "...", "created_at": 1720000000.0},
    ],
    "memories": [
        {
            "text": "...",
            "score": 0.92,
            "created_at": 1720000000.0,
            "decay_score": 0.81,
            "importance": 0.9,
            "emotion": "fear",
        },
    ],
}

Boundaries

  • MemoryOS never generates the final answer to a user query.
  • MemoryOS uses llm.invoke() only to break the user's prompt into storable memory chunks.
  • MemoryOS uses an internal SentenceTransformer embedder for vector storage and retrieval.
  • Required init config is exactly qdrant_url, qdrant_api_key, llm, and session_id.

Project details


Download files

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

Source Distribution

pymemoryos-0.1.2.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

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

pymemoryos-0.1.2-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file pymemoryos-0.1.2.tar.gz.

File metadata

  • Download URL: pymemoryos-0.1.2.tar.gz
  • Upload date:
  • Size: 10.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymemoryos-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f161cdde69c7db6efd165b3a916ce6133efe09ec7927d0f7ead4afcaeb6fd5a8
MD5 a4ce0e566568ef7f7cd6a7bfb37e9b66
BLAKE2b-256 20286122672bbd0a3449d34df0c3b2c7391329b6e2377aea01e724c5947e0761

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymemoryos-0.1.2.tar.gz:

Publisher: publish.yml on karann810/MemoryOS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pymemoryos-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pymemoryos-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pymemoryos-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7a78e2a29c8eda4a54ec2718c442d1a3f421bf84ee4fec0cff20e82bfa89e0c7
MD5 39973b9a9aff38474a9f33e22dded271
BLAKE2b-256 202c5f70f190dffffb1d100267852b8d907d38d37a21be6b2e51ac8ac077ff44

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymemoryos-0.1.2-py3-none-any.whl:

Publisher: publish.yml on karann810/MemoryOS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page