use std::num::NonZeroUsize;
use super::super::entities::ChatCompletionResponse;
use lru::LruCache;
use tokio::sync::RwLock;
use std::sync::Arc;
#[derive(Debug)]
pub struct ResponseCache {
cache: Arc<RwLock<LruCache<String, ChatCompletionResponse>>>,
}
impl ResponseCache {
pub fn new(capacity: usize) -> Self {
ResponseCache {
cache: Arc::new(RwLock::new(LruCache::new(NonZeroUsize::try_from(capacity).unwrap()))),
}
}
pub async fn get(&self, key: &str) -> Option<ChatCompletionResponse> {
let mut cache = self.cache.write().await;
cache.get(key).cloned()
}
pub async fn put(&self, key: String, value: ChatCompletionResponse) -> Result<(), super::super::error::LlmClientError> {
let mut cache = self.cache.write().await;
cache.put(key, value);
Ok(())
}
}