Refactor the code directory structure to better suit the current complexity
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
from .vector_base import VectorBase
|
||||
from ..object import ObjectID
|
||||
import chromadb
|
||||
import logging
|
||||
import os
|
||||
|
||||
|
||||
class ChromaVectorStore(VectorBase):
|
||||
def __init__(self, root_dir, model_name: str) -> None:
|
||||
super().__init__(model_name)
|
||||
|
||||
logging.info(
|
||||
"will init chroma vector store, model={}".format(model_name)
|
||||
)
|
||||
|
||||
directory = os.path.join(root_dir, "vector")
|
||||
logging.info("will use vector store: {}".format(directory))
|
||||
|
||||
client = chromadb.PersistentClient(
|
||||
path=directory, settings=chromadb.Settings(anonymized_telemetry=False)
|
||||
)
|
||||
# client = chromadb.Client()
|
||||
|
||||
collection_name = "coll_{}".format(model_name)
|
||||
logging.info("will init chroma colletion: %s", collection_name)
|
||||
|
||||
collection = client.get_or_create_collection(collection_name)
|
||||
self.collection = collection
|
||||
|
||||
async def insert(self, vector: [float], id: ObjectID):
|
||||
logging.info(f"will insert vector: {len(vector)} id: {str(id)}")
|
||||
logging.debug(f"vector is {vector}")
|
||||
self.collection.add(
|
||||
embeddings=vector,
|
||||
ids=str(id),
|
||||
)
|
||||
|
||||
async def query(self, vector: [float], top_k: int) -> [ObjectID]:
|
||||
ret = self.collection.query(
|
||||
query_embeddings=vector,
|
||||
n_results=top_k,
|
||||
)
|
||||
logging.info(f"query result {ret}")
|
||||
if len(ret['ids']) == 0:
|
||||
return []
|
||||
return list(map(ObjectID.from_base58, ret["ids"][0]))
|
||||
|
||||
async def delete(self, id: ObjectID):
|
||||
self.collection.delete(
|
||||
ids=id,
|
||||
)
|
||||
Reference in New Issue
Block a user