REFACTOR external service and improve websocket training
This commit is contained in:
@@ -6,7 +6,7 @@ Forecasting Operations API - Business operations for forecast generation and pre
|
||||
import structlog
|
||||
from fastapi import APIRouter, Depends, HTTPException, status, Query, Path, Request
|
||||
from typing import List, Dict, Any, Optional
|
||||
from datetime import date, datetime
|
||||
from datetime import date, datetime, timezone
|
||||
import uuid
|
||||
|
||||
from app.services.forecasting_service import EnhancedForecastingService
|
||||
@@ -50,6 +50,7 @@ async def generate_single_forecast(
|
||||
request: ForecastRequest,
|
||||
tenant_id: str = Path(..., description="Tenant ID"),
|
||||
request_obj: Request = None,
|
||||
current_user: dict = Depends(get_current_user_dep),
|
||||
enhanced_forecasting_service: EnhancedForecastingService = Depends(get_enhanced_forecasting_service)
|
||||
):
|
||||
"""Generate a single product forecast"""
|
||||
@@ -106,6 +107,7 @@ async def generate_multi_day_forecast(
|
||||
request: ForecastRequest,
|
||||
tenant_id: str = Path(..., description="Tenant ID"),
|
||||
request_obj: Request = None,
|
||||
current_user: dict = Depends(get_current_user_dep),
|
||||
enhanced_forecasting_service: EnhancedForecastingService = Depends(get_enhanced_forecasting_service)
|
||||
):
|
||||
"""Generate multiple daily forecasts for the specified period"""
|
||||
@@ -167,6 +169,7 @@ async def generate_batch_forecast(
|
||||
request: BatchForecastRequest,
|
||||
tenant_id: str = Path(..., description="Tenant ID"),
|
||||
request_obj: Request = None,
|
||||
current_user: dict = Depends(get_current_user_dep),
|
||||
enhanced_forecasting_service: EnhancedForecastingService = Depends(get_enhanced_forecasting_service)
|
||||
):
|
||||
"""Generate forecasts for multiple products in batch"""
|
||||
@@ -224,6 +227,7 @@ async def generate_realtime_prediction(
|
||||
prediction_request: Dict[str, Any],
|
||||
tenant_id: str = Path(..., description="Tenant ID"),
|
||||
request_obj: Request = None,
|
||||
current_user: dict = Depends(get_current_user_dep),
|
||||
prediction_service: PredictionService = Depends(get_enhanced_prediction_service)
|
||||
):
|
||||
"""Generate real-time prediction"""
|
||||
@@ -245,10 +249,12 @@ async def generate_realtime_prediction(
|
||||
detail=f"Missing required fields: {missing_fields}"
|
||||
)
|
||||
|
||||
prediction_result = await prediction_service.predict(
|
||||
prediction_result = await prediction_service.predict_with_weather_forecast(
|
||||
model_id=prediction_request["model_id"],
|
||||
model_path=prediction_request.get("model_path", ""),
|
||||
features=prediction_request["features"],
|
||||
tenant_id=tenant_id,
|
||||
days=prediction_request.get("days", 7),
|
||||
confidence_level=prediction_request.get("confidence_level", 0.8)
|
||||
)
|
||||
|
||||
@@ -257,15 +263,15 @@ async def generate_realtime_prediction(
|
||||
|
||||
logger.info("Real-time prediction generated successfully",
|
||||
tenant_id=tenant_id,
|
||||
prediction_value=prediction_result.get("prediction"))
|
||||
days=len(prediction_result))
|
||||
|
||||
return {
|
||||
"tenant_id": tenant_id,
|
||||
"inventory_product_id": prediction_request["inventory_product_id"],
|
||||
"model_id": prediction_request["model_id"],
|
||||
"prediction": prediction_result.get("prediction"),
|
||||
"confidence": prediction_result.get("confidence"),
|
||||
"timestamp": datetime.utcnow().isoformat()
|
||||
"predictions": prediction_result,
|
||||
"days": len(prediction_result),
|
||||
"timestamp": datetime.now(timezone.utc).isoformat()
|
||||
}
|
||||
|
||||
except HTTPException:
|
||||
@@ -295,6 +301,7 @@ async def generate_realtime_prediction(
|
||||
async def generate_batch_predictions(
|
||||
predictions_request: List[Dict[str, Any]],
|
||||
tenant_id: str = Path(..., description="Tenant ID"),
|
||||
current_user: dict = Depends(get_current_user_dep),
|
||||
prediction_service: PredictionService = Depends(get_enhanced_prediction_service)
|
||||
):
|
||||
"""Generate batch predictions"""
|
||||
@@ -304,16 +311,17 @@ async def generate_batch_predictions(
|
||||
results = []
|
||||
for pred_request in predictions_request:
|
||||
try:
|
||||
prediction_result = await prediction_service.predict(
|
||||
prediction_result = await prediction_service.predict_with_weather_forecast(
|
||||
model_id=pred_request["model_id"],
|
||||
model_path=pred_request.get("model_path", ""),
|
||||
features=pred_request["features"],
|
||||
tenant_id=tenant_id,
|
||||
days=pred_request.get("days", 7),
|
||||
confidence_level=pred_request.get("confidence_level", 0.8)
|
||||
)
|
||||
results.append({
|
||||
"inventory_product_id": pred_request.get("inventory_product_id"),
|
||||
"prediction": prediction_result.get("prediction"),
|
||||
"confidence": prediction_result.get("confidence"),
|
||||
"predictions": prediction_result,
|
||||
"success": True
|
||||
})
|
||||
except Exception as e:
|
||||
|
||||
@@ -6,7 +6,7 @@ Business operations for "what-if" scenario testing and strategic planning
|
||||
import structlog
|
||||
from fastapi import APIRouter, Depends, HTTPException, status, Path, Request
|
||||
from typing import List, Dict, Any
|
||||
from datetime import date, datetime, timedelta
|
||||
from datetime import date, datetime, timedelta, timezone
|
||||
import uuid
|
||||
|
||||
from app.schemas.forecasts import (
|
||||
@@ -65,7 +65,7 @@ async def simulate_scenario(
|
||||
**PROFESSIONAL/ENTERPRISE ONLY**
|
||||
"""
|
||||
metrics = get_metrics_collector(request_obj)
|
||||
start_time = datetime.utcnow()
|
||||
start_time = datetime.now(timezone.utc)
|
||||
|
||||
try:
|
||||
logger.info("Starting scenario simulation",
|
||||
@@ -131,7 +131,7 @@ async def simulate_scenario(
|
||||
)
|
||||
|
||||
# Calculate processing time
|
||||
processing_time_ms = int((datetime.utcnow() - start_time).total_seconds() * 1000)
|
||||
processing_time_ms = int((datetime.now(timezone.utc) - start_time).total_seconds() * 1000)
|
||||
|
||||
if metrics:
|
||||
metrics.increment_counter("scenario_simulations_success_total")
|
||||
@@ -160,7 +160,7 @@ async def simulate_scenario(
|
||||
insights=insights,
|
||||
recommendations=recommendations,
|
||||
risk_level=risk_level,
|
||||
created_at=datetime.utcnow(),
|
||||
created_at=datetime.now(timezone.utc),
|
||||
processing_time_ms=processing_time_ms
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user