mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-10-17 05:59:41 +08:00
## Stack Context Part 2 of a 3-PR stack moving memory deduplication into the SDKs. See `sdk-dedup/tools-ts` (parent) for the full context and the TypeScript implementation this mirrors. ## What? Port the normalized, priority-ordered (`static > dynamic > search`) profile deduplication into the Python SDKs. - Each request injects one **owned memory block that replaces** the prior block rather than accumulating. - Dedup is **request-local** (no shared state), so it stays correct under concurrency. Covers OpenAI, Agent Framework (middleware + context provider), Cartesia, and Pipecat. ## Why? Keeps the Python SDKs at behavioral parity with the TypeScript SDK so all integrations deduplicate memory the same way. ## Testing - OpenAI: 31 passed, 11 skipped (live) - Agent Framework: 59 passed - Cartesia: 8 passed - Pipecat: 8 passed 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Changes memory formatting and system-prompt injection across multiple SDK integrations; incorrect dedup or replacement could alter LLM context, but there is no auth or data-store risk. > > **Overview** > Ports **normalized cross-source memory deduplication** and **replace-not-append injection** into the Python OpenAI, Agent Framework, Cartesia, and Pipecat packages so they match the TypeScript SDK behavior. > > **Deduplication** uses request-local keys: strip optional `[YYYY-MM-DD]` prefixes, normalize whitespace, and compare with `casefold`, with priority **static → dynamic → search**. In **`query` mode**, profile static/dynamic are excluded from dedup input so facts that only appear in search (or overlap profile) are not dropped before formatting. > > **Injection** no longer appends memory text every turn. OpenAI and Agent Framework middleware **strip prior owned `<supermemory context="user-memories" readonly>` blocks** and **replace** them once per request while keeping the caller’s system instructions; extra system messages lose stale blocks only. New helpers (`strip`/`replace`/`wrap`) live in each package’s utils. > > Tests cover normalized fact variants, query-mode search retention, and stale block replacement. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 42f308b224c768afd64e6bd77048ecee9183eb4f. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
78 lines
1.7 KiB
TOML
78 lines
1.7 KiB
TOML
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[project]
|
|
name = "supermemory-pipecat"
|
|
version = "0.1.3"
|
|
description = "Supermemory integration for Pipecat - memory-enhanced conversational AI pipelines"
|
|
readme = "README.md"
|
|
license = "MIT"
|
|
requires-python = ">=3.10"
|
|
authors = [
|
|
{ name = "Supermemory", email = "support@supermemory.ai" }
|
|
]
|
|
keywords = [
|
|
"supermemory",
|
|
"pipecat",
|
|
"memory",
|
|
"conversational-ai",
|
|
"llm",
|
|
"voice-ai",
|
|
]
|
|
classifiers = [
|
|
"Development Status :: 4 - Beta",
|
|
"Intended Audience :: Developers",
|
|
"License :: OSI Approved :: MIT License",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.10",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
]
|
|
dependencies = [
|
|
"pipecat-ai>=0.0.98,<2.0.0",
|
|
"supermemory>=3.16.0",
|
|
"pydantic>=2.10.0",
|
|
"loguru>=0.7.3",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8.3.5",
|
|
"pytest-asyncio>=0.24.0",
|
|
"mypy>=1.14.1",
|
|
"black>=24.8.0",
|
|
"isort>=5.13.2",
|
|
]
|
|
|
|
[project.urls]
|
|
Homepage = "https://supermemory.ai"
|
|
Documentation = "https://docs.supermemory.ai"
|
|
Repository = "https://github.com/supermemoryai/supermemory"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/supermemory_pipecat"]
|
|
|
|
[tool.hatch.build.targets.sdist]
|
|
include = [
|
|
"/src",
|
|
"/tests",
|
|
"/README.md",
|
|
"/LICENSE",
|
|
]
|
|
|
|
[tool.black]
|
|
line-length = 100
|
|
target-version = ["py310"]
|
|
|
|
[tool.isort]
|
|
profile = "black"
|
|
line_length = 100
|
|
|
|
[tool.mypy]
|
|
python_version = "3.10"
|
|
warn_return_any = true
|
|
warn_unused_configs = true
|
|
disallow_untyped_defs = true
|