Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python | |
| """ | |
| Script để test chatbot API endpoint. | |
| """ | |
| import os | |
| import requests | |
| import json | |
| import time | |
| from typing import Dict, Any | |
| API_BASE_URL = os.environ.get("API_BASE_URL", "http://localhost:8000").rstrip("/") | |
| def test_health_endpoint(): | |
| """Test health endpoint.""" | |
| print("="*60) | |
| print("Test Health Endpoint") | |
| print("="*60) | |
| try: | |
| response = requests.get(f"{API_BASE_URL}/api/chatbot/health/", timeout=5) | |
| print(f"Status Code: {response.status_code}") | |
| if response.status_code == 200: | |
| data = response.json() | |
| print(f"Status: {data.get('status', 'N/A')}") | |
| print(f"Service: {data.get('service', 'N/A')}") | |
| print(f"Classifier Loaded: {data.get('classifier_loaded', False)}") | |
| return True | |
| else: | |
| print(f"Error: {response.text}") | |
| return False | |
| except requests.exceptions.ConnectionError: | |
| print("❌ Cannot connect to server. Is Django server running?") | |
| print(" Start server with: cd backend/hue_portal && POSTGRES_HOST=localhost POSTGRES_PORT=5433 python manage.py runserver") | |
| return False | |
| except Exception as e: | |
| print(f"❌ Error: {e}") | |
| return False | |
| def test_chatbot_api(query: str, expected_intent: str = None) -> Dict[str, Any]: | |
| """Test chatbot API with a query.""" | |
| print(f"\n📝 Query: {query}") | |
| start_time = time.time() | |
| try: | |
| response = requests.post( | |
| f"{API_BASE_URL}/api/chat/", | |
| json={"message": query}, | |
| headers={"Content-Type": "application/json"}, | |
| timeout=30 | |
| ) | |
| latency_ms = (time.time() - start_time) * 1000 | |
| print(f" Status Code: {response.status_code}") | |
| if response.status_code == 200: | |
| data = response.json() | |
| intent = data.get('intent', 'N/A') | |
| confidence = data.get('confidence', 0) | |
| count = data.get('count', 0) | |
| message_preview = data.get('message', '')[:100] | |
| print(f" ✅ Intent: {intent}") | |
| print(f" ✅ Confidence: {confidence:.4f}") | |
| print(f" ✅ Results: {count}") | |
| print(f" ✅ Latency: {latency_ms:.2f}ms") | |
| print(f" ✅ Message preview: {message_preview}...") | |
| if expected_intent and intent != expected_intent: | |
| print(f" ⚠️ Expected intent: {expected_intent}, got: {intent}") | |
| return { | |
| "success": True, | |
| "intent": intent, | |
| "confidence": confidence, | |
| "count": count, | |
| "latency_ms": latency_ms | |
| } | |
| else: | |
| print(f" ❌ Error: {response.text}") | |
| return {"success": False, "error": response.text} | |
| except requests.exceptions.ConnectionError: | |
| print(" ❌ Cannot connect to server") | |
| return {"success": False, "error": "Connection error"} | |
| except Exception as e: | |
| print(f" ❌ Error: {e}") | |
| return {"success": False, "error": str(e)} | |
| def main(): | |
| print("="*60) | |
| print("Chatbot API Endpoint Test") | |
| print("="*60) | |
| # Test health endpoint first | |
| if not test_health_endpoint(): | |
| print("\n⚠️ Health check failed. Please start Django server first.") | |
| return | |
| # Test chatbot API with various queries | |
| print("\n" + "="*60) | |
| print("Test Chatbot API Endpoint") | |
| print("="*60) | |
| test_cases = [ | |
| ("Làm thủ tục cư trú cần gì?", "search_procedure"), | |
| ("Cảnh báo lừa đảo giả danh công an", "search_advisory"), | |
| ("Thủ tục PCCC như thế nào?", "search_procedure"), | |
| ("Mức phạt vượt đèn đỏ", "search_fine"), | |
| ("Địa chỉ công an tỉnh", "search_office"), | |
| ("Lừa đảo mạo danh cán bộ", "search_advisory"), | |
| ] | |
| results = [] | |
| for query, expected_intent in test_cases: | |
| result = test_chatbot_api(query, expected_intent) | |
| results.append(result) | |
| time.sleep(0.5) # Small delay between requests | |
| # Summary | |
| print("\n" + "="*60) | |
| print("Test Summary") | |
| print("="*60) | |
| successful = sum(1 for r in results if r.get("success", False)) | |
| total = len(results) | |
| avg_latency = sum(r.get("latency_ms", 0) for r in results if r.get("success", False)) / successful if successful > 0 else 0 | |
| print(f"Successful: {successful}/{total}") | |
| print(f"Average Latency: {avg_latency:.2f}ms") | |
| # Intent accuracy | |
| correct_intents = sum(1 for i, (_, expected) in enumerate(test_cases) | |
| if results[i].get("intent") == expected) | |
| print(f"Intent Accuracy: {correct_intents}/{total} ({correct_intents/total*100:.1f}%)") | |
| print("\n" + "="*60) | |
| print("Test Complete") | |
| print("="*60) | |
| if __name__ == "__main__": | |
| main() | |