Full implementation of Project AETHER — Contrastive CSI Embedding Model. ## Phases Delivered 1. ProjectionHead (64→128→128) + L2 normalization 2. CsiAugmenter (5 physically-motivated augmentations) 3. InfoNCE contrastive loss + SimCLR pretraining 4. FingerprintIndex (4 index types: env, activity, temporal, person) 5. RVF SEG_EMBED (0x0C) + CLI integration 6. Cross-modal alignment (PoseEncoder + InfoNCE) 7. Deep RuVector: MicroLoRA, EWC++, drift detection, hard-negative mining, SEG_LORA ## Stats - 276 tests passing (191 lib + 51 bin + 16 rvf + 18 vitals) - 3,342 additions across 8 files - Zero unsafe/unwrap/panic/todo stubs - ~55KB INT8 model for ESP32 edge deployment Also fixes deprecated GitHub Actions (v3→v4) and adds feat/* branch CI triggers. Closes #50
90 lines
2.8 KiB
Markdown
90 lines
2.8 KiB
Markdown
# wifi-densepose-config
|
|
|
|
[](https://crates.io/crates/wifi-densepose-config)
|
|
[](https://docs.rs/wifi-densepose-config)
|
|
[](LICENSE)
|
|
|
|
Configuration management for the WiFi-DensePose pose estimation system.
|
|
|
|
## Overview
|
|
|
|
`wifi-densepose-config` provides a unified configuration layer that merges values from environment
|
|
variables, TOML/YAML files, and CLI overrides into strongly-typed Rust structs. Built on the
|
|
[config](https://docs.rs/config), [dotenvy](https://docs.rs/dotenvy), and
|
|
[envy](https://docs.rs/envy) ecosystem from the workspace.
|
|
|
|
> **Status:** This crate is currently a stub. The intended API surface is documented below.
|
|
|
|
## Planned Features
|
|
|
|
- **Multi-source loading** -- Merge configuration from `.env`, TOML files, YAML files, and
|
|
environment variables with well-defined precedence.
|
|
- **Typed configuration** -- Strongly-typed structs for server, signal processing, neural network,
|
|
hardware, and database settings.
|
|
- **Validation** -- Schema validation with human-readable error messages on startup.
|
|
- **Hot reload** -- Watch configuration files for changes and notify dependent services.
|
|
- **Profile support** -- Named profiles (`development`, `production`, `testing`) with per-profile
|
|
overrides.
|
|
- **Secret filtering** -- Redact sensitive values (API keys, database passwords) in logs and debug
|
|
output.
|
|
|
|
## Quick Start
|
|
|
|
```rust
|
|
// Intended usage (not yet implemented)
|
|
use wifi_densepose_config::AppConfig;
|
|
|
|
fn main() -> anyhow::Result<()> {
|
|
// Loads from env, config.toml, and CLI overrides
|
|
let config = AppConfig::load()?;
|
|
|
|
println!("Server bind: {}", config.server.bind_address);
|
|
println!("CSI sample rate: {} Hz", config.signal.sample_rate);
|
|
println!("Model path: {}", config.nn.model_path.display());
|
|
|
|
Ok(())
|
|
}
|
|
```
|
|
|
|
## Planned Configuration Structure
|
|
|
|
```toml
|
|
# config.toml
|
|
|
|
[server]
|
|
bind_address = "0.0.0.0:3000"
|
|
websocket_path = "/ws/poses"
|
|
|
|
[signal]
|
|
sample_rate = 100
|
|
subcarrier_count = 56
|
|
hampel_window = 5
|
|
|
|
[nn]
|
|
model_path = "./models/densepose.rvf"
|
|
backend = "ort" # ort | candle | tch
|
|
batch_size = 8
|
|
|
|
[hardware]
|
|
esp32_udp_port = 5005
|
|
serial_baud = 921600
|
|
|
|
[database]
|
|
url = "sqlite://data/wifi-densepose.db"
|
|
max_connections = 5
|
|
```
|
|
|
|
## Related Crates
|
|
|
|
| Crate | Role |
|
|
|-------|------|
|
|
| [`wifi-densepose-core`](../wifi-densepose-core) | Shared types and traits |
|
|
| [`wifi-densepose-api`](../wifi-densepose-api) | REST API (consumer) |
|
|
| [`wifi-densepose-db`](../wifi-densepose-db) | Database layer (consumer) |
|
|
| [`wifi-densepose-cli`](../wifi-densepose-cli) | CLI (consumer) |
|
|
| [`wifi-densepose-sensing-server`](../wifi-densepose-sensing-server) | Sensing server (consumer) |
|
|
|
|
## License
|
|
|
|
MIT OR Apache-2.0
|