mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-05-17 03:56:18 +00:00
## Summary This PR introduces comprehensive Supermemory integration for the Microsoft Agent Framework, providing three complementary approaches to add persistent memory capabilities to agents: middleware for automatic memory injection, context providers for session-based memory management, and tools for explicit memory operations. ## Key Changes - **SupermemoryChatMiddleware**: Automatic memory injection middleware that fetches relevant memories from Supermemory before LLM calls and optionally saves conversations. Supports three modes: - `"profile"`: Injects all static and dynamic profile memories - `"query"`: Searches for memories relevant to the current user message - `"full"`: Combines both profile and query modes - **SupermemoryContextProvider**: Idiomatic context provider following the Agent Framework pattern (similar to built-in Mem0 integration). Integrates with the session pipeline via `before_run()` and `after_run()` hooks for automatic memory retrieval and storage. - **SupermemoryTools**: FunctionTool-compatible tools that agents can use for explicit memory operations: - `search_memories()`: Search for specific memories - `add_memory()`: Add new memories - `get_profile()`: Retrieve user profile - **Utility Functions**: Helper functions for: - Memory deduplication across static, dynamic, and search result sources - Profile-to-markdown conversion for LLM consumption - Message extraction and conversation formatting - Logging with configurable verbosity - **Exception Hierarchy**: Custom exceptions for better error handling: - `SupermemoryConfigurationError`: Missing/invalid configuration - `SupermemoryAPIError`: API request failures - `SupermemoryNetworkError`: Network connectivity issues - `SupermemoryMemoryOperationError`: Memory operation failures - **Comprehensive Documentation**: README with quick start examples, configuration options, and API reference for all three integration approaches. - **Test Suite**: Unit tests covering middleware, context provider, tools, and utility functions with proper mocking and error scenarios. ## Implementation Details - Supports both async (aiohttp) and sync (requests) HTTP clients with automatic fallback - Handles multiple message formats (dict, objects with attributes, content arrays) - Configurable memory storage with optional conversation grouping via `conversation_id` - Environment variable fallback for API key configuration (`SUPERMEMORY_API_KEY`) - Background task management for non-blocking memory operations in middleware - Proper async/sync compatibility for the Supermemory SDK https://claude.ai/code/session_012idB5y6UGK3zmeFULgTc4z
54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
import asyncio
|
|
import os
|
|
from agent_framework.openai import OpenAIResponsesClient
|
|
from supermemory_agent_framework import (
|
|
AgentSupermemory,
|
|
SupermemoryChatMiddleware,
|
|
SupermemoryMiddlewareOptions,
|
|
SupermemoryTools,
|
|
)
|
|
|
|
|
|
async def main():
|
|
conn = AgentSupermemory(
|
|
api_key=os.environ["SUPERMEMORY_API_KEY"],
|
|
container_tag="test-user-123",
|
|
)
|
|
|
|
middleware = SupermemoryChatMiddleware(
|
|
conn,
|
|
options=SupermemoryMiddlewareOptions(
|
|
mode="full",
|
|
verbose=True,
|
|
add_memory="always",
|
|
),
|
|
)
|
|
|
|
tools = SupermemoryTools(conn)
|
|
|
|
agent = OpenAIResponsesClient(api_key=os.environ["OPENAI_API_KEY"], model_id="gpt-4o-mini").as_agent(
|
|
name="MemoryAgent",
|
|
instructions="You are a helpful assistant with memory.",
|
|
middleware=[middleware],
|
|
tools=tools.get_tools(),
|
|
)
|
|
|
|
print("Chat with the agent (type 'quit' to exit)")
|
|
print("-" * 40)
|
|
|
|
while True:
|
|
try:
|
|
user_input = input("\nYou: ")
|
|
except (EOFError, KeyboardInterrupt):
|
|
print("\nBye!")
|
|
break
|
|
|
|
if user_input.strip().lower() in ("quit", "exit"):
|
|
print("Bye!")
|
|
break
|
|
|
|
response = await agent.run(user_input)
|
|
print(f"\nAgent: {response.text}")
|
|
|
|
|
|
asyncio.run(main())
|