2
0
Просмотр исходного кода

docs: Add test files and update MCP server

- Add MCP stdio test script
- Add translation test script
- Update MCP server configuration
  - Fix torch import for MCP server
  - Update model path to phase0-test location
  - Fix main() to use asyncio.run()

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
d8dfun 2 дней назад
Родитель
Сommit
114a35dbb3
3 измененных файлов с 86 добавлено и 2 удалено
  1. 9 2
      src/mcp_server/server.py
  2. 15 0
      test_mcp_stdio.py
  3. 62 0
      test_translation.py

+ 9 - 2
src/mcp_server/server.py

@@ -4,6 +4,13 @@ Novel Translator MCP Server
 Main server module that exposes translation capabilities via MCP protocol.
 """
 
+import sys
+
+# Add system torch path to fix MCP server torch import
+torch_path = '/root/.local/lib/python3.11/site-packages'
+if torch_path not in sys.path:
+    sys.path.insert(0, torch_path)
+
 import asyncio
 import json
 import os
@@ -41,7 +48,7 @@ def _get_model_path() -> str:
     """Get the model path from environment or default."""
     return os.getenv(
         "M2M100_MODEL_PATH",
-        "/mnt/code/223-236-template-6/models/m2m100"
+        "/mnt/code/223-236-template-6/phase0-test/models/m2m100_418M"
     )
 
 
@@ -758,4 +765,4 @@ async def main():
 
 
 if __name__ == "__main__":
-    main()
+    asyncio.run(main())

+ 15 - 0
test_mcp_stdio.py

@@ -0,0 +1,15 @@
+import asyncio
+import sys
+sys.path.insert(0, '/root/.local/lib/python3.11/site-packages')
+
+from src.mcp_server.server import mcp
+
+async def test():
+    # List tools
+    tools = await mcp.list_tools()
+    print(f"Tools found: {len(tools)}")
+    for tool in tools:
+        print(f"  - {tool.name}: {tool.description}")
+
+if __name__ == "__main__":
+    asyncio.run(test())

+ 62 - 0
test_translation.py

@@ -0,0 +1,62 @@
+#!/usr/bin/env python3
+"""Simple translation test with glossary support."""
+
+import sys
+from pathlib import Path
+
+# Add project root to path
+project_root = Path('/mnt/code/223-236-template-6')
+sys.path.insert(0, str(project_root))
+
+# Direct imports to avoid circular/__init__ issues
+from src.glossary.models import Glossary, GlossaryEntry, TermCategory
+from src.translator.engine import TranslationEngine
+from src.translator.pipeline import TranslationPipeline
+
+
+def main():
+    # 1. 创建术语表并添加术语
+    glossary = Glossary()
+    entry = GlossaryEntry(
+        source="林风",
+        target="Lin Feng",
+        category=TermCategory.CHARACTER,
+        context="Main protagonist"
+    )
+    glossary.add(entry)
+    print(f"Added glossary entry: {entry.source} -> {entry.target}")
+
+    # 2. 创建翻译引擎
+    print("\nLoading translation engine...")
+    engine = TranslationEngine()
+    print(f"Engine loaded. Device: {'GPU' if engine.is_gpu_enabled else 'CPU'}")
+
+    # 3. 创建翻译管道
+    pipeline = TranslationPipeline(
+        engine=engine,
+        glossary=glossary,
+        src_lang="zh",
+        tgt_lang="en"
+    )
+
+    # 4. 测试翻译
+    source_text = "林风是青云宗的一名外门弟子"
+    print(f"\nSource: {source_text}")
+
+    result = pipeline.translate(source_text, return_details=True)
+
+    print(f"\n=== Results ===")
+    print(f"Raw translation: {result.raw_translation}")
+    print(f"Final translation: {result.translated}")
+    print(f"Terms used: {result.terms_used}")
+
+    if result.validation:
+        print(f"\nValidation:")
+        print(f"  Success: {result.validation.is_valid}")
+        print(f"  Success rate: {result.validation.success_rate:.1f}%")
+        for term, term_result in result.validation.term_results.items():
+            print(f"  {term}: {'✓' if term_result.success else '✗'} ({term_result.expected})")
+
+
+if __name__ == "__main__":
+    main()