1111logger = logging .getLogger (__name__ )
1212
1313_redis_instance = None
14+ _redis_creation_failed = False
1415_instance_lock = Lock ()
1516
16-
1717def 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
7075def 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