use std::sync::Arc;
use std::time::SystemTime;
use tokio::sync::mpsc;
use oxillama_runtime::sampling::SamplerConfig;
use crate::metrics::Metrics;
use crate::queue::{BatchRequest, VocabBytes};
pub struct AppState {
pub queue: mpsc::Sender<BatchRequest>,
pub model_id: String,
pub loaded_at: u64,
pub default_sampler: SamplerConfig,
pub vocab_bytes: Option<VocabBytes>,
pub hidden_size: usize,
pub metrics: Arc<Metrics>,
}
impl AppState {
pub fn new(
queue: mpsc::Sender<BatchRequest>,
model_id: String,
default_sampler: SamplerConfig,
vocab_bytes: Option<VocabBytes>,
hidden_size: usize,
) -> Self {
let loaded_at = SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.map(|d| d.as_secs())
.unwrap_or(0);
Self {
queue,
model_id,
loaded_at,
default_sampler,
vocab_bytes,
hidden_size,
metrics: Arc::new(Metrics::new()),
}
}
}