buildai-cli 0.3.70__tar.gz → 0.3.72__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/PKG-INFO +1 -1
  2. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/processing.py +30 -12
  3. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/pyproject.toml +1 -1
  4. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/.gitignore +0 -0
  5. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/AGENTS.md +0 -0
  6. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/CLAUDE.md +0 -0
  7. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/buildai_bootstrap.py +0 -0
  8. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/__init__.py +0 -0
  9. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/_has_core.py +0 -0
  10. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/auth_local.py +0 -0
  11. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/__init__.py +0 -0
  12. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/api_proxy.py +0 -0
  13. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/auth.py +0 -0
  14. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/db/__init__.py +0 -0
  15. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/db/broker.py +0 -0
  16. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/db/common.py +0 -0
  17. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/db/migrate.py +0 -0
  18. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/db/query.py +0 -0
  19. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/db/schema.py +0 -0
  20. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/db/status.py +0 -0
  21. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/db/tunnel.py +0 -0
  22. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/dev.py +0 -0
  23. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/doctor.py +0 -0
  24. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/commands/gigcamera.py +0 -0
  25. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/config.py +0 -0
  26. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/console.py +0 -0
  27. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/context.py +0 -0
  28. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/db_broker.py +0 -0
  29. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/guard.py +0 -0
  30. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/internal_api.py +0 -0
  31. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/main.py +0 -0
  32. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/nl_query/__init__.py +0 -0
  33. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/nl_query/dataset_tools.py +0 -0
  34. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/ops_init.py +0 -0
  35. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/output.py +0 -0
  36. {buildai_cli-0.3.70 → buildai_cli-0.3.72}/cli/pagination.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: buildai-cli
3
- Version: 0.3.70
3
+ Version: 0.3.72
4
4
  Summary: Build AI CLI (Typer)
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: httpx>=0.27.0
@@ -289,9 +289,9 @@ def scheduler_tick(
289
289
  )
290
290
 
291
291
 
292
- @stage_jobs_app.command("plan-egoexo")
293
- def plan_egoexo_stage_jobs(
294
- run_key: str = typer.Option(..., "--run-key", help="Stage-job run key to plan."),
292
+ @stage_jobs_app.command("tick-egoexo")
293
+ def tick_egoexo_stage_jobs(
294
+ run_key: str | None = typer.Option(None, "--run-key", help="Stage-job run key to tick."),
295
295
  program_slug: str = typer.Option(
296
296
  "build-egoexo-2026",
297
297
  "--program-slug",
@@ -305,21 +305,26 @@ def plan_egoexo_stage_jobs(
305
305
  stages: str | None = typer.Option(
306
306
  None,
307
307
  "--stages",
308
- help="Comma-separated stage keys. Defaults to pose_2d_recording,pose_3d_definition_run.",
308
+ help="Comma-separated canonical stage keys. Defaults to the full recording-scoped pipeline.",
309
309
  ),
310
- limit: int = typer.Option(100, "--limit", min=1, max=5000),
310
+ plan_limit: int = typer.Option(500, "--plan-limit", min=1, max=5000),
311
311
  priority: int = typer.Option(7, "--priority", min=0, max=10),
312
312
  skip_existing_pose_3d: bool = typer.Option(
313
313
  True,
314
314
  "--skip-existing-pose-3d/--include-existing-pose-3d",
315
315
  help="Skip Pose3D work for episodes that already have Pose3D outputs.",
316
316
  ),
317
- dry_run: bool = typer.Option(False, "--dry-run", help="Preview planned work."),
317
+ launch: bool = typer.Option(
318
+ False, "--launch/--no-launch", help="Launch ready workers after planning."
319
+ ),
320
+ dry_run: bool = typer.Option(
321
+ False, "--dry-run", help="Preview the tick without writes or launches."
322
+ ),
318
323
  write: bool = typer.Option(False, "--write", help="Create work items. Omit for dry-run."),
319
324
  ) -> None:
320
- """Plan missing episode-scoped EgoExo stage jobs from canonical DB truth."""
325
+ """Run the canonical recording-scoped EgoExo stage-job tick."""
321
326
  _request(
322
- "/v1/processing/stage-jobs/egoexo/plan",
327
+ "/v1/processing/stage-jobs/egoexo/tick",
323
328
  method="POST",
324
329
  body={
325
330
  "program_slug": program_slug,
@@ -327,12 +332,15 @@ def plan_egoexo_stage_jobs(
327
332
  "stages": _parse_csv(
328
333
  stages,
329
334
  option_name="--stages",
330
- allowed={"pose_2d", "pose_3d", "pose_2d_recording", "pose_3d_definition_run"},
335
+ allowed={"frame_index", "pose_2d", "pose_3d_definition_run"},
331
336
  ),
332
337
  "run_key": run_key,
333
- "limit": limit,
338
+ "plan_limit": plan_limit,
334
339
  "priority": priority,
335
340
  "skip_existing_pose_3d": skip_existing_pose_3d,
341
+ "launch_frame_index": launch,
342
+ "launch_pose_2d": launch,
343
+ "launch_pose_3d": launch,
336
344
  "dry_run": dry_run or not write,
337
345
  },
338
346
  )
@@ -340,7 +348,7 @@ def plan_egoexo_stage_jobs(
340
348
 
341
349
  @stage_jobs_app.command("launch-egoexo-pose-2d-modal")
342
350
  def launch_egoexo_pose_2d_modal(
343
- limit: int = typer.Option(10, "--limit", min=1, max=200),
351
+ limit: int = typer.Option(500, "--limit", min=1, max=1000),
344
352
  run_key: str = typer.Option(..., "--run-key", help="Pose2D run key to drain."),
345
353
  task_count: int = typer.Option(
346
354
  500,
@@ -359,11 +367,21 @@ def launch_egoexo_pose_2d_modal(
359
367
  "--store-heatmaps",
360
368
  help="Persist pre-decoded Sapiens heatmap logits as optional artifacts.",
361
369
  ),
370
+ modal_spawn_parallelism: int | None = typer.Option(
371
+ None,
372
+ "--modal-spawn-parallelism",
373
+ min=1,
374
+ max=1000,
375
+ help="Maximum concurrent Modal spawn calls for this launcher request.",
376
+ ),
362
377
  lease_seconds: int = typer.Option(24 * 60 * 60, "--lease-seconds", min=600),
363
378
  dry_run: bool = typer.Option(False, "--dry-run", help="Preview ready work without leasing."),
364
379
  write: bool = typer.Option(False, "--write", help="Launch jobs. Omit for dry-run."),
365
380
  ) -> None:
366
381
  """Launch Modal-backed Sapiens Pose2D workers for ready EgoExo episodes."""
382
+ config: dict[str, object] = {"store_heatmaps": store_heatmaps}
383
+ if modal_spawn_parallelism is not None:
384
+ config["modal_spawn_parallelism"] = modal_spawn_parallelism
367
385
  _request(
368
386
  "/v1/processing/stage-jobs/egoexo/pose-2d/launch-modal",
369
387
  method="POST",
@@ -372,7 +390,7 @@ def launch_egoexo_pose_2d_modal(
372
390
  "run_key": run_key,
373
391
  "task_count": task_count,
374
392
  "execution_profile_key": execution_profile_key,
375
- "config": {"store_heatmaps": store_heatmaps},
393
+ "config": config,
376
394
  "lease_seconds": lease_seconds,
377
395
  "dry_run": dry_run or not write,
378
396
  },
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "buildai-cli"
7
- version = "0.3.70"
7
+ version = "0.3.72"
8
8
  description = "Build AI CLI (Typer)"
9
9
  requires-python = ">=3.11"
10
10
  dependencies = [
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes