- openmemory: use qwen2.5:1.5b instead of gemma3:1b for fact extraction - test_pipeline.py: check qwen2.5:1.5b, fix SSE checks, fix Qdrant payload parsing, relax SearXNG threshold to 5s, improve marker word test - potential-directions.md: ranked CPU extraction model candidates - Root cause: mem0migrations collection had stale 1536-dim vectors causing silent dedup failures; recreate both collections at 768 dims All 18 pipeline tests now pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
1.6 KiB
Python
63 lines
1.6 KiB
Python
import os
|
|
from mcp.server.fastmcp import FastMCP
|
|
from mem0 import Memory
|
|
|
|
OLLAMA_CPU_URL = os.getenv("OLLAMA_CPU_URL", "http://host.docker.internal:11435")
|
|
QDRANT_HOST = os.getenv("QDRANT_HOST", "host.docker.internal")
|
|
QDRANT_PORT = int(os.getenv("QDRANT_PORT", "6333"))
|
|
|
|
config = {
|
|
"llm": {
|
|
"provider": "ollama",
|
|
"config": {
|
|
"model": "qwen2.5:1.5b",
|
|
"ollama_base_url": OLLAMA_CPU_URL,
|
|
},
|
|
},
|
|
"embedder": {
|
|
"provider": "ollama",
|
|
"config": {
|
|
"model": "nomic-embed-text",
|
|
"ollama_base_url": OLLAMA_CPU_URL,
|
|
},
|
|
},
|
|
"vector_store": {
|
|
"provider": "qdrant",
|
|
"config": {
|
|
"collection_name": "adolf_memories",
|
|
"embedding_model_dims": 768,
|
|
"host": QDRANT_HOST,
|
|
"port": QDRANT_PORT,
|
|
},
|
|
},
|
|
}
|
|
|
|
memory = Memory.from_config(config)
|
|
|
|
mcp = FastMCP("openmemory", host="0.0.0.0", port=8765)
|
|
|
|
|
|
@mcp.tool()
|
|
def add_memory(text: str, user_id: str = "default") -> str:
|
|
"""Store a memory for a user."""
|
|
result = memory.add(text, user_id=user_id)
|
|
return str(result)
|
|
|
|
|
|
@mcp.tool()
|
|
def search_memory(query: str, user_id: str = "default") -> str:
|
|
"""Search memories for a user using semantic similarity."""
|
|
results = memory.search(query, user_id=user_id)
|
|
return str(results)
|
|
|
|
|
|
@mcp.tool()
|
|
def get_all_memories(user_id: str = "default") -> str:
|
|
"""Get all stored memories for a user."""
|
|
results = memory.get_all(user_id=user_id)
|
|
return str(results)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
mcp.run(transport="sse")
|