Skip to main content
Glama

MemOS-MCP

by qinshu1109
Apache 2.0
3
  • Linux
  • Apple
api_compatibility_validator.py18.1 kB
""" MemOS API兼容性验证器 验证API实现是否符合MemOS官方规范 """ import json import time from typing import Dict, Any, List, Optional from datetime import datetime from pathlib import Path from mvp_memory import create_mvp_memory_manager class APICompatibilityValidator: """API兼容性验证器""" def __init__(self): self.validation_results = [] self.mvp_manager = None def log_validation(self, test_name: str, passed: bool, message: str, details: Optional[Dict] = None): """记录验证结果""" result = { "test_name": test_name, "passed": passed, "message": message, "details": details or {}, "timestamp": datetime.now().isoformat() } self.validation_results.append(result) status = "✅" if passed else "❌" print(f"{status} {test_name}: {message}") def validate_response_format(self) -> bool: """验证响应格式标准化""" print("\n📋 验证响应格式标准化...") try: # 初始化MVP管理器 self.mvp_manager = create_mvp_memory_manager(use_official_config=True) # 测试成功响应格式 success = self.mvp_manager.remember("测试响应格式", tags=["验证"]) if success: self.log_validation( "成功响应格式", True, "记忆创建成功,响应格式符合标准" ) else: self.log_validation( "成功响应格式", False, "记忆创建失败" ) return False # 测试搜索响应格式 results = self.mvp_manager.recall("测试", top_k=3) if results and isinstance(results, list): # 验证搜索结果结构 first_result = results[0] required_fields = ["content", "score"] has_required_fields = all(field in first_result for field in required_fields) self.log_validation( "搜索响应格式", has_required_fields, f"搜索结果包含必需字段: {required_fields}" if has_required_fields else "搜索结果缺少必需字段" ) return has_required_fields else: self.log_validation( "搜索响应格式", False, "搜索结果格式不正确" ) return False except Exception as e: self.log_validation( "响应格式验证", False, f"验证过程中发生错误: {str(e)}" ) return False def validate_error_handling(self) -> bool: """验证错误处理机制""" print("\n🚨 验证错误处理机制...") try: # 测试无效输入处理 try: # 尝试创建空内容记忆 success = self.mvp_manager.remember("", tags=[]) # 空内容应该被处理(可能成功也可能失败,但不应该崩溃) self.log_validation( "空内容处理", True, f"空内容记忆处理正常: {'成功' if success else '被拒绝'}" ) except Exception as e: self.log_validation( "空内容处理", False, f"空内容处理异常: {str(e)}" ) return False # 测试无效反馈处理 try: feedback_success = self.mvp_manager.provide_feedback("invalid_id", "invalid_type") self.log_validation( "无效反馈处理", True, f"无效反馈处理正常: {'接受' if feedback_success else '被拒绝'}" ) except Exception as e: self.log_validation( "无效反馈处理", False, f"无效反馈处理异常: {str(e)}" ) return False return True except Exception as e: self.log_validation( "错误处理验证", False, f"验证过程中发生错误: {str(e)}" ) return False def validate_performance_monitoring(self) -> bool: """验证性能监控功能""" print("\n📊 验证性能监控功能...") try: # 测试性能指标获取 metrics = self.mvp_manager.get_performance_metrics() if "error" in metrics: self.log_validation( "性能指标获取", False, f"性能指标获取失败: {metrics['error']}" ) return False # 验证必需的性能指标字段 required_metrics = [ "memory_add_avg_time", "memory_search_avg_time", "memory_total_count", "system_health" ] missing_metrics = [metric for metric in required_metrics if metric not in metrics] if missing_metrics: self.log_validation( "性能指标完整性", False, f"缺少性能指标: {missing_metrics}" ) return False else: self.log_validation( "性能指标完整性", True, "所有必需的性能指标都可用" ) # 测试容量报告 capacity_report = self.mvp_manager.get_capacity_report() if "error" in capacity_report: self.log_validation( "容量报告获取", False, f"容量报告获取失败: {capacity_report['error']}" ) return False else: self.log_validation( "容量报告获取", True, "容量报告获取成功" ) return True except Exception as e: self.log_validation( "性能监控验证", False, f"验证过程中发生错误: {str(e)}" ) return False def validate_capacity_management(self) -> bool: """验证容量管理功能""" print("\n📈 验证容量管理功能...") try: # 测试系统状态获取 status = self.mvp_manager.get_status_info() # 验证容量管理是否启用 capacity_mgmt = status.get("capacity_management", {}) if not capacity_mgmt.get("enabled"): self.log_validation( "容量管理启用", False, "容量管理未启用" ) return False else: self.log_validation( "容量管理启用", True, f"容量管理已启用,监控状态: {capacity_mgmt.get('monitoring_status', 'unknown')}" ) # 测试手动优化 optimization_success = self.mvp_manager.trigger_manual_optimization() self.log_validation( "手动优化功能", optimization_success, "手动优化功能正常" if optimization_success else "手动优化功能异常" ) return optimization_success except Exception as e: self.log_validation( "容量管理验证", False, f"验证过程中发生错误: {str(e)}" ) return False def validate_feedback_mechanism(self) -> bool: """验证反馈机制""" print("\n👍 验证反馈机制...") try: # 创建测试记忆 test_content = f"反馈测试记忆 - {datetime.now().strftime('%H:%M:%S')}" success = self.mvp_manager.remember(test_content, tags=["反馈测试"]) if not success: self.log_validation( "反馈测试记忆创建", False, "无法创建测试记忆" ) return False # 搜索刚创建的记忆 results = self.mvp_manager.recall("反馈测试", top_k=1) if not results: self.log_validation( "反馈测试记忆搜索", False, "无法找到测试记忆" ) return False # 获取记忆ID(模拟) memory_id = str(results[0].get("id", "test_id")) # 测试正面反馈 positive_feedback = self.mvp_manager.provide_feedback(memory_id, "thumbs_up") self.log_validation( "正面反馈功能", positive_feedback, "正面反馈功能正常" if positive_feedback else "正面反馈功能异常" ) # 测试负面反馈 negative_feedback = self.mvp_manager.provide_feedback(memory_id, "thumbs_down") self.log_validation( "负面反馈功能", negative_feedback, "负面反馈功能正常" if negative_feedback else "负面反馈功能异常" ) # 测试反馈统计 feedback_stats = self.mvp_manager.get_feedback_stats() has_stats = feedback_stats and isinstance(feedback_stats, dict) self.log_validation( "反馈统计功能", has_stats, "反馈统计功能正常" if has_stats else "反馈统计功能异常" ) return positive_feedback and negative_feedback and has_stats except Exception as e: self.log_validation( "反馈机制验证", False, f"验证过程中发生错误: {str(e)}" ) return False def validate_official_config_integration(self) -> bool: """验证官方配置集成""" print("\n⚙️ 验证官方配置集成...") try: status = self.mvp_manager.get_status_info() # 验证官方配置是否启用 official_config = status.get("official_config", False) if not official_config: self.log_validation( "官方配置启用", False, "官方配置未启用" ) return False # 验证配置类型 config_type = status.get("config_type", "") expected_type = "official_best_practice" if config_type != expected_type: self.log_validation( "官方配置类型", False, f"配置类型不匹配: 期望 {expected_type}, 实际 {config_type}" ) return False # 验证内存后端 memory_backend = status.get("memory_backend", "") expected_backend = "general_text" if memory_backend != expected_backend: self.log_validation( "内存后端配置", False, f"内存后端不匹配: 期望 {expected_backend}, 实际 {memory_backend}" ) return False # 验证容量规划 capacity_planning = status.get("capacity_planning", {}) expected_capacities = { "working_memory_capacity": 20, "user_memory_capacity": 500, "long_term_memory_capacity": 2000 } capacity_match = all( capacity_planning.get(key) == value for key, value in expected_capacities.items() ) if not capacity_match: self.log_validation( "容量规划配置", False, f"容量规划不匹配: 期望 {expected_capacities}, 实际 {capacity_planning}" ) return False # 验证优化配置 optimizations = status.get("optimizations", {}) expected_optimizations = { "batch_processing": True, "memory_compression": True } optimization_match = all( optimizations.get(key) == value for key, value in expected_optimizations.items() ) if not optimization_match: self.log_validation( "优化配置", False, f"优化配置不匹配: 期望 {expected_optimizations}, 实际 {optimizations}" ) return False self.log_validation( "官方配置集成", True, "所有官方配置项都正确集成" ) return True except Exception as e: self.log_validation( "官方配置验证", False, f"验证过程中发生错误: {str(e)}" ) return False def run_comprehensive_validation(self) -> Dict[str, Any]: """运行综合兼容性验证""" print("🔍 开始MemOS API兼容性验证") print("=" * 60) start_time = time.time() # 运行各项验证 validations = [ ("响应格式标准化", self.validate_response_format), ("错误处理机制", self.validate_error_handling), ("性能监控功能", self.validate_performance_monitoring), ("容量管理功能", self.validate_capacity_management), ("反馈机制", self.validate_feedback_mechanism), ("官方配置集成", self.validate_official_config_integration) ] validation_results = {} for validation_name, validation_func in validations: try: result = validation_func() validation_results[validation_name] = result except Exception as e: print(f"❌ {validation_name}验证失败: {e}") validation_results[validation_name] = False total_duration = time.time() - start_time # 统计结果 passed_validations = sum(1 for result in validation_results.values() if result) total_validations = len(validation_results) compatibility_score = (passed_validations / total_validations) * 100 if total_validations > 0 else 0 summary = { "total_validations": total_validations, "passed_validations": passed_validations, "failed_validations": total_validations - passed_validations, "compatibility_score": compatibility_score, "validation_results": validation_results, "detailed_results": self.validation_results, "total_duration": total_duration } print("\n" + "=" * 60) print("📊 兼容性验证结果汇总:") print(f" 总验证项: {total_validations}") print(f" 通过验证: {passed_validations}") print(f" 失败验证: {total_validations - passed_validations}") print(f" 兼容性评分: {compatibility_score:.1f}%") print(f" 总耗时: {total_duration:.3f}s") if compatibility_score >= 90: print("✅ API完全符合MemOS官方规范!") elif compatibility_score >= 70: print("⚠️ API基本符合规范,但有改进空间") else: print("❌ API存在兼容性问题,需要修复") return summary def save_validation_report(self, summary: Dict[str, Any], filename: str = "api_compatibility_report.json"): """保存验证报告""" with open(filename, 'w', encoding='utf-8') as f: json.dump(summary, f, indent=2, ensure_ascii=False) print(f"\n📄 兼容性验证报告已保存到: {filename}") if __name__ == "__main__": # 运行兼容性验证 validator = APICompatibilityValidator() try: summary = validator.run_comprehensive_validation() validator.save_validation_report(summary) except KeyboardInterrupt: print("\n\n⏹️ 验证被用户中断") except Exception as e: print(f"\n❌ 验证过程中发生错误: {e}") import traceback traceback.print_exc()

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