Spaces:
Running on Zero
Running on Zero
| # ===================================================== | |
| # Apckeyl Framework | |
| # Version 1.0 | |
| # control_plane.py | |
| # ===================================================== | |
| """ | |
| Apckeyl Control Plane. | |
| Version 1.0 | |
| Центральный слой управления Apckeyl Framework. | |
| На этом этапе Control Plane: | |
| - принимает тип задачи; | |
| - ищет подходящий Compute Module; | |
| - возвращает информацию о модуле. | |
| Сетевые запросы пока НЕ выполняются. | |
| """ | |
| from module_registry import registry | |
| # ===================================================== | |
| # Control Plane | |
| # ===================================================== | |
| class ControlPlane: | |
| def __init__(self, module_registry=None): | |
| if module_registry is None: | |
| module_registry = registry | |
| self.registry = module_registry | |
| # ================================================= | |
| # Resolve Task | |
| # ================================================= | |
| def resolve_task(self, task_type): | |
| if not task_type: | |
| raise ValueError( | |
| "task_type is required" | |
| ) | |
| modules = self.registry.find_by_type( | |
| self._map_task_to_module_type( | |
| task_type | |
| ) | |
| ) | |
| if not modules: | |
| raise LookupError( | |
| f"No Compute Module available " | |
| f"for task type: {task_type}" | |
| ) | |
| # ------------------------------------------------- | |
| # First available module | |
| # ------------------------------------------------- | |
| for module in modules: | |
| if module["status"] == "available": | |
| return module | |
| raise RuntimeError( | |
| f"No available Compute Module " | |
| f"for task type: {task_type}" | |
| ) | |
| # ================================================= | |
| # Task → Module Type | |
| # ================================================= | |
| def _map_task_to_module_type( | |
| self, | |
| task_type | |
| ): | |
| task_mapping = { | |
| "image_upscale": | |
| "image_upscaler", | |
| } | |
| module_type = task_mapping.get( | |
| task_type | |
| ) | |
| if module_type is None: | |
| raise LookupError( | |
| f"Unknown task type: {task_type}" | |
| ) | |
| return module_type | |
| # ================================================= | |
| # Get Module | |
| # ================================================= | |
| def get_module( | |
| self, | |
| module_id | |
| ): | |
| module = self.registry.get( | |
| module_id | |
| ) | |
| if module is None: | |
| raise LookupError( | |
| f"Unknown module: {module_id}" | |
| ) | |
| return module | |
| # ================================================= | |
| # List Modules | |
| # ================================================= | |
| def list_modules(self): | |
| return self.registry.get_all() | |
| # ===================================================== | |
| # Default Control Plane | |
| # ===================================================== | |
| control_plane = ControlPlane() |