|
136 | 136 | ResourceOptsInfoDTO, |
137 | 137 | ) |
138 | 138 | from ai.backend.common.identifier.deployment import DeploymentID |
| 139 | +from ai.backend.common.identifier.deployment_revision import DeploymentRevisionID |
139 | 140 | from ai.backend.manager.api.adapter_options.deployment.options import ( |
140 | 141 | deployment_options_from_input, |
141 | 142 | deployment_options_to_info, |
@@ -666,24 +667,24 @@ def _by_project_id() -> sa.sql.expression.ColumnElement[bool]: |
666 | 667 | has_previous_page=action_result.has_previous_page, |
667 | 668 | ) |
668 | 669 |
|
669 | | - async def get(self, deployment_id: UUID) -> DeploymentNode: |
| 670 | + async def get(self, deployment_id: DeploymentID) -> DeploymentNode: |
670 | 671 | """Retrieve a single deployment by ID.""" |
671 | 672 | action_result = await self._processors.deployment.get_deployment_by_id.wait_for_complete( |
672 | 673 | GetDeploymentByIdAction(deployment_id=deployment_id) |
673 | 674 | ) |
674 | 675 | return self._deployment_data_to_dto(action_result.data) |
675 | 676 |
|
676 | | - async def get_current_revision(self, deployment_id: UUID) -> RevisionNode: |
| 677 | + async def get_current_revision(self, deployment_id: DeploymentID) -> RevisionNode: |
677 | 678 | """Retrieve the current active revision of a deployment.""" |
678 | 679 | deployment = await self.get(deployment_id) |
679 | 680 | if deployment.current_revision_id is None: |
680 | 681 | raise DeploymentRevisionNotFound(f"Deployment {deployment_id} has no current revision") |
681 | | - return await self.get_revision(deployment.current_revision_id) |
| 682 | + return await self.get_revision(DeploymentRevisionID(deployment.current_revision_id)) |
682 | 683 |
|
683 | 684 | async def update( |
684 | 685 | self, |
685 | 686 | input: UpdateDeploymentInput, |
686 | | - deployment_id: UUID, |
| 687 | + deployment_id: DeploymentID, |
687 | 688 | ) -> UpdateDeploymentPayload: |
688 | 689 | """Update deployment metadata and configuration.""" |
689 | 690 | metadata_spec: DeploymentMetadataUpdaterSpec | None = None |
@@ -766,16 +767,16 @@ async def replace_options( |
766 | 767 | async def sync_replicas(self, input: SyncReplicaInput) -> SyncReplicaPayload: |
767 | 768 | """Force sync replica information for a deployment.""" |
768 | 769 | await self._processors.deployment.sync_replicas.wait_for_complete( |
769 | | - SyncReplicaAction(deployment_id=input.model_deployment_id) |
| 770 | + SyncReplicaAction(deployment_id=DeploymentID(input.model_deployment_id)) |
770 | 771 | ) |
771 | 772 | return SyncReplicaPayload(success=True) |
772 | 773 |
|
773 | 774 | async def activate_revision(self, input: ActivateRevisionInput) -> ActivateRevisionPayload: |
774 | 775 | """Activate a specific revision as the current revision.""" |
775 | 776 | action_result = await self._processors.deployment.activate_revision.wait_for_complete( |
776 | 777 | ActivateRevisionAction( |
777 | | - deployment_id=input.deployment_id, |
778 | | - revision_id=input.revision_id, |
| 778 | + deployment_id=DeploymentID(input.deployment_id), |
| 779 | + revision_id=DeploymentRevisionID(input.revision_id), |
779 | 780 | ) |
780 | 781 | ) |
781 | 782 | return ActivateRevisionPayload( |
@@ -823,7 +824,7 @@ async def create_access_token( |
823 | 824 | ) -> CreateAccessTokenPayload: |
824 | 825 | """Create a new access token for a deployment.""" |
825 | 826 | creator = ModelDeploymentAccessTokenCreator( |
826 | | - model_deployment_id=input.model_deployment_id, |
| 827 | + model_deployment_id=DeploymentID(input.model_deployment_id), |
827 | 828 | expires_at=input.expires_at, |
828 | 829 | ) |
829 | 830 | action_result = await self._processors.deployment.create_access_token.wait_for_complete( |
@@ -1007,10 +1008,10 @@ async def bulk_delete_rules( |
1007 | 1008 | # Deployment policy operations |
1008 | 1009 | # ------------------------------------------------------------------ |
1009 | 1010 |
|
1010 | | - async def get_policy(self, deployment_id: UUID) -> GetDeploymentPolicyPayload: |
| 1011 | + async def get_policy(self, deployment_id: DeploymentID) -> GetDeploymentPolicyPayload: |
1011 | 1012 | """Retrieve a deployment policy by deployment ID.""" |
1012 | 1013 | action_result = await self._processors.deployment.get_deployment_policy.wait_for_complete( |
1013 | | - GetDeploymentPolicyAction(deployment_id=DeploymentID(deployment_id)) |
| 1014 | + GetDeploymentPolicyAction(deployment_id=deployment_id) |
1014 | 1015 | ) |
1015 | 1016 | return GetDeploymentPolicyPayload(policy=self._policy_data_to_dto(action_result.data)) |
1016 | 1017 |
|
@@ -1115,14 +1116,14 @@ async def add_revision( |
1115 | 1116 | ) |
1116 | 1117 | action_result = await self._processors.deployment.add_model_revision.wait_for_complete( |
1117 | 1118 | AddModelRevisionAction( |
1118 | | - model_deployment_id=input.deployment_id, |
| 1119 | + model_deployment_id=DeploymentID(input.deployment_id), |
1119 | 1120 | adder=adder, |
1120 | 1121 | auto_activate=options.auto_activate, |
1121 | 1122 | ) |
1122 | 1123 | ) |
1123 | 1124 | return AddRevisionPayload(revision=self._revision_data_to_dto(action_result.revision)) |
1124 | 1125 |
|
1125 | | - async def get_revision(self, revision_id: UUID) -> RevisionNode: |
| 1126 | + async def get_revision(self, revision_id: DeploymentRevisionID) -> RevisionNode: |
1126 | 1127 | """Retrieve a single revision by ID.""" |
1127 | 1128 | action_result = await self._processors.deployment.get_revision_by_id.wait_for_complete( |
1128 | 1129 | GetRevisionByIdAction(revision_id=revision_id) |
@@ -1168,7 +1169,7 @@ async def admin_search_revisions( |
1168 | 1169 |
|
1169 | 1170 | async def search_revision_resource_slots( |
1170 | 1171 | self, |
1171 | | - revision_id: UUID, |
| 1172 | + revision_id: DeploymentRevisionID, |
1172 | 1173 | input: SearchAllocatedResourceSlotsInput, |
1173 | 1174 | ) -> SearchAllocatedResourceSlotsPayload: |
1174 | 1175 | """Search resource slots allocated to a deployment revision.""" |
@@ -1317,7 +1318,9 @@ async def batch_load_revisions_by_ids( |
1317 | 1318 | action_result = await self._processors.deployment.search_revisions.wait_for_complete( |
1318 | 1319 | SearchRevisionsAction(querier=querier) |
1319 | 1320 | ) |
1320 | | - revision_map = {data.id: self._revision_data_to_dto(data) for data in action_result.data} |
| 1321 | + revision_map: dict[uuid.UUID, RevisionNode] = { |
| 1322 | + data.id: self._revision_data_to_dto(data) for data in action_result.data |
| 1323 | + } |
1321 | 1324 | return [revision_map.get(revision_id) for revision_id in revision_ids] |
1322 | 1325 |
|
1323 | 1326 | async def batch_load_replicas_by_ids( |
@@ -2005,7 +2008,7 @@ def _build_replica_querier( |
2005 | 2008 | def _build_revision_resource_slot_querier( |
2006 | 2009 | self, |
2007 | 2010 | input: SearchAllocatedResourceSlotsInput, |
2008 | | - revision_id: UUID, |
| 2011 | + revision_id: DeploymentRevisionID, |
2009 | 2012 | ) -> BatchQuerier: |
2010 | 2013 | conditions: list[QueryCondition] = [ |
2011 | 2014 | RevisionResourceSlotConditions.by_revision_id(revision_id), |
@@ -2215,6 +2218,7 @@ def _revision_data_to_dto(data: ModelRevisionData) -> RevisionNode: |
2215 | 2218 | ) |
2216 | 2219 | return RevisionNode( |
2217 | 2220 | id=data.id, |
| 2221 | + revision_number=data.revision_number, |
2218 | 2222 | image_id=data.image_id, |
2219 | 2223 | cluster_config=ClusterConfigInfoDTO( |
2220 | 2224 | mode=data.cluster_config.mode.name, |
@@ -2263,9 +2267,9 @@ def _revision_data_to_dto(data: ModelRevisionData) -> RevisionNode: |
2263 | 2267 | mount_destination=m.mount_destination, |
2264 | 2268 | mount_perm=m.mount_perm, |
2265 | 2269 | ) |
2266 | | - for m in data.extra_vfolder_mounts |
| 2270 | + for m in data.model_mount_config.extra_mounts |
2267 | 2271 | ], |
2268 | | - revision_preset_id=data.revision_preset_id, |
| 2272 | + revision_preset_id=data.preset.preset_id, |
2269 | 2273 | ) |
2270 | 2274 |
|
2271 | 2275 | @staticmethod |
|
0 commit comments