llm-app
45 строк · 1.1 Кб
1import functools2import os3from abc import ABC4
5import diskcache6import pathway as pw7
8
9class _Cache:10"""A simple cache"""11
12def __init__(self) -> None:13if cache_dir := os.environ.get("PATHWAY_CACHE_DIR"):14self.cache = diskcache.Cache(cache_dir)15elif cache_dir := os.environ.get("PATHWAY_PERSISTENT_STORAGE"):16self.cache = diskcache.Cache(cache_dir)17else:18self.cache = {}19
20def __call__(self, fun):21base_name = f"{fun.__module__}_{fun.__qualname__}"22
23@functools.wraps(fun)24def wrapper(*args, **kwargs):25key = f"{base_name}({(args, kwargs)})"26if key not in self.cache:27self.cache[key] = fun(*args, **kwargs)28return self.cache[key]29
30return wrapper31
32
33class BaseModel(ABC):34def __init__(self):35self.cache = _Cache()36
37def __call__(self, text: str, **kwargs):38raise NotImplementedError()39
40def apply(41self,42text: pw.ColumnExpression | str,43**kwargs,44) -> pw.ColumnExpression:45return pw.apply_async(self.cache(self.__call__), text=text, **kwargs)46