use super::streaming_config::StreamingConfig;
pub struct StreamingState {
pub sample_buffer: Vec<f32>,
pub sample_len: i64,
pub conv1_buffer: Vec<f32>,
pub conv2_buffer: Vec<f32>,
pub frame_count: i64,
pub accumulated_features: Vec<f32>,
pub accumulated_feature_count: i32,
pub encoder_frames_emitted: i32,
pub adapter_pos_offset: i64,
pub memory: Vec<f32>,
pub memory_len: i32,
pub k_self: Vec<f32>,
pub v_self: Vec<f32>,
pub cache_seq_len: i32,
pub k_cross: Vec<f32>,
pub v_cross: Vec<f32>,
pub cross_len: i32,
pub cross_kv_valid: bool,
}
impl StreamingState {
pub fn new(config: &StreamingConfig) -> Self {
let mut state = StreamingState {
sample_buffer: Vec::new(),
sample_len: 0,
conv1_buffer: Vec::new(),
conv2_buffer: Vec::new(),
frame_count: 0,
accumulated_features: Vec::new(),
accumulated_feature_count: 0,
encoder_frames_emitted: 0,
adapter_pos_offset: 0,
memory: Vec::new(),
memory_len: 0,
k_self: Vec::new(),
v_self: Vec::new(),
cache_seq_len: 0,
k_cross: Vec::new(),
v_cross: Vec::new(),
cross_len: 0,
cross_kv_valid: false,
};
state.reset(config);
state
}
pub fn reset(&mut self, config: &StreamingConfig) {
self.sample_buffer = vec![0.0f32; 79];
self.sample_len = 0;
self.conv1_buffer = vec![0.0f32; config.d_model_frontend * 4];
self.conv2_buffer = vec![0.0f32; config.c1 * 4];
self.frame_count = 0;
self.accumulated_features.clear();
self.accumulated_feature_count = 0;
self.encoder_frames_emitted = 0;
self.adapter_pos_offset = 0;
self.memory.clear();
self.memory_len = 0;
self.k_self.clear();
self.v_self.clear();
self.cache_seq_len = 0;
self.k_cross.clear();
self.v_cross.clear();
self.cross_len = 0;
self.cross_kv_valid = false;
}
pub fn decoder_reset(&mut self) {
self.k_self.clear();
self.v_self.clear();
self.cache_seq_len = 0;
}
}