Source code for gptcache.manager.scalar_data.base

from abc import ABCMeta, abstractmethod
from dataclasses import dataclass
from datetime import datetime
from enum import IntEnum
from typing import Optional, Any, List, Union, Dict

import numpy as np


[docs]class DataType(IntEnum): STR = 0 IMAGE_BASE64 = 1 IMAGE_URL = 2
[docs]@dataclass class Answer: """ data_type: 0: str 1: base64 image """ answer: Any answer_type: int = DataType.STR
[docs]@dataclass class QuestionDep: """ QuestionDep """ name: str data: str dep_type: int = DataType.STR
[docs] @classmethod def from_dict(cls, d: Dict): return cls(name=d["name"], data=d["data"], dep_type=d["dep_type"])
[docs]@dataclass class Question: """ Question """ content: str deps: Optional[List[QuestionDep]] = None
[docs] @classmethod def from_dict(cls, d: Dict): deps = [] for dep in d["deps"]: deps.append(QuestionDep.from_dict(dep)) return cls(d["content"], deps)
[docs]@dataclass class CacheData: """ CacheData """ question: Union[str, Question] answers: List[Answer] embedding_data: Optional[np.ndarray] = None session_id: Optional[str] = None create_on: Optional[datetime] = None last_access: Optional[datetime] = None def __init__( self, question, answers, embedding_data=None, session_id=None, create_on=None, last_access=None, ): self.question = question self.answers = [] if isinstance(answers, (str, Answer)): answers = [answers] for data in answers: if isinstance(data, (list, tuple)): self.answers.append(Answer(*data)) elif isinstance(data, Answer): self.answers.append(data) else: self.answers.append(Answer(answer=data)) self.embedding_data = embedding_data self.session_id = session_id self.create_on = create_on self.last_access = last_access
[docs]class CacheStorage(metaclass=ABCMeta): """ BaseStorage for scalar data. """
[docs] @abstractmethod def create(self): pass
[docs] @abstractmethod def batch_insert(self, all_data: List[CacheData]): pass
[docs] @abstractmethod def get_data_by_id(self, key): pass
[docs] @abstractmethod def mark_deleted(self, keys): pass
[docs] @abstractmethod def clear_deleted_data(self): pass
[docs] @abstractmethod def get_ids(self, deleted=True): pass
[docs] @abstractmethod def count(self, state: int = 0, is_all: bool = False): pass
[docs] def flush(self): pass
[docs] @abstractmethod def add_session(self, question_id, session_id, session_question): pass
[docs] @abstractmethod def list_sessions(self, session_id, key): pass
[docs] @abstractmethod def delete_session(self, keys): pass
[docs] @abstractmethod def report_cache( self, user_question, cache_question, cache_question_id, cache_answer, similarity_value, cache_delta_time, ): pass
[docs] @abstractmethod def close(self): pass