Skip to content

Commit 2c2dbe4

Browse files
authored
Merge pull request #1696 from arc53/fixes-cache
Fixes cache
2 parents fe02bf9 + f2b05ad commit 2c2dbe4

File tree

2 files changed

+40
-32
lines changed

2 files changed

+40
-32
lines changed

application/api/answer/routes.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,6 @@ def post(self):
706706

707707
retriever = RetrieverCreator.create_retriever(
708708
retriever_name,
709-
question=question,
710709
source=source,
711710
chat_history=[],
712711
prompt="default",
@@ -716,7 +715,7 @@ def post(self):
716715
user_api_key=user_api_key,
717716
)
718717

719-
docs = retriever.search()
718+
docs = retriever.search(question)
720719
retriever_params = retriever.get_params()
721720

722721
user_logs_collection.insert_one(

application/cache.py

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,25 @@
1111
logger = logging.getLogger(__name__)
1212

1313
_redis_instance = None
14+
_redis_creation_failed = False
1415
_instance_lock = Lock()
1516

16-
1717
def get_redis_instance():
18-
global _redis_instance
19-
if _redis_instance is None:
18+
global _redis_instance, _redis_creation_failed
19+
if _redis_instance is None and not _redis_creation_failed:
2020
with _instance_lock:
21-
if _redis_instance is None:
21+
if _redis_instance is None and not _redis_creation_failed:
2222
try:
2323
_redis_instance = redis.Redis.from_url(
2424
settings.CACHE_REDIS_URL, socket_connect_timeout=2
2525
)
26+
except ValueError as e:
27+
logger.error(f"Invalid Redis URL: {e}")
28+
_redis_creation_failed = True # Stop future attempts
29+
_redis_instance = None
2630
except redis.ConnectionError as e:
2731
logger.error(f"Redis connection error: {e}")
28-
_redis_instance = None
32+
_redis_instance = None # Keep trying for connection errors
2933
return _redis_instance
3034

3135

@@ -43,34 +47,39 @@ def gen_cache(func):
4347
def wrapper(self, model, messages, stream, tools=None, *args, **kwargs):
4448
try:
4549
cache_key = gen_cache_key(messages, model, tools)
46-
redis_client = get_redis_instance()
47-
if redis_client:
48-
try:
49-
cached_response = redis_client.get(cache_key)
50-
if cached_response:
51-
return cached_response.decode("utf-8")
52-
except redis.ConnectionError as e:
53-
logger.error(f"Redis connection error: {e}")
50+
except ValueError as e:
51+
logger.error(f"Cache key generation failed: {e}")
52+
return func(self, model, messages, stream, tools, *args, **kwargs)
5453

55-
result = func(self, model, messages, stream, tools, *args, **kwargs)
56-
if redis_client and isinstance(result, str):
57-
try:
58-
redis_client.set(cache_key, result, ex=1800)
59-
except redis.ConnectionError as e:
60-
logger.error(f"Redis connection error: {e}")
54+
redis_client = get_redis_instance()
55+
if redis_client:
56+
try:
57+
cached_response = redis_client.get(cache_key)
58+
if cached_response:
59+
return cached_response.decode("utf-8")
60+
except Exception as e:
61+
logger.error(f"Error getting cached response: {e}")
6162

62-
return result
63-
except ValueError as e:
64-
logger.error(e)
65-
return "Error: No user message found in the conversation to generate a cache key."
63+
result = func(self, model, messages, stream, tools, *args, **kwargs)
64+
if redis_client and isinstance(result, str):
65+
try:
66+
redis_client.set(cache_key, result, ex=1800)
67+
except Exception as e:
68+
logger.error(f"Error setting cache: {e}")
69+
70+
return result
6671

6772
return wrapper
6873

6974

7075
def stream_cache(func):
7176
def wrapper(self, model, messages, stream, tools=None, *args, **kwargs):
72-
cache_key = gen_cache_key(messages, model, tools)
73-
logger.info(f"Stream cache key: {cache_key}")
77+
try:
78+
cache_key = gen_cache_key(messages, model, tools)
79+
except ValueError as e:
80+
logger.error(f"Cache key generation failed: {e}")
81+
result = func(self, model, messages, stream, tools=tools, *args, **kwargs)
82+
return result
7483

7584
redis_client = get_redis_instance()
7685
if redis_client:
@@ -83,21 +92,21 @@ def wrapper(self, model, messages, stream, tools=None, *args, **kwargs):
8392
yield chunk
8493
time.sleep(0.03)
8594
return
86-
except redis.ConnectionError as e:
87-
logger.error(f"Redis connection error: {e}")
95+
except Exception as e:
96+
logger.error(f"Error getting cached stream: {e}")
8897

8998
result = func(self, model, messages, stream, tools=tools, *args, **kwargs)
9099
stream_cache_data = []
91100

92101
for chunk in result:
93-
stream_cache_data.append(chunk)
94102
yield chunk
103+
stream_cache_data.append(str(chunk))
95104

96105
if redis_client:
97106
try:
98107
redis_client.set(cache_key, json.dumps(stream_cache_data), ex=1800)
99108
logger.info(f"Stream cache saved for key: {cache_key}")
100-
except redis.ConnectionError as e:
101-
logger.error(f"Redis connection error: {e}")
109+
except Exception as e:
110+
logger.error(f"Error setting stream cache: {e}")
102111

103112
return wrapper

0 commit comments

Comments
 (0)