7-gate conviction system, autonomous feedback loop with kill switch,
and Rust-native model registry — backed by PostgreSQL + QuestDB.
Resolve merge conflicts in hyperopt/adapters/mod.rs and enhanced_ml.rs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Scale model_memory_mb by activation_multiplier in resolve_batch_size()
so TFT (2.5x) gets proportionally smaller batches than DQN (1.0x)
- Add cached_capabilities() with OnceLock to avoid spawning nvidia-smi
on every call to CampaignConfig::dqn_default/ppo_default/PpoTrainer::new
- Add PartialEq to GpuCapabilities and simplify serde roundtrip test
- Update stale "RTX 3050 Ti" and "Exceeds GPU limit (230)" comments
to reflect dynamic detection
- Document Auto variant silent CPU fallback behavior (no callers affected)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add DeviceConfig and GpuCapabilities re-exports to ml::prelude so
downstream crates can import GPU management types via a single
`use ml::prelude::*` statement.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace hardcoded max_batch_size: 230 in CampaignConfig::dqn_default()
and ppo_default() with dynamic GPU detection via GpuCapabilities::detect()
and resolve_batch_size(). Update test to no longer assert <= 230.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace Device::cuda_if_available(0).unwrap_or(Device::Cpu) with
DeviceConfig::Auto.resolve().unwrap_or(Device::Cpu) in DQN, PPO, TFT,
and Mamba2 ensemble inference adapters so device selection goes through
the centralized GPU detection module.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add check_gradients_finite() to gradient_utils.rs that detects NaN/Inf
in GradStore before optimizer step. Uses efficient sum_all approach
where any NaN element produces a NaN sum. Includes 3 unit tests
(finite pass, NaN detected, empty vars pass).
DQN and PPO training loops already wired via gradient_accumulation
module's check_gradients_finite (all 6 paths: standard policy/value,
remainder policy/value, LSTM policy/value).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add check_gradients_finite() utility that scans GradStore for NaN/Inf
values. Wire into DQN (after gradient accumulation, before optimizer step)
and PPO (both MLP and LSTM training paths, after backward pass).
Prevents silent model corruption from exploding gradients or numerical
instability — training halts immediately with a descriptive error.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace local DeviceConfig enum definition in liquid/candle_cfc.rs with
a re-export from the central crate::gpu::DeviceConfig, eliminating
duplication while preserving all existing API and tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add optional correlation matrix parameter to mean-variance optimization.
When provided, builds full covariance matrix (Sigma[i][j] = corr[i][j] *
vol_i * vol_j) instead of diagonal-only. Existing API unchanged — callers
pass None by default. New allocate_with_correlations() public method for
correlated optimization. Five new tests: identity-matches-diagonal,
correlated-differs-from-diagonal, invalid dimensions, non-square matrix,
and non-MeanVariance delegation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- NoiseScheduler: precomputed cosine/linear alpha_bar schedules
- Denoiser: FC network with sinusoidal time embedding + SiLU + residual
- DDIMSampler: deterministic fast sampling (10 steps from 1000 timesteps)
- DiffusionTrainableAdapter: UnifiedTrainable for unified training pipeline
- Hyperopt adapter with ParameterSpace (9 params, batch ≤64 for 4GB GPU)
- ModelType::Diffusion registered in common + coordinator
- 41 tests passing (config=3, noise=7, denoiser=4, sampler=5, trainable=12, hyperopt=7)
- OOM-safe: FC denoiser instead of U-Net, small hidden dims, conservative defaults
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 2-3 of ensemble expansion:
- KAN (Kolmogorov-Arnold Network): B-spline basis, layer, network, trainable adapter
- TLOB UnifiedTrainable adapter with 3D input support (batch, seq, features)
- Hyperopt adapters for both KAN and TLOB (ParameterSpace + metrics)
- ModelType::KAN variant registered in common, coordinator, lib.rs
- 44 new tests, all passing, zero warnings
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Closes the integration gap between Liquid CfC and DQN/PPO by adding:
- LiquidTrainer with gRPC progress callbacks, early stopping, and
checkpoint management (ml/src/trainers/liquid.rs)
- LiquidModel wrapper in enhanced_ml.rs for hot-loading from safetensors
- Ensemble weight rebalance: DQN 0.25, PPO 0.25, TFT 0.20, Mamba2 0.15,
Liquid-CfC 0.15
Verified: 81 liquid unit tests + 3 integration tests + 211 trading_service
tests pass, 0 compile errors across workspace.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements TGGNTrainableAdapter wrapping a candle-based projection
network (input→hidden→ReLU→output) with full UnifiedTrainable interface
including checkpoint save/load, validation, and gradient tracking.
11 tests covering forward, backward, optimizer step, checkpoint
roundtrip, validation, learning rate, and metrics collection.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add load_from_safetensors() to DQNAgent for weight loading via VarMap
- Update RealDQNModel::from_checkpoint to try safetensors first, fall back to JSON
- Replace std::mem::forget(prediction_shutdown_tx) with proper Vec-based storage
that sends shutdown signal and drops senders during graceful shutdown
- Wire order_manager.get_open_orders() into emergency_stop response so callers
see which orders were active when the kill switch engaged
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add CandleCfCTrainer to training.rs with Candle-based gradient training
- Update mod.rs with full CfC v2 re-exports (CandleCfCNetwork, CfCCell, etc.)
- Fix CUDA variance bug (undefined variable) and kernel compilation stub
- Add 3 integration tests: full training loop, checkpoint roundtrip, validation
- 3 new unit tests for CandleCfCTrainer (creation, single epoch, loss decrease)
73 liquid tests pass, 0 errors, 0 clippy warnings in liquid module.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove 520 lines of ndarray-based placeholder code that never performed real
gradient descent. Production training uses Candle-based trainers in ml::trainers/.
Deleted: SimpleNeuralNetwork, TrainingPipeline, NetworkConfig, ActivationType,
TrainingMetrics, NetworkInterface, MockNetwork, and 9 associated tests.
Kept: DeviceCapabilities, TrainingConfig, sub-module re-exports.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace load_and_split_data() mock that generated 2000 synthetic samples
with an error-returning stub directing users to ml_training_service.
The binary retains its real infrastructure (TFTTrainer, CLI, checkpoint
storage, progress callbacks) — only the fake data generation is removed.
-120 lines of mock data, +16 lines error stub with documentation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix leftover conflict markers from rebase onto main. Align as_str()
with main's semantics (general-purpose model names), add separate
s3_prefix() for S3 storage paths, and fix to_db_string() to preserve
per-variant database values.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Full adapter bridging CandleCfCNetwork to the unified training pipeline
with VarMap-based checkpointing, AdamW optimizer, and gradient norm
tracking. Includes 10 unit tests covering creation, training steps,
validation, metrics, learning rate, checkpoint roundtrip, and error cases.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Bridge the ML crate's parking_lot::RwLock-based CircuitBreaker to the
shared CircuitBreakerTrait from common. Maps synchronous methods
(allow_request, record_success, etc.) to the async trait interface and
converts CircuitState variants to common::CircuitBreakerState.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Consolidate 4 separate ModelType enum definitions (ml 15 variants,
model_loader 7, campaign 2, job_spawner 4) into a single canonical
definition in common/src/model_types.rs with the union of all variants
and all methods (file_extension, as_str, to_db_string, weight, from_str,
Display).
- ml/src/lib.rs: replace 15-variant enum with re-export
- model_loader/src/lib.rs: replace 7-variant enum with re-export,
update PascalCase names (Dqn->DQN, Tft->TFT, etc)
- ml/hyperopt/campaign.rs: replace 2-variant enum with re-export
- services/ml_training_service/job_spawner.rs: replace 4-variant enum
with re-export, MAMBA2->MAMBA
- Remove orphan impl ToString in ml/observability/metrics.rs (Display
now provided by canonical type)
- Update backtesting_service and model_loader tests for new names
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The ml crate had a stub ErrorCategory with only 1 variant (System).
Replace it with a re-export of the canonical 24-variant ErrorCategory
from common::error. Also rename the unused ErrorCategory in
data/src/providers/common.rs to ProviderErrorCategory to avoid
name collision.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Deduplicate four identical OrderType enums (Market/LimitMaker/IoC) into a
single definition at ml/src/common/action.rs with all methods from all copies
(transaction_cost, cost_bps, cost_decimal, from_index, Display). Original
locations now re-export via `pub use crate::common::action::OrderType`.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add 6 integration tests that verify model weights survive a full
checkpoint cycle (serialize -> save to disk -> load -> predict):
- DQN raw Q-network weight roundtrip via safetensors
- DQN adapter roundtrip via DqnInferenceAdapter::from_checkpoint
- DQN CheckpointManager + Checkpointable trait flow
- PPO actor/critic checkpoint roundtrip with exact output comparison
- PPO inference after checkpoint load (probability validation)
- PPO adapter deterministic prediction verification
Fix a bug in DQN::load_from_safetensors where inserting new Var
objects into the VarMap HashMap left the Linear layers pointing at
stale data. The fix uses VarMap::load() which correctly updates
existing Vars in-place via Var::set(), preserving the shared
Arc<RwLock<Storage>> between VarMap entries and Linear layer tensors.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds two gradient verification tests: test_cfc_gradient_flow confirms
backprop produces non-empty gradients for all parameters, and
test_cfc_optimizer_step_reduces_loss runs 10 AdamW steps and verifies
MSE loss decreases, proving the full CfC v2 compute graph is
differentiable end-to-end.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wraps CfCCell with output projection for end-to-end sequence processing.
forward_sequence unrolls the cell over [batch, seq_len, features] input
and projects the final hidden state to [batch, output_size]. Includes
forward() convenience method with default dt=0.01 for UnifiedTrainable
compatibility.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements CfCCell with the core h(t+dt) = h*decay + f*(1-decay) update
rule where decay = exp(-dt/tau) and tau is a learned sigmoid-scaled time
constant. Uses manual_sigmoid for CUDA compatibility.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>