""" 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())