Source code for utils.cache

import hashlib
import diskcache as dc
from pathlib import Path
from typing import Union


[docs] def hash_text(text: str): return hashlib.sha256(f"{text}".encode()).hexdigest()
[docs] def hash_text_sha1(text: str): # 160 bits return hashlib.sha1(text.encode()).hexdigest()
[docs] def direct(text: str): return text
[docs] class CachedEngine: def __init__(self, cache_path: Union[str, Path]): super().__init__() self.cache_path = Path(cache_path) self.cache_path.parent.mkdir(parents=True, exist_ok=True) self.cache = dc.Cache(cache_path) def _check_cache(self, prompt: str): hash_key = hash_text(prompt) if hash_key in self.cache: return self.cache[hash_key] else: return None def _save_cache(self, prompt: str, response: str): hash_key = hash_text(prompt) self.cache[hash_key] = response def __getstate__(self): # Remove the cache from the state before pickling state = self.__dict__.copy() del state["cache"] return state def __setstate__(self, state): # Restore the cache after unpickling self.__dict__.update(state) self.cache = dc.Cache(self.cache_path)