diff --git a/langchain/cache.py b/langchain/cache.py index 74d32d30..975dd6fa 100644 --- a/langchain/cache.py +++ b/langchain/cache.py @@ -205,23 +205,6 @@ class GPTCache(BaseCache): self.init_gptcache_func: Optional[Callable[[Any], None]] = init_func self.gptcache_dict: Dict[str, Any] = {} - @staticmethod - def _update_cache_callback_none(*_: Any, **__: Any) -> None: - """When updating cached data, do nothing. - - Because currently only cached queries are processed.""" - return None - - @staticmethod - def _llm_handle_none(*_: Any, **__: Any) -> None: - """Do nothing on a cache miss""" - return None - - @staticmethod - def _cache_data_converter(data: str) -> RETURN_VAL_TYPE: - """Convert the `data` in the cache to the `RETURN_VAL_TYPE` data format.""" - return [Generation(**generation_dict) for generation_dict in json.loads(data)] - def _get_gptcache(self, llm_string: str) -> Any: """Get a cache object. @@ -248,51 +231,29 @@ class GPTCache(BaseCache): First, retrieve the corresponding cache object using the `llm_string` parameter, and then retrieve the data from the cache based on the `prompt`. """ - from gptcache.adapter.adapter import adapt + from gptcache.adapter.api import get _gptcache = self.gptcache_dict.get(llm_string, None) if _gptcache is None: return None - res = adapt( - GPTCache._llm_handle_none, - GPTCache._cache_data_converter, - GPTCache._update_cache_callback_none, - cache_obj=_gptcache, - prompt=prompt, - ) - return res - - @staticmethod - def _update_cache_callback( - llm_data: RETURN_VAL_TYPE, - update_cache_func: Callable[[Any], None], - *args: Any, - **kwargs: Any, - ) -> None: - """Save the `llm_data` to cache storage""" - handled_data = json.dumps([generation.dict() for generation in llm_data]) - update_cache_func(handled_data) + res = get(prompt, cache_obj=_gptcache) + if res: + return [ + Generation(**generation_dict) for generation_dict in json.loads(res) + ] + return None def update(self, prompt: str, llm_string: str, return_val: RETURN_VAL_TYPE) -> None: """Update cache. First, retrieve the corresponding cache object using the `llm_string` parameter, and then store the `prompt` and `return_val` in the cache object. """ - from gptcache.adapter.adapter import adapt + from gptcache.adapter.api import put _gptcache = self._get_gptcache(llm_string) - - def llm_handle(*_: Any, **__: Any) -> RETURN_VAL_TYPE: - return return_val - - return adapt( - llm_handle, - GPTCache._cache_data_converter, - GPTCache._update_cache_callback, - cache_obj=_gptcache, - cache_skip=True, - prompt=prompt, - ) + handled_data = json.dumps([generation.dict() for generation in return_val]) + put(prompt, handled_data, cache_obj=_gptcache) + return None def clear(self, **kwargs: Any) -> None: """Clear cache."""