From 5d3aa5ffcf3fc0ec0e36920ee4e5d7bffce77d45 Mon Sep 17 00:00:00 2001 From: Tyler Hutcherson Date: Mon, 8 Jul 2024 12:28:08 -0400 Subject: [PATCH 1/2] improve caching ttl tests --- tests/integration/test_llmcache.py | 44 ++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/tests/integration/test_llmcache.py b/tests/integration/test_llmcache.py index 2bb107fd..feb16bf5 100644 --- a/tests/integration/test_llmcache.py +++ b/tests/integration/test_llmcache.py @@ -54,6 +54,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 +113,26 @@ 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(5) + + cache_with_ttl.store(prompt, response, vector=vector) + sleep(2) + + check_result = cache_with_ttl.check(vector=vector) + assert len(check_result) == 1 + print(check_result, flush=True) + assert response == check_result[0]["response"] + assert "metadata" not in check_result[0] + + 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 +149,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." From b417fd9223fe7ee4a9f5f3b5aa6f934d063039ca Mon Sep 17 00:00:00 2001 From: Tyler Hutcherson Date: Mon, 8 Jul 2024 21:42:54 -0400 Subject: [PATCH 2/2] fix test and rename var --- redisvl/extensions/llmcache/semantic.py | 4 ++-- tests/integration/test_llmcache.py | 17 +++++------------ 2 files changed, 7 insertions(+), 14 deletions(-) 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 feb16bf5..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,7 +52,7 @@ def cache_with_redis_client(vectorizer, client, redis_url): cache_instance._index.delete(True) # Clean up index -# Test handling invalid input for check method +# # Test handling invalid input for check method def test_bad_ttl(cache): with pytest.raises(ValueError): cache.set_ttl(2.5) @@ -117,18 +115,13 @@ 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(5) + cache_with_ttl.set_ttl(4) - cache_with_ttl.store(prompt, response, vector=vector) - sleep(2) - - check_result = cache_with_ttl.check(vector=vector) - assert len(check_result) == 1 - print(check_result, flush=True) - assert response == check_result[0]["response"] - assert "metadata" not in check_result[0] + 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