88
99from engines .base import ScheduleInput
1010from engines .engine_mk1 import EngineMK1
11- from engines .engine_mk2 import EngineMK2
11+ from engines .engine_mk2 import EngineMK2 , EngineMK21
1212from modules .unique_events import UniqueDay
1313from rigs .simple_rig import SimpleRig
1414from rigs .workforce_rig import WorkforceRig
@@ -175,12 +175,16 @@ def _coerce_start_date(value: Any) -> Optional[date]:
175175 return None
176176
177177
178- def _ensure_schema (payload : MutableMapping [str , Any ], * , rig : str , seed : int , archetype : str ) -> SchemaPayload :
178+ def _ensure_schema (
179+ payload : MutableMapping [str , Any ], * , rig : str , seed : int , archetype : str , engine_version : Optional [str ] = None
180+ ) -> SchemaPayload :
179181 metadata = dict (payload .get ("metadata" , {}))
180182 metadata .setdefault ("summary_hours" , {})
183+ resolved_engine = engine_version or ("mk2" if rig in {"calendar" , "workforce" } else "mk1" )
181184 metadata .update (
182185 {
183- "engine" : "mk2" if rig in {"calendar" , "workforce" } else "mk1" ,
186+ "engine" : resolved_engine ,
187+ "engine_version" : resolved_engine ,
184188 "rig" : rig ,
185189 "seed" : seed ,
186190 "archetype" : archetype ,
@@ -243,6 +247,8 @@ def _convert_events(events: Iterable[Mapping[str, Any]]) -> Iterable[Dict[str, A
243247
244248_MK2_ENGINE = EngineMK2 ()
245249_MK2_RIG = WorkforceRig (engine = _MK2_ENGINE )
250+ _MK2_1_ENGINE = EngineMK21 ()
251+ _MK2_1_RIG = WorkforceRig (engine = _MK2_1_ENGINE )
246252
247253
248254def mk1_run_web (archetype : str , week_start : Optional [str ], seed : Any ) -> SchemaPayload :
@@ -278,49 +284,34 @@ def mk1_run_web(archetype: str, week_start: Optional[str], seed: Any) -> SchemaP
278284 },
279285 }
280286
281- return _ensure_schema (payload , rig = "default" , seed = seed_value , archetype = archetype_key or "office" )
282-
283-
284- def mk2_run_calendar_web (
285- archetype : str , week_start : Optional [str ], seed : Any , debug : bool = False
286- ) -> SchemaPayload :
287- archetype_key = str (archetype or "office" ).strip ().lower ()
288- seed_value = _coerce_seed (seed )
289- start_date = _coerce_start_date (week_start ) or date .today ()
290-
291- profile , templates = _MK2_RIG .select_profile (archetype_key )
292- result = _MK2_RIG .generate_complete_week (
293- profile , start_date , seed_value , templates , None , debug = debug
287+ return _ensure_schema (
288+ payload ,
289+ rig = "default" ,
290+ seed = seed_value ,
291+ archetype = archetype_key or "office" ,
292+ engine_version = "mk1" ,
294293 )
295294
296- payload : MutableMapping [str , Any ] = dict (result )
297- payload .setdefault ("issues" , [])
298- payload .setdefault ("events" , [])
299- payload .setdefault ("week_start" , start_date .isoformat ())
300- payload ["person" ] = profile .name
301- payload ["metadata" ] = {
302- ** payload .get ("metadata" , {}),
303- "profile" : profile .name ,
304- }
305-
306- return _ensure_schema (payload , rig = "calendar" , seed = seed_value , archetype = archetype_key )
307295
308-
309- def mk2_run_workforce_web (
296+ def _run_mk2_variant (
297+ rig_instance : WorkforceRig ,
310298 archetype : str ,
311299 week_start : Optional [str ],
312300 seed : Any ,
313- yearly_budget : Optional [Mapping [str , Any ]],
301+ * ,
302+ engine_version : str ,
303+ rig_label : str ,
304+ yearly_budget : Optional [Mapping [str , Any ]] = None ,
314305 debug : bool = False ,
315306) -> SchemaPayload :
316307 archetype_key = str (archetype or "office" ).strip ().lower ()
317308 seed_value = _coerce_seed (seed )
318309 start_date = _coerce_start_date (week_start ) or date .today ()
319310
320- profile , templates = _MK2_RIG .select_profile (archetype_key )
321- budget = _build_yearly_budget (yearly_budget )
311+ profile , templates = rig_instance .select_profile (archetype_key )
312+ budget = _build_yearly_budget (yearly_budget ) if yearly_budget is not None else None
322313
323- result = _MK2_RIG .generate_complete_week (
314+ result = rig_instance .generate_complete_week (
324315 profile , start_date , seed_value , templates , budget , debug = debug
325316 )
326317
@@ -331,6 +322,7 @@ def mk2_run_workforce_web(
331322 payload ["person" ] = profile .name
332323 metadata = dict (payload .get ("metadata" , {}))
333324 metadata ["profile" ] = profile .name
325+ metadata ["engine_version" ] = engine_version
334326 if budget is not None :
335327 metadata ["yearly_budget" ] = {
336328 "person_id" : budget .person_id ,
@@ -341,11 +333,87 @@ def mk2_run_workforce_web(
341333 }
342334 payload ["metadata" ] = metadata
343335
344- return _ensure_schema (payload , rig = "workforce" , seed = seed_value , archetype = archetype_key )
336+ return _ensure_schema (
337+ payload ,
338+ rig = rig_label ,
339+ seed = seed_value ,
340+ archetype = archetype_key ,
341+ engine_version = engine_version ,
342+ )
343+
344+
345+ def mk2_run_calendar_web (
346+ archetype : str , week_start : Optional [str ], seed : Any , debug : bool = False
347+ ) -> SchemaPayload :
348+ return _run_mk2_variant (
349+ _MK2_RIG ,
350+ archetype ,
351+ week_start ,
352+ seed ,
353+ engine_version = "mk2" ,
354+ rig_label = "calendar" ,
355+ yearly_budget = None ,
356+ debug = debug ,
357+ )
358+
359+
360+ def mk2_run_workforce_web (
361+ archetype : str ,
362+ week_start : Optional [str ],
363+ seed : Any ,
364+ yearly_budget : Optional [Mapping [str , Any ]],
365+ debug : bool = False ,
366+ ) -> SchemaPayload :
367+ return _run_mk2_variant (
368+ _MK2_RIG ,
369+ archetype ,
370+ week_start ,
371+ seed ,
372+ engine_version = "mk2" ,
373+ rig_label = "workforce" ,
374+ yearly_budget = yearly_budget ,
375+ debug = debug ,
376+ )
377+
378+
379+ def mk2_1_run_calendar_web (
380+ archetype : str , week_start : Optional [str ], seed : Any , debug : bool = False
381+ ) -> SchemaPayload :
382+ return _run_mk2_variant (
383+ _MK2_1_RIG ,
384+ archetype ,
385+ week_start ,
386+ seed ,
387+ engine_version = "mk2_1" ,
388+ rig_label = "calendar" ,
389+ yearly_budget = None ,
390+ debug = debug ,
391+ )
392+
393+
394+ def mk2_1_run_workforce_web (
395+ archetype : str ,
396+ week_start : Optional [str ],
397+ seed : Any ,
398+ yearly_budget : Optional [Mapping [str , Any ]],
399+ debug : bool = False ,
400+ ) -> SchemaPayload :
401+ return _run_mk2_variant (
402+ _MK2_1_RIG ,
403+ archetype ,
404+ week_start ,
405+ seed ,
406+ engine_version = "mk2_1" ,
407+ rig_label = "workforce" ,
408+ yearly_budget = yearly_budget ,
409+ debug = debug ,
410+ )
345411
346412
347413__all__ = [
348414 "mk1_run_web" ,
349415 "mk2_run_calendar_web" ,
350416 "mk2_run_workforce_web" ,
417+ "mk2_1_run_calendar_web" ,
418+ "mk2_1_run_workforce_web" ,
351419]
0 commit comments