Skip to content

Commit d401ee7

Browse files
authored
refactor: consolidate API to server_api and remove deprecated stacks (#1344)
* chore: delete nebula * feat: update .gitignore * feat: delete old product/core files * feat: delete old product/core files
1 parent 10e0c64 commit d401ee7

File tree

25 files changed

+41
-5761
lines changed

25 files changed

+41
-5761
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,6 @@ apps/openwork-memos-integration/apps/desktop/public/assets/usecases/
234234
# Outputs and Evaluation Results
235235
outputs
236236

237-
evaluation/data/temporal_locomo
237+
evaluation/data/
238238
test_add_pipeline.py
239239
test_file_pipeline.py

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pre_commit:
3636
poetry run pre-commit run -a
3737

3838
serve:
39-
poetry run uvicorn memos.api.start_api:app
39+
poetry run uvicorn memos.api.server_api:app
4040

4141
openapi:
4242
poetry run memos export_openapi --output docs/openapi.json

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
- [**72% lower token usage**](https://x.com/MemOS_dev/status/2020854044583924111) — intelligent memory retrieval instead of loading full chat history
7676
- [**Multi-agent memory sharing**](https://x.com/MemOS_dev/status/2020538135487062094) — multi-instance agents share memory via same user_id, automatic context handoff
7777

78-
Get your API key: [MemOS Dashboard](https://memos-dashboard.openmem.net/cn/login/)
78+
Get your API key: [MemOS Dashboard](https://memos-dashboard.openmem.net/cn/login/)
7979
Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin)
8080

8181
### 🧠 Local Plugin — 100% On-Device Memory
@@ -84,7 +84,7 @@ Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/Mem
8484
- **Hybrid search + task & skill evolution** — FTS5 + vector search, auto task summarization, reusable skills that self-upgrade
8585
- **Multi-agent collaboration + Memory Viewer** — memory isolation, skill sharing, full web dashboard with 7 management pages
8686

87-
🌐 [Homepage](https://memos-claw.openmem.net) ·
87+
🌐 [Homepage](https://memos-claw.openmem.net) ·
8888
📖 [Documentation](https://memos-claw.openmem.net/docs/index.html) · 📦 [NPM](https://www.npmjs.com/package/@memtensor/memos-local-openclaw-plugin)
8989

9090
## 📌 MemOS: Memory Operating System for AI Agents
@@ -104,10 +104,10 @@ Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/Mem
104104

105105
### News
106106

107-
- **2026-03-08** · 🦞 **MemOS OpenClaw Plugin — Cloud & Local**
107+
- **2026-03-08** · 🦞 **MemOS OpenClaw Plugin — Cloud & Local**
108108
Official OpenClaw memory plugins launched. **Cloud Plugin**: hosted memory service with 72% lower token usage and multi-agent memory sharing ([MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin)). **Local Plugin** (`v1.0.0`): 100% on-device memory with persistent SQLite, hybrid search (FTS5 + vector), task summarization & skill evolution, multi-agent collaboration, and a full Memory Viewer dashboard.
109109

110-
- **2025-12-24** · 🎉 **MemOS v2.0: Stardust (星尘) Release**
110+
- **2025-12-24** · 🎉 **MemOS v2.0: Stardust (星尘) Release**
111111
Comprehensive KB (doc/URL parsing + cross-project sharing), memory feedback & precise deletion, multi-modal memory (images/charts), tool memory for agent planning, Redis Streams scheduling + DB optimizations, streaming/non-streaming chat, MCP upgrade, and lightweight quick/full deployment.
112112
<details>
113113
<summary>✨ <b>New Features</b></summary>
@@ -155,7 +155,7 @@ Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/Mem
155155
</details>
156156

157157
- **2025-08-07** · 🎉 **MemOS v1.0.0 (MemCube) Release**
158-
First MemCube release with a word-game demo, LongMemEval evaluation, BochaAISearchRetriever integration, NebulaGraph support, improved search capabilities, and the official Playground launch.
158+
First MemCube release with a word-game demo, LongMemEval evaluation, BochaAISearchRetriever integration, improved search capabilities, and the official Playground launch.
159159

160160
<details>
161161
<summary>✨ <b>New Features</b></summary>
@@ -176,7 +176,7 @@ Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/Mem
176176

177177
**Plaintext Memory**
178178
- Integrated internet search with Bocha.
179-
- Added support for Nebula database.
179+
- Expanded graph database support.
180180
- Added contextual understanding for the tree-structured plaintext memory search interface.
181181

182182
</details>
@@ -188,7 +188,7 @@ Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/Mem
188188
- Fixed the concat_cache method.
189189

190190
**Plaintext Memory**
191-
- Fixed Nebula search-related issues.
191+
- Fixed graph search-related issues.
192192

193193
</details>
194194

docker/.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ MEMSCHEDULER_USE_REDIS_QUEUE=false
127127

128128
## Graph / vector stores
129129
# Neo4j database selection mode
130-
NEO4J_BACKEND=neo4j-community # neo4j-community | neo4j | nebular | polardb
130+
NEO4J_BACKEND=neo4j-community # neo4j-community | neo4j | polardb | postgres
131131
# Neo4j database url
132132
NEO4J_URI=bolt://localhost:7687 # required when backend=neo4j*
133133
# Neo4j database user

examples/mem_agent/deepsearch_example.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def build_minimal_components():
4747

4848
# Build component configurations using APIConfig methods (like config_builders.py)
4949

50-
# Graph DB configuration - using APIConfig.get_nebular_config()
50+
# Graph DB configuration - using APIConfig graph DB helpers
5151
graph_db_backend = os.getenv("NEO4J_BACKEND", "polardb").lower()
5252
graph_db_backend_map = {
5353
"polardb": APIConfig.get_polardb_config(),

src/memos/api/config.py

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -741,21 +741,6 @@ def get_neo4j_shared_config(user_id: str | None = None) -> dict[str, Any]:
741741
"embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
742742
}
743743

744-
@staticmethod
745-
def get_nebular_config(user_id: str | None = None) -> dict[str, Any]:
746-
"""Get Nebular configuration."""
747-
return {
748-
"uri": json.loads(os.getenv("NEBULAR_HOSTS", '["localhost"]')),
749-
"user": os.getenv("NEBULAR_USER", "root"),
750-
"password": os.getenv("NEBULAR_PASSWORD", "xxxxxx"),
751-
"space": os.getenv("NEBULAR_SPACE", "shared-tree-textual-memory"),
752-
"user_name": f"memos{user_id.replace('-', '')}",
753-
"use_multi_db": False,
754-
"auto_create": True,
755-
"embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
756-
}
757-
758-
@staticmethod
759744
def get_milvus_config():
760745
return {
761746
"collection_name": [
@@ -1103,7 +1088,6 @@ def create_user_config(user_name: str, user_id: str) -> tuple["MOSConfig", "Gene
11031088

11041089
neo4j_community_config = APIConfig.get_neo4j_community_config(user_id)
11051090
neo4j_config = APIConfig.get_neo4j_config(user_id)
1106-
nebular_config = APIConfig.get_nebular_config(user_id)
11071091
polardb_config = APIConfig.get_polardb_config(user_id)
11081092
internet_config = (
11091093
APIConfig.get_internet_config()
@@ -1114,7 +1098,6 @@ def create_user_config(user_name: str, user_id: str) -> tuple["MOSConfig", "Gene
11141098
graph_db_backend_map = {
11151099
"neo4j-community": neo4j_community_config,
11161100
"neo4j": neo4j_config,
1117-
"nebular": nebular_config,
11181101
"polardb": polardb_config,
11191102
"postgres": postgres_config,
11201103
}
@@ -1144,9 +1127,9 @@ def create_user_config(user_name: str, user_id: str) -> tuple["MOSConfig", "Gene
11441127
"reorganize": os.getenv("MOS_ENABLE_REORGANIZE", "false").lower()
11451128
== "true",
11461129
"memory_size": {
1147-
"WorkingMemory": int(os.getenv("NEBULAR_WORKING_MEMORY", 20)),
1148-
"LongTermMemory": int(os.getenv("NEBULAR_LONGTERM_MEMORY", 1e6)),
1149-
"UserMemory": int(os.getenv("NEBULAR_USER_MEMORY", 1e6)),
1130+
"WorkingMemory": int(os.getenv("MOS_WORKING_MEMORY", 20)),
1131+
"LongTermMemory": int(os.getenv("MOS_LONGTERM_MEMORY", 1e6)),
1132+
"UserMemory": int(os.getenv("MOS_USER_MEMORY", 1e6)),
11501133
},
11511134
"search_strategy": {
11521135
"fast_graph": bool(os.getenv("FAST_GRAPH", "false") == "true"),
@@ -1169,7 +1152,7 @@ def create_user_config(user_name: str, user_id: str) -> tuple["MOSConfig", "Gene
11691152
}
11701153
)
11711154
else:
1172-
raise ValueError(f"Invalid Neo4j backend: {graph_db_backend}")
1155+
raise ValueError(f"Invalid graph DB backend: {graph_db_backend}")
11731156
default_mem_cube = GeneralMemCube(default_cube_config)
11741157
return default_config, default_mem_cube
11751158

@@ -1188,13 +1171,11 @@ def get_default_cube_config() -> "GeneralMemCubeConfig | None":
11881171
openai_config = APIConfig.get_openai_config()
11891172
neo4j_community_config = APIConfig.get_neo4j_community_config(user_id="default")
11901173
neo4j_config = APIConfig.get_neo4j_config(user_id="default")
1191-
nebular_config = APIConfig.get_nebular_config(user_id="default")
11921174
polardb_config = APIConfig.get_polardb_config(user_id="default")
11931175
postgres_config = APIConfig.get_postgres_config(user_id="default")
11941176
graph_db_backend_map = {
11951177
"neo4j-community": neo4j_community_config,
11961178
"neo4j": neo4j_config,
1197-
"nebular": nebular_config,
11981179
"polardb": polardb_config,
11991180
"postgres": postgres_config,
12001181
}
@@ -1227,9 +1208,9 @@ def get_default_cube_config() -> "GeneralMemCubeConfig | None":
12271208
== "true",
12281209
"internet_retriever": internet_config,
12291210
"memory_size": {
1230-
"WorkingMemory": int(os.getenv("NEBULAR_WORKING_MEMORY", 20)),
1231-
"LongTermMemory": int(os.getenv("NEBULAR_LONGTERM_MEMORY", 1e6)),
1232-
"UserMemory": int(os.getenv("NEBULAR_USER_MEMORY", 1e6)),
1211+
"WorkingMemory": int(os.getenv("MOS_WORKING_MEMORY", 20)),
1212+
"LongTermMemory": int(os.getenv("MOS_LONGTERM_MEMORY", 1e6)),
1213+
"UserMemory": int(os.getenv("MOS_USER_MEMORY", 1e6)),
12331214
},
12341215
"search_strategy": {
12351216
"fast_graph": bool(os.getenv("FAST_GRAPH", "false") == "true"),
@@ -1253,4 +1234,4 @@ def get_default_cube_config() -> "GeneralMemCubeConfig | None":
12531234
}
12541235
)
12551236
else:
1256-
raise ValueError(f"Invalid Neo4j backend: {graph_db_backend}")
1237+
raise ValueError(f"Invalid graph DB backend: {graph_db_backend}")

src/memos/api/handlers/base_handler.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ def __init__(
3636
vector_db: Any | None = None,
3737
internet_retriever: Any | None = None,
3838
memory_manager: Any | None = None,
39-
mos_server: Any | None = None,
4039
feedback_server: Any | None = None,
4140
**kwargs,
4241
):
@@ -54,7 +53,6 @@ def __init__(
5453
vector_db: Vector database instance
5554
internet_retriever: Internet retriever instance
5655
memory_manager: Memory manager instance
57-
mos_server: MOS server instance
5856
**kwargs: Additional dependencies
5957
"""
6058
self.llm = llm
@@ -68,7 +66,6 @@ def __init__(
6866
self.vector_db = vector_db
6967
self.internet_retriever = internet_retriever
7068
self.memory_manager = memory_manager
71-
self.mos_server = mos_server
7269
self.feedback_server = feedback_server
7370

7471
# Store any additional dependencies
@@ -158,11 +155,6 @@ def vector_db(self):
158155
"""Get vector database instance."""
159156
return self.deps.vector_db
160157

161-
@property
162-
def mos_server(self):
163-
"""Get MOS server instance."""
164-
return self.deps.mos_server
165-
166158
@property
167159
def deepsearch_agent(self):
168160
"""Get deepsearch agent instance."""

src/memos/api/handlers/component_init.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
from memos.log import get_logger
2929
from memos.mem_cube.navie import NaiveMemCube
3030
from memos.mem_feedback.simple_feedback import SimpleMemFeedback
31-
from memos.mem_os.product_server import MOSServer
3231
from memos.mem_reader.factory import MemReaderFactory
3332
from memos.mem_scheduler.orm_modules.base_model import BaseDBManager
3433
from memos.mem_scheduler.scheduler_factory import SchedulerFactory
@@ -211,15 +210,6 @@ def init_server() -> dict[str, Any]:
211210

212211
logger.debug("Text memory initialized")
213212

214-
# Initialize MOS Server
215-
mos_server = MOSServer(
216-
mem_reader=mem_reader,
217-
llm=llm,
218-
online_bot=False,
219-
)
220-
221-
logger.debug("MOS server initialized")
222-
223213
# Create MemCube with pre-initialized memory instances
224214
naive_mem_cube = NaiveMemCube(
225215
text_mem=text_mem,
@@ -304,7 +294,6 @@ def init_server() -> dict[str, Any]:
304294
"internet_retriever": internet_retriever,
305295
"memory_manager": memory_manager,
306296
"default_cube_config": default_cube_config,
307-
"mos_server": mos_server,
308297
"mem_scheduler": mem_scheduler,
309298
"naive_mem_cube": naive_mem_cube,
310299
"searcher": searcher,

src/memos/api/handlers/config_builders.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,14 @@ def build_graph_db_config(user_id: str = "default") -> dict[str, Any]:
3939
graph_db_backend_map = {
4040
"neo4j-community": APIConfig.get_neo4j_community_config(user_id=user_id),
4141
"neo4j": APIConfig.get_neo4j_config(user_id=user_id),
42-
"nebular": APIConfig.get_nebular_config(user_id=user_id),
4342
"polardb": APIConfig.get_polardb_config(user_id=user_id),
4443
"postgres": APIConfig.get_postgres_config(user_id=user_id),
4544
}
4645

4746
# Support both GRAPH_DB_BACKEND and legacy NEO4J_BACKEND env vars
48-
graph_db_backend = os.getenv("GRAPH_DB_BACKEND", os.getenv("NEO4J_BACKEND", "nebular")).lower()
47+
graph_db_backend = os.getenv(
48+
"GRAPH_DB_BACKEND", os.getenv("NEO4J_BACKEND", "neo4j-community")
49+
).lower()
4950
return GraphDBConfigFactory.model_validate(
5051
{
5152
"backend": graph_db_backend,

src/memos/api/product_api.py

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)