Semantic-search-cache / src /semantic_cache.py
YENUGU SUJITH REDDY
Initial commit with Git LFS models
45fe8b6
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
class SemanticCache:
def __init__(self, similarity_threshold=0.70):
self.cache = []
self.similarity_threshold = similarity_threshold
self.hit_count = 0
self.miss_count = 0
def search(self, query_embedding):
"""
Check if a similar query exists in cache
"""
if len(self.cache) == 0:
self.miss_count += 1
return None
embeddings = [item["embedding"] for item in self.cache]
similarities = cosine_similarity(query_embedding, embeddings)[0]
best_idx = np.argmax(similarities)
best_score = similarities[best_idx]
if best_score >= self.similarity_threshold:
self.hit_count += 1
return {
"result": self.cache[best_idx]["result"],
"matched_query": self.cache[best_idx]["query"],
"similarity_score": float(best_score)
}
self.miss_count += 1
return None
def add(self, query, embedding, result):
"""
Store query and result in cache
"""
self.cache.append({
"query": query,
"embedding": embedding[0],
"result": result
})
def stats(self):
total = self.hit_count + self.miss_count
hit_rate = self.hit_count / total if total > 0 else 0
return {
"total_entries": len(self.cache),
"hit_count": self.hit_count,
"miss_count": self.miss_count,
"hit_rate": hit_rate
}
def clear(self):
self.cache = []
self.hit_count = 0
self.miss_count = 0