#[derive(Debug, Clone)]
pub enum ObservationData {
LayerOutput {
layer_idx: usize,
position: usize,
values: Vec<f32>,
rms: f32,
checksum: i64,
},
FinalLogits {
position: usize,
values: Vec<f32>,
rms: f32,
checksum: i64,
},
AttnQ { layer_idx: usize, values: Vec<f32> },
AttnK { layer_idx: usize, values: Vec<f32> },
AttnV { layer_idx: usize, values: Vec<f32> },
OutputText { step: usize, text: String },
}
impl ObservationData {
pub fn rms(v: &[f32]) -> f32 {
let sq: f32 = v.iter().map(|x| x * x).sum();
(sq / v.len() as f32).sqrt()
}
pub fn checksum(v: &[f32]) -> i64 {
v.iter()
.map(|x| x.to_bits() as i64)
.fold(0i64, |a, b| a.wrapping_add(b))
}
}