Skip to main content

Python SDK for Walrus Memory — Privacy-first AI memory with Ed25519 signing

Project description

Walrus Memory Python SDK

Python SDK for Walrus Memory — Privacy-first AI memory with Ed25519 signing.

All data processing (encryption, embedding, Walrus storage) happens server-side in a TEE. The SDK signs requests with your Ed25519 delegate key and sends text over HTTPS.

Installation

pip install memwal

With optional integrations:

pip install memwal[langchain]   # LangChain support
pip install memwal[openai]      # OpenAI SDK support
pip install memwal[all]         # Everything

Quick Start

Set your environment variables first:

export MEMWAL_PRIVATE_KEY="your-ed25519-delegate-private-key-hex"
export MEMWAL_ACCOUNT_ID="0x-your-walrus-memory-account-id"
export MEMWAL_SERVER_URL="https://relayer.memwal.ai"

MEMWAL_PRIVATE_KEY is the delegate private key from the Walrus Memory dashboard and must stay server-side.

Async (recommended)

import asyncio
import os
from memwal import MemWal, RecallParams

async def main():
    memwal = MemWal.create(
        key=os.environ["MEMWAL_PRIVATE_KEY"],
        account_id=os.environ["MEMWAL_ACCOUNT_ID"],
        server_url=os.environ.get("MEMWAL_SERVER_URL", "https://relayer.memwal.ai"),
    )

    # Store a memory
    result = await memwal.remember("I'm allergic to peanuts")
    print(result.blob_id)

    # Recall memories
    matches = await memwal.recall(RecallParams(query="food allergies", limit=10, max_distance=0.7))
    for memory in matches.results:
        print(f"{memory.text} (relevance: {1 - memory.distance:.2f})")

    # Analyze conversation for facts
    analysis = await memwal.analyze("I love coffee and live in Tokyo")
    for fact in analysis.facts:
        print(fact.text)

    await memwal.close()

asyncio.run(main())

Sync

import os
from memwal import MemWalSync, RecallParams

client = MemWalSync.create(
    key=os.environ["MEMWAL_PRIVATE_KEY"],
    account_id=os.environ["MEMWAL_ACCOUNT_ID"],
    server_url=os.environ.get("MEMWAL_SERVER_URL", "https://relayer.memwal.ai"),
)

result = client.remember("I'm allergic to peanuts")
matches = client.recall(RecallParams(query="food allergies"))
client.close()

Context Manager

import os
from memwal import MemWal

async with MemWal.create(
    key=os.environ["MEMWAL_PRIVATE_KEY"],
    account_id=os.environ["MEMWAL_ACCOUNT_ID"],
) as memwal:
    await memwal.remember("I prefer dark mode")

Environment Presets

Instead of hardcoding a relayer URL, pass env to target a hosted relayer. Same shorthand as the TypeScript SDK and MCP package.

from memwal import MemWal

memwal = MemWal.create(
    key=os.environ["MEMWAL_PRIVATE_KEY"],
    account_id=os.environ["MEMWAL_ACCOUNT_ID"],
    env="prod",   # prod | dev | staging | local
)
env Relayer URL
prod https://relayer.memwal.ai
dev https://relayer.dev.memwal.ai
staging https://relayer.staging.memwal.ai
local http://127.0.0.1:8000

Precedence: an explicit non-default server_url wins over env, which wins over the default. An unknown preset raises ValueError. env is also accepted by MemWalSync.create, with_memwal_langchain, and with_memwal_openai.

AI Middleware

LangChain

import os
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
from memwal import with_memwal_langchain

llm = ChatOpenAI(model="gpt-4o")
smart_llm = with_memwal_langchain(
    llm,
    key=os.environ["MEMWAL_PRIVATE_KEY"],
    account_id=os.environ["MEMWAL_ACCOUNT_ID"],
    server_url=os.environ.get("MEMWAL_SERVER_URL", "https://relayer.memwal.ai"),
    max_memories=5,
    min_relevance=0.3,
)

# Memories are automatically recalled and injected
response = await smart_llm.ainvoke([HumanMessage("What are my food allergies?")])

OpenAI SDK

import os
from openai import AsyncOpenAI
from memwal import with_memwal_openai

client = AsyncOpenAI()
smart_client = with_memwal_openai(
    client,
    key=os.environ["MEMWAL_PRIVATE_KEY"],
    account_id=os.environ["MEMWAL_ACCOUNT_ID"],
    server_url=os.environ.get("MEMWAL_SERVER_URL", "https://relayer.memwal.ai"),
)

# Memories are automatically recalled and injected
response = await smart_client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "What are my food allergies?"}],
)

API Reference

MemWal.create(key, account_id, server_url?, namespace?)

Create a new async client.

Methods

Method Description
await remember(text, namespace?) Store a memory
await recall(RecallParams(query, limit?, namespace?, max_distance?)) Search memories, optionally filtering by distance
await analyze(text, namespace?) Extract and store facts
await ask(question, limit?, namespace?) Ask a question answered using memories
await restore(namespace, limit?) Restore a namespace
await health() Check server health
await remember_manual(opts) Store with pre-computed vector
await recall_manual(opts) Search with pre-computed vector
await get_public_key_hex() Get Ed25519 public key

Authentication

Every request is signed with Ed25519:

message = f"{timestamp}.{method}.{path_and_query}.{body_sha256}.{nonce}.{account_id}"

Signed requests send x-public-key, x-signature, x-timestamp, x-nonce, and x-account-id. Relayer-mode requests also send x-seal-session; manual-mode requests omit decrypt credentials.

License

MIT

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

memwal-0.1.4rc0.tar.gz (50.0 kB view details)

Uploaded Source

Built Distribution

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

memwal-0.1.4rc0-py3-none-any.whl (29.8 kB view details)

Uploaded Python 3

File details

Details for the file memwal-0.1.4rc0.tar.gz.

File metadata

  • Download URL: memwal-0.1.4rc0.tar.gz
  • Upload date:
  • Size: 50.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for memwal-0.1.4rc0.tar.gz
Algorithm Hash digest
SHA256 c89a0c5e4e911db42a121c6fd4d1f5891516ddff789148a897bfa49b2c5acc27
MD5 23b24909c7b126ad64498164024ab82d
BLAKE2b-256 3e27397103b254ddbaa3ae3700a9ca80c7cad9e4711cce124cd3b77d2f1c924b

See more details on using hashes here.

Provenance

The following attestation bundles were made for memwal-0.1.4rc0.tar.gz:

Publisher: release-python-sdk.yml on MystenLabs/MemWal

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

File details

Details for the file memwal-0.1.4rc0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for memwal-0.1.4rc0-py3-none-any.whl
Algorithm Hash digest
SHA256 397c1cb928c3947a17d0f614b918c323dc27b33dc189963c8e124e0e81e558cd
MD5 ec6b3f400e2c34f2f0f1decf3e82eb38
BLAKE2b-256 d2407f5a3d7eba2629ff9e13bfd47becb87b7349728f14f98a22d55e70f7725b

See more details on using hashes here.

Provenance

The following attestation bundles were made for memwal-0.1.4rc0-py3-none-any.whl:

Publisher: release-python-sdk.yml on MystenLabs/MemWal

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