Files
opendan/src/knowledge/store.py
T

69 lines
2.4 KiB
Python
Raw Normal View History

import os
2023-09-13 17:55:27 +08:00
from .object import ObjectStore, ObjectRelationStore
from .data import ChunkStore, ChunkTracker, ChunkListWriter, ChunkReader
2023-09-12 15:28:59 +08:00
from .vector import ChromaVectorStore, VectorBase
import logging
2023-09-11 02:05:24 +08:00
# KnowledgeStore class, which aggregates ChunkStore, ChunkTracker, and ObjectStore, and is a global singleton that makes it easy to use these three built-in store examples
class KnowledgeStore:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
directory = os.path.join(
os.path.dirname(__file__), "../../rootfs/data/"
)
directory = os.path.normpath(directory)
print(directory)
if not os.path.exists(directory):
os.makedirs(directory)
cls._instance.__singleton_init__(directory)
return cls._instance
def __singleton_init__(self, root_dir: str):
logging.info(f"will init knowledge store, root_dir={root_dir}")
self.root = root_dir
2023-09-13 17:55:27 +08:00
relation_store_dir = os.path.join(root_dir, "relation")
self.relation_store = ObjectRelationStore(relation_store_dir)
object_store_dir = os.path.join(root_dir, "object")
self.object_store = ObjectStore(object_store_dir)
chunk_store_dir = os.path.join(root_dir, "chunk")
self.chunk_store = ChunkStore(chunk_store_dir)
self.chunk_tracker = ChunkTracker(chunk_store_dir)
self.chunk_list_writer = ChunkListWriter(self.chunk_store, self.chunk_tracker)
self.chunk_reader = ChunkReader(self.chunk_store, self.chunk_tracker)
2023-09-12 15:28:59 +08:00
self.vector_store = {}
2023-09-13 17:55:27 +08:00
def get_relation_store(self) -> ObjectRelationStore:
return self.relation_store
def get_object_store(self) -> ObjectStore:
return self.object_store
def get_chunk_store(self) -> ChunkStore:
return self.chunk_store
def get_chunk_tracker(self) -> ChunkTracker:
return self.chunk_tracker
def get_chunk_list_writer(self) -> ChunkListWriter:
return self.chunk_list_writer
def get_chunk_reader(self) -> ChunkReader:
return self.chunk_reader
2023-09-12 15:28:59 +08:00
def get_vector_store(self, model_name: str) -> VectorBase:
if model_name not in self.vector_store:
self.vector_store[model_name] = ChromaVectorStore(model_name)
return self.vector_store[model_name]