[package] name = "ml-training-service" version.workspace = true edition.workspace = true rust-version.workspace = true authors.workspace = true license.workspace = true description = "ML Training Service - Model training orchestration and lifecycle management for HFT trading" [dependencies] # Core async and utilities - USE WORKSPACE tokio.workspace = true uuid.workspace = true serde.workspace = true serde_json.workspace = true chrono.workspace = true thiserror.workspace = true anyhow.workspace = true num_cpus.workspace = true clap.workspace = true rust_decimal.workspace = true # gRPC and protocol buffers - USE WORKSPACE tonic.workspace = true tonic-prost.workspace = true tonic-health.workspace = true tonic-reflection.workspace = true prost.workspace = true prost-types.workspace = true # Database and compression - USE WORKSPACE sqlx.workspace = true flate2.workspace = true # Async streams and utilities - USE WORKSPACE tokio-stream.workspace = true tokio-util.workspace = true async-stream.workspace = true futures.workspace = true async-trait.workspace = true tokio-retry.workspace = true # Logging, tracing and metrics - USE WORKSPACE tracing.workspace = true tracing-subscriber.workspace = true metrics.workspace = true metrics-exporter-prometheus.workspace = true prometheus.workspace = true once_cell.workspace = true # Utilities - USE WORKSPACE base64.workspace = true rand.workspace = true regex.workspace = true axum.workspace = true # Health endpoint HTTP server # Redis for job queue persistence redis = { version = "0.27", features = ["tokio-comp", "connection-manager"] } # Unix signal handling (for stopping Optuna subprocesses gracefully) [target.'cfg(unix)'.dependencies] nix = { version = "0.29", features = ["signal"] } # Cryptography - Production-grade encryption aes-gcm = "0.10" chacha20poly1305 = "0.10" pbkdf2 = { version = "0.12", features = ["simple"] } sha2 = "0.10" zeroize = { version = "1.6", features = ["alloc"] } # X.509 certificate parsing for mTLS x509-parser = "0.16" reqwest = { version = "0.12", features = ["rustls-tls"], default-features = false } rustls = { version = "0.23", features = ["ring"] } # PyTorch dependencies REMOVED - unacceptable for HFT latency requirements # All ML training uses ml-core native CUDA autograd # Internal workspace crates trading_engine.workspace = true risk.workspace = true ml = { path = "../../crates/ml", default-features = false, features = ["financial"] } # Minimal ML for compilation — CPU only data.workspace = true config = { workspace = true, features = ["postgres"] } common = { workspace = true, features = ["database"] } storage.workspace = true # Add missing storage dependency # Model functionality from ml-data ml-data = { path = "../../crates/ml-data" } # Object store dependencies for S3 integration object_store = { workspace = true, features = ["aws"] } bytes.workspace = true # DBN (Databento Binary) for real market data loading dbn = "0.42.0" # K8s API for job dispatch kube = { version = "0.98", features = ["runtime", "client", "derive"] } k8s-openapi = { version = "0.24", features = ["latest"] } [build-dependencies] # NOTE: Tonic 0.14+ uses tonic-prost-build instead of tonic-build tonic-prost-build.workspace = true prost-build.workspace = true [[bin]] name = "ml-training-service" path = "src/main.rs" [dev-dependencies] tempfile.workspace = true tower.workspace = true # Use workspace version (0.4) tower-test = "0.4.0" # Match workspace tower version jsonwebtoken = "9.3" sysinfo = "0.30" # For stress test memory monitoring arrow.workspace = true # For test data generation (Parquet) parquet.workspace = true # For Parquet file writing [features] default = ["minimal"] # Production default: real data loading minimal = ["ml/financial"] gpu = ["ml/simd"] # GPU features use ml-core native CUDA autograd debug = [] mock-data = [] # Enable mock training data for testing (DO NOT USE IN PRODUCTION)