Spaces:
Sleeping
Sleeping
| import requests | |
| import json | |
| from typing import List, Dict, Any, Optional | |
| import pandas as pd | |
| BASE_URL: str = "http://localhost:8000" | |
| def test_health_check() -> None: | |
| """Test the health check endpoint""" | |
| response: requests.Response = requests.get(f"{BASE_URL}/health") | |
| print("\nHealth check response:") | |
| print(json.dumps(response.json(), indent=2)) | |
| def test_model_info() -> None: | |
| """Test the model info endpoint""" | |
| response: requests.Response = requests.get(f"{BASE_URL}/model-info") | |
| print("\nModel info response:") | |
| print(json.dumps(response.json(), indent=2)) | |
| def test_classify_text() -> None: | |
| # Load emails from CSV file | |
| import csv | |
| emails: List[Dict[str, str]] = [] | |
| with open("examples/emails.csv", "r", encoding="utf-8") as file: | |
| reader = csv.DictReader(file) | |
| for row in reader: | |
| emails.append(row) | |
| # Test with default categories using email content | |
| for email in emails[:5]: | |
| response: requests.Response = requests.post( | |
| f"{BASE_URL}/classify", | |
| json={"text": email["contenu"]} | |
| ) | |
| print(f"Classification of email '{email['sujet']}' with default categories:") | |
| print(json.dumps(response.json(), indent=2)) | |
| def test_classify_batch() -> None: | |
| """Test the batch classification endpoint""" | |
| # Load emails from CSV file | |
| import csv | |
| emails: List[Dict[str, str]] = [] | |
| with open("examples/emails.csv", "r", encoding="utf-8") as file: | |
| reader = csv.DictReader(file) | |
| for row in reader: | |
| emails.append(row) | |
| # Use the first 5 emails for batch classification | |
| texts: List[str] = [email["contenu"] for email in emails[:5]] | |
| response: requests.Response = requests.post( | |
| f"{BASE_URL}/classify-batch", | |
| json={"texts": texts} | |
| ) | |
| print("\nBatch classification results:") | |
| print(json.dumps(response.json(), indent=2)) | |
| def test_suggest_categories() -> None: | |
| # Load reviews from CSV file | |
| import csv | |
| texts: List[str] = [] | |
| with open("examples/reviews.csv", "r", encoding="utf-8") as file: | |
| reader = csv.DictReader(file) | |
| for row in reader: | |
| texts.append(row["text"]) | |
| # Use the first few reviews for testing | |
| texts = texts[:5] | |
| response: requests.Response = requests.post( | |
| f"{BASE_URL}/suggest-categories", | |
| json=texts | |
| ) | |
| print("\nSuggested categories:") | |
| print(json.dumps(response.json(), indent=2)) | |
| def test_validate_classifications() -> None: | |
| """Test the validation endpoint""" | |
| # Load emails from CSV file | |
| import csv | |
| emails: List[Dict[str, str]] = [] | |
| with open("examples/emails.csv", "r", encoding="utf-8") as file: | |
| reader = csv.DictReader(file) | |
| for row in reader: | |
| emails.append(row) | |
| # Create validation samples from the first 5 emails | |
| samples: List[Dict[str, Any]] = [] | |
| for email in emails[:5]: | |
| # First classify the email | |
| classify_response: requests.Response = requests.post( | |
| f"{BASE_URL}/classify", | |
| json={"text": email["contenu"]} | |
| ) | |
| classification: Dict[str, Any] = classify_response.json() | |
| # Create a validation sample | |
| samples.append({ | |
| "text": email["contenu"], | |
| "assigned_category": classification["category"], | |
| "confidence": classification["confidence"] | |
| }) | |
| # Get current categories | |
| categories_response: requests.Response = requests.post( | |
| f"{BASE_URL}/suggest-categories", | |
| json=[email["contenu"] for email in emails[:5]] | |
| ) | |
| response_data: Dict[str, Any] = categories_response.json() | |
| current_categories: List[str] = response_data["categories"] # Extract categories from the response | |
| # Send validation request | |
| validation_request: Dict[str, Any] = { | |
| "samples": samples, | |
| "current_categories": current_categories, | |
| "text_columns": ["text"] | |
| } | |
| response: requests.Response = requests.post( | |
| f"{BASE_URL}/validate", | |
| json=validation_request | |
| ) | |
| print("\nValidation results:") | |
| print(json.dumps(response.json(), indent=2)) | |
| return response.json() # Return validation results for use in improve test | |
| def test_improve_classification() -> None: | |
| """Test the improve-classification endpoint""" | |
| # First get validation results | |
| validation_results = test_validate_classifications() | |
| # Load emails from CSV file | |
| import csv | |
| emails: List[Dict[str, str]] = [] | |
| with open("examples/emails.csv", "r", encoding="utf-8") as file: | |
| reader = csv.DictReader(file) | |
| for row in reader: | |
| emails.append(row) | |
| # Create a DataFrame with the first 5 emails | |
| df = pd.DataFrame(emails[:5]) | |
| # Get current categories | |
| categories_response: requests.Response = requests.post( | |
| f"{BASE_URL}/suggest-categories", | |
| json=[email["contenu"] for email in emails[:5]] | |
| ) | |
| response_data: Dict[str, Any] = categories_response.json() | |
| current_categories: str = ",".join(response_data["categories"]) | |
| # Send improvement request | |
| improvement_request: Dict[str, Any] = { | |
| "df": df.to_dict(), | |
| "validation_report": validation_results["validation_report"], | |
| "text_columns": ["contenu"], | |
| "categories": current_categories, | |
| "classifier_type": "gpt35", | |
| "show_explanations": True, | |
| "file_path": "examples/emails.csv" | |
| } | |
| response: requests.Response = requests.post( | |
| f"{BASE_URL}/improve-classification", | |
| json=improvement_request | |
| ) | |
| print("\nImprovement results:") | |
| print(json.dumps(response.json(), indent=2)) | |
| if __name__ == "__main__": | |
| print("Testing FastAPI server endpoints...") | |
| test_health_check() | |
| test_model_info() | |
| test_classify_text() | |
| test_classify_batch() | |
| test_suggest_categories() | |
| test_validate_classifications() | |
| test_improve_classification() |