44from sqlalchemy .ext .asyncio import AsyncSession
55
66from dstack ._internal .core .models .configurations import ReplicaGroup
7- from dstack ._internal .core .models .runs import JobSpec , JobStatus , JobTerminationReason , RunSpec
7+ from dstack ._internal .core .models .runs import JobStatus , JobTerminationReason , RunSpec
88from dstack ._internal .server .models import JobModel , RunModel
99from dstack ._internal .server .services import events
1010from dstack ._internal .server .services .jobs import (
11+ get_job_spec ,
1112 get_jobs_from_run_spec ,
1213 group_jobs_by_replica_latest ,
1314 switch_job_status ,
1415)
1516from dstack ._internal .server .services .logging import fmt
1617from dstack ._internal .server .services .runs import (
1718 create_job_model_for_new_submission ,
19+ get_run_spec ,
1820 logger ,
1921)
2022from dstack ._internal .server .services .secrets import get_project_secrets_mapping
@@ -30,8 +32,8 @@ async def retry_run_replica_jobs(
3032 )
3133
3234 # Determine replica group from existing job
33- run_spec = RunSpec . __response__ . parse_raw (run_model . run_spec )
34- job_spec = JobSpec . __response__ . parse_raw (latest_jobs [0 ]. job_spec_data )
35+ run_spec = get_run_spec (run_model )
36+ job_spec = get_job_spec (latest_jobs [0 ])
3537 replica_group_name = job_spec .replica_group
3638
3739 new_jobs = await get_jobs_from_run_spec (
@@ -86,7 +88,7 @@ async def scale_run_replicas(session: AsyncSession, run_model: RunModel, replica
8688 )
8789
8890 active_replicas , inactive_replicas = build_replica_lists (run_model )
89- run_spec = RunSpec . __response__ . parse_raw (run_model . run_spec )
91+ run_spec = get_run_spec (run_model )
9092
9193 if replicas_diff < 0 :
9294 scale_down_replicas (session , active_replicas , abs (replicas_diff ))
@@ -259,7 +261,7 @@ async def scale_run_replicas_per_group(
259261 run_model = run_model ,
260262 group = group ,
261263 replicas_diff = group_diff ,
262- run_spec = RunSpec . __response__ . parse_raw (run_model . run_spec ),
264+ run_spec = get_run_spec (run_model ),
263265 active_replicas = active_replicas ,
264266 inactive_replicas = inactive_replicas ,
265267 )
@@ -300,7 +302,7 @@ async def scale_run_replicas_for_group(
300302
301303
302304def job_belongs_to_group (job : JobModel , group_name : str ) -> bool :
303- job_spec = JobSpec . __response__ . parse_raw (job . job_spec_data )
305+ job_spec = get_job_spec (job )
304306 return job_spec .replica_group == group_name
305307
306308
0 commit comments