diff --git a/redisvl/extensions/llmcache/semantic.py b/redisvl/extensions/llmcache/semantic.py index 023c1916..0a08f3f5 100644 --- a/redisvl/extensions/llmcache/semantic.py +++ b/redisvl/extensions/llmcache/semantic.py @@ -185,8 +185,8 @@ def delete(self) -> None: def _refresh_ttl(self, key: str) -> None: """Refresh the time-to-live for the specified key.""" - if self.ttl: - self._index.client.expire(key, self.ttl) # type: ignore + if self._ttl: + self._index.client.expire(key, self._ttl) # type: ignore def _vectorize_prompt(self, prompt: Optional[str]) -> List[float]: """Converts a text prompt to its vector representation using the diff --git a/tests/integration/test_llmcache.py b/tests/integration/test_llmcache.py index 2bb107fd..2f7c005c 100644 --- a/tests/integration/test_llmcache.py +++ b/tests/integration/test_llmcache.py @@ -19,7 +19,6 @@ def cache(vectorizer, redis_url): vectorizer=vectorizer, distance_threshold=0.2, redis_url=redis_url ) yield cache_instance - cache_instance.clear() # Clear cache after each test cache_instance._index.delete(True) # Clean up index @@ -37,7 +36,6 @@ def cache_with_ttl(vectorizer, redis_url): vectorizer=vectorizer, distance_threshold=0.2, ttl=2, redis_url=redis_url ) yield cache_instance - cache_instance.clear() # Clear cache after each test cache_instance._index.delete(True) # Clean up index @@ -54,6 +52,24 @@ def cache_with_redis_client(vectorizer, client, redis_url): cache_instance._index.delete(True) # Clean up index +# # Test handling invalid input for check method +def test_bad_ttl(cache): + with pytest.raises(ValueError): + cache.set_ttl(2.5) + + +def test_cache_ttl(cache_with_ttl): + assert cache_with_ttl.ttl == 2 + cache_with_ttl.set_ttl(5) + assert cache_with_ttl.ttl == 5 + + +def test_set_ttl(cache): + assert cache.ttl == None + cache.set_ttl(5) + assert cache.ttl == 5 + + # Test basic store and check functionality def test_store_and_check(cache, vectorizer): prompt = "This is a test prompt." @@ -95,6 +111,21 @@ def test_ttl_expiration(cache_with_ttl, vectorizer): assert len(check_result) == 0 +def test_ttl_expiration_after_update(cache_with_ttl, vectorizer): + prompt = "This is a test prompt." + response = "This is a test response." + vector = vectorizer.embed(prompt) + cache_with_ttl.set_ttl(4) + + assert cache_with_ttl.ttl == 4 + + cache_with_ttl.store(prompt, response, vector=vector) + sleep(5) + + check_result = cache_with_ttl.check(vector=vector) + assert len(check_result) == 0 + + # Test check behavior with no match def test_check_no_match(cache, vectorizer): vector = vectorizer.embed("Some random sentence.") @@ -111,12 +142,6 @@ def test_check_invalid_input(cache): cache.check(prompt="test", return_fields="bad value") -# Test handling invalid input for check method -def test_bad_ttl(cache): - with pytest.raises(ValueError): - cache.set_ttl(2.5) - - # Test storing with metadata def test_store_with_metadata(cache, vectorizer): prompt = "This is another test prompt."