Spaces:
Sleeping
Sleeping
Commit
·
47b9de8
1
Parent(s):
1f5b266
Add caching
Browse files- cache_manager.py +47 -0
- main.py +5 -0
cache_manager.py
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from collections import OrderedDict
|
2 |
+
|
3 |
+
|
4 |
+
class CacheManager:
|
5 |
+
"""Simple cache manager with basic operations and LRU eviction."""
|
6 |
+
|
7 |
+
def __init__(self, max_size=100):
|
8 |
+
"""Initialize cache with maximum size."""
|
9 |
+
self.max_size = max_size
|
10 |
+
self.cache = OrderedDict()
|
11 |
+
|
12 |
+
def set(self, key, value):
|
13 |
+
"""Set a key-value pair in cache."""
|
14 |
+
# If key exists, remove it first
|
15 |
+
if key in self.cache:
|
16 |
+
del self.cache[key]
|
17 |
+
|
18 |
+
# If cache is full, remove oldest item
|
19 |
+
if len(self.cache) >= self.max_size:
|
20 |
+
self.cache.popitem(last=False) # Remove first (oldest) item
|
21 |
+
|
22 |
+
# Add new item
|
23 |
+
self.cache[key] = value
|
24 |
+
|
25 |
+
def get(self, key):
|
26 |
+
"""Get value by key. Returns None if not found."""
|
27 |
+
if key in self.cache:
|
28 |
+
# Move to end (mark as recently used)
|
29 |
+
value = self.cache.pop(key)
|
30 |
+
self.cache[key] = value
|
31 |
+
return value
|
32 |
+
return None
|
33 |
+
|
34 |
+
def delete(self, key):
|
35 |
+
"""Delete a key from cache. Returns True if deleted, False if not found."""
|
36 |
+
if key in self.cache:
|
37 |
+
del self.cache[key]
|
38 |
+
return True
|
39 |
+
return False
|
40 |
+
|
41 |
+
def clear(self):
|
42 |
+
"""Clear all items from cache."""
|
43 |
+
self.cache.clear()
|
44 |
+
|
45 |
+
def size(self):
|
46 |
+
"""Get current cache size."""
|
47 |
+
return len(self.cache)
|
main.py
CHANGED
@@ -27,6 +27,7 @@ import asyncio
|
|
27 |
|
28 |
# Import endpoints documentation
|
29 |
from endpoints_documentation import endpoints_documentation
|
|
|
30 |
|
31 |
# Set environment variables for HuggingFace
|
32 |
os.environ["HF_HOME"] = "/tmp/huggingface"
|
@@ -76,6 +77,7 @@ class HealthcareChatbot:
|
|
76 |
self.user_id = '8e5720d5-7243-42bd-97aa-10217309be82'
|
77 |
self.max_retries = 3
|
78 |
self.retry_delay = 2
|
|
|
79 |
|
80 |
# Store conversation history
|
81 |
self.conversation_history = []
|
@@ -684,12 +686,15 @@ class HealthcareChatbot:
|
|
684 |
def handle_conversation(self, user_query, detected_language, sentiment_result):
|
685 |
"""Handle conversational responses"""
|
686 |
try:
|
|
|
|
|
687 |
result = self.conversation_chain.invoke({
|
688 |
"user_query": user_query,
|
689 |
"detected_language": detected_language,
|
690 |
"sentiment_analysis": json.dumps(sentiment_result),
|
691 |
"conversation_history": self.get_conversation_context()
|
692 |
})
|
|
|
693 |
|
694 |
return result["text"].strip()
|
695 |
|
|
|
27 |
|
28 |
# Import endpoints documentation
|
29 |
from endpoints_documentation import endpoints_documentation
|
30 |
+
from cache_manager import CacheManager
|
31 |
|
32 |
# Set environment variables for HuggingFace
|
33 |
os.environ["HF_HOME"] = "/tmp/huggingface"
|
|
|
77 |
self.user_id = '8e5720d5-7243-42bd-97aa-10217309be82'
|
78 |
self.max_retries = 3
|
79 |
self.retry_delay = 2
|
80 |
+
self.cache = CacheManager()
|
81 |
|
82 |
# Store conversation history
|
83 |
self.conversation_history = []
|
|
|
686 |
def handle_conversation(self, user_query, detected_language, sentiment_result):
|
687 |
"""Handle conversational responses"""
|
688 |
try:
|
689 |
+
if self.cache.get(user_query):
|
690 |
+
return self.cache.get(user_query)
|
691 |
result = self.conversation_chain.invoke({
|
692 |
"user_query": user_query,
|
693 |
"detected_language": detected_language,
|
694 |
"sentiment_analysis": json.dumps(sentiment_result),
|
695 |
"conversation_history": self.get_conversation_context()
|
696 |
})
|
697 |
+
self.cache.set(user_query, result["text"].strip())
|
698 |
|
699 |
return result["text"].strip()
|
700 |
|