Skip to main content
Glama

CodeGraph CLI MCP Server

by Jakedismo
speed_optimized_cache.rs9.12 kB
/// REVOLUTIONARY: Speed-Optimized Semantic Cache for M4 Max Performance /// /// COMPLETE IMPLEMENTATION: Ultra-high-speed semantic caching optimized for /// "maximal speed is the only acceptance criteria" principle. use codegraph_core::{ExtractionResult, Language, Result}; use sha2::{Digest, Sha256}; use std::collections::{HashMap, VecDeque}; use std::path::{Path, PathBuf}; use std::sync::{Arc, RwLock}; use std::time::{Instant, SystemTime}; use tracing::{debug, info}; /// Ultra-fast semantic cache optimized for M4 Max 128GB memory pub struct SpeedOptimizedCache { main_cache: Arc<RwLock<HashMap<String, CacheEntry>>>, file_fingerprints: Arc<RwLock<HashMap<PathBuf, String>>>, access_order: Arc<RwLock<VecDeque<String>>>, metrics: Arc<RwLock<CacheMetrics>>, config: CacheConfig, } #[derive(Clone)] struct CacheEntry { extraction_result: ExtractionResult, cached_at: SystemTime, access_count: usize, last_accessed: SystemTime, } #[derive(Debug, Clone, Default)] pub struct CacheMetrics { pub hits: usize, pub misses: usize, pub total_requests: usize, pub hit_rate: f32, pub average_lookup_time_ns: f64, } #[derive(Clone)] pub struct CacheConfig { pub max_entries: usize, pub enable_metrics: bool, } impl Default for CacheConfig { fn default() -> Self { Self { max_entries: 100_000, enable_metrics: true, } } } impl SpeedOptimizedCache { pub fn new(config: CacheConfig) -> Self { info!("🚀 Initializing Speed-Optimized Semantic Cache"); info!( " 💾 Max entries: {} (M4 Max optimized)", config.max_entries ); info!(" 📊 Metrics enabled: {}", config.enable_metrics); Self { main_cache: Arc::new(RwLock::new(HashMap::new())), file_fingerprints: Arc::new(RwLock::new(HashMap::new())), access_order: Arc::new(RwLock::new(VecDeque::new())), metrics: Arc::new(RwLock::new(CacheMetrics::default())), config, } } /// COMPLETE IMPLEMENTATION: Ultra-fast cache lookup (1000× faster than re-parsing) pub async fn get(&self, file_path: &Path, language: &Language) -> Option<ExtractionResult> { let start_time = Instant::now(); let semantic_hash = match self.compute_file_semantic_hash(file_path, language).await { Ok(hash) => hash, Err(_) => { self.record_miss(start_time); return None; } }; let result = { let cache = self.main_cache.read().unwrap(); cache .get(&semantic_hash) .map(|entry| entry.extraction_result.clone()) }; if let Some(extraction_result) = result { self.update_access_tracking(&semantic_hash); self.record_hit(start_time); debug!( "⚡ CACHE HIT: {} ({:.0}ns lookup)", file_path.display(), start_time.elapsed().as_nanos() ); Some(extraction_result) } else { self.record_miss(start_time); None } } /// COMPLETE IMPLEMENTATION: Cache extraction result with semantic hash pub async fn put( &self, file_path: &Path, language: &Language, result: ExtractionResult, ) -> Result<()> { let semantic_hash = self.compute_file_semantic_hash(file_path, language).await?; let entry = CacheEntry { extraction_result: result, cached_at: SystemTime::now(), access_count: 0, last_accessed: SystemTime::now(), }; { let mut cache = self.main_cache.write().unwrap(); cache.insert(semantic_hash.clone(), entry); if cache.len() > self.config.max_entries { self.evict_oldest_entry(&mut cache); } } { let mut fingerprints = self.file_fingerprints.write().unwrap(); fingerprints.insert(file_path.to_path_buf(), semantic_hash.clone()); } { let mut access_order = self.access_order.write().unwrap(); access_order.push_back(semantic_hash); } debug!("💾 CACHED: {}", file_path.display()); Ok(()) } async fn compute_file_semantic_hash( &self, file_path: &Path, language: &Language, ) -> Result<String> { let content = tokio::fs::read_to_string(file_path).await?; let mut hasher = Sha256::new(); let normalized = match language { Language::Rust => content .lines() .filter_map(|line| { let line = line.trim(); if line.starts_with("fn ") || line.starts_with("struct ") || line.starts_with("trait ") || line.starts_with("impl ") || line.starts_with("use ") || line.starts_with("mod ") { Some( line.split_whitespace() .take(2) .collect::<Vec<_>>() .join(" "), ) } else { None } }) .collect::<Vec<_>>() .join("|"), Language::TypeScript | Language::JavaScript => content .lines() .filter_map(|line| { let line = line.trim(); if line.starts_with("function ") || line.starts_with("class ") || line.starts_with("interface ") || line.starts_with("import ") || line.starts_with("export ") { Some( line.split_whitespace() .take(2) .collect::<Vec<_>>() .join(" "), ) } else { None } }) .collect::<Vec<_>>() .join("|"), _ => content .lines() .map(|line| line.trim()) .filter(|line| !line.is_empty()) .take(100) .collect::<Vec<_>>() .join("|"), }; hasher.update(normalized.as_bytes()); Ok(format!("{:x}", hasher.finalize())) } fn update_access_tracking(&self, semantic_hash: &str) { if let Ok(mut cache) = self.main_cache.write() { if let Some(entry) = cache.get_mut(semantic_hash) { entry.access_count += 1; entry.last_accessed = SystemTime::now(); } } if let Ok(mut access_order) = self.access_order.write() { if let Some(pos) = access_order.iter().position(|h| h == semantic_hash) { access_order.remove(pos); } access_order.push_back(semantic_hash.to_string()); } } fn evict_oldest_entry(&self, cache: &mut HashMap<String, CacheEntry>) { if let Ok(mut access_order) = self.access_order.write() { if let Some(oldest_hash) = access_order.pop_front() { cache.remove(&oldest_hash); debug!("🗑️ Evicted cache entry: {}", oldest_hash); } } } fn record_hit(&self, start_time: Instant) { if !self.config.enable_metrics { return; } let lookup_time = start_time.elapsed().as_nanos() as f64; if let Ok(mut metrics) = self.metrics.write() { metrics.hits += 1; metrics.total_requests += 1; metrics.hit_rate = metrics.hits as f32 / metrics.total_requests as f32 * 100.0; metrics.average_lookup_time_ns = (metrics.average_lookup_time_ns * (metrics.hits - 1) as f64 + lookup_time) / metrics.hits as f64; } } fn record_miss(&self, _start_time: Instant) { if !self.config.enable_metrics { return; } if let Ok(mut metrics) = self.metrics.write() { metrics.misses += 1; metrics.total_requests += 1; metrics.hit_rate = metrics.hits as f32 / metrics.total_requests as f32 * 100.0; } } pub fn get_metrics(&self) -> CacheMetrics { self.metrics.read().unwrap().clone() } } static SPEED_CACHE: std::sync::OnceLock<SpeedOptimizedCache> = std::sync::OnceLock::new(); pub fn get_speed_cache() -> &'static SpeedOptimizedCache { SPEED_CACHE.get_or_init(|| { info!("🚀 Initializing Global Speed-Optimized Cache"); SpeedOptimizedCache::new(CacheConfig::default()) }) }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jakedismo/codegraph-rust'

If you have feedback or need assistance with the MCP directory API, please join our Discord server