1use std::collections::HashMap;
5use std::sync::{Arc, Mutex};
6
7use crate::map::TokenizerMap;
8
9#[derive(Debug, Clone, Default, PartialEq, Eq)]
14pub struct CodecFrame {
15 pub ids: Vec<u32>,
17 pub done: bool,
19 pub finish_reason: Option<String>,
21}
22
23impl CodecFrame {
24 pub fn new(ids: Vec<u32>, done: bool, finish_reason: Option<String>) -> Self {
25 Self { ids, done, finish_reason }
26 }
27}
28
29pub trait MapCache: Send + Sync {
33 fn get(&self, key: &str) -> Option<Arc<TokenizerMap>>;
35 fn set(&self, key: &str, map: Arc<TokenizerMap>);
37}
38
39pub use MapCache as IMapCache;
42
43#[derive(Debug, Default)]
45pub struct MemoryMapCache {
46 inner: Mutex<HashMap<String, Arc<TokenizerMap>>>,
47}
48
49impl MemoryMapCache {
50 pub fn new() -> Self {
51 Self { inner: Mutex::new(HashMap::new()) }
52 }
53}
54
55impl MapCache for MemoryMapCache {
56 fn get(&self, key: &str) -> Option<Arc<TokenizerMap>> {
57 self.inner.lock().ok()?.get(key).cloned()
58 }
59
60 fn set(&self, key: &str, map: Arc<TokenizerMap>) {
61 if let Ok(mut g) = self.inner.lock() {
62 g.insert(key.to_string(), map);
63 }
64 }
65}