@@ -293,6 +293,16 @@ class Container(BaseModel):
293293 env : dict [str , str ]
294294 name : str | None
295295
296+ class StrikeMetricPoint (BaseModel ):
297+ timestamp : datetime
298+ value : float
299+ metadata : dict [str , t .Any ]
300+
301+ class StrikeMetric (BaseModel ):
302+ type : str
303+ description : str | None
304+ points : "list[Client.StrikeMetricPoint]"
305+
296306 class StrikeAgentVersion (BaseModel ):
297307 id : UUID
298308 created_at : datetime
@@ -350,6 +360,7 @@ class StrikeRunZone(_StrikeRunZone):
350360 container_logs : dict [str , str ]
351361 outputs : list ["Client.StrikeRunOutput" ]
352362 inferences : list [dict [str , t .Any ]]
363+ metrics : dict [str , "Client.StrikeMetric" ]
353364
354365 class StrikeRunContext (BaseModel ):
355366 environment : dict [str , str ] | None = None
@@ -358,6 +369,7 @@ class StrikeRunContext(BaseModel):
358369
359370 class _StrikeRun (BaseModel ):
360371 id : UUID
372+ key : str
361373 strike_id : UUID
362374 strike_key : str
363375 strike_name : str
@@ -373,6 +385,9 @@ class _StrikeRun(BaseModel):
373385 status : "Client.StrikeRunStatus"
374386 start : datetime | None
375387 end : datetime | None
388+ group_id : UUID | None
389+ group_key : str | None
390+ group_name : str | None
376391
377392 def is_running (self ) -> bool :
378393 return self .status in ["pending" , "deploying" , "running" ]
@@ -388,6 +403,15 @@ class UserModel(BaseModel):
388403 generator_id : str
389404 api_key : str
390405
406+ class StrikeRunGroupResponse (BaseModel ):
407+ id : UUID
408+ key : str
409+ name : str
410+ description : str | None
411+ created_at : datetime
412+ updated_at : datetime
413+ run_count : int
414+
391415 def get_strike (self , strike : str ) -> StrikeResponse :
392416 response = self .request ("GET" , f"/api/strikes/{ strike } " )
393417 return self .StrikeResponse (** response .json ())
@@ -448,6 +472,7 @@ def start_strike_run(
448472 user_model : UserModel | None = None ,
449473 context : StrikeRunContext | None = None ,
450474 strike : UUID | str | None = None ,
475+ group : UUID | str | None = None ,
451476 ) -> StrikeRunResponse :
452477 response = self .request (
453478 "POST" ,
@@ -457,6 +482,7 @@ def start_strike_run(
457482 "model" : model ,
458483 "user_model" : user_model .model_dump (mode = "json" ) if user_model else None ,
459484 "strike" : str (strike ) if strike else None ,
485+ "group" : str (group ) if group else None ,
460486 "context" : context .model_dump (mode = "json" ) if context else None ,
461487 },
462488 )
@@ -472,6 +498,10 @@ def list_strike_runs(self, *, strike_id: UUID | str | None = None) -> list[Strik
472498 )
473499 return [self .StrikeRunSummaryResponse (** run ) for run in response .json ()]
474500
501+ def list_strike_run_groups (self ) -> list [StrikeRunGroupResponse ]:
502+ response = self .request ("GET" , "/api/strikes/groups" )
503+ return [self .StrikeRunGroupResponse (** group ) for group in response .json ()]
504+
475505
476506def create_client (* , profile : str | None = None ) -> Client :
477507 """Create an authenticated API client using stored configuration data."""
0 commit comments