use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use crate::map::TokenizerMap;
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct CodecFrame {
pub ids: Vec<u32>,
pub done: bool,
pub finish_reason: Option<String>,
}
impl CodecFrame {
pub fn new(ids: Vec<u32>, done: bool, finish_reason: Option<String>) -> Self {
Self { ids, done, finish_reason }
}
}
pub trait MapCache: Send + Sync {
fn get(&self, key: &str) -> Option<Arc<TokenizerMap>>;
fn set(&self, key: &str, map: Arc<TokenizerMap>);
}
pub use MapCache as IMapCache;
#[derive(Debug, Default)]
pub struct MemoryMapCache {
inner: Mutex<HashMap<String, Arc<TokenizerMap>>>,
}
impl MemoryMapCache {
pub fn new() -> Self {
Self { inner: Mutex::new(HashMap::new()) }
}
}
impl MapCache for MemoryMapCache {
fn get(&self, key: &str) -> Option<Arc<TokenizerMap>> {
self.inner.lock().ok()?.get(key).cloned()
}
fn set(&self, key: &str, map: Arc<TokenizerMap>) {
if let Ok(mut g) = self.inner.lock() {
g.insert(key.to_string(), map);
}
}
}