fastapi==0.104.1 uvicorn[standard]==0.24.0 sqlalchemy==2.0.23 asyncpg==0.29.0 alembic==1.12.1 pydantic==2.5.0 pydantic-settings==2.1.0 httpx==0.25.2 redis==5.0.1 aio-pika==9.3.0 prometheus-client==0.17.1 python-json-logger==2.0.4 # ML dependencies prophet==1.1.4 scikit-learn==1.3.2 pandas==2.1.4 numpy==1.24.4 joblib==1.3.2 scipy==1.11.4 # Utilities pytz==2023.3 python-dateutil==2.8.2# services/training/app/main.py """ Training Service Handles ML model training for bakery demand forecasting """ import logging from fastapi import FastAPI, BackgroundTasks from fastapi.middleware.cors import CORSMiddleware from app.core.config import settings from app.core.database import database_manager from app.api import training, models from app.services.messaging import message_publisher from shared.monitoring.logging import setup_logging from shared.monitoring.metrics import MetricsCollector # Setup logging setup_logging("training-service", settings.LOG_LEVEL) logger = logging.getLogger(__name__) # Create FastAPI app app = FastAPI( title="Training Service", description="ML model training service for bakery demand forecasting", version="1.0.0" ) # Initialize metrics collector metrics_collector = MetricsCollector("training-service") # CORS middleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Include routers app.include_router(training.router, prefix="/training", tags=["training"]) app.include_router(models.router, prefix="/models", tags=["models"]) @app.on_event("startup") async def startup_event(): """Application startup""" logger.info("Starting Training Service") # Create database tables await database_manager.create_tables() # Initialize message publisher await message_publisher.connect() # Start metrics server metrics_collector.start_metrics_server(8080) logger.info("Training Service started successfully") @