sharedkernel 1.0.0__tar.gz → 1.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/PKG-INFO +3 -1
  2. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/setup.py +3 -3
  3. sharedkernel-1.1.0/sharedkernel/database/__init__.py +2 -0
  4. sharedkernel-1.0.0/sharedkernel/database/repository_base.py → sharedkernel-1.1.0/sharedkernel/database/mongo_repository_base.py +1 -1
  5. sharedkernel-1.1.0/sharedkernel/database/vector_database_repository/__init__.py +3 -0
  6. sharedkernel-1.1.0/sharedkernel/database/vector_database_repository/chroma_startegy.py +39 -0
  7. sharedkernel-1.1.0/sharedkernel/database/vector_database_repository/milvus_strategy.py +50 -0
  8. sharedkernel-1.1.0/sharedkernel/database/vector_database_repository/vector_database_repository.py +28 -0
  9. sharedkernel-1.1.0/sharedkernel/database/vector_database_repository/vector_database_strategy.py +22 -0
  10. sharedkernel-1.1.0/sharedkernel/enum/__init__.py +2 -0
  11. sharedkernel-1.1.0/sharedkernel/enum/vector_database_type.py +5 -0
  12. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel.egg-info/PKG-INFO +3 -1
  13. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel.egg-info/SOURCES.txt +10 -3
  14. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel.egg-info/requires.txt +2 -0
  15. sharedkernel-1.0.0/test/test.py +0 -12
  16. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/README.md +0 -0
  17. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/setup.cfg +0 -0
  18. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/common.py +0 -0
  19. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/config.py +0 -0
  20. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/database/adapter.py +0 -0
  21. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/enum/error_code.py +0 -0
  22. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/exception/__init__.py +0 -0
  23. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/exception/exception.py +0 -0
  24. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/exception/exception_handlers.py +0 -0
  25. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/jwt_service.py +0 -0
  26. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/objects/__init__.py +0 -0
  27. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/objects/base_document.py +0 -0
  28. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/objects/jwt_model.py +0 -0
  29. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/objects/result.py +0 -0
  30. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel/string_extentions.py +0 -0
  31. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel.egg-info/dependency_links.txt +0 -0
  32. {sharedkernel-1.0.0 → sharedkernel-1.1.0}/sharedkernel.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sharedkernel
3
- Version: 1.0.0
3
+ Version: 1.1.0
4
4
  Summary: sharekernel is an shared package between all python projects
5
5
  Author: Smilinno
6
6
  Requires-Dist: numpy
@@ -8,3 +8,5 @@ Requires-Dist: requests
8
8
  Requires-Dist: pymongo
9
9
  Requires-Dist: fastapi==0.89.1
10
10
  Requires-Dist: PyJWT
11
+ Requires-Dist: pymilvus
12
+ Requires-Dist: chromadb
@@ -4,10 +4,10 @@ setup(
4
4
  # Needed to silence warnings (and to be a worthwhile package)
5
5
  name='sharedkernel',
6
6
  author='Smilinno',
7
- packages=['sharedkernel','sharedkernel.database','sharedkernel.enum','sharedkernel.exception','sharedkernel.objects'],
7
+ packages=['sharedkernel','sharedkernel.database','sharedkernel.database.vector_database_repository','sharedkernel.enum','sharedkernel.exception','sharedkernel.objects'],
8
8
  # Needed for dependencies
9
- install_requires=['numpy','requests','pymongo','fastapi==0.89.1','PyJWT'],
9
+ install_requires=['numpy','requests','pymongo','fastapi==0.89.1','PyJWT','pymilvus','chromadb'],
10
10
  # *strongly* suggested for sharing
11
- version='1.0.0',
11
+ version='1.1.0',
12
12
  description='sharekernel is an shared package between all python projects',
13
13
  )
@@ -0,0 +1,2 @@
1
+ from .vector_database_repository import VectorRepository
2
+ # from .mongo_repository_base import MongoRepositoryBase
@@ -19,7 +19,7 @@ ResultT = TypeVar("ResultT")
19
19
 
20
20
  T = TypeVar("T", bound=BaseModel)
21
21
 
22
- class RepositoryBase(Generic[T]):
22
+ class MongoRepositoryBase(Generic[T]):
23
23
 
24
24
  def __init__(self,model):
25
25
  self.model = model
@@ -0,0 +1,3 @@
1
+ from .chroma_startegy import ChromaStrategy
2
+ from .milvus_strategy import MilvusStrategy
3
+ from .vector_database_repository import VectorRepository
@@ -0,0 +1,39 @@
1
+ import chromadb
2
+ import numpy as np
3
+ from chromadb.config import Settings
4
+ from .vector_database_strategy import VectorDatabaseStrategy
5
+ import uuid
6
+
7
+
8
+ class ChromaStrategy(VectorDatabaseStrategy):
9
+ def __init__(self, collection_name: str):
10
+ self.collection_name = collection_name
11
+ self.collection = None
12
+
13
+ def connect(self, host: str = "localhost", port: int = 8000):
14
+ client = chromadb.Client(
15
+ Settings(
16
+ chroma_api_impl="rest",
17
+ chroma_server_host=host,
18
+ chroma_server_http_port=port,
19
+ )
20
+ )
21
+ self.collection = client.get_or_create_collection(self.collection_name)
22
+
23
+ def insert_vector(self, vector: np.ndarray, metadata: dict) -> str:
24
+ id = str(uuid.uuid4())
25
+ self.collection.upsert(ids=id, embeddings=vector.tolist(), metadatas=[metadata])
26
+
27
+ return id
28
+
29
+ def search_vector(self, vector: np.ndarray, top_k: int):
30
+ results = self.collection.query(vectors=[vector.tolist()], n_results=top_k)
31
+ return results
32
+
33
+ def get_vector_by_id(self, id: str):
34
+ result = self.collection.get(ids=id)
35
+
36
+ return result
37
+
38
+ def delete_vector(self, id: str):
39
+ self.collection.delete(ids=id)
@@ -0,0 +1,50 @@
1
+ import numpy as np
2
+ from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
3
+
4
+ from .vector_database_strategy import VectorDatabaseStrategy
5
+ import uuid
6
+
7
+
8
+ class MilvusStrategy(VectorDatabaseStrategy):
9
+ def __init__(self, collection_name: str):
10
+ self.collection_name = collection_name
11
+ self.collection = None
12
+
13
+ def connect(self, host: str = "localhost", port: str = "19530"):
14
+ connections.connect(alias="default", host=host, port=port)
15
+ # Define fields
16
+ fields = [
17
+ FieldSchema(
18
+ name="id", dtype=DataType.VARCHAR, max_length=36, is_primary=True
19
+ ),
20
+ FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128),
21
+ ]
22
+ schema = CollectionSchema(
23
+ fields, description="Vector collection", enable_dynamic_field=True
24
+ )
25
+ self.collection = Collection(name=self.collection_name, schema=schema)
26
+
27
+ if not self.collection.has_index():
28
+ self.collection.create_index(field_name="vector", index_params={"index_type": "IVF_FLAT", "metric_type": "L2", "params": {"nlist": 128}})
29
+
30
+ self.collection.load()
31
+
32
+ def insert_vector(self, vector: np.ndarray, metadata: dict) -> str:
33
+ id = str(uuid.uuid4())
34
+ self.collection.insert(data={"id": id, "vector": vector.tolist()})
35
+
36
+ return id
37
+
38
+ def search_vector(self, vector: np.ndarray, top_k: int):
39
+ search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
40
+ results = self.collection.search(
41
+ [vector.tolist()], "vector", search_params, top_k
42
+ )
43
+ return results
44
+
45
+ def get_vector_by_id(self, id: str):
46
+ result = self.collection.query(expr=f"id=='{id}'",output_fields=["vector"])
47
+ return result
48
+
49
+ def delete_vector(self, id: str):
50
+ self.collection.delete(expr=f"id=='{id}'")
@@ -0,0 +1,28 @@
1
+ import numpy as np
2
+ from .vector_database_strategy import VectorDatabaseStrategy
3
+ from .milvus_strategy import MilvusStrategy
4
+ from .chroma_startegy import ChromaStrategy
5
+ from sharedkernel.enum.vector_database_type import VectorDatabaseType
6
+
7
+ class VectorRepository:
8
+ def __init__(self, database_type: VectorDatabaseType, collection_name: str, **connection_params):
9
+ self.strategy = self._get_strategy(database_type, collection_name)
10
+ self.strategy.connect(**connection_params)
11
+
12
+ def _get_strategy(self, database_type: VectorDatabaseType, collection_name: str) -> VectorDatabaseStrategy:
13
+ if database_type == VectorDatabaseType.MILVUS:
14
+ return MilvusStrategy(collection_name)
15
+ else:
16
+ return ChromaStrategy(collection_name)
17
+
18
+ def add_vector(self, vector: np.ndarray, metadata: dict) -> str:
19
+ return self.strategy.insert_vector(vector, metadata)
20
+
21
+ def find_similar_vectors(self, vector: np.ndarray, top_k: int):
22
+ return self.strategy.search_vector(vector, top_k)
23
+
24
+ def remove_vector(self, id: str):
25
+ self.strategy.delete_vector(id)
26
+
27
+ def get_vector_by_id(self, id: str):
28
+ return self.strategy.get_vector_by_id(id)
@@ -0,0 +1,22 @@
1
+ from abc import ABC, abstractmethod
2
+ import numpy as np
3
+
4
+ class VectorDatabaseStrategy(ABC):
5
+ @abstractmethod
6
+ def connect(self, **kwargs):
7
+ pass
8
+ @abstractmethod
9
+ def insert_vector(self, vector: np.ndarray, metadata: dict) -> str:
10
+ pass
11
+
12
+ @abstractmethod
13
+ def search_vector(self, vector: np.ndarray, top_k: int):
14
+ pass
15
+
16
+ @abstractmethod
17
+ def delete_vector(self, id: str):
18
+ pass
19
+
20
+ @abstractmethod
21
+ def get_vector_by_id(self, id: str):
22
+ pass
@@ -0,0 +1,2 @@
1
+ from .error_code import ErrorCode
2
+ from .vector_database_type import VectorDatabaseType
@@ -0,0 +1,5 @@
1
+ from enum import Enum
2
+
3
+ class VectorDatabaseType(Enum):
4
+ MILVUS = "milvus"
5
+ CHROMA = "chroma"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sharedkernel
3
- Version: 1.0.0
3
+ Version: 1.1.0
4
4
  Summary: sharekernel is an shared package between all python projects
5
5
  Author: Smilinno
6
6
  Requires-Dist: numpy
@@ -8,3 +8,5 @@ Requires-Dist: requests
8
8
  Requires-Dist: pymongo
9
9
  Requires-Dist: fastapi==0.89.1
10
10
  Requires-Dist: PyJWT
11
+ Requires-Dist: pymilvus
12
+ Requires-Dist: chromadb
@@ -9,14 +9,21 @@ sharedkernel.egg-info/SOURCES.txt
9
9
  sharedkernel.egg-info/dependency_links.txt
10
10
  sharedkernel.egg-info/requires.txt
11
11
  sharedkernel.egg-info/top_level.txt
12
+ sharedkernel/database/__init__.py
12
13
  sharedkernel/database/adapter.py
13
- sharedkernel/database/repository_base.py
14
+ sharedkernel/database/mongo_repository_base.py
15
+ sharedkernel/database/vector_database_repository/__init__.py
16
+ sharedkernel/database/vector_database_repository/chroma_startegy.py
17
+ sharedkernel/database/vector_database_repository/milvus_strategy.py
18
+ sharedkernel/database/vector_database_repository/vector_database_repository.py
19
+ sharedkernel/database/vector_database_repository/vector_database_strategy.py
20
+ sharedkernel/enum/__init__.py
14
21
  sharedkernel/enum/error_code.py
22
+ sharedkernel/enum/vector_database_type.py
15
23
  sharedkernel/exception/__init__.py
16
24
  sharedkernel/exception/exception.py
17
25
  sharedkernel/exception/exception_handlers.py
18
26
  sharedkernel/objects/__init__.py
19
27
  sharedkernel/objects/base_document.py
20
28
  sharedkernel/objects/jwt_model.py
21
- sharedkernel/objects/result.py
22
- test/test.py
29
+ sharedkernel/objects/result.py
@@ -3,3 +3,5 @@ requests
3
3
  pymongo
4
4
  fastapi==0.89.1
5
5
  PyJWT
6
+ pymilvus
7
+ chromadb
@@ -1,12 +0,0 @@
1
- from fastapi import FastAPI,Depends
2
-
3
- from sharedkernel import jwt_service
4
- from sharedkernel.objects import JwtModel
5
- from sharedkernel import config
6
- app = FastAPI(title="Domain Apis",dependencies=[Depends(jwt_service.JWTBearer(JwtModel(secret_key=config.JWT_SECRETKEY,
7
- algorithms=config.JWT_ALGORITHM,
8
- audience=config.JWT_AUDIENCE,
9
- issuer=config.JWT_ISSURE)))])
10
-
11
- # history = api_client.bots()
12
- # print("Chat history:", history)
File without changes
File without changes