model2service 0.0.1__py3-none-any.whl

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.
@@ -0,0 +1,9 @@
1
+ from .src import *
2
+
3
+ def service2model_mlflowredis(cls) -> Model2Service:
4
+ return Model2Service(
5
+ service_registry=RedisServices(),
6
+ model_repository=MlflowRepository()
7
+ )
8
+
9
+ DefaultModel2Service: Model2Service = service2model_mlflowredis()
@@ -0,0 +1,5 @@
1
+ from .model_repositories import *
2
+ from .service_registries import *
3
+ from .model2service import *
4
+
5
+
@@ -0,0 +1,33 @@
1
+ from __future__ import annotations
2
+
3
+ import abc
4
+ from .service_registries import ServiceRegistry, ModelServiceRegistry
5
+ from .model_repositories import ModelRepository, Model
6
+
7
+ from pydantic import BaseModel
8
+
9
+ # class Model2ServiceMapping(BaseModel):
10
+ # service_registry: ServiceRegistry
11
+ # model_repository: ModelRepository
12
+
13
+
14
+ class Model2Service():
15
+
16
+ def __init__(self,
17
+ service_registry: ServiceRegistry,
18
+ model_repository: ModelRepository
19
+ ):
20
+ self.mode
21
+
22
+ def model_save(self, model: Model):
23
+ self.model_repository.save(model)
24
+
25
+ def model_load(self, model_name: str) -> Model:
26
+ return self.model_repository.load(model_name)
27
+
28
+ def service_register(self, model_service_registry: ModelServiceRegistry):
29
+ self.service_registry.register(model_service_registry)
30
+
31
+ def service_discover(self, model_name: str) -> ModelServiceRegistry:
32
+ return self.service_registry.discovery(model_name)
33
+
@@ -0,0 +1,2 @@
1
+ from .model_repository import *
2
+ from .mlflow_repository import *
@@ -0,0 +1,12 @@
1
+ from mlflow.pyfunc.model import PythonModel, PythonModelContext
2
+ from .model_repository import Model
3
+
4
+ from .model_repository import ModelRepository
5
+
6
+ class MlflowRepository(ModelRepository):
7
+ def save(self, model: Model):
8
+ pass
9
+
10
+ def load(self) -> Model:
11
+ pass
12
+
@@ -0,0 +1,12 @@
1
+ import abc
2
+
3
+ class Model:
4
+ name: str
5
+
6
+ class ModelRepository(abc.ABC):
7
+
8
+ @abc.abstractmethod
9
+ def save(self, model: Model): ...
10
+
11
+ @abc.abstractmethod
12
+ def load(self, model_name: str) -> Model: ...
@@ -0,0 +1,2 @@
1
+ from .service_registry import *
2
+ from .redis_registry import *
@@ -0,0 +1,39 @@
1
+ from .service_registry import ServiceRegistry, ModelServiceRegistry
2
+ import redis
3
+ import os
4
+ from typing import Optional
5
+
6
+ ENVIRONMENT_VARIABLE_HOST = "REDIS_HOST"
7
+ ENVIRONMENT_VARIABLE_PORT = "REDIS_PORT"
8
+
9
+ class RedisServices(ServiceRegistry):
10
+ _instace = None
11
+
12
+ def __new__(cls):
13
+ if cls._instance is None:
14
+ instance = super().__new__(cls)
15
+ instance.client = redis.Redis(
16
+ host=instance.host,
17
+ port=int(instance.port),
18
+ decode_responses=True
19
+ )
20
+ cls._instance = instance
21
+ return cls._instance
22
+
23
+ def register(self, model_service: ModelServiceRegistry):
24
+ # registra o nome do modelo e a fila no serviço
25
+ key = f"model_queue:{model_service.service_name}"
26
+ self.client.set(key, model_service.queue_name)
27
+
28
+ def discovery(self, service_name: str) -> Optional[str]:
29
+ # retorna o nome da fila associada ao modelo
30
+ key = f"model_queue:{service_name}"
31
+ return self.client.get(key)
32
+
33
+ @property
34
+ def host(self):
35
+ return os.getenv(ENVIRONMENT_VARIABLE_HOST)
36
+
37
+ @property
38
+ def port(self):
39
+ return os.getenv(ENVIRONMENT_VARIABLE_PORT)
@@ -0,0 +1,27 @@
1
+ import abc
2
+ from pydantic import BaseModel
3
+ from collections.abc import Callable
4
+ from typing import Optional
5
+ from pika.spec import BasicProperties
6
+
7
+
8
+ #TODO this class does not belong in this file, maybe a MessageConsumer interface
9
+ class CallBackArguments(BaseModel):
10
+ body : bytes
11
+ #TODO make less coupling, maybe use dict[str, Any] for now
12
+ properties: BasicProperties
13
+
14
+ class ModelServiceRegistry(BaseModel):
15
+ service_name: str
16
+ queue_name: str
17
+ #TODO 'process' does not belong in this class, this class is only for registration
18
+ process: Callable[[CallBackArguments], Optional[BaseModel]]
19
+
20
+ @abc.abstractmethod
21
+ class ServiceRegistry(abc.ABC):
22
+
23
+ @abc.abstractmethod
24
+ def register(self, model_service: ModelServiceRegistry): ...
25
+
26
+ @abc.abstractmethod
27
+ def discovery(self, service_name: str) -> Optional[str]: ...
@@ -0,0 +1,17 @@
1
+ Metadata-Version: 2.4
2
+ Name: model2service
3
+ Version: 0.0.1
4
+ Author-email: Diego Pinheiro <diego.silva@unicap.br>
5
+ Project-URL: Homepage, https://github.com/projeto-carcara/model2service
6
+ Keywords: service
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Operating System :: OS Independent
10
+ Requires-Python: >=3.9
11
+ Description-Content-Type: text/markdown
12
+ Requires-Dist: pydantic==2.13.2
13
+ Requires-Dist: debugpy==1.8.20
14
+ Requires-Dist: pika==1.3.2
15
+ Requires-Dist: redis==7.4.0
16
+
17
+ # model2service
@@ -0,0 +1,13 @@
1
+ model2service/__init__.py,sha256=5toIgenSzxa_HnWEoKNnmbiQhhA23u_UshDna0LxFyo,261
2
+ model2service/src/__init__.py,sha256=VL8NWeATFuncXuBV7M7U3WMWuJ0WpWNVUgcyt8eldYE,99
3
+ model2service/src/model2service.py,sha256=YV_uKYR1lu6CBxpeI9CbVF92F1kHSkSrmuFDbTDuchE,992
4
+ model2service/src/model_repositories/__init__.py,sha256=9oor5e8p4hoyHnb3WEdyXfRoJ8mJCpkXeH_Xdym7q7s,64
5
+ model2service/src/model_repositories/mlflow_repository.py,sha256=QnZW-tfyJ1KP2pG7uAuNN7RHJHDYoAcsc8KaxYX-hcI,282
6
+ model2service/src/model_repositories/model_repository.py,sha256=PbXsVnAgpvyUcUdiaxdRQb9uhzHME2P2Bm3DhPm7kxc,210
7
+ model2service/src/service_registries/__init__.py,sha256=Qxy8TPYAOUCSQVLCKQwO8I0MmaCUYsR9buD4vkDxXzc,61
8
+ model2service/src/service_registries/redis_registry.py,sha256=zfFMf2jXohv1Cgvrzn_oEGpUIxHqzFBD3bDI7BU2FVA,1206
9
+ model2service/src/service_registries/service_registry.py,sha256=_KXQ_IsV-3CUdBjZ-rhSI8V6VW3CBwN84ulB2xUKiiQ,841
10
+ model2service-0.0.1.dist-info/METADATA,sha256=ohujwzvDFZYG58626Ny72abFcIlbXBUHnBybqNMhB3g,544
11
+ model2service-0.0.1.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
12
+ model2service-0.0.1.dist-info/top_level.txt,sha256=U0j5cvdpPM8qMQ298RD6JqavG0TzGd_ijNhAw-hhPBQ,14
13
+ model2service-0.0.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ model2service