ai_client 0.1.0

A Rust crate for interacting with AI language model APIs
Documentation
use std::num::NonZeroUsize;
use super::super::entities::ChatCompletionResponse;
use lru::LruCache;
use tokio::sync::RwLock;
use std::sync::Arc;

/// Cache for storing API responses
#[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(())
    }
}