Skip to main content
Glama

MemOS-MCP

by qinshu1109
Apache 2.0
3
  • Linux
  • Apple
bootstrap.py9.53 kB
#!/usr/bin/env python3 """ MemOS Bootstrap Module 解决外部依赖问题的启动模块,在项目入口最早位置插入, 用于绕过硬依赖如ollama、neo4j等,支持轻量级测试和开发。 """ import sys import types from typing import Any def setup_mock_modules(): """设置模拟模块来绕过硬依赖""" # 模拟ollama模块 if "ollama" not in sys.modules: ollama_mock = types.ModuleType("ollama") # 创建基本的Client类模拟 class MockClient: def __init__(self, *args, **kwargs): pass def list(self): return {"models": []} def embeddings(self, *args, **kwargs): # 返回模拟的embedding结果 return {"embedding": [0.0] * 1024} def chat(self, *args, **kwargs): return {"message": {"content": "Mock response"}} ollama_mock.Client = MockClient sys.modules["ollama"] = ollama_mock # 模拟neo4j模块 if "neo4j" not in sys.modules: neo4j_mock = types.ModuleType("neo4j") class MockGraphDatabase: @staticmethod def driver(*args, **kwargs): return MockDriver() class MockDriver: def __init__(self): pass def session(self): return MockSession() def close(self): pass class MockSession: def run(self, *args, **kwargs): return MockResult() def close(self): pass class MockResult: def data(self): return [] neo4j_mock.GraphDatabase = MockGraphDatabase sys.modules["neo4j"] = neo4j_mock # 模拟qdrant_client模块 if "qdrant_client" not in sys.modules: qdrant_mock = types.ModuleType("qdrant_client") class MockQdrantClient: def __init__(self, *args, **kwargs): pass def search(self, *args, **kwargs): return [] def upsert(self, *args, **kwargs): return True qdrant_mock.QdrantClient = MockQdrantClient sys.modules["qdrant_client"] = qdrant_mock # 模拟chonkie模块 if "chonkie" not in sys.modules: chonkie_mock = types.ModuleType("chonkie") class MockSentenceChunker: def __init__(self, *args, **kwargs): pass def chunk(self, text): # 简单的句子分割 return text.split('.') chonkie_mock.SentenceChunker = MockSentenceChunker sys.modules["chonkie"] = chonkie_mock # 模拟openai模块 if "openai" not in sys.modules: openai_mock = types.ModuleType("openai") class MockOpenAI: def __init__(self, *args, **kwargs): pass openai_mock.OpenAI = MockOpenAI sys.modules["openai"] = openai_mock # 模拟transformers模块 if "transformers" not in sys.modules: transformers_mock = types.ModuleType("transformers") class MockAutoTokenizer: @staticmethod def from_pretrained(*args, **kwargs): return MockTokenizer() class MockTokenizer: def encode(self, text): return [1, 2, 3] # 模拟token def decode(self, tokens): return "mock decoded text" class MockAutoModelForCausalLM: @staticmethod def from_pretrained(*args, **kwargs): return MockModel() class MockModel: def __init__(self): pass def generate(self, *args, **kwargs): return [[1, 2, 3]] # 模拟生成结果 class MockDynamicCache: def __init__(self, *args, **kwargs): pass class MockBitsAndBytesConfig: def __init__(self, *args, **kwargs): pass transformers_mock.AutoTokenizer = MockAutoTokenizer transformers_mock.AutoModelForCausalLM = MockAutoModelForCausalLM transformers_mock.DynamicCache = MockDynamicCache transformers_mock.BitsAndBytesConfig = MockBitsAndBytesConfig sys.modules["transformers"] = transformers_mock # 模拟pydantic模块 if "pydantic" not in sys.modules: pydantic_mock = types.ModuleType("pydantic") class MockBaseModel: def __init__(self, **kwargs): for key, value in kwargs.items(): setattr(self, key, value) def model_dump(self): return {k: v for k, v in self.__dict__.items() if not k.startswith('_')} def model_validate(self, data): return self.__class__(**data) def mock_field(*args, **kwargs): return None def mock_field_validator(*args, **kwargs): def decorator(func): return func return decorator def mock_model_validator(*args, **kwargs): def decorator(func): return func return decorator class MockConfigDict(dict): pass pydantic_mock.BaseModel = MockBaseModel pydantic_mock.Field = mock_field pydantic_mock.field_validator = mock_field_validator pydantic_mock.model_validator = mock_model_validator pydantic_mock.ConfigDict = MockConfigDict sys.modules["pydantic"] = pydantic_mock # 模拟redis模块 if "redis" not in sys.modules: redis_mock = types.ModuleType("redis") class MockRedis: def __init__(self, *args, **kwargs): self._data = {} def get(self, key): return self._data.get(key) def set(self, key, value, *args, **kwargs): self._data[key] = value return True def delete(self, *keys): for key in keys: self._data.pop(key, None) return len(keys) def exists(self, key): return key in self._data def keys(self, pattern="*"): return list(self._data.keys()) redis_mock.Redis = MockRedis sys.modules["redis"] = redis_mock # 模拟numpy模块 if "numpy" not in sys.modules: numpy_mock = types.ModuleType("numpy") class MockArray: def __init__(self, data): self.data = data if isinstance(data, list) else [data] def __len__(self): return len(self.data) def __getitem__(self, key): return self.data[key] def tolist(self): return self.data def mean(self): return sum(self.data) / len(self.data) if self.data else 0 def std(self): return 1.0 # 简单模拟 def mock_array(data): return MockArray(data) def mock_zeros(shape): if isinstance(shape, int): return MockArray([0.0] * shape) return MockArray([0.0] * shape[0]) def mock_ones(shape): if isinstance(shape, int): return MockArray([1.0] * shape) return MockArray([1.0] * shape[0]) numpy_mock.array = mock_array numpy_mock.zeros = mock_zeros numpy_mock.ones = mock_ones numpy_mock.mean = lambda x: sum(x) / len(x) if x else 0 numpy_mock.std = lambda x: 1.0 sys.modules["numpy"] = numpy_mock # 添加别名 sys.modules["np"] = numpy_mock def setup_environment_variables(): """设置环境变量来控制行为""" import os # 设置轻量级模式 os.environ.setdefault("MEMOS_LITE_MODE", "true") os.environ.setdefault("MEMOS_EMBEDDER", "debug-dummy") os.environ.setdefault("MEMOS_SKIP_HEALTH_CHECK", "true") def initialize(): """初始化bootstrap环境""" setup_mock_modules() setup_environment_variables() print("🚀 MemOS Bootstrap initialized - Lite mode enabled") print(" 📦 Mock modules: ollama, neo4j, qdrant_client, chonkie, openai, transformers") print(" 🔧 Environment: MEMOS_LITE_MODE=true") # 自动初始化(当模块被导入时) if __name__ != "__main__": initialize() if __name__ == "__main__": # 如果直接运行此脚本,显示状态信息 initialize() print("\n📋 Bootstrap Status:") print(f" ollama: {'✅' if 'ollama' in sys.modules else '❌'}") print(f" neo4j: {'✅' if 'neo4j' in sys.modules else '❌'}") print(f" qdrant_client: {'✅' if 'qdrant_client' in sys.modules else '❌'}") # 测试模拟模块 try: import ollama client = ollama.Client() print(f" ollama.Client: ✅ {type(client)}") except Exception as e: print(f" ollama.Client: ❌ {e}") try: import neo4j driver = neo4j.GraphDatabase.driver("bolt://localhost:7687") print(f" neo4j.GraphDatabase: ✅ {type(driver)}") except Exception as e: print(f" neo4j.GraphDatabase: ❌ {e}")

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/qinshu1109/memos-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server