contextflow-rl / test_api.py
namish10's picture
Upload test_api.py with huggingface_hub
01a7921 verified
"""
ContextFlow Test Suite
Tests all API endpoints and core functionality.
"""
import requests
import json
import time
BASE_URL = "http://localhost:5001/api"
def test_health():
"""Test health endpoint"""
print("\n=== Testing Health Endpoint ===")
try:
response = requests.get(f"{BASE_URL}/health")
print(f"Status: {response.status_code}")
print(f"Response: {response.json()}")
return response.status_code == 200
except Exception as e:
print(f"Error: {e}")
return False
def test_session():
"""Test session management"""
print("\n=== Testing Session Management ===")
try:
response = requests.post(f"{BASE_URL}/session/start", json={
"user_id": "test_user",
"topic": "Machine Learning"
})
print(f"Status: {response.status_code}")
data = response.json()
print(f"Session ID: {data.get('session_id')}")
print(f"Predictions: {len(data.get('predictions', []))} doubts predicted")
update_response = requests.post(f"{BASE_URL}/session/update", json={
"user_id": "test_user",
"behavioral_data": {
"mouse_hesitation": 0.3,
"scroll_reversals": 5
}
})
print(f"Update Status: {update_response.status_code}")
return response.status_code == 200
except Exception as e:
print(f"Error: {e}")
return False
def test_gestures():
"""Test gesture management"""
print("\n=== Testing Gesture Management ===")
try:
response = requests.get(f"{BASE_URL}/gesture/list?user_id=test_user")
print(f"List Status: {response.status_code}")
data = response.json()
print(f"Gestures: {data.get('count')} available")
response = requests.post(f"{BASE_URL}/gesture/add", json={
"user_id": "test_user",
"name": "Test Gesture",
"description": "A test gesture"
})
print(f"Add Status: {response.status_code}")
response = requests.post(f"{BASE_URL}/gesture/training/start", json={
"user_id": "test_user",
"gesture_id": "thinking"
})
print(f"Training Start Status: {response.status_code}")
print(f"Instructions: {response.json().get('instructions')}")
sample_landmarks = [[0.1, 0.2, 0.0]] * 21
response = requests.post(f"{BASE_URL}/gesture/training/sample", json={
"user_id": "test_user",
"landmarks": sample_landmarks
})
print(f"Training Sample Status: {response.status_code}")
return True
except Exception as e:
print(f"Error: {e}")
return False
def test_doubt_prediction():
"""Test doubt prediction"""
print("\n=== Testing Doubt Prediction ===")
try:
response = requests.post(f"{BASE_URL}/predict/doubts", json={
"user_id": "test_user",
"context": {
"topic": "Neural Networks",
"progress": 0.5,
"confusion_signals": 0.7
}
})
print(f"Status: {response.status_code}")
data = response.json()
print(f"Predictions: {len(data.get('predictions', []))} doubts")
for pred in data.get('predictions', [])[:3]:
print(f" - {pred.get('doubt')} ({pred.get('confidence')*100:.0f}%)")
return True
except Exception as e:
print(f"Error: {e}")
return False
def test_knowledge_graph():
"""Test knowledge graph"""
print("\n=== Testing Knowledge Graph ===")
try:
response = requests.post(f"{BASE_URL}/graph/add", json={
"user_id": "test_user",
"doubt": {
"topic": "Deep Learning",
"concept": "Backpropagation",
"content": "How does gradient descent work?"
}
})
print(f"Add Node Status: {response.status_code}")
response = requests.post(f"{BASE_URL}/graph/query", json={
"user_id": "test_user",
"query": "gradient descent",
"top_k": 3
})
print(f"Query Status: {response.status_code}")
return True
except Exception as e:
print(f"Error: {e}")
return False
def test_recall():
"""Test spaced repetition recall"""
print("\n=== Testing Spaced Repetition ===")
try:
response = requests.get(f"{BASE_URL}/review/due?user_id=test_user")
print(f"Due Reviews Status: {response.status_code}")
data = response.json()
print(f"Due Count: {data.get('due_count')}")
if data.get('cards'):
card = data['cards'][0]
response = requests.post(f"{BASE_URL}/review/complete", json={
"user_id": "test_user",
"card_id": card['card_id'],
"quality": 4
})
print(f"Complete Review Status: {response.status_code}")
print(f"XP Earned: {response.json().get('xp_earned')}")
return True
except Exception as e:
print(f"Error: {e}")
return False
def test_peer_learning():
"""Test peer learning network"""
print("\n=== Testing Peer Learning ===")
try:
response = requests.get(f"{BASE_URL}/peer/insights?topic=ML")
print(f"Peer Insights Status: {response.status_code}")
data = response.json()
print(f"Insights: {len(data.get('insights', []))}")
response = requests.get(f"{BASE_URL}/peer/doubts?topic=ML&limit=5")
print(f"Peer Doubts Status: {response.status_code}")
response = requests.get(f"{BASE_URL}/peer/trending")
print(f"Trending Status: {response.status_code}")
print(f"Trending: {response.json().get('trending', [])[:3]}")
return True
except Exception as e:
print(f"Error: {e}")
return False
def test_llm_flow():
"""Test LLM Flow (browser launch simulation)"""
print("\n=== Testing LLM Flow ===")
try:
response = requests.get(f"{BASE_URL}/llm/gesture-actions?user_id=test_user")
print(f"Gesture Actions Status: {response.status_code}")
data = response.json()
print(f"Available Actions: {len(data.get('actions', []))}")
for action in data.get('actions', [])[:5]:
print(f" - {action.get('action')}: {action.get('gesture')}")
response = requests.post(f"{BASE_URL}/llm/rl/start", json={
"user_id": "test_user",
"context": {"topic": "Learning"}
})
print(f"RL Loop Start Status: {response.status_code}")
response = requests.get(f"{BASE_URL}/llm/rl/status?user_id=test_user")
print(f"RL Status: {response.json()}")
response = requests.post(f"{BASE_URL}/llm/rl/feedback", json={
"user_id": "test_user",
"quality": 4,
"comment": "Great explanation!"
})
print(f"RL Feedback Status: {response.status_code}")
return True
except Exception as e:
print(f"Error: {e}")
return False
def run_all_tests():
"""Run all tests"""
print("=" * 50)
print("ContextFlow Test Suite")
print("=" * 50)
tests = [
("Health Check", test_health),
("Session Management", test_session),
("Gesture Management", test_gestures),
("Doubt Prediction", test_doubt_prediction),
("Knowledge Graph", test_knowledge_graph),
("Spaced Repetition", test_recall),
("Peer Learning", test_peer_learning),
("LLM Flow", test_llm_flow),
]
results = []
for name, test_func in tests:
try:
result = test_func()
results.append((name, result))
status = "PASS" if result else "FAIL"
print(f"\n{'='*40}")
print(f"Result: {status}")
except Exception as e:
print(f"\nException: {e}")
results.append((name, False))
print("\n" + "=" * 50)
print("SUMMARY")
print("=" * 50)
passed = sum(1 for _, r in results if r)
total = len(results)
for name, result in results:
status = "PASS ✓" if result else "FAIL ✗"
print(f"{status}: {name}")
print(f"\nTotal: {passed}/{total} passed")
return passed == total
if __name__ == "__main__":
import sys
print("Starting ContextFlow Test Suite...")
print("Make sure the backend server is running on http://localhost:5001")
print("Press Ctrl+C to cancel, or Enter to continue...")
try:
input()
except:
pass
success = run_all_tests()
sys.exit(0 if success else 1)