Supermemory Pipecat SDK
Memory-enhanced conversational AI pipelines with Supermemory and Pipecat.
Installation
pip install supermemory-pipecat
Quick Start
import os
from pipecat.pipeline.pipeline import Pipeline
from pipecat.processors.aggregators.llm_context import LLMContext
from supermemory_pipecat import SupermemoryPipecatService
# Create memory service
memory = SupermemoryPipecatService(
api_key=os.getenv("SUPERMEMORY_API_KEY"),
user_id="user-123", # Required: used as container_tag
session_id="conversation-456", # Optional: groups memories by session
)
# Use the universal LLM context supported by current Pipecat releases.
context = LLMContext([{"role": "system", "content": "You are a helpful assistant."}])
context_aggregator = llm.create_context_aggregator(context)
# Create pipeline with memory
pipeline = Pipeline([
transport.input(),
stt,
context_aggregator.user(),
memory, # Automatically retrieves and injects relevant memories
llm,
transport.output(),
context_aggregator.assistant(),
])
Configuration
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
user_id |
str | Yes | User identifier - used as container_tag for memory scoping |
session_id |
str | No | Session/conversation ID for grouping memories |
api_key |
str | No | Supermemory API key (or set SUPERMEMORY_API_KEY env var) |
params |
InputParams | No | Advanced configuration |
base_url |
str | No | Custom API endpoint |
Advanced Configuration
from supermemory_pipecat import SupermemoryPipecatService
memory = SupermemoryPipecatService(
user_id="user-123",
session_id="conv-456",
params=SupermemoryPipecatService.InputParams(
search_limit=10, # Max memories to retrieve
search_threshold=0.1, # Similarity threshold
mode="full", # "profile", "query", or "full"
inject_mode="auto", # "auto", "system", or "user"
system_prompt="Based on previous conversations, I recall:\n\n",
),
)
Memory Modes
| Mode | Static Profile | Dynamic Profile | Search Results |
|---|---|---|---|
"profile" |
Yes | Yes | No |
"query" |
No | No | Yes |
"full" |
Yes | Yes | Yes |
How It Works
- Intercepts context frames - Listens for Pipecat's universal
LLMContextFrame(and legacy 0.x frames) - Tracks conversation - Separates real conversation messages from tagged memory context
- Retrieves memories - Queries
/v4/profileAPI with user's message - Injects memories - Uses a system message for audio/system mode and a tagged user message otherwise
- Stores messages - Serializes newly observed user and assistant messages through a background queue that drains during cleanup
What Gets Stored
New user and assistant messages are stored as a JSON conversation segment. The
injected <user_memories> message is filtered out before storage and does not
advance the storage cursor.
For example, this conversation segment:
User: What's the weather like today?
Assistant: It's sunny today.
is sent to Supermemory as:
{
"content": "[{\"role\": \"user\", \"content\": \"What's the weather like today?\"}, {\"role\": \"assistant\", \"content\": \"It's sunny today.\"}]",
"container_tags": ["user-123"],
"custom_id": "conversation-456",
"metadata": { "platform": "pipecat" }
}
Full Example
import asyncio
import os
from fastapi import FastAPI, WebSocket
from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.task import PipelineTask
from pipecat.pipeline.runner import PipelineRunner
from pipecat.processors.aggregators.llm_context import LLMContext
from pipecat.services.google.gemini_live.llm import GeminiLiveLLMService
from pipecat.transports.websocket.fastapi import (
FastAPIWebsocketTransport,
FastAPIWebsocketParams,
)
from supermemory_pipecat import SupermemoryPipecatService
app = FastAPI()
@app.websocket("/chat")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
transport = FastAPIWebsocketTransport(
websocket=websocket,
params=FastAPIWebsocketParams(audio_in_enabled=True, audio_out_enabled=True),
)
# Gemini Live for speech-to-speech
llm = GeminiLiveLLMService(
api_key=os.getenv("GEMINI_API_KEY"),
model="models/gemini-2.5-flash-native-audio-preview-12-2025",
)
context = LLMContext([{"role": "system", "content": "You are a helpful assistant."}])
context_aggregator = llm.create_context_aggregator(context)
# Supermemory memory service
memory = SupermemoryPipecatService(
user_id="alice",
session_id="session-123",
)
pipeline = Pipeline([
transport.input(),
context_aggregator.user(),
memory,
llm,
transport.output(),
context_aggregator.assistant(),
])
runner = PipelineRunner()
task = PipelineTask(pipeline)
await runner.run(task)
License
MIT
Release files for supermemory-pipecat 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| supermemory_pipecat-0.1.3.tar.gz | 12.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| supermemory_pipecat-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.8 kB
Release files / supermemory_pipecat-0.1.3.tar.gz
| Download URL | supermemory_pipecat-0.1.3.tar.gz |
|---|---|
| Size | 12.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
88754ed240984f6acd8ca68fc945b2aed1aaf3f51354e505fd9f6124cea1c974
|
|
BLAKE2b-256 checksum How to use checksums |
b7f500aba2a9437bbbb73dbb9701525eac94477bc0461868772d305438122b2e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency logRelease files / supermemory_pipecat-0.1.3-py3-none-any.whl
| Download URL | supermemory_pipecat-0.1.3-py3-none-any.whl |
|---|---|
| Size | 12.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
31371847f1c7fe6fedd9280a36d4b8673f2568052ea1de0532dc194d41ab7d40
|
|
BLAKE2b-256 checksum How to use checksums |
ad58159470331a65124dac58bf729fdd7af93f468a626ea885a8fd80fc4543b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 1, 2026.
Transparency log