Skip to main content

No project description provided

Project description

Unique User Memory

Persistent per-user memory for Unique AI agents.

unique_user_memory stores a compact Markdown profile for each user and updates it after every agent turn. The profile is loaded before the next turn so the assistant can remember stable user context such as communication preferences, work context, expertise, recent topics, and open follow-ups.

What It Does

The package provides:

  • UserMemoryConfig - Pydantic configuration for enabling memory and choosing the consolidation model.
  • load_user_memory(...) - resolves the user's private memory folder, downloads memory.md, and enforces the configured token budget.
  • UserMemoryPostprocessor - runs after the assistant response, consolidates the latest turn into the profile, and uploads the updated memory.md.

The memory file is intentionally small and structured. It is rewritten as a full Markdown profile rather than appended to as an event log.

Lifecycle

  1. The orchestrator enables memory when space.allow_user_memory is true.
  2. load_user_memory(...) resolves the pre-provisioned root folder, ensures a private child folder for the current user, and downloads /user-memory/<user_id>/memory.md if it exists.
  3. The loaded memory text is passed into the agent context for the current turn.
  4. UserMemoryPostprocessor runs after the assistant response.
  5. The package asks the configured language model to either return NOOP or a complete rewritten profile.
  6. If the profile changed, memory.md is uploaded back to the user's folder with ingestion skipped and the content hidden from chat.

Storage Model

Memory is stored in Unique content as Markdown:

/<root_folder>/<user_id>/memory.md

By default, root_folder is user-memory. The root folder must already exist. The package creates the per-user child folder when needed.

Profile Format

Profiles contain YAML frontmatter followed by fixed Markdown sections:

---
user_id: user_123
schema_version: 1
last_updated: 2026-06-17T12:00:00+00:00
turn_count: 1
---

# User Memory

## Identity
_(empty)_

## Communication Preferences
- Prefers concise answers with concrete examples.

## Work Context
_(empty)_

## Skills & Expertise
_(empty)_

## Recent Topics
_(empty)_

## Open Questions / Follow-ups
_(empty)_

The consolidation prompt preserves the schema, keeps bullets short, and returns NOOP when a turn has no durable user facts.

Configuration

from unique_user_memory import UserMemoryConfig

config = UserMemoryConfig(
    enabled=True,
    max_tokens=2000,
    root_folder="user-memory",
)
Field Default Description
enabled False Enables persistent per-user memory for agents that do not use the space-level switch.
language_model DEFAULT_GPT_4o Model used to consolidate the latest turn into the profile.
max_tokens 2000 Maximum profile size. Must be between 500 and 8000 tokens.
root_folder user-memory Root KB folder that contains per-user memory folders.

Integration

Typical orchestration code loads memory before the agent loop and registers the postprocessor for the same turn:

from unique_user_memory.user_memory import load_user_memory
from unique_user_memory.user_memory_postprocessor import UserMemoryPostprocessor

user_memory_state = await load_user_memory(
    event=event,
    config=config.agent.services.user_memory_config,
    logger=logger,
)

if user_memory_state is not None:
    user_memory_text = user_memory_state.text
    postprocessor_manager.add_postprocessor(
        UserMemoryPostprocessor(
            config=config.agent.services.user_memory_config,
            event=event,
            state=user_memory_state,
            logger=logger,
        )
    )

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

unique_user_memory-2026.28.0.dev0.tar.gz (11.4 kB view details)

Uploaded Source

Built Distribution

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

unique_user_memory-2026.28.0.dev0-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file unique_user_memory-2026.28.0.dev0.tar.gz.

File metadata

  • Download URL: unique_user_memory-2026.28.0.dev0.tar.gz
  • Upload date:
  • Size: 11.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.5 {"installer":{"name":"uv","version":"0.11.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for unique_user_memory-2026.28.0.dev0.tar.gz
Algorithm Hash digest
SHA256 6c44ea54cf4e57366c3f2cd968464d8534ef3ff83ec87354219270fb213e14b3
MD5 10736de1592155e01d284bb4ee9d5f8a
BLAKE2b-256 117d9bfef0e36a26fdd08fb9de5fc2374216ddcba3cc61bd8b78c278983fa6d8

See more details on using hashes here.

File details

Details for the file unique_user_memory-2026.28.0.dev0-py3-none-any.whl.

File metadata

  • Download URL: unique_user_memory-2026.28.0.dev0-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.5 {"installer":{"name":"uv","version":"0.11.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for unique_user_memory-2026.28.0.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 089d6f3fb4db66fb593419914e2758ded1096f5015889b3a807698464f30bc54
MD5 d39a2591c16e4714bf36429ca837cc4f
BLAKE2b-256 7047bddad5e09b4369f2c5e06231fb5a5c361f1c5b7a2bd378895a9169e35f80

See more details on using hashes here.

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