Spaces:
Sleeping
Sleeping
Meet Patel
Refactor TutorX MCP server to integrate Mistral OCR for document processing, update concept graph tools for LLM-driven responses, and enhance learning path generation with Gemini. Transitioned various tools to utilize LLM for improved educational interactions and streamlined API responses.
a806ca2
[ | |
{ | |
"label": "runpy", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "runpy", | |
"description": "runpy", | |
"detail": "runpy", | |
"documentation": {} | |
}, | |
{ | |
"label": "annotations", | |
"importPath": "__future__", | |
"description": "__future__", | |
"isExtraImport": true, | |
"detail": "__future__", | |
"documentation": {} | |
}, | |
{ | |
"label": "os", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "os", | |
"description": "os", | |
"detail": "os", | |
"documentation": {} | |
}, | |
{ | |
"label": "site", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "site", | |
"description": "site", | |
"detail": "site", | |
"documentation": {} | |
}, | |
{ | |
"label": "sys", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "sys", | |
"description": "sys", | |
"detail": "sys", | |
"documentation": {} | |
}, | |
{ | |
"label": "zip", | |
"importPath": "builtins", | |
"description": "builtins", | |
"isExtraImport": true, | |
"detail": "builtins", | |
"documentation": {} | |
}, | |
{ | |
"label": "str", | |
"importPath": "builtins", | |
"description": "builtins", | |
"isExtraImport": true, | |
"detail": "builtins", | |
"documentation": {} | |
}, | |
{ | |
"label": "os.path", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "os.path", | |
"description": "os.path", | |
"detail": "os.path", | |
"documentation": {} | |
}, | |
{ | |
"label": "cElementTree", | |
"importPath": "xml.etree", | |
"description": "xml.etree", | |
"isExtraImport": true, | |
"detail": "xml.etree", | |
"documentation": {} | |
}, | |
{ | |
"label": "pyxnat", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "pyxnat", | |
"description": "pyxnat", | |
"detail": "pyxnat", | |
"documentation": {} | |
}, | |
{ | |
"label": "google.generativeai", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "google.generativeai", | |
"description": "google.generativeai", | |
"detail": "google.generativeai", | |
"documentation": {} | |
}, | |
{ | |
"label": "Dict", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Any", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Optional", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "List", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Literal", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Union", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "TypeVar", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Callable", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Dict", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Any", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Dict", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Any", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Dict", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Any", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Optional", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Dict", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Any", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Optional", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Dict", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Any", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "List", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Optional", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Dict", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Any", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "List", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Optional", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Dict", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Any", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "List", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Dict", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Any", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Optional", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Dict", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Any", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "List", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "Optional", | |
"importPath": "typing", | |
"description": "typing", | |
"isExtraImport": true, | |
"detail": "typing", | |
"documentation": {} | |
}, | |
{ | |
"label": "wraps", | |
"importPath": "functools", | |
"description": "functools", | |
"isExtraImport": true, | |
"detail": "functools", | |
"documentation": {} | |
}, | |
{ | |
"label": "logging", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "logging", | |
"description": "logging", | |
"detail": "logging", | |
"documentation": {} | |
}, | |
{ | |
"label": "Path", | |
"importPath": "pathlib", | |
"description": "pathlib", | |
"isExtraImport": true, | |
"detail": "pathlib", | |
"documentation": {} | |
}, | |
{ | |
"label": "Path", | |
"importPath": "pathlib", | |
"description": "pathlib", | |
"isExtraImport": true, | |
"detail": "pathlib", | |
"documentation": {} | |
}, | |
{ | |
"label": "Path", | |
"importPath": "pathlib", | |
"description": "pathlib", | |
"isExtraImport": true, | |
"detail": "pathlib", | |
"documentation": {} | |
}, | |
{ | |
"label": "Path", | |
"importPath": "pathlib", | |
"description": "pathlib", | |
"isExtraImport": true, | |
"detail": "pathlib", | |
"documentation": {} | |
}, | |
{ | |
"label": "Path", | |
"importPath": "pathlib", | |
"description": "pathlib", | |
"isExtraImport": true, | |
"detail": "pathlib", | |
"documentation": {} | |
}, | |
{ | |
"label": "Path", | |
"importPath": "pathlib", | |
"description": "pathlib", | |
"isExtraImport": true, | |
"detail": "pathlib", | |
"documentation": {} | |
}, | |
{ | |
"label": "Path", | |
"importPath": "pathlib", | |
"description": "pathlib", | |
"isExtraImport": true, | |
"detail": "pathlib", | |
"documentation": {} | |
}, | |
{ | |
"label": "Path", | |
"importPath": "pathlib", | |
"description": "pathlib", | |
"isExtraImport": true, | |
"detail": "pathlib", | |
"documentation": {} | |
}, | |
{ | |
"label": "Path", | |
"importPath": "pathlib", | |
"description": "pathlib", | |
"isExtraImport": true, | |
"detail": "pathlib", | |
"documentation": {} | |
}, | |
{ | |
"label": "json", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "json", | |
"description": "json", | |
"detail": "json", | |
"documentation": {} | |
}, | |
{ | |
"label": "concept_graph", | |
"importPath": "resources", | |
"description": "resources", | |
"isExtraImport": true, | |
"detail": "resources", | |
"documentation": {} | |
}, | |
{ | |
"label": "concept_graph", | |
"importPath": "resources", | |
"description": "resources", | |
"isExtraImport": true, | |
"detail": "resources", | |
"documentation": {} | |
}, | |
{ | |
"label": "curriculum_standards", | |
"importPath": "resources", | |
"description": "resources", | |
"isExtraImport": true, | |
"detail": "resources", | |
"documentation": {} | |
}, | |
{ | |
"label": "mcp", | |
"importPath": "mcp_server.mcp_instance", | |
"description": "mcp_server.mcp_instance", | |
"isExtraImport": true, | |
"detail": "mcp_server.mcp_instance", | |
"documentation": {} | |
}, | |
{ | |
"label": "mcp", | |
"importPath": "mcp_server.mcp_instance", | |
"description": "mcp_server.mcp_instance", | |
"isExtraImport": true, | |
"detail": "mcp_server.mcp_instance", | |
"documentation": {} | |
}, | |
{ | |
"label": "mcp", | |
"importPath": "mcp_server.mcp_instance", | |
"description": "mcp_server.mcp_instance", | |
"isExtraImport": true, | |
"detail": "mcp_server.mcp_instance", | |
"documentation": {} | |
}, | |
{ | |
"label": "mcp", | |
"importPath": "mcp_server.mcp_instance", | |
"description": "mcp_server.mcp_instance", | |
"isExtraImport": true, | |
"detail": "mcp_server.mcp_instance", | |
"documentation": {} | |
}, | |
{ | |
"label": "mcp", | |
"importPath": "mcp_server.mcp_instance", | |
"description": "mcp_server.mcp_instance", | |
"isExtraImport": true, | |
"detail": "mcp_server.mcp_instance", | |
"documentation": {} | |
}, | |
{ | |
"label": "mcp", | |
"importPath": "mcp_server.mcp_instance", | |
"description": "mcp_server.mcp_instance", | |
"isExtraImport": true, | |
"detail": "mcp_server.mcp_instance", | |
"documentation": {} | |
}, | |
{ | |
"label": "mcp", | |
"importPath": "mcp_server.mcp_instance", | |
"description": "mcp_server.mcp_instance", | |
"isExtraImport": true, | |
"detail": "mcp_server.mcp_instance", | |
"documentation": {} | |
}, | |
{ | |
"label": "mcp", | |
"importPath": "mcp_server.mcp_instance", | |
"description": "mcp_server.mcp_instance", | |
"isExtraImport": true, | |
"detail": "mcp_server.mcp_instance", | |
"documentation": {} | |
}, | |
{ | |
"label": "GeminiFlash", | |
"importPath": "mcp_server.model.gemini_flash", | |
"description": "mcp_server.model.gemini_flash", | |
"isExtraImport": true, | |
"detail": "mcp_server.model.gemini_flash", | |
"documentation": {} | |
}, | |
{ | |
"label": "GeminiFlash", | |
"importPath": "mcp_server.model.gemini_flash", | |
"description": "mcp_server.model.gemini_flash", | |
"isExtraImport": true, | |
"detail": "mcp_server.model.gemini_flash", | |
"documentation": {} | |
}, | |
{ | |
"label": "GeminiFlash", | |
"importPath": "mcp_server.model.gemini_flash", | |
"description": "mcp_server.model.gemini_flash", | |
"isExtraImport": true, | |
"detail": "mcp_server.model.gemini_flash", | |
"documentation": {} | |
}, | |
{ | |
"label": "GeminiFlash", | |
"importPath": "mcp_server.model.gemini_flash", | |
"description": "mcp_server.model.gemini_flash", | |
"isExtraImport": true, | |
"detail": "mcp_server.model.gemini_flash", | |
"documentation": {} | |
}, | |
{ | |
"label": "GeminiFlash", | |
"importPath": "mcp_server.model.gemini_flash", | |
"description": "mcp_server.model.gemini_flash", | |
"isExtraImport": true, | |
"detail": "mcp_server.model.gemini_flash", | |
"documentation": {} | |
}, | |
{ | |
"label": "GeminiFlash", | |
"importPath": "mcp_server.model.gemini_flash", | |
"description": "mcp_server.model.gemini_flash", | |
"isExtraImport": true, | |
"detail": "mcp_server.model.gemini_flash", | |
"documentation": {} | |
}, | |
{ | |
"label": "random", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "random", | |
"description": "random", | |
"detail": "random", | |
"documentation": {} | |
}, | |
{ | |
"label": "datetime", | |
"importPath": "datetime", | |
"description": "datetime", | |
"isExtraImport": true, | |
"detail": "datetime", | |
"documentation": {} | |
}, | |
{ | |
"label": "timezone", | |
"importPath": "datetime", | |
"description": "datetime", | |
"isExtraImport": true, | |
"detail": "datetime", | |
"documentation": {} | |
}, | |
{ | |
"label": "datetime", | |
"importPath": "datetime", | |
"description": "datetime", | |
"isExtraImport": true, | |
"detail": "datetime", | |
"documentation": {} | |
}, | |
{ | |
"label": "timedelta", | |
"importPath": "datetime", | |
"description": "datetime", | |
"isExtraImport": true, | |
"detail": "datetime", | |
"documentation": {} | |
}, | |
{ | |
"label": "datetime", | |
"importPath": "datetime", | |
"description": "datetime", | |
"isExtraImport": true, | |
"detail": "datetime", | |
"documentation": {} | |
}, | |
{ | |
"label": "datetime", | |
"importPath": "datetime", | |
"description": "datetime", | |
"isExtraImport": true, | |
"detail": "datetime", | |
"documentation": {} | |
}, | |
{ | |
"label": "get_concept", | |
"importPath": "resources.concept_graph", | |
"description": "resources.concept_graph", | |
"isExtraImport": true, | |
"detail": "resources.concept_graph", | |
"documentation": {} | |
}, | |
{ | |
"label": "get_all_concepts", | |
"importPath": "resources.concept_graph", | |
"description": "resources.concept_graph", | |
"isExtraImport": true, | |
"detail": "resources.concept_graph", | |
"documentation": {} | |
}, | |
{ | |
"label": "CONCEPT_GRAPH", | |
"importPath": "resources.concept_graph", | |
"description": "resources.concept_graph", | |
"isExtraImport": true, | |
"detail": "resources.concept_graph", | |
"documentation": {} | |
}, | |
{ | |
"label": "re", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "re", | |
"description": "re", | |
"detail": "re", | |
"documentation": {} | |
}, | |
{ | |
"label": "SequenceMatcher", | |
"importPath": "difflib", | |
"description": "difflib", | |
"isExtraImport": true, | |
"detail": "difflib", | |
"documentation": {} | |
}, | |
{ | |
"label": "base64", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "base64", | |
"description": "base64", | |
"detail": "base64", | |
"documentation": {} | |
}, | |
{ | |
"label": "io", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "io", | |
"description": "io", | |
"detail": "io", | |
"documentation": {} | |
}, | |
{ | |
"label": "asyncio", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "asyncio", | |
"description": "asyncio", | |
"detail": "asyncio", | |
"documentation": {} | |
}, | |
{ | |
"label": "aiohttp", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "aiohttp", | |
"description": "aiohttp", | |
"detail": "aiohttp", | |
"documentation": {} | |
}, | |
{ | |
"label": "GeminiFlash", | |
"importPath": "model", | |
"description": "model", | |
"isExtraImport": true, | |
"detail": "model", | |
"documentation": {} | |
}, | |
{ | |
"label": "uuid", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "uuid", | |
"description": "uuid", | |
"detail": "uuid", | |
"documentation": {} | |
}, | |
{ | |
"label": "BlobServiceClient", | |
"importPath": "azure.storage.blob", | |
"description": "azure.storage.blob", | |
"isExtraImport": true, | |
"detail": "azure.storage.blob", | |
"documentation": {} | |
}, | |
{ | |
"label": "ContentSettings", | |
"importPath": "azure.storage.blob", | |
"description": "azure.storage.blob", | |
"isExtraImport": true, | |
"detail": "azure.storage.blob", | |
"documentation": {} | |
}, | |
{ | |
"label": "BlobServiceClient", | |
"importPath": "azure.storage.blob", | |
"description": "azure.storage.blob", | |
"isExtraImport": true, | |
"detail": "azure.storage.blob", | |
"documentation": {} | |
}, | |
{ | |
"label": "ContentSettings", | |
"importPath": "azure.storage.blob", | |
"description": "azure.storage.blob", | |
"isExtraImport": true, | |
"detail": "azure.storage.blob", | |
"documentation": {} | |
}, | |
{ | |
"label": "load_dotenv", | |
"importPath": "dotenv", | |
"description": "dotenv", | |
"isExtraImport": true, | |
"detail": "dotenv", | |
"documentation": {} | |
}, | |
{ | |
"label": "load_dotenv", | |
"importPath": "dotenv", | |
"description": "dotenv", | |
"isExtraImport": true, | |
"detail": "dotenv", | |
"documentation": {} | |
}, | |
{ | |
"label": "FastMCP", | |
"importPath": "mcp.server.fastmcp", | |
"description": "mcp.server.fastmcp", | |
"isExtraImport": true, | |
"detail": "mcp.server.fastmcp", | |
"documentation": {} | |
}, | |
{ | |
"label": "FastMCP", | |
"importPath": "mcp.server.fastmcp", | |
"description": "mcp.server.fastmcp", | |
"isExtraImport": true, | |
"detail": "mcp.server.fastmcp", | |
"documentation": {} | |
}, | |
{ | |
"label": "uvicorn", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "uvicorn", | |
"description": "uvicorn", | |
"detail": "uvicorn", | |
"documentation": {} | |
}, | |
{ | |
"label": "FastAPI", | |
"importPath": "fastapi", | |
"description": "fastapi", | |
"isExtraImport": true, | |
"detail": "fastapi", | |
"documentation": {} | |
}, | |
{ | |
"label": "HTTPException", | |
"importPath": "fastapi", | |
"description": "fastapi", | |
"isExtraImport": true, | |
"detail": "fastapi", | |
"documentation": {} | |
}, | |
{ | |
"label": "UploadFile", | |
"importPath": "fastapi", | |
"description": "fastapi", | |
"isExtraImport": true, | |
"detail": "fastapi", | |
"documentation": {} | |
}, | |
{ | |
"label": "File", | |
"importPath": "fastapi", | |
"description": "fastapi", | |
"isExtraImport": true, | |
"detail": "fastapi", | |
"documentation": {} | |
}, | |
{ | |
"label": "Form", | |
"importPath": "fastapi", | |
"description": "fastapi", | |
"isExtraImport": true, | |
"detail": "fastapi", | |
"documentation": {} | |
}, | |
{ | |
"label": "CORSMiddleware", | |
"importPath": "fastapi.middleware.cors", | |
"description": "fastapi.middleware.cors", | |
"isExtraImport": true, | |
"detail": "fastapi.middleware.cors", | |
"documentation": {} | |
}, | |
{ | |
"label": "concept_tools", | |
"importPath": "tools", | |
"description": "tools", | |
"isExtraImport": true, | |
"detail": "tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "lesson_tools", | |
"importPath": "tools", | |
"description": "tools", | |
"isExtraImport": true, | |
"detail": "tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "quiz_tools", | |
"importPath": "tools", | |
"description": "tools", | |
"isExtraImport": true, | |
"detail": "tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "interaction_tools", | |
"importPath": "tools", | |
"description": "tools", | |
"isExtraImport": true, | |
"detail": "tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "ocr_tools", | |
"importPath": "tools", | |
"description": "tools", | |
"isExtraImport": true, | |
"detail": "tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "learning_path_tools", | |
"importPath": "tools", | |
"description": "tools", | |
"isExtraImport": true, | |
"detail": "tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "concept_tools", | |
"importPath": "mcp_server.tools", | |
"description": "mcp_server.tools", | |
"isExtraImport": true, | |
"detail": "mcp_server.tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "lesson_tools", | |
"importPath": "mcp_server.tools", | |
"description": "mcp_server.tools", | |
"isExtraImport": true, | |
"detail": "mcp_server.tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "quiz_tools", | |
"importPath": "mcp_server.tools", | |
"description": "mcp_server.tools", | |
"isExtraImport": true, | |
"detail": "mcp_server.tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "interaction_tools", | |
"importPath": "mcp_server.tools", | |
"description": "mcp_server.tools", | |
"isExtraImport": true, | |
"detail": "mcp_server.tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "ocr_tools", | |
"importPath": "mcp_server.tools", | |
"description": "mcp_server.tools", | |
"isExtraImport": true, | |
"detail": "mcp_server.tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "learning_path_tools", | |
"importPath": "mcp_server.tools", | |
"description": "mcp_server.tools", | |
"isExtraImport": true, | |
"detail": "mcp_server.tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "concept_graph_tools", | |
"importPath": "mcp_server.tools", | |
"description": "mcp_server.tools", | |
"isExtraImport": true, | |
"detail": "mcp_server.tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "assess_skill_tool", | |
"importPath": "tools.concept_tools", | |
"description": "tools.concept_tools", | |
"isExtraImport": true, | |
"detail": "tools.concept_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "generate_lesson_tool", | |
"importPath": "tools.lesson_tools", | |
"description": "tools.lesson_tools", | |
"isExtraImport": true, | |
"detail": "tools.lesson_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "generate_quiz_tool", | |
"importPath": "tools.quiz_tools", | |
"description": "tools.quiz_tools", | |
"isExtraImport": true, | |
"detail": "tools.quiz_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "setup", | |
"importPath": "setuptools", | |
"description": "setuptools", | |
"isExtraImport": true, | |
"detail": "setuptools", | |
"documentation": {} | |
}, | |
{ | |
"label": "find_packages", | |
"importPath": "setuptools", | |
"description": "setuptools", | |
"isExtraImport": true, | |
"detail": "setuptools", | |
"documentation": {} | |
}, | |
{ | |
"label": "unittest", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "unittest", | |
"description": "unittest", | |
"detail": "unittest", | |
"documentation": {} | |
}, | |
{ | |
"label": "patch", | |
"importPath": "unittest.mock", | |
"description": "unittest.mock", | |
"isExtraImport": true, | |
"detail": "unittest.mock", | |
"documentation": {} | |
}, | |
{ | |
"label": "MagicMock", | |
"importPath": "unittest.mock", | |
"description": "unittest.mock", | |
"isExtraImport": true, | |
"detail": "unittest.mock", | |
"documentation": {} | |
}, | |
{ | |
"label": "patch", | |
"importPath": "unittest.mock", | |
"description": "unittest.mock", | |
"isExtraImport": true, | |
"detail": "unittest.mock", | |
"documentation": {} | |
}, | |
{ | |
"label": "MagicMock", | |
"importPath": "unittest.mock", | |
"description": "unittest.mock", | |
"isExtraImport": true, | |
"detail": "unittest.mock", | |
"documentation": {} | |
}, | |
{ | |
"label": "patch", | |
"importPath": "unittest.mock", | |
"description": "unittest.mock", | |
"isExtraImport": true, | |
"detail": "unittest.mock", | |
"documentation": {} | |
}, | |
{ | |
"label": "MagicMock", | |
"importPath": "unittest.mock", | |
"description": "unittest.mock", | |
"isExtraImport": true, | |
"detail": "unittest.mock", | |
"documentation": {} | |
}, | |
{ | |
"label": "requests", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "requests", | |
"description": "requests", | |
"detail": "requests", | |
"documentation": {} | |
}, | |
{ | |
"label": "TutorXClient", | |
"importPath": "client", | |
"description": "client", | |
"isExtraImport": true, | |
"detail": "client", | |
"documentation": {} | |
}, | |
{ | |
"label": "assess_skill", | |
"importPath": "main", | |
"description": "main", | |
"isExtraImport": true, | |
"detail": "main", | |
"documentation": {} | |
}, | |
{ | |
"label": "generate_quiz", | |
"importPath": "main", | |
"description": "main", | |
"isExtraImport": true, | |
"detail": "main", | |
"documentation": {} | |
}, | |
{ | |
"label": "get_concept_graph", | |
"importPath": "main", | |
"description": "main", | |
"isExtraImport": true, | |
"detail": "main", | |
"documentation": {} | |
}, | |
{ | |
"label": "pytest", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "pytest", | |
"description": "pytest", | |
"detail": "pytest", | |
"documentation": {} | |
}, | |
{ | |
"label": "ClientSession", | |
"importPath": "mcp", | |
"description": "mcp", | |
"isExtraImport": true, | |
"detail": "mcp", | |
"documentation": {} | |
}, | |
{ | |
"label": "ClientSession", | |
"importPath": "mcp", | |
"description": "mcp", | |
"isExtraImport": true, | |
"detail": "mcp", | |
"documentation": {} | |
}, | |
{ | |
"label": "sse_client", | |
"importPath": "mcp.client.sse", | |
"description": "mcp.client.sse", | |
"isExtraImport": true, | |
"detail": "mcp.client.sse", | |
"documentation": {} | |
}, | |
{ | |
"label": "sse_client", | |
"importPath": "mcp.client.sse", | |
"description": "mcp.client.sse", | |
"isExtraImport": true, | |
"detail": "mcp.client.sse", | |
"documentation": {} | |
}, | |
{ | |
"label": "process_text_query", | |
"importPath": "utils.multimodal", | |
"description": "utils.multimodal", | |
"isExtraImport": true, | |
"detail": "utils.multimodal", | |
"documentation": {} | |
}, | |
{ | |
"label": "process_voice_input", | |
"importPath": "utils.multimodal", | |
"description": "utils.multimodal", | |
"isExtraImport": true, | |
"detail": "utils.multimodal", | |
"documentation": {} | |
}, | |
{ | |
"label": "process_handwriting", | |
"importPath": "utils.multimodal", | |
"description": "utils.multimodal", | |
"isExtraImport": true, | |
"detail": "utils.multimodal", | |
"documentation": {} | |
}, | |
{ | |
"label": "generate_question", | |
"importPath": "utils.assessment", | |
"description": "utils.assessment", | |
"isExtraImport": true, | |
"detail": "utils.assessment", | |
"documentation": {} | |
}, | |
{ | |
"label": "evaluate_student_answer", | |
"importPath": "utils.assessment", | |
"description": "utils.assessment", | |
"isExtraImport": true, | |
"detail": "utils.assessment", | |
"documentation": {} | |
}, | |
{ | |
"label": "gradio", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "gradio", | |
"description": "gradio", | |
"detail": "gradio", | |
"documentation": {} | |
}, | |
{ | |
"label": "numpy", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "numpy", | |
"description": "numpy", | |
"detail": "numpy", | |
"documentation": {} | |
}, | |
{ | |
"label": "sseclient", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "sseclient", | |
"description": "sseclient", | |
"detail": "sseclient", | |
"documentation": {} | |
}, | |
{ | |
"label": "upload_to_azure", | |
"importPath": "mcp_server.utils.azure_upload", | |
"description": "mcp_server.utils.azure_upload", | |
"isExtraImport": true, | |
"detail": "mcp_server.utils.azure_upload", | |
"documentation": {} | |
}, | |
{ | |
"label": "api_app", | |
"importPath": "mcp_server", | |
"description": "mcp_server", | |
"isExtraImport": true, | |
"detail": "mcp_server", | |
"documentation": {} | |
}, | |
{ | |
"label": "mcp", | |
"importPath": "mcp_server", | |
"description": "mcp_server", | |
"isExtraImport": true, | |
"detail": "mcp_server", | |
"documentation": {} | |
}, | |
{ | |
"label": "argparse", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "argparse", | |
"description": "argparse", | |
"detail": "argparse", | |
"documentation": {} | |
}, | |
{ | |
"label": "socket", | |
"kind": 6, | |
"isExtraImport": true, | |
"importPath": "socket", | |
"description": "socket", | |
"detail": "socket", | |
"documentation": {} | |
}, | |
{ | |
"label": "bin_dir", | |
"kind": 5, | |
"importPath": ".venv.Scripts.activate_this", | |
"description": ".venv.Scripts.activate_this", | |
"peekOfCode": "bin_dir = os.path.dirname(abs_file)\nbase = bin_dir[: -len(\"Scripts\") - 1] # strip away the bin part from the __file__, plus the path separator\n# prepend bin to PATH (this file is inside the bin directory)\nos.environ[\"PATH\"] = os.pathsep.join([bin_dir, *os.environ.get(\"PATH\", \"\").split(os.pathsep)])\nos.environ[\"VIRTUAL_ENV\"] = base # virtual env is right above bin directory\nos.environ[\"VIRTUAL_ENV_PROMPT\"] = \"tutorx-mcp\" or os.path.basename(base) # noqa: SIM222\n# add the virtual environments libraries to the host python import mechanism\nprev_length = len(sys.path)\nfor lib in \"..\\\\Lib\\\\site-packages\".split(os.pathsep):\n path = os.path.realpath(os.path.join(bin_dir, lib))", | |
"detail": ".venv.Scripts.activate_this", | |
"documentation": {} | |
}, | |
{ | |
"label": "base", | |
"kind": 5, | |
"importPath": ".venv.Scripts.activate_this", | |
"description": ".venv.Scripts.activate_this", | |
"peekOfCode": "base = bin_dir[: -len(\"Scripts\") - 1] # strip away the bin part from the __file__, plus the path separator\n# prepend bin to PATH (this file is inside the bin directory)\nos.environ[\"PATH\"] = os.pathsep.join([bin_dir, *os.environ.get(\"PATH\", \"\").split(os.pathsep)])\nos.environ[\"VIRTUAL_ENV\"] = base # virtual env is right above bin directory\nos.environ[\"VIRTUAL_ENV_PROMPT\"] = \"tutorx-mcp\" or os.path.basename(base) # noqa: SIM222\n# add the virtual environments libraries to the host python import mechanism\nprev_length = len(sys.path)\nfor lib in \"..\\\\Lib\\\\site-packages\".split(os.pathsep):\n path = os.path.realpath(os.path.join(bin_dir, lib))\n site.addsitedir(path)", | |
"detail": ".venv.Scripts.activate_this", | |
"documentation": {} | |
}, | |
{ | |
"label": "os.environ[\"PATH\"]", | |
"kind": 5, | |
"importPath": ".venv.Scripts.activate_this", | |
"description": ".venv.Scripts.activate_this", | |
"peekOfCode": "os.environ[\"PATH\"] = os.pathsep.join([bin_dir, *os.environ.get(\"PATH\", \"\").split(os.pathsep)])\nos.environ[\"VIRTUAL_ENV\"] = base # virtual env is right above bin directory\nos.environ[\"VIRTUAL_ENV_PROMPT\"] = \"tutorx-mcp\" or os.path.basename(base) # noqa: SIM222\n# add the virtual environments libraries to the host python import mechanism\nprev_length = len(sys.path)\nfor lib in \"..\\\\Lib\\\\site-packages\".split(os.pathsep):\n path = os.path.realpath(os.path.join(bin_dir, lib))\n site.addsitedir(path)\nsys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]\nsys.real_prefix = sys.prefix", | |
"detail": ".venv.Scripts.activate_this", | |
"documentation": {} | |
}, | |
{ | |
"label": "os.environ[\"VIRTUAL_ENV\"]", | |
"kind": 5, | |
"importPath": ".venv.Scripts.activate_this", | |
"description": ".venv.Scripts.activate_this", | |
"peekOfCode": "os.environ[\"VIRTUAL_ENV\"] = base # virtual env is right above bin directory\nos.environ[\"VIRTUAL_ENV_PROMPT\"] = \"tutorx-mcp\" or os.path.basename(base) # noqa: SIM222\n# add the virtual environments libraries to the host python import mechanism\nprev_length = len(sys.path)\nfor lib in \"..\\\\Lib\\\\site-packages\".split(os.pathsep):\n path = os.path.realpath(os.path.join(bin_dir, lib))\n site.addsitedir(path)\nsys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]\nsys.real_prefix = sys.prefix\nsys.prefix = base", | |
"detail": ".venv.Scripts.activate_this", | |
"documentation": {} | |
}, | |
{ | |
"label": "os.environ[\"VIRTUAL_ENV_PROMPT\"]", | |
"kind": 5, | |
"importPath": ".venv.Scripts.activate_this", | |
"description": ".venv.Scripts.activate_this", | |
"peekOfCode": "os.environ[\"VIRTUAL_ENV_PROMPT\"] = \"tutorx-mcp\" or os.path.basename(base) # noqa: SIM222\n# add the virtual environments libraries to the host python import mechanism\nprev_length = len(sys.path)\nfor lib in \"..\\\\Lib\\\\site-packages\".split(os.pathsep):\n path = os.path.realpath(os.path.join(bin_dir, lib))\n site.addsitedir(path)\nsys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]\nsys.real_prefix = sys.prefix\nsys.prefix = base", | |
"detail": ".venv.Scripts.activate_this", | |
"documentation": {} | |
}, | |
{ | |
"label": "prev_length", | |
"kind": 5, | |
"importPath": ".venv.Scripts.activate_this", | |
"description": ".venv.Scripts.activate_this", | |
"peekOfCode": "prev_length = len(sys.path)\nfor lib in \"..\\\\Lib\\\\site-packages\".split(os.pathsep):\n path = os.path.realpath(os.path.join(bin_dir, lib))\n site.addsitedir(path)\nsys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]\nsys.real_prefix = sys.prefix\nsys.prefix = base", | |
"detail": ".venv.Scripts.activate_this", | |
"documentation": {} | |
}, | |
{ | |
"label": "sys.path[:]", | |
"kind": 5, | |
"importPath": ".venv.Scripts.activate_this", | |
"description": ".venv.Scripts.activate_this", | |
"peekOfCode": "sys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]\nsys.real_prefix = sys.prefix\nsys.prefix = base", | |
"detail": ".venv.Scripts.activate_this", | |
"documentation": {} | |
}, | |
{ | |
"label": "sys.real_prefix", | |
"kind": 5, | |
"importPath": ".venv.Scripts.activate_this", | |
"description": ".venv.Scripts.activate_this", | |
"peekOfCode": "sys.real_prefix = sys.prefix\nsys.prefix = base", | |
"detail": ".venv.Scripts.activate_this", | |
"documentation": {} | |
}, | |
{ | |
"label": "sys.prefix", | |
"kind": 5, | |
"importPath": ".venv.Scripts.activate_this", | |
"description": ".venv.Scripts.activate_this", | |
"peekOfCode": "sys.prefix = base", | |
"detail": ".venv.Scripts.activate_this", | |
"documentation": {} | |
}, | |
{ | |
"label": "cmp", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def cmp(a, b):\n return (a > b) - (a < b)\nfrom builtins import zip\nfrom builtins import str\nimport os\nimport os.path as op\nimport sys\nfrom xml.etree import cElementTree as ET\nimport pyxnat\nPROJ_ATTRS = [", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "copy_attrs", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def copy_attrs(src_obj, dest_obj, attr_list):\n \"\"\" Copies list of attributes form source to destination\"\"\"\n src_attrs = src_obj.attrs.mget(attr_list)\n src_list = dict(list(zip(attr_list, src_attrs)))\n # NOTE: For some reason need to set te again b/c a bug somewhere sets te\n # to sequence name\n te_key = 'xnat:mrScanData/parameters/te'\n if te_key in src_list:\n src_list[te_key] = src_obj.attrs.get(te_key)\n dest_obj.attrs.mset(src_list)", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "copy_attributes", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def copy_attributes(src_obj, dest_obj):\n '''Copy attributes from src to dest'''\n src_type = src_obj.datatype()\n types = {'xnat:projectData': PROJ_ATTRS,\n 'xnat:subjectData': SUBJ_ATTRS,\n 'xnat:mrSessionData': MR_EXP_ATTRS,\n 'xnat:petSessionData': PET_EXP_ATTRS,\n 'xnat:ctSessionData': CT_EXP_ATTRS,\n 'xnat:mrScanData': MR_SCAN_ATTRS,\n 'xnat:petScanData': PET_SCAN_ATTRS,", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "subj_compare", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def subj_compare(item1, item2):\n '''Compare sort of items'''\n return cmp(item1.label(), item2.label())\ndef copy_file(src_f, dest_r, cache_d):\n '''\n Copy file from XNAT file source to XNAT resource destination,\n using local cache in between'''\n f_label = src_f.label()\n loc_f = cache_d + '/' + f_label\n # Make subdirectories", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "copy_file", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def copy_file(src_f, dest_r, cache_d):\n '''\n Copy file from XNAT file source to XNAT resource destination,\n using local cache in between'''\n f_label = src_f.label()\n loc_f = cache_d + '/' + f_label\n # Make subdirectories\n loc_d = op.dirname(loc_f)\n if not op.exists(loc_d):\n os.makedirs(loc_d)", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "copy_res_zip", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def copy_res_zip(src_r, dest_r, cache_d):\n '''\n Copy a resource from XNAT source to XNAT destination using local cache\n in between\n '''\n try:\n # Download zip of resource\n print('INFO:Downloading resource as zip...')\n cache_z = src_r.get(cache_d, extract=False)\n # Upload zip of resource", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "is_empty_resource", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def is_empty_resource(_res):\n '''Check if resource contains any files'''\n f_count = 0\n for f_in in _res.files().fetchall('obj'):\n f_count += 1\n break\n return f_count == 0\n# copy_project and copy_subject are untested\n# def copy_project(src_proj, dst_proj, proj_cache_dir):\n# '''Copy XNAT project from source to destination'''", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "copy_session", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def copy_session(src_sess, dst_sess, sess_cache_dir):\n '''Copy XNAT session from source to destination'''\n print('INFO:uploading session attributes as xml')\n # Write xml to file\n if not op.exists(sess_cache_dir):\n os.makedirs(sess_cache_dir)\n sess_xml = src_sess.get()\n xml_path = op.join(sess_cache_dir, 'sess.xml')\n write_xml(sess_xml, xml_path)\n sess_type = src_sess.datatype()", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "copy_scan", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def copy_scan(src_scan, dst_scan, scan_cache_dir):\n '''Copy scan from source XNAT to destination XNAT'''\n scan_type = src_scan.datatype()\n if scan_type == '':\n scan_type = 'xnat:otherDicomScanData'\n dst_scan.create(scans=scan_type)\n copy_attributes(src_scan, dst_scan)\n # Process each resource of scan\n for src_res in src_scan.resources().fetchall('obj'):\n res_label = src_res.label()", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "copy_res", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def copy_res(src_res, dst_res, res_cache_dir, use_zip=False):\n '''Copy resource from source XNAT to destination XNAT'''\n # Create cache dir\n if not op.exists(res_cache_dir):\n os.makedirs(res_cache_dir)\n # Prepare resource and check for empty\n is_empty = False\n print(dst_res._uri)\n if not dst_res.exists():\n dst_res.create()", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "write_xml", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def write_xml(xml_str, file_path, clean_tags=True):\n \"\"\"Writing XML.\"\"\"\n root = ET.fromstring(xml_str)\n # We only want the tags and attributes relevant to root, no children\n if clean_tags:\n # Remove ID\n if 'ID' in root.attrib:\n del root.attrib['ID']\n # Remove sharing tags\n tag = '{http://nrg.wustl.edu/xnat}sharing'", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "create_parser", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def create_parser():\n import argparse\n \"\"\"Parse commandline arguments.\"\"\"\n arg_parser = argparse.ArgumentParser(\n description='Downloads a given experiment/session from an XNAT instance '\n 'and uploads it to an independent one. Only DICOM resources '\n 'will be imported.',\n formatter_class=argparse.RawTextHelpFormatter)\n arg_parser.add_argument(\n '--h1', '--source_config', dest='source_config',", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "main", | |
"kind": 2, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "def main(args):\n x1 = pyxnat.Interface(config=args.source_config)\n x2 = pyxnat.Interface(config=args.dest_config)\n columns = ['subject_label', 'label']\n e1 = x1.array.experiments(experiment_id=args.experiment_id,\n columns=columns).data[0]\n p = x2.select.project(args.project_id)\n s = p.subject(e1['subject_label'])\n if not s.exists():\n s.create()", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "PROJ_ATTRS", | |
"kind": 5, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "PROJ_ATTRS = [\n 'xnat:projectData/name',\n 'xnat:projectData/description',\n 'xnat:projectData/keywords',\n]\nSUBJ_ATTRS = [\n 'xnat:subjectData/group',\n 'xnat:subjectData/src',\n 'xnat:subjectData/investigator/firstname',\n 'xnat:subjectData/investigator/lastname',", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "SUBJ_ATTRS", | |
"kind": 5, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "SUBJ_ATTRS = [\n 'xnat:subjectData/group',\n 'xnat:subjectData/src',\n 'xnat:subjectData/investigator/firstname',\n 'xnat:subjectData/investigator/lastname',\n 'xnat:subjectData/demographics[@xsi:type=xnat:demographicData]/dob',\n 'xnat:subjectData/demographics[@xsi:type=xnat:demographicData]/yob',\n 'xnat:subjectData/demographics[@xsi:type=xnat:demographicData]/age',\n 'xnat:subjectData/demographics[@xsi:type=xnat:demographicData]/gender',\n 'xnat:subjectData/demographics[@xsi:type=xnat:demographicData]/handedness',", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "MR_EXP_ATTRS", | |
"kind": 5, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "MR_EXP_ATTRS = [\n 'xnat:experimentData/date',\n 'xnat:experimentData/visit_id',\n 'xnat:experimentData/time',\n 'xnat:experimentData/note',\n 'xnat:experimentData/investigator/firstname',\n 'xnat:experimentData/investigator/lastname',\n 'xnat:imageSessionData/scanner/manufacturer',\n 'xnat:imageSessionData/scanner/model',\n 'xnat:imageSessionData/operator',", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "OTHER_DICOM_SCAN_ATTRS", | |
"kind": 5, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "OTHER_DICOM_SCAN_ATTRS = [\n 'xnat:imageScanData/type',\n 'xnat:imageScanData/UID',\n 'xnat:imageScanData/note',\n 'xnat:imageScanData/quality',\n 'xnat:imageScanData/condition',\n 'xnat:imageScanData/series_description',\n 'xnat:imageScanData/documentation',\n 'xnat:imageScanData/frames',\n 'xnat:imageScanData/startTime',", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "MR_SCAN_ATTRS", | |
"kind": 5, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "MR_SCAN_ATTRS = [\n 'xnat:imageScanData/type',\n 'xnat:imageScanData/UID',\n 'xnat:imageScanData/note',\n 'xnat:imageScanData/quality',\n 'xnat:imageScanData/condition',\n 'xnat:imageScanData/series_description',\n 'xnat:imageScanData/documentation',\n 'xnat:imageScanData/frames',\n 'xnat:imageScanData/startTime',", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "SC_SCAN_ATTRS", | |
"kind": 5, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "SC_SCAN_ATTRS = [\n 'xnat:imageScanData/type',\n 'xnat:imageScanData/UID',\n 'xnat:imageScanData/note',\n 'xnat:imageScanData/quality',\n 'xnat:imageScanData/condition',\n 'xnat:imageScanData/series_description',\n 'xnat:imageScanData/documentation',\n 'xnat:imageScanData/frames',\n 'xnat:imageScanData/scanner/manufacturer',", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "PET_EXP_ATTRS", | |
"kind": 5, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "PET_EXP_ATTRS = [\n 'xnat:experimentData/date',\n 'xnat:experimentData/visit_id',\n 'xnat:experimentData/time',\n 'xnat:experimentData/note',\n 'xnat:experimentData/investigator/firstname',\n 'xnat:experimentData/investigator/lastname',\n 'xnat:imageSessionData/scanner/manufacturer',\n 'xnat:imageSessionData/scanner/model',\n 'xnat:imageSessionData/operator',", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "CT_EXP_ATTRS", | |
"kind": 5, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "CT_EXP_ATTRS = [\n 'xnat:experimentData/date',\n 'xnat:experimentData/visit_id',\n 'xnat:experimentData/time',\n 'xnat:experimentData/note',\n 'xnat:experimentData/investigator/firstname',\n 'xnat:experimentData/investigator/lastname',\n 'xnat:imageSessionData/scanner/manufacturer',\n 'xnat:imageSessionData/scanner/model',\n 'xnat:imageSessionData/operator',", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "PET_SCAN_ATTRS", | |
"kind": 5, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "PET_SCAN_ATTRS = [\n 'xnat:imageScanData/type',\n 'xnat:imageScanData/UID',\n 'xnat:imageScanData/note',\n 'xnat:imageScanData/quality',\n 'xnat:imageScanData/condition',\n 'xnat:imageScanData/series_description',\n 'xnat:imageScanData/documentation',\n 'xnat:imageScanData/frames',\n 'xnat:imageScanData/scanner/manufacturer',", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "CT_SCAN_ATTRS", | |
"kind": 5, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "CT_SCAN_ATTRS = [\n 'xnat:imageScanData/type',\n 'xnat:imageScanData/UID',\n 'xnat:imageScanData/note',\n 'xnat:imageScanData/quality',\n 'xnat:imageScanData/condition',\n 'xnat:imageScanData/series_description',\n 'xnat:imageScanData/documentation',\n 'xnat:imageScanData/frames',\n 'xnat:imageScanData/scanner/manufacturer',", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "PROC_ATTRS", | |
"kind": 5, | |
"importPath": ".venv.Scripts.sessionmirror", | |
"description": ".venv.Scripts.sessionmirror", | |
"peekOfCode": "PROC_ATTRS = [\n 'proc:genProcData/validation/status',\n 'proc:genProcData/procstatus',\n 'proc:genProcData/proctype',\n 'proc:genProcData/procversion',\n 'proc:genProcData/walltimeused',\n 'proc:genProcData/memused'\n]\ndef copy_attrs(src_obj, dest_obj, attr_list):\n \"\"\" Copies list of attributes form source to destination\"\"\"", | |
"detail": ".venv.Scripts.sessionmirror", | |
"documentation": {} | |
}, | |
{ | |
"label": "ModelError", | |
"kind": 6, | |
"importPath": "mcp_server.model.gemini_flash", | |
"description": "mcp_server.model.gemini_flash", | |
"peekOfCode": "class ModelError(Exception):\n \"\"\"Custom exception for model-related errors\"\"\"\n pass\ndef fallback_to_15_flash(method: Callable[..., T]) -> Callable[..., T]:\n \"\"\"\n Decorator to automatically fall back to 1.5 if 2.0 fails.\n Only applies when the instance's version is '2.0'.\n \"\"\"\n @wraps(method)\n async def wrapper(self: 'GeminiFlash', *args: Any, **kwargs: Any) -> T:", | |
"detail": "mcp_server.model.gemini_flash", | |
"documentation": {} | |
}, | |
{ | |
"label": "GeminiFlash", | |
"kind": 6, | |
"importPath": "mcp_server.model.gemini_flash", | |
"description": "mcp_server.model.gemini_flash", | |
"peekOfCode": "class GeminiFlash:\n \"\"\"\n Google Gemini Flash model implementation with automatic fallback from 2.0 to 1.5.\n \"\"\"\n SUPPORTED_VERSIONS = ['2.0', '1.5']\n def __init__(self, version: str = '2.0', api_key: Optional[str] = None, _is_fallback: bool = False):\n \"\"\"\n Initialize the Gemini Flash model.\n Args:\n version: Model version ('2.0' or '1.5')", | |
"detail": "mcp_server.model.gemini_flash", | |
"documentation": {} | |
}, | |
{ | |
"label": "fallback_to_15_flash", | |
"kind": 2, | |
"importPath": "mcp_server.model.gemini_flash", | |
"description": "mcp_server.model.gemini_flash", | |
"peekOfCode": "def fallback_to_15_flash(method: Callable[..., T]) -> Callable[..., T]:\n \"\"\"\n Decorator to automatically fall back to 1.5 if 2.0 fails.\n Only applies when the instance's version is '2.0'.\n \"\"\"\n @wraps(method)\n async def wrapper(self: 'GeminiFlash', *args: Any, **kwargs: Any) -> T:\n if self.version != '2.0' or not self._should_fallback:\n return await method(self, *args, **kwargs)\n try:", | |
"detail": "mcp_server.model.gemini_flash", | |
"documentation": {} | |
}, | |
{ | |
"label": "logger", | |
"kind": 5, | |
"importPath": "mcp_server.model.gemini_flash", | |
"description": "mcp_server.model.gemini_flash", | |
"peekOfCode": "logger = logging.getLogger(__name__)\nT = TypeVar('T')\nclass ModelError(Exception):\n \"\"\"Custom exception for model-related errors\"\"\"\n pass\ndef fallback_to_15_flash(method: Callable[..., T]) -> Callable[..., T]:\n \"\"\"\n Decorator to automatically fall back to 1.5 if 2.0 fails.\n Only applies when the instance's version is '2.0'.\n \"\"\"", | |
"detail": "mcp_server.model.gemini_flash", | |
"documentation": {} | |
}, | |
{ | |
"label": "T", | |
"kind": 5, | |
"importPath": "mcp_server.model.gemini_flash", | |
"description": "mcp_server.model.gemini_flash", | |
"peekOfCode": "T = TypeVar('T')\nclass ModelError(Exception):\n \"\"\"Custom exception for model-related errors\"\"\"\n pass\ndef fallback_to_15_flash(method: Callable[..., T]) -> Callable[..., T]:\n \"\"\"\n Decorator to automatically fall back to 1.5 if 2.0 fails.\n Only applies when the instance's version is '2.0'.\n \"\"\"\n @wraps(method)", | |
"detail": "mcp_server.model.gemini_flash", | |
"documentation": {} | |
}, | |
{ | |
"label": "get_concept", | |
"kind": 2, | |
"importPath": "mcp_server.resources.concept_graph", | |
"description": "mcp_server.resources.concept_graph", | |
"peekOfCode": "def get_concept(concept_id: str) -> Dict[str, Any]:\n \"\"\"Get a specific concept by ID or return None if not found.\"\"\"\n return CONCEPT_GRAPH.get(concept_id)\ndef get_all_concepts() -> Dict[str, Any]:\n \"\"\"Get all concepts in the graph.\"\"\"\n return {\"concepts\": list(CONCEPT_GRAPH.values())}\ndef get_concept_graph() -> Dict[str, Any]:\n \"\"\"Get the complete concept graph.\"\"\"\n return CONCEPT_GRAPH", | |
"detail": "mcp_server.resources.concept_graph", | |
"documentation": {} | |
}, | |
{ | |
"label": "get_all_concepts", | |
"kind": 2, | |
"importPath": "mcp_server.resources.concept_graph", | |
"description": "mcp_server.resources.concept_graph", | |
"peekOfCode": "def get_all_concepts() -> Dict[str, Any]:\n \"\"\"Get all concepts in the graph.\"\"\"\n return {\"concepts\": list(CONCEPT_GRAPH.values())}\ndef get_concept_graph() -> Dict[str, Any]:\n \"\"\"Get the complete concept graph.\"\"\"\n return CONCEPT_GRAPH", | |
"detail": "mcp_server.resources.concept_graph", | |
"documentation": {} | |
}, | |
{ | |
"label": "get_concept_graph", | |
"kind": 2, | |
"importPath": "mcp_server.resources.concept_graph", | |
"description": "mcp_server.resources.concept_graph", | |
"peekOfCode": "def get_concept_graph() -> Dict[str, Any]:\n \"\"\"Get the complete concept graph.\"\"\"\n return CONCEPT_GRAPH", | |
"detail": "mcp_server.resources.concept_graph", | |
"documentation": {} | |
}, | |
{ | |
"label": "CONCEPT_GRAPH", | |
"kind": 5, | |
"importPath": "mcp_server.resources.concept_graph", | |
"description": "mcp_server.resources.concept_graph", | |
"peekOfCode": "CONCEPT_GRAPH = {\n \"python\": {\n \"id\": \"python\",\n \"name\": \"Python Programming\",\n \"description\": \"Fundamentals of Python programming language\",\n \"prerequisites\": [],\n \"related\": [\"functions\", \"oop\", \"data_structures\"]\n },\n \"functions\": {\n \"id\": \"functions\",", | |
"detail": "mcp_server.resources.concept_graph", | |
"documentation": {} | |
}, | |
{ | |
"label": "get_curriculum_standards", | |
"kind": 2, | |
"importPath": "mcp_server.resources.curriculum_standards", | |
"description": "mcp_server.resources.curriculum_standards", | |
"peekOfCode": "def get_curriculum_standards(country_code: str = \"us\") -> Dict[str, Any]:\n \"\"\"\n Get curriculum standards for a specific country.\n Args:\n country_code: ISO country code (e.g., 'us', 'uk', 'in', 'sg', 'ca')\n Returns:\n Dictionary containing curriculum standards for the specified country\n \"\"\"\n country_code = country_code.lower()\n if country_code not in CURRICULUM_STANDARDS:", | |
"detail": "mcp_server.resources.curriculum_standards", | |
"documentation": {} | |
}, | |
{ | |
"label": "CURRICULUM_STANDARDS", | |
"kind": 5, | |
"importPath": "mcp_server.resources.curriculum_standards", | |
"description": "mcp_server.resources.curriculum_standards", | |
"peekOfCode": "CURRICULUM_STANDARDS = {\n \"us\": {\n \"name\": \"Common Core State Standards (US)\",\n \"subjects\": {\n \"math\": {\n \"k-5\": [\"Counting & Cardinality\", \"Operations & Algebraic Thinking\", \"Number & Operations\"],\n \"6-8\": [\"Ratios & Proportional Relationships\", \"The Number System\", \"Expressions & Equations\"],\n \"9-12\": [\"Number & Quantity\", \"Algebra\", \"Functions\", \"Modeling\", \"Geometry\", \"Statistics & Probability\"]\n },\n \"ela\": {", | |
"detail": "mcp_server.resources.curriculum_standards", | |
"documentation": {} | |
}, | |
{ | |
"label": "current_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.concept_graph_tools", | |
"description": "mcp_server.tools.concept_graph_tools", | |
"peekOfCode": "current_dir = Path(__file__).parent\nparent_dir = current_dir.parent.parent\nsys.path.insert(0, str(parent_dir))\nimport sys\nimport os\nfrom pathlib import Path\n# Add the parent directory to the Python path\ncurrent_dir = Path(__file__).parent\nparent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))", | |
"detail": "mcp_server.tools.concept_graph_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "parent_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.concept_graph_tools", | |
"description": "mcp_server.tools.concept_graph_tools", | |
"peekOfCode": "parent_dir = current_dir.parent.parent\nsys.path.insert(0, str(parent_dir))\nimport sys\nimport os\nfrom pathlib import Path\n# Add the parent directory to the Python path\ncurrent_dir = Path(__file__).parent\nparent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))\n# Import from local resources", | |
"detail": "mcp_server.tools.concept_graph_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "current_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.concept_graph_tools", | |
"description": "mcp_server.tools.concept_graph_tools", | |
"peekOfCode": "current_dir = Path(__file__).parent\nparent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))\n# Import from local resources\nfrom resources import concept_graph\n# Import MCP\nfrom mcp_server.mcp_instance import mcp\nfrom mcp_server.model.gemini_flash import GeminiFlash\nMODEL = GeminiFlash()\[email protected]()", | |
"detail": "mcp_server.tools.concept_graph_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "parent_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.concept_graph_tools", | |
"description": "mcp_server.tools.concept_graph_tools", | |
"peekOfCode": "parent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))\n# Import from local resources\nfrom resources import concept_graph\n# Import MCP\nfrom mcp_server.mcp_instance import mcp\nfrom mcp_server.model.gemini_flash import GeminiFlash\nMODEL = GeminiFlash()\[email protected]()\nasync def get_concept_graph_tool(concept_id: Optional[str] = None) -> dict:", | |
"detail": "mcp_server.tools.concept_graph_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "MODEL", | |
"kind": 5, | |
"importPath": "mcp_server.tools.concept_graph_tools", | |
"description": "mcp_server.tools.concept_graph_tools", | |
"peekOfCode": "MODEL = GeminiFlash()\[email protected]()\nasync def get_concept_graph_tool(concept_id: Optional[str] = None) -> dict:\n \"\"\"\n Get the complete concept graph or a specific concept, fully LLM-driven.\n For a specific concept, use Gemini to generate a JSON object with explanation, related concepts, prerequisites, and summary.\n For the full graph, use Gemini to generate a JSON object with a list of all concepts and their relationships.\n \"\"\"\n if concept_id:\n prompt = (", | |
"detail": "mcp_server.tools.concept_graph_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "current_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.concept_tools", | |
"description": "mcp_server.tools.concept_tools", | |
"peekOfCode": "current_dir = Path(__file__).parent\nparent_dir = current_dir.parent.parent\nsys.path.insert(0, str(parent_dir))\nimport sys\nimport os\nfrom pathlib import Path\n# Add the parent directory to the Python path\ncurrent_dir = Path(__file__).parent\nparent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))", | |
"detail": "mcp_server.tools.concept_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "parent_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.concept_tools", | |
"description": "mcp_server.tools.concept_tools", | |
"peekOfCode": "parent_dir = current_dir.parent.parent\nsys.path.insert(0, str(parent_dir))\nimport sys\nimport os\nfrom pathlib import Path\n# Add the parent directory to the Python path\ncurrent_dir = Path(__file__).parent\nparent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))\n# Import from local resources", | |
"detail": "mcp_server.tools.concept_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "current_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.concept_tools", | |
"description": "mcp_server.tools.concept_tools", | |
"peekOfCode": "current_dir = Path(__file__).parent\nparent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))\n# Import from local resources\nfrom resources.concept_graph import get_concept, get_all_concepts\n# Import MCP\nfrom mcp_server.mcp_instance import mcp\nfrom mcp_server.model.gemini_flash import GeminiFlash\nMODEL = GeminiFlash()\[email protected]()", | |
"detail": "mcp_server.tools.concept_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "parent_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.concept_tools", | |
"description": "mcp_server.tools.concept_tools", | |
"peekOfCode": "parent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))\n# Import from local resources\nfrom resources.concept_graph import get_concept, get_all_concepts\n# Import MCP\nfrom mcp_server.mcp_instance import mcp\nfrom mcp_server.model.gemini_flash import GeminiFlash\nMODEL = GeminiFlash()\[email protected]()\nasync def get_concept_tool(concept_id: str = None) -> dict:", | |
"detail": "mcp_server.tools.concept_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "MODEL", | |
"kind": 5, | |
"importPath": "mcp_server.tools.concept_tools", | |
"description": "mcp_server.tools.concept_tools", | |
"peekOfCode": "MODEL = GeminiFlash()\[email protected]()\nasync def get_concept_tool(concept_id: str = None) -> dict:\n \"\"\"\n Get a specific concept or all concepts from the knowledge graph, fully LLM-driven.\n If a concept_id is provided, use Gemini to generate a JSON object with explanation, key points, and example.\n \"\"\"\n if not concept_id:\n return {\"error\": \"concept_id is required for LLM-driven mode\"}\n prompt = (", | |
"detail": "mcp_server.tools.concept_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "calculate_similarity", | |
"kind": 2, | |
"importPath": "mcp_server.tools.interaction_tools", | |
"description": "mcp_server.tools.interaction_tools", | |
"peekOfCode": "def calculate_similarity(text1: str, text2: str) -> float:\n \"\"\"Calculate the similarity ratio between two texts.\"\"\"\n return 0.0 # No longer used, LLM-driven\[email protected]()\nasync def text_interaction(query: str, student_id: str) -> dict:\n \"\"\"\n Process a text query from a student and provide an educational response, fully LLM-driven.\n Use Gemini to generate a JSON object with a response and suggested actions/resources.\n \"\"\"\n prompt = (", | |
"detail": "mcp_server.tools.interaction_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "MODEL", | |
"kind": 5, | |
"importPath": "mcp_server.tools.interaction_tools", | |
"description": "mcp_server.tools.interaction_tools", | |
"peekOfCode": "MODEL = GeminiFlash()\ndef calculate_similarity(text1: str, text2: str) -> float:\n \"\"\"Calculate the similarity ratio between two texts.\"\"\"\n return 0.0 # No longer used, LLM-driven\[email protected]()\nasync def text_interaction(query: str, student_id: str) -> dict:\n \"\"\"\n Process a text query from a student and provide an educational response, fully LLM-driven.\n Use Gemini to generate a JSON object with a response and suggested actions/resources.\n \"\"\"", | |
"detail": "mcp_server.tools.interaction_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "get_prerequisites", | |
"kind": 2, | |
"importPath": "mcp_server.tools.learning_path_tools", | |
"description": "mcp_server.tools.learning_path_tools", | |
"peekOfCode": "def get_prerequisites(concept_id: str, visited: Optional[set] = None) -> List[Dict[str, Any]]:\n \"\"\"\n Get all prerequisites for a concept recursively.\n Args:\n concept_id: ID of the concept to get prerequisites for\n visited: Set of already visited concepts to avoid cycles\n Returns:\n List of prerequisite concepts in order\n \"\"\"\n if visited is None:", | |
"detail": "mcp_server.tools.learning_path_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "generate_learning_path", | |
"kind": 2, | |
"importPath": "mcp_server.tools.learning_path_tools", | |
"description": "mcp_server.tools.learning_path_tools", | |
"peekOfCode": "def generate_learning_path(concept_ids: List[str], student_level: str = \"beginner\") -> Dict[str, Any]:\n \"\"\"\n Generate a personalized learning path for a student.\n Args:\n concept_ids: List of concept IDs to include in the learning path\n student_level: Student's current level (beginner, intermediate, advanced)\n Returns:\n Dictionary containing the learning path\n \"\"\"\n if not concept_ids:", | |
"detail": "mcp_server.tools.learning_path_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "current_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.learning_path_tools", | |
"description": "mcp_server.tools.learning_path_tools", | |
"peekOfCode": "current_dir = Path(__file__).parent\nparent_dir = current_dir.parent.parent\nsys.path.insert(0, str(parent_dir))\nimport sys\nimport os\nfrom pathlib import Path\n# Add the parent directory to the Python path\ncurrent_dir = Path(__file__).parent\nparent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))", | |
"detail": "mcp_server.tools.learning_path_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "parent_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.learning_path_tools", | |
"description": "mcp_server.tools.learning_path_tools", | |
"peekOfCode": "parent_dir = current_dir.parent.parent\nsys.path.insert(0, str(parent_dir))\nimport sys\nimport os\nfrom pathlib import Path\n# Add the parent directory to the Python path\ncurrent_dir = Path(__file__).parent\nparent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))\n# Import from local resources", | |
"detail": "mcp_server.tools.learning_path_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "current_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.learning_path_tools", | |
"description": "mcp_server.tools.learning_path_tools", | |
"peekOfCode": "current_dir = Path(__file__).parent\nparent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))\n# Import from local resources\nfrom resources.concept_graph import CONCEPT_GRAPH\n# Import MCP\nfrom mcp_server.mcp_instance import mcp\nfrom mcp_server.model.gemini_flash import GeminiFlash\nMODEL = GeminiFlash()\ndef get_prerequisites(concept_id: str, visited: Optional[set] = None) -> List[Dict[str, Any]]:", | |
"detail": "mcp_server.tools.learning_path_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "parent_dir", | |
"kind": 5, | |
"importPath": "mcp_server.tools.learning_path_tools", | |
"description": "mcp_server.tools.learning_path_tools", | |
"peekOfCode": "parent_dir = current_dir.parent\nsys.path.insert(0, str(parent_dir))\n# Import from local resources\nfrom resources.concept_graph import CONCEPT_GRAPH\n# Import MCP\nfrom mcp_server.mcp_instance import mcp\nfrom mcp_server.model.gemini_flash import GeminiFlash\nMODEL = GeminiFlash()\ndef get_prerequisites(concept_id: str, visited: Optional[set] = None) -> List[Dict[str, Any]]:\n \"\"\"", | |
"detail": "mcp_server.tools.learning_path_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "MODEL", | |
"kind": 5, | |
"importPath": "mcp_server.tools.learning_path_tools", | |
"description": "mcp_server.tools.learning_path_tools", | |
"peekOfCode": "MODEL = GeminiFlash()\ndef get_prerequisites(concept_id: str, visited: Optional[set] = None) -> List[Dict[str, Any]]:\n \"\"\"\n Get all prerequisites for a concept recursively.\n Args:\n concept_id: ID of the concept to get prerequisites for\n visited: Set of already visited concepts to avoid cycles\n Returns:\n List of prerequisite concepts in order\n \"\"\"", | |
"detail": "mcp_server.tools.learning_path_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "MODEL", | |
"kind": 5, | |
"importPath": "mcp_server.tools.lesson_tools", | |
"description": "mcp_server.tools.lesson_tools", | |
"peekOfCode": "MODEL = GeminiFlash()\[email protected]()\nasync def generate_lesson_tool(topic: str, grade_level: int, duration_minutes: int) -> dict:\n \"\"\"\n Generate a lesson plan for the given topic, grade level, and duration, fully LLM-driven.\n Use Gemini to generate a JSON object with objectives, activities, materials, assessment, differentiation, and homework.\n \"\"\"\n prompt = (\n f\"Generate a detailed lesson plan as a JSON object for the topic '{topic}', grade {grade_level}, duration {duration_minutes} minutes. \"\n f\"Include fields: objectives (list), activities (list), materials (list), assessment (dict), differentiation (dict), and homework (dict).\"", | |
"detail": "mcp_server.tools.lesson_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "MODEL", | |
"kind": 5, | |
"importPath": "mcp_server.tools.ocr_tools", | |
"description": "mcp_server.tools.ocr_tools", | |
"peekOfCode": "MODEL = GeminiFlash()\nasync def mistral_ocr_request(document_url: str) -> dict:\n \"\"\"\n Send OCR request to Mistral OCR service using document URL.\n Args:\n document_url: URL of the document to process\n Returns:\n OCR response from Mistral\n \"\"\"\n try:", | |
"detail": "mcp_server.tools.ocr_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "result", | |
"kind": 5, | |
"importPath": "mcp_server.tools.ocr_tools", | |
"description": "mcp_server.tools.ocr_tools", | |
"peekOfCode": "result = await mistral_document_ocr(\"https://example.com/document.pdf\")\n# For image document \nresult = await mistral_document_ocr(\"https://example.com/image.jpg\")\n\"\"\"", | |
"detail": "mcp_server.tools.ocr_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "result", | |
"kind": 5, | |
"importPath": "mcp_server.tools.ocr_tools", | |
"description": "mcp_server.tools.ocr_tools", | |
"peekOfCode": "result = await mistral_document_ocr(\"https://example.com/image.jpg\")\n\"\"\"", | |
"detail": "mcp_server.tools.ocr_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "PROMPT_TEMPLATE", | |
"kind": 5, | |
"importPath": "mcp_server.tools.quiz_tools", | |
"description": "mcp_server.tools.quiz_tools", | |
"peekOfCode": "PROMPT_TEMPLATE = (Path(__file__).parent.parent / \"prompts\" / \"quiz_generation.txt\").read_text(encoding=\"utf-8\")\n# Initialize Gemini model\nMODEL = GeminiFlash()\[email protected]()\nasync def generate_quiz_tool(concept: str, difficulty: str = \"medium\") -> dict:\n \"\"\"\n Generate a quiz based on a concept and difficulty using Gemini, fully LLM-driven.\n The JSON should include a list of questions, each with options and the correct answer.\n \"\"\"\n try:", | |
"detail": "mcp_server.tools.quiz_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "MODEL", | |
"kind": 5, | |
"importPath": "mcp_server.tools.quiz_tools", | |
"description": "mcp_server.tools.quiz_tools", | |
"peekOfCode": "MODEL = GeminiFlash()\[email protected]()\nasync def generate_quiz_tool(concept: str, difficulty: str = \"medium\") -> dict:\n \"\"\"\n Generate a quiz based on a concept and difficulty using Gemini, fully LLM-driven.\n The JSON should include a list of questions, each with options and the correct answer.\n \"\"\"\n try:\n if not concept or not isinstance(concept, str):\n return {\"error\": \"concept must be a non-empty string\"}", | |
"detail": "mcp_server.tools.quiz_tools", | |
"documentation": {} | |
}, | |
{ | |
"label": "upload_to_azure", | |
"kind": 2, | |
"importPath": "mcp_server.utils.azure_upload", | |
"description": "mcp_server.utils.azure_upload", | |
"peekOfCode": "def upload_to_azure(file_path: str, content_type: str = None) -> str:\n \"\"\"\n Upload a file to Azure Blob Storage and return the public URL.\n Args:\n file_path: Path to the file to upload.\n content_type: Optional MIME type (e.g., 'application/pdf'). If not provided, guessed from extension.\n Returns:\n The public URL of the uploaded blob.\n \"\"\"\n if not AZURE_CONNECTION_STRING or not AZURE_CONTAINER_NAME:", | |
"detail": "mcp_server.utils.azure_upload", | |
"documentation": {} | |
}, | |
{ | |
"label": "AZURE_CONNECTION_STRING", | |
"kind": 5, | |
"importPath": "mcp_server.utils.azure_upload", | |
"description": "mcp_server.utils.azure_upload", | |
"peekOfCode": "AZURE_CONNECTION_STRING = os.getenv(\"AZURE_CONNECTION_STRING\")\nAZURE_CONTAINER_NAME = os.getenv(\"AZURE_CONTAINER_NAME\")\ndef upload_to_azure(file_path: str, content_type: str = None) -> str:\n \"\"\"\n Upload a file to Azure Blob Storage and return the public URL.\n Args:\n file_path: Path to the file to upload.\n content_type: Optional MIME type (e.g., 'application/pdf'). If not provided, guessed from extension.\n Returns:\n The public URL of the uploaded blob.", | |
"detail": "mcp_server.utils.azure_upload", | |
"documentation": {} | |
}, | |
{ | |
"label": "AZURE_CONTAINER_NAME", | |
"kind": 5, | |
"importPath": "mcp_server.utils.azure_upload", | |
"description": "mcp_server.utils.azure_upload", | |
"peekOfCode": "AZURE_CONTAINER_NAME = os.getenv(\"AZURE_CONTAINER_NAME\")\ndef upload_to_azure(file_path: str, content_type: str = None) -> str:\n \"\"\"\n Upload a file to Azure Blob Storage and return the public URL.\n Args:\n file_path: Path to the file to upload.\n content_type: Optional MIME type (e.g., 'application/pdf'). If not provided, guessed from extension.\n Returns:\n The public URL of the uploaded blob.\n \"\"\"", | |
"detail": "mcp_server.utils.azure_upload", | |
"documentation": {} | |
}, | |
{ | |
"label": "mcp", | |
"kind": 5, | |
"importPath": "mcp_server.mcp_instance", | |
"description": "mcp_server.mcp_instance", | |
"peekOfCode": "mcp = FastMCP(\n \"TutorX\",\n dependencies=[\"mcp[cli]>=1.9.3\"],\n cors_origins=[\"*\"]\n)", | |
"detail": "mcp_server.mcp_instance", | |
"documentation": {} | |
}, | |
{ | |
"label": "current_dir", | |
"kind": 5, | |
"importPath": "mcp_server.server", | |
"description": "mcp_server.server", | |
"peekOfCode": "current_dir = Path(__file__).parent\nsys.path.insert(0, str(current_dir))\nimport uvicorn\nfrom fastapi import FastAPI, HTTPException, UploadFile, File, Form\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom mcp.server.fastmcp import FastMCP\n# Import all tools to register them with MCP\nfrom tools import (\n concept_tools,\n lesson_tools,", | |
"detail": "mcp_server.server", | |
"documentation": {} | |
}, | |
{ | |
"label": "api_app", | |
"kind": 5, | |
"importPath": "mcp_server.server", | |
"description": "mcp_server.server", | |
"peekOfCode": "api_app = FastAPI(\n title=\"TutorX MCP Server\",\n description=\"Model Context Protocol server for TutorX educational platform\",\n version=\"1.0.0\"\n)\n# Add CORS middleware\napi_app.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,", | |
"detail": "mcp_server.server", | |
"documentation": {} | |
}, | |
{ | |
"label": "TestTutorXClient", | |
"kind": 6, | |
"importPath": "tests.test_client", | |
"description": "tests.test_client", | |
"peekOfCode": "class TestTutorXClient(unittest.TestCase):\n \"\"\"Test cases for the TutorX MCP client\"\"\"\n def setUp(self):\n \"\"\"Set up test fixtures\"\"\"\n self.client = TutorXClient(\"http://localhost:8000\")\n self.student_id = \"test_student_123\"\n self.concept_id = \"math_algebra_basics\"\n @patch('client.requests.post')\n def test_call_tool(self, mock_post):\n \"\"\"Test _call_tool method\"\"\"", | |
"detail": "tests.test_client", | |
"documentation": {} | |
}, | |
{ | |
"label": "TestMCPServer", | |
"kind": 6, | |
"importPath": "tests.test_mcp_server", | |
"description": "tests.test_mcp_server", | |
"peekOfCode": "class TestMCPServer(unittest.TestCase):\n \"\"\"Test cases for the TutorX MCP server\"\"\"\n def setUp(self):\n \"\"\"Set up test fixtures\"\"\"\n self.student_id = \"test_student_123\"\n self.concept_id = \"math_algebra_basics\"\n def test_assess_skill(self):\n \"\"\"Test assess_skill tool\"\"\"\n result = assess_skill(self.student_id, self.concept_id)\n # Verify the structure of the result", | |
"detail": "tests.test_mcp_server", | |
"documentation": {} | |
}, | |
{ | |
"label": "SERVER_URL", | |
"kind": 5, | |
"importPath": "tests.test_tools_integration", | |
"description": "tests.test_tools_integration", | |
"peekOfCode": "SERVER_URL = \"http://localhost:8000/sse\" # Adjust if needed\[email protected]\nasync def test_get_concept_graph_tool():\n async with sse_client(SERVER_URL) as (sse, write):\n async with ClientSession(sse, write) as session:\n await session.initialize()\n result = await session.call_tool(\"get_concept_graph_tool\", {\"concept_id\": \"python\"})\n assert result and \"error\" not in result\[email protected]\nasync def test_generate_quiz_tool():", | |
"detail": "tests.test_tools_integration", | |
"documentation": {} | |
}, | |
{ | |
"label": "TestMultimodalUtils", | |
"kind": 6, | |
"importPath": "tests.test_utils", | |
"description": "tests.test_utils", | |
"peekOfCode": "class TestMultimodalUtils(unittest.TestCase):\n \"\"\"Test cases for multimodal utility functions\"\"\"\n def test_process_text_query(self):\n \"\"\"Test text query processing\"\"\"\n # Test with a \"solve\" query\n solve_query = \"Please solve this equation: 2x + 3 = 7\"\n result = process_text_query(solve_query)\n self.assertIsInstance(result, dict)\n self.assertEqual(result[\"query\"], solve_query)\n self.assertEqual(result[\"response_type\"], \"math_solution\")", | |
"detail": "tests.test_utils", | |
"documentation": {} | |
}, | |
{ | |
"label": "TestAssessmentUtils", | |
"kind": 6, | |
"importPath": "tests.test_utils", | |
"description": "tests.test_utils", | |
"peekOfCode": "class TestAssessmentUtils(unittest.TestCase):\n \"\"\"Test cases for assessment utility functions\"\"\"\n def test_generate_question_algebra_basics(self):\n \"\"\"Test question generation for algebra basics\"\"\"\n concept_id = \"math_algebra_basics\"\n difficulty = 2\n question = generate_question(concept_id, difficulty)\n self.assertIsInstance(question, dict)\n self.assertIn(\"id\", question)\n self.assertEqual(question[\"concept_id\"], concept_id)", | |
"detail": "tests.test_utils", | |
"documentation": {} | |
}, | |
{ | |
"label": "upload_to_azure", | |
"kind": 2, | |
"importPath": "utils.azure_upload", | |
"description": "utils.azure_upload", | |
"peekOfCode": "def upload_to_azure(file_path: str, content_type: str = None) -> str:\n \"\"\"\n Upload a file to Azure Blob Storage and return the public URL.\n Args:\n file_path: Path to the file to upload.\n content_type: Optional MIME type (e.g., 'application/pdf'). If not provided, guessed from extension.\n Returns:\n The public URL of the uploaded blob.\n \"\"\"\n if not AZURE_CONNECTION_STRING or not AZURE_CONTAINER_NAME:", | |
"detail": "utils.azure_upload", | |
"documentation": {} | |
}, | |
{ | |
"label": "AZURE_CONNECTION_STRING", | |
"kind": 5, | |
"importPath": "utils.azure_upload", | |
"description": "utils.azure_upload", | |
"peekOfCode": "AZURE_CONNECTION_STRING = os.getenv(\"AZURE_CONNECTION_STRING\")\nAZURE_CONTAINER_NAME = os.getenv(\"AZURE_CONTAINER_NAME\")\ndef upload_to_azure(file_path: str, content_type: str = None) -> str:\n \"\"\"\n Upload a file to Azure Blob Storage and return the public URL.\n Args:\n file_path: Path to the file to upload.\n content_type: Optional MIME type (e.g., 'application/pdf'). If not provided, guessed from extension.\n Returns:\n The public URL of the uploaded blob.", | |
"detail": "utils.azure_upload", | |
"documentation": {} | |
}, | |
{ | |
"label": "AZURE_CONTAINER_NAME", | |
"kind": 5, | |
"importPath": "utils.azure_upload", | |
"description": "utils.azure_upload", | |
"peekOfCode": "AZURE_CONTAINER_NAME = os.getenv(\"AZURE_CONTAINER_NAME\")\ndef upload_to_azure(file_path: str, content_type: str = None) -> str:\n \"\"\"\n Upload a file to Azure Blob Storage and return the public URL.\n Args:\n file_path: Path to the file to upload.\n content_type: Optional MIME type (e.g., 'application/pdf'). If not provided, guessed from extension.\n Returns:\n The public URL of the uploaded blob.\n \"\"\"", | |
"detail": "utils.azure_upload", | |
"documentation": {} | |
}, | |
{ | |
"label": "SERVER_URL", | |
"kind": 5, | |
"importPath": "app", | |
"description": "app", | |
"peekOfCode": "SERVER_URL = \"http://localhost:8000/sse\" # Ensure this is the SSE endpoint\n# Utility functions\nasync def load_concept_graph(concept_id: str = None):\n \"\"\"\n Load and visualize the concept graph for a given concept ID.\n If no concept_id is provided, returns the first available concept.\n Uses call_resource for concept graph retrieval (not a tool).\n Returns:\n tuple: (figure, concept_details, related_concepts) or (None, error_dict, [])\n \"\"\"", | |
"detail": "app", | |
"documentation": {} | |
}, | |
{ | |
"label": "run_server", | |
"kind": 2, | |
"importPath": "main", | |
"description": "main", | |
"peekOfCode": "def run_server():\n \"\"\"Run the MCP server with the configured settings.\"\"\"\n print(f\"Starting TutorX MCP server on {SERVER_HOST}:{SERVER_PORT}...\")\n print(f\"MCP transport: {SERVER_TRANSPORT}\")\n print(f\"API docs: http://{SERVER_HOST}:{SERVER_PORT}/docs\")\n print(f\"MCP endpoint: http://{SERVER_HOST}:{SERVER_PORT}/mcp\")\n # Configure uvicorn to run the FastAPI app\n uvicorn.run(\n \"server:api_app\",\n host=SERVER_HOST,", | |
"detail": "main", | |
"documentation": {} | |
}, | |
{ | |
"label": "SERVER_HOST", | |
"kind": 5, | |
"importPath": "main", | |
"description": "main", | |
"peekOfCode": "SERVER_HOST = os.getenv(\"MCP_HOST\", \"0.0.0.0\")\nSERVER_PORT = int(os.getenv(\"MCP_PORT\", \"8001\"))\nSERVER_TRANSPORT = os.getenv(\"MCP_TRANSPORT\", \"sse\")\ndef run_server():\n \"\"\"Run the MCP server with the configured settings.\"\"\"\n print(f\"Starting TutorX MCP server on {SERVER_HOST}:{SERVER_PORT}...\")\n print(f\"MCP transport: {SERVER_TRANSPORT}\")\n print(f\"API docs: http://{SERVER_HOST}:{SERVER_PORT}/docs\")\n print(f\"MCP endpoint: http://{SERVER_HOST}:{SERVER_PORT}/mcp\")\n # Configure uvicorn to run the FastAPI app", | |
"detail": "main", | |
"documentation": {} | |
}, | |
{ | |
"label": "SERVER_PORT", | |
"kind": 5, | |
"importPath": "main", | |
"description": "main", | |
"peekOfCode": "SERVER_PORT = int(os.getenv(\"MCP_PORT\", \"8001\"))\nSERVER_TRANSPORT = os.getenv(\"MCP_TRANSPORT\", \"sse\")\ndef run_server():\n \"\"\"Run the MCP server with the configured settings.\"\"\"\n print(f\"Starting TutorX MCP server on {SERVER_HOST}:{SERVER_PORT}...\")\n print(f\"MCP transport: {SERVER_TRANSPORT}\")\n print(f\"API docs: http://{SERVER_HOST}:{SERVER_PORT}/docs\")\n print(f\"MCP endpoint: http://{SERVER_HOST}:{SERVER_PORT}/mcp\")\n # Configure uvicorn to run the FastAPI app\n uvicorn.run(", | |
"detail": "main", | |
"documentation": {} | |
}, | |
{ | |
"label": "SERVER_TRANSPORT", | |
"kind": 5, | |
"importPath": "main", | |
"description": "main", | |
"peekOfCode": "SERVER_TRANSPORT = os.getenv(\"MCP_TRANSPORT\", \"sse\")\ndef run_server():\n \"\"\"Run the MCP server with the configured settings.\"\"\"\n print(f\"Starting TutorX MCP server on {SERVER_HOST}:{SERVER_PORT}...\")\n print(f\"MCP transport: {SERVER_TRANSPORT}\")\n print(f\"API docs: http://{SERVER_HOST}:{SERVER_PORT}/docs\")\n print(f\"MCP endpoint: http://{SERVER_HOST}:{SERVER_PORT}/mcp\")\n # Configure uvicorn to run the FastAPI app\n uvicorn.run(\n \"server:api_app\",", | |
"detail": "main", | |
"documentation": {} | |
}, | |
{ | |
"label": "run_mcp_server", | |
"kind": 2, | |
"importPath": "run", | |
"description": "run", | |
"peekOfCode": "def run_mcp_server(host=\"0.0.0.0\", port=8001):\n \"\"\"\n Run the MCP server using uvicorn\n Args:\n host: Host to bind the server to\n port: Port to run the server on\n \"\"\"\n print(f\"Starting TutorX MCP Server on {host}:{port}...\")\n # Set environment variables\n os.environ[\"MCP_HOST\"] = host", | |
"detail": "run", | |
"documentation": {} | |
}, | |
{ | |
"label": "run_gradio_interface", | |
"kind": 2, | |
"importPath": "run", | |
"description": "run", | |
"peekOfCode": "def run_gradio_interface(port=7860):\n \"\"\"\n Run the Gradio interface\n Args:\n port: Port to run the Gradio interface on\n \"\"\"\n print(f\"Starting TutorX Gradio Interface on port {port}...\")\n try:\n # Make sure the mcp-server directory is in the path\n mcp_server_dir = str(Path(__file__).parent / \"mcp-server\")", | |
"detail": "run", | |
"documentation": {} | |
}, | |
{ | |
"label": "check_port_available", | |
"kind": 2, | |
"importPath": "run", | |
"description": "run", | |
"peekOfCode": "def check_port_available(port):\n \"\"\"\n Check if a port is available\n Args:\n port: Port number to check\n Returns:\n bool: True if port is available, False otherwise\n \"\"\"\n with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:\n return s.connect_ex(('localhost', port)) != 0", | |
"detail": "run", | |
"documentation": {} | |
}, | |
{ | |
"label": "run_tests", | |
"kind": 2, | |
"importPath": "run_tests", | |
"description": "run_tests", | |
"peekOfCode": "def run_tests():\n \"\"\"Run all tests\"\"\"\n print(\"Running TutorX-MCP Tests...\")\n # First run unittest tests\n unittest_loader = unittest.TestLoader()\n test_directory = os.path.join(os.path.dirname(__file__), \"tests\")\n test_suite = unittest_loader.discover(test_directory)\n test_runner = unittest.TextTestRunner(verbosity=2)\n unittest_result = test_runner.run(test_suite)\n # Then run pytest tests (with coverage)", | |
"detail": "run_tests", | |
"documentation": {} | |
} | |
] |