use std::env;
use mistralrs_core::Response;
use tokio::sync::mpsc::Receiver;
use crate::types::SharedMistralRsState;
pub const DEFAULT_KEEP_ALIVE_INTERVAL_MS: u64 = 10_000;
pub enum DoneState {
Running,
SendingDone,
Done,
}
pub struct BaseStreamer<R, C, D> {
pub rx: Receiver<Response>,
pub done_state: DoneState,
pub state: SharedMistralRsState,
pub store_chunks: bool,
pub chunks: Vec<R>,
pub on_chunk: Option<C>,
pub on_done: Option<D>,
}
pub(crate) fn base_create_streamer<R, C, D>(
rx: Receiver<Response>,
state: SharedMistralRsState,
on_chunk: Option<C>,
on_done: Option<D>,
) -> BaseStreamer<R, C, D> {
let store_chunks = on_done.is_some();
BaseStreamer {
rx,
done_state: DoneState::Running,
store_chunks,
state,
chunks: Vec::new(),
on_chunk,
on_done,
}
}
pub fn get_keep_alive_interval() -> u64 {
env::var("KEEP_ALIVE_INTERVAL")
.map(|val| {
val.parse::<u64>().unwrap_or_else(|e| {
tracing::warn!("Failed to parse KEEP_ALIVE_INTERVAL: {}. Using default.", e);
DEFAULT_KEEP_ALIVE_INTERVAL_MS
})
})
.unwrap_or(DEFAULT_KEEP_ALIVE_INTERVAL_MS)
}