Fix Redis caching always returning False due to unhandled string values#7022
Merged
Fix Redis caching always returning False due to unhandled string values#7022
Conversation
Contributor
Author
|
@ekzhu 👋 This repository doesn't have Copilot instructions. With Copilot instructions, I can understand the repository better, work faster and produce higher quality PRs. I can generate a .github/copilot-instructions.md file for you automatically. Click here to open a pre-filled issue and assign it to me. I'll write the instructions, and then tag you for review. |
Co-authored-by: ekzhu <320302+ekzhu@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Redis caching always return False due to unmet condition
Sep 16, 2025
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #7022 +/- ##
=======================================
Coverage 80.93% 80.93%
=======================================
Files 237 237
Lines 18240 18258 +18
=======================================
+ Hits 14762 14778 +16
- Misses 3478 3480 +2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
ekzhu
approved these changes
Sep 16, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Redis caching implementation was experiencing cache misses even when data existed in Redis, causing unnecessary LLM API calls and always returning
cached=False. This occurred because the_check_cachemethod inChatCompletionCachedidn't handle string values returned by the Redis store.Problem
When using Redis with
decode_responses=Trueor when Redis returns string data due to JSON decode errors, theRedisStore.get()method would return string values instead of dictionaries orCreateResultobjects. The_check_cachemethod only handled:dictobjects (converted toCreateResult)listobjects (processed for streaming scenarios)CreateResultorlist)When a string was returned, the method would fall through and return
None, cache_key, causing a cache miss even though valid data existed in Redis.Reproduction
Solution
Enhanced the
_check_cachemethod to handle string values by:isinstance(cached_result, str)checkjson.loads()CreateResultobjectsThe fix ensures that when Redis returns string representations of cached data, they are properly deserialized back into
CreateResultobjects, allowing cache hits to work correctly.Testing
Added comprehensive test coverage including:
CreateResultobjectsAfter the fix, the reproduction case now correctly shows:
cached=False(LLM called)cached=True(cache used)Fixes #6984.
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.