Spaces:
Running
Running
| """ | |
| Test the app integration with the new adaptive learning tools. | |
| """ | |
| import asyncio | |
| import json | |
| from mcp import ClientSession | |
| from mcp.client.sse import sse_client | |
| SERVER_URL = "http://localhost:8000/sse" | |
| async def extract_response_content(response): | |
| """Helper function to extract content from MCP response (same as app.py)""" | |
| # Handle direct dictionary responses (new format) | |
| if isinstance(response, dict): | |
| return response | |
| # Handle MCP response with content structure (CallToolResult format) | |
| if hasattr(response, 'content') and isinstance(response.content, list): | |
| for item in response.content: | |
| # Handle TextContent objects | |
| if hasattr(item, 'text') and item.text: | |
| try: | |
| return json.loads(item.text) | |
| except Exception as e: | |
| return {"raw_pretty": item.text, "parse_error": str(e)} | |
| # Handle other content types | |
| elif hasattr(item, 'type') and item.type == 'text': | |
| try: | |
| return json.loads(str(item)) | |
| except Exception: | |
| return {"raw_pretty": str(item)} | |
| # Handle string responses | |
| if isinstance(response, str): | |
| try: | |
| return json.loads(response) | |
| except Exception: | |
| return {"raw_pretty": response} | |
| # Handle any other response type - try to extract useful information | |
| if hasattr(response, '__dict__'): | |
| return {"raw_pretty": json.dumps(str(response), indent=2), "type": type(response).__name__} | |
| return {"raw_pretty": str(response), "type": type(response).__name__} | |
| async def start_adaptive_session_async(student_id, concept_id, difficulty): | |
| try: | |
| async with sse_client(SERVER_URL) as (sse, write): | |
| async with ClientSession(sse, write) as session: | |
| await session.initialize() | |
| result = await session.call_tool("start_adaptive_session", { | |
| "student_id": student_id, | |
| "concept_id": concept_id, | |
| "initial_difficulty": float(difficulty) | |
| }) | |
| return await extract_response_content(result) | |
| except Exception as e: | |
| return {"error": str(e)} | |
| async def get_adaptive_learning_path_async(student_id, concept_ids, strategy, max_concepts): | |
| try: | |
| # Parse concept_ids if it's a string | |
| if isinstance(concept_ids, str): | |
| concept_ids = [c.strip() for c in concept_ids.split(',') if c.strip()] | |
| async with sse_client(SERVER_URL) as (sse, write): | |
| async with ClientSession(sse, write) as session: | |
| await session.initialize() | |
| result = await session.call_tool("get_adaptive_learning_path", { | |
| "student_id": student_id, | |
| "target_concepts": concept_ids, | |
| "strategy": strategy, | |
| "max_concepts": int(max_concepts) | |
| }) | |
| return await extract_response_content(result) | |
| except Exception as e: | |
| return {"error": str(e)} | |
| async def test_app_integration(): | |
| """Test the app integration with adaptive learning tools.""" | |
| print("🧪 Testing App Integration with Adaptive Learning") | |
| print("=" * 50) | |
| # Test 1: Start adaptive session (like the app would) | |
| print("\n1. Testing start_adaptive_session_async...") | |
| session_result = await start_adaptive_session_async( | |
| student_id="app_test_student", | |
| concept_id="algebra_basics", | |
| difficulty=0.6 | |
| ) | |
| print(f"Result: {json.dumps(session_result, indent=2)}") | |
| # Test 2: Get adaptive learning path (like the app would) | |
| print("\n2. Testing get_adaptive_learning_path_async...") | |
| path_result = await get_adaptive_learning_path_async( | |
| student_id="app_test_student", | |
| concept_ids="algebra_basics,linear_equations,quadratic_equations", | |
| strategy="adaptive", | |
| max_concepts=5 | |
| ) | |
| print(f"Result: {json.dumps(path_result, indent=2)}") | |
| print("\n✅ App integration tests completed!") | |
| if __name__ == "__main__": | |
| asyncio.run(test_app_integration()) | |