-
Notifications
You must be signed in to change notification settings - Fork 158
/
Copy pathvector_db_service_utils.py
64 lines (55 loc) · 2.53 KB
/
vector_db_service_utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Copyright (c) 2021-2023, NVIDIA CORPORATION.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import importlib
import typing
import morpheus.service
class VectorDBServiceFactory:
@typing.overload
@classmethod
def create_instance(
cls, service_name: typing.Literal["milvus"], *args: typing.Any,
**kwargs: dict[str, typing.Any]) -> "morpheus.service.milvus_vector_db_service.MilvusVectorDBService":
pass
@classmethod
def create_instance(cls, service_name: str, *args: typing.Any, **kwargs: dict[str, typing.Any]):
"""
Factory for creating instances of vector database service classes. This factory allows dynamically
creating instances of vector database service classes based on the provided service name.
Each service name corresponds to a specific implementation class.
Parameters
----------
service_name : str
The name of the vector database service to create.
*args : typing.Any
Variable-length argument list to pass to the service constructor.
**kwargs : dict[str, typing.Any]
Arbitrary keyword arguments to pass to the service constructor.
Returns
-------
An instance of the specified vector database service class.
Raises
------
ValueError
If the specified service name is not found or does not correspond to a valid service class.
"""
try:
module_name = f"morpheus.service.{service_name}_vector_db_service"
module = importlib.import_module(module_name)
class_name = f"{service_name.capitalize()}VectorDBService"
class_ = getattr(module, class_name)
instance = class_(*args, **kwargs)
return instance
except (ModuleNotFoundError, AttributeError) as exc:
raise ValueError(f"Service {service_name} not found. Ensure that the corresponding service class," +
f"such as {module_name}, has been implemented.") from exc