| |
|
| | """
|
| | Example script showing how to use the AgriPredict Analysis Service API
|
| | """
|
| |
|
| | import requests
|
| | import json
|
| | from datetime import datetime, timedelta
|
| | import random
|
| |
|
| | def generate_sample_data(days: int = 30):
|
| | """Generate sample historical data for testing"""
|
| | data = []
|
| | base_date = datetime.now() - timedelta(days=days)
|
| |
|
| | for i in range(days):
|
| | date = base_date + timedelta(days=i)
|
| |
|
| | quantity = random.randint(50, 150) + random.randint(-20, 20)
|
| | price = round(20 + random.uniform(-5, 5), 2)
|
| |
|
| | data.append({
|
| | "date": date.strftime("%Y-%m-%d"),
|
| | "quantity": max(1, quantity),
|
| | "price": max(5, price)
|
| | })
|
| |
|
| | return data
|
| |
|
| | def test_health_check(base_url: str = "http://localhost:8000"):
|
| | """Test the health check endpoint"""
|
| | print("Testing health check...")
|
| | try:
|
| | response = requests.get(f"{base_url}/health")
|
| | if response.status_code == 200:
|
| | print("β
Health check passed")
|
| | print(f"Response: {response.json()}")
|
| | else:
|
| | print(f"β Health check failed: {response.status_code}")
|
| | except Exception as e:
|
| | print(f"β Health check error: {e}")
|
| |
|
| | def test_list_models(base_url: str = "http://localhost:8000"):
|
| | """Test the list models endpoint"""
|
| | print("\nTesting list models...")
|
| | try:
|
| | response = requests.get(f"{base_url}/models")
|
| | if response.status_code == 200:
|
| | print("β
Models list retrieved")
|
| | models = response.json()["models"]
|
| | print(f"Available models: {len(models)}")
|
| | for model in models:
|
| | print(f" - {model['name']} ({model['id']})")
|
| | else:
|
| | print(f"β Models list failed: {response.status_code}")
|
| | except Exception as e:
|
| | print(f"β Models list error: {e}")
|
| |
|
| | def test_forecast_generation(base_url: str = "http://localhost:8000"):
|
| | """Test forecast generation"""
|
| | print("\nTesting forecast generation...")
|
| |
|
| |
|
| | historical_data = generate_sample_data(30)
|
| |
|
| |
|
| | forecast_request = {
|
| | "product_id": "sample_crop",
|
| | "historical_data": historical_data,
|
| | "days": 14,
|
| | "selling_price": 25.0,
|
| | "models": ["ensemble"],
|
| | "include_confidence": True,
|
| | "scenario": "realistic"
|
| | }
|
| |
|
| | try:
|
| | response = requests.post(
|
| | f"{base_url}/forecast",
|
| | json=forecast_request,
|
| | headers={"Content-Type": "application/json"}
|
| | )
|
| |
|
| | if response.status_code == 200:
|
| | print("β
Forecast generated successfully")
|
| | result = response.json()
|
| |
|
| | print(f"Models used: {result['models_used']}")
|
| | print(f"Forecast points: {len(result['forecast_data'])}")
|
| | print(f"Confidence: {result.get('confidence', 'N/A')}%")
|
| |
|
| | if result.get('revenue_projection'):
|
| | print(f"Revenue projections: {len(result['revenue_projection'])}")
|
| |
|
| |
|
| | print("\nFirst 3 forecast points:")
|
| | for i, point in enumerate(result['forecast_data'][:3]):
|
| | print(f" Day {i+1}: {point['predicted_value']:.2f} "
|
| | f"(Β±{point.get('confidence_upper', 0) - point.get('confidence_lower', 0):.2f})")
|
| |
|
| | else:
|
| | print(f"β Forecast failed: {response.status_code}")
|
| | print(f"Error: {response.text}")
|
| |
|
| | except Exception as e:
|
| | print(f"β Forecast error: {e}")
|
| |
|
| | def main():
|
| | """Main test function"""
|
| | print("π AgriPredict Analysis Service API Test")
|
| | print("=" * 50)
|
| |
|
| |
|
| | base_url = "http://localhost:8000"
|
| |
|
| |
|
| | test_health_check(base_url)
|
| | test_list_models(base_url)
|
| | test_forecast_generation(base_url)
|
| |
|
| | print("\n" + "=" * 50)
|
| | print("API test completed!")
|
| |
|
| | if __name__ == "__main__":
|
| | main()
|
| |
|