fix(rust): resolve WSL release build failures in sensing server
- add missing `ruvector-mincut` dependency for sensing server - fix mutable/immutable borrow conflicts in tracker and field model flows - use dynamic adaptive model class names in status response - add a narrow dead_code compatibility workaround to avoid rustc ICE in WSL - verify `cargo build --release` succeeds in WSL
This commit is contained in:
parent
2a05378bd2
commit
e619b9430c
|
|
@ -25,6 +25,7 @@ axum = { workspace = true }
|
||||||
tower-http = { version = "0.5", features = ["fs", "cors", "set-header"] }
|
tower-http = { version = "0.5", features = ["fs", "cors", "set-header"] }
|
||||||
tokio = { workspace = true, features = ["full", "process"] }
|
tokio = { workspace = true, features = ["full", "process"] }
|
||||||
futures-util = "0.3"
|
futures-util = "0.3"
|
||||||
|
ruvector-mincut = { workspace = true }
|
||||||
|
|
||||||
# Serialization
|
# Serialization
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,10 @@ pub mod vital_signs;
|
||||||
pub mod rvf_container;
|
pub mod rvf_container;
|
||||||
pub mod rvf_pipeline;
|
pub mod rvf_pipeline;
|
||||||
pub mod graph_transformer;
|
pub mod graph_transformer;
|
||||||
|
#[allow(dead_code)]
|
||||||
pub mod trainer;
|
pub mod trainer;
|
||||||
pub mod dataset;
|
pub mod dataset;
|
||||||
pub mod sona;
|
pub mod sona;
|
||||||
pub mod sparse_inference;
|
pub mod sparse_inference;
|
||||||
|
#[allow(dead_code)]
|
||||||
pub mod embedding;
|
pub mod embedding;
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
//! - Serves the static UI files (port 8080)
|
//! - Serves the static UI files (port 8080)
|
||||||
//!
|
//!
|
||||||
//! Replaces both ws_server.py and the Python HTTP server.
|
//! Replaces both ws_server.py and the Python HTTP server.
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
mod adaptive_classifier;
|
mod adaptive_classifier;
|
||||||
pub mod cli;
|
pub mod cli;
|
||||||
|
|
@ -1658,9 +1659,11 @@ async fn windows_wifi_task(state: SharedState, tick_ms: u64) {
|
||||||
|
|
||||||
// Populate persons from the sensing update (Kalman-smoothed via tracker).
|
// Populate persons from the sensing update (Kalman-smoothed via tracker).
|
||||||
let raw_persons = derive_pose_from_sensing(&update);
|
let raw_persons = derive_pose_from_sensing(&update);
|
||||||
|
let mut last_tracker_instant = s.last_tracker_instant.take();
|
||||||
let tracked = tracker_bridge::tracker_update(
|
let tracked = tracker_bridge::tracker_update(
|
||||||
&mut s.pose_tracker, &mut s.last_tracker_instant, raw_persons,
|
&mut s.pose_tracker, &mut last_tracker_instant, raw_persons,
|
||||||
);
|
);
|
||||||
|
s.last_tracker_instant = last_tracker_instant;
|
||||||
if !tracked.is_empty() {
|
if !tracked.is_empty() {
|
||||||
update.persons = Some(tracked);
|
update.persons = Some(tracked);
|
||||||
}
|
}
|
||||||
|
|
@ -1794,9 +1797,11 @@ async fn windows_wifi_fallback_tick(state: &SharedState, seq: u32) {
|
||||||
};
|
};
|
||||||
|
|
||||||
let raw_persons = derive_pose_from_sensing(&update);
|
let raw_persons = derive_pose_from_sensing(&update);
|
||||||
|
let mut last_tracker_instant = s.last_tracker_instant.take();
|
||||||
let tracked = tracker_bridge::tracker_update(
|
let tracked = tracker_bridge::tracker_update(
|
||||||
&mut s.pose_tracker, &mut s.last_tracker_instant, raw_persons,
|
&mut s.pose_tracker, &mut last_tracker_instant, raw_persons,
|
||||||
);
|
);
|
||||||
|
s.last_tracker_instant = last_tracker_instant;
|
||||||
if !tracked.is_empty() {
|
if !tracked.is_empty() {
|
||||||
update.persons = Some(tracked);
|
update.persons = Some(tracked);
|
||||||
}
|
}
|
||||||
|
|
@ -3214,7 +3219,7 @@ async fn adaptive_status(State(state): State<SharedState>) -> Json<serde_json::V
|
||||||
"trained_frames": model.trained_frames,
|
"trained_frames": model.trained_frames,
|
||||||
"accuracy": model.training_accuracy,
|
"accuracy": model.training_accuracy,
|
||||||
"version": model.version,
|
"version": model.version,
|
||||||
"classes": adaptive_classifier::CLASSES,
|
"classes": model.class_names,
|
||||||
"class_stats": model.class_stats,
|
"class_stats": model.class_stats,
|
||||||
})),
|
})),
|
||||||
None => Json(serde_json::json!({
|
None => Json(serde_json::json!({
|
||||||
|
|
@ -3600,9 +3605,9 @@ async fn udp_receiver_task(state: SharedState, udp_port: u16) {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Feed field model calibration if active (use per-node history for ESP32).
|
// Feed field model calibration if active (use per-node history for ESP32).
|
||||||
if let Some(ref mut fm) = s.field_model {
|
if let Some(frame_history) = s.node_states.get(&node_id).map(|ns| ns.frame_history.clone()) {
|
||||||
if let Some(ns) = s.node_states.get(&node_id) {
|
if let Some(ref mut fm) = s.field_model {
|
||||||
field_bridge::maybe_feed_calibration(fm, &ns.frame_history);
|
field_bridge::maybe_feed_calibration(fm, &frame_history);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3685,9 +3690,11 @@ async fn udp_receiver_task(state: SharedState, udp_port: u16) {
|
||||||
};
|
};
|
||||||
|
|
||||||
let raw_persons = derive_pose_from_sensing(&update);
|
let raw_persons = derive_pose_from_sensing(&update);
|
||||||
|
let mut last_tracker_instant = s.last_tracker_instant.take();
|
||||||
let tracked = tracker_bridge::tracker_update(
|
let tracked = tracker_bridge::tracker_update(
|
||||||
&mut s.pose_tracker, &mut s.last_tracker_instant, raw_persons,
|
&mut s.pose_tracker, &mut last_tracker_instant, raw_persons,
|
||||||
);
|
);
|
||||||
|
s.last_tracker_instant = last_tracker_instant;
|
||||||
if !tracked.is_empty() {
|
if !tracked.is_empty() {
|
||||||
update.persons = Some(tracked);
|
update.persons = Some(tracked);
|
||||||
}
|
}
|
||||||
|
|
@ -3848,9 +3855,9 @@ async fn udp_receiver_task(state: SharedState, udp_port: u16) {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Feed field model calibration if active (use per-node history for ESP32).
|
// Feed field model calibration if active (use per-node history for ESP32).
|
||||||
if let Some(ref mut fm) = s.field_model {
|
if let Some(frame_history) = s.node_states.get(&node_id).map(|ns| ns.frame_history.clone()) {
|
||||||
if let Some(ns) = s.node_states.get(&node_id) {
|
if let Some(ref mut fm) = s.field_model {
|
||||||
field_bridge::maybe_feed_calibration(fm, &ns.frame_history);
|
field_bridge::maybe_feed_calibration(fm, &frame_history);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3895,9 +3902,11 @@ async fn udp_receiver_task(state: SharedState, udp_port: u16) {
|
||||||
};
|
};
|
||||||
|
|
||||||
let raw_persons = derive_pose_from_sensing(&update);
|
let raw_persons = derive_pose_from_sensing(&update);
|
||||||
|
let mut last_tracker_instant = s.last_tracker_instant.take();
|
||||||
let tracked = tracker_bridge::tracker_update(
|
let tracked = tracker_bridge::tracker_update(
|
||||||
&mut s.pose_tracker, &mut s.last_tracker_instant, raw_persons,
|
&mut s.pose_tracker, &mut last_tracker_instant, raw_persons,
|
||||||
);
|
);
|
||||||
|
s.last_tracker_instant = last_tracker_instant;
|
||||||
if !tracked.is_empty() {
|
if !tracked.is_empty() {
|
||||||
update.persons = Some(tracked);
|
update.persons = Some(tracked);
|
||||||
}
|
}
|
||||||
|
|
@ -4031,9 +4040,11 @@ async fn simulated_data_task(state: SharedState, tick_ms: u64) {
|
||||||
|
|
||||||
// Populate persons from the sensing update (Kalman-smoothed via tracker).
|
// Populate persons from the sensing update (Kalman-smoothed via tracker).
|
||||||
let raw_persons = derive_pose_from_sensing(&update);
|
let raw_persons = derive_pose_from_sensing(&update);
|
||||||
|
let mut last_tracker_instant = s.last_tracker_instant.take();
|
||||||
let tracked = tracker_bridge::tracker_update(
|
let tracked = tracker_bridge::tracker_update(
|
||||||
&mut s.pose_tracker, &mut s.last_tracker_instant, raw_persons,
|
&mut s.pose_tracker, &mut last_tracker_instant, raw_persons,
|
||||||
);
|
);
|
||||||
|
s.last_tracker_instant = last_tracker_instant;
|
||||||
if !tracked.is_empty() {
|
if !tracked.is_empty() {
|
||||||
update.persons = Some(tracked);
|
update.persons = Some(tracked);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue