""" Add the event loop to the cache key, to prevent event loop closed errors. """ import asyncio from .in_memory_cache import InMemoryCache class LLMClientCache(InMemoryCache): def update_cache_key_with_event_loop(self, key): """ Add the event loop to the cache key, to prevent event loop closed errors. If none, use the key as is. """ try: event_loop = asyncio.get_event_loop() stringified_event_loop = str(id(event_loop)) return f"{key}-{stringified_event_loop}" except Exception: # handle no current event loop return key def set_cache(self, key, value, **kwargs): key = self.update_cache_key_with_event_loop(key) return super().set_cache(key, value, **kwargs) async def async_set_cache(self, key, value, **kwargs): key = self.update_cache_key_with_event_loop(key) return await super().async_set_cache(key, value, **kwargs) def get_cache(self, key, **kwargs): key = self.update_cache_key_with_event_loop(key) return super().get_cache(key, **kwargs) async def async_get_cache(self, key, **kwargs): key = self.update_cache_key_with_event_loop(key) return await super().async_get_cache(key, **kwargs)