buildai-cli 0.3.63__tar.gz → 0.3.64__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.
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/PKG-INFO +1 -1
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/processing.py +82 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/pyproject.toml +1 -1
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/.gitignore +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/AGENTS.md +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/CLAUDE.md +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/buildai_bootstrap.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/__init__.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/_has_core.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/auth_local.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/__init__.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/api_proxy.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/auth.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/db/__init__.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/db/broker.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/db/common.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/db/migrate.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/db/query.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/db/schema.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/db/status.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/dev.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/doctor.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/commands/gigcamera.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/config.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/console.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/context.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/db_broker.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/guard.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/internal_api.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/main.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/nl_query/__init__.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/nl_query/dataset_tools.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/ops_init.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/output.py +0 -0
- {buildai_cli-0.3.63 → buildai_cli-0.3.64}/cli/pagination.py +0 -0
|
@@ -16,8 +16,10 @@ from cli.console import error
|
|
|
16
16
|
app = typer.Typer(help="Inspect and adjust processing manifests.", no_args_is_help=True)
|
|
17
17
|
queue_app = typer.Typer(help="Inspect and adjust manifest batch queues.", no_args_is_help=True)
|
|
18
18
|
scheduler_app = typer.Typer(help="Run bounded processing scheduler passes.", no_args_is_help=True)
|
|
19
|
+
stage_jobs_app = typer.Typer(help="Operate episode-scoped stage jobs.", no_args_is_help=True)
|
|
19
20
|
app.add_typer(queue_app, name="queue")
|
|
20
21
|
app.add_typer(scheduler_app, name="scheduler")
|
|
22
|
+
app.add_typer(stage_jobs_app, name="stage-jobs")
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
def _request(
|
|
@@ -285,3 +287,83 @@ def scheduler_tick(
|
|
|
285
287
|
),
|
|
286
288
|
},
|
|
287
289
|
)
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
@stage_jobs_app.command("launch-egoexo-prepare-batch")
|
|
293
|
+
def launch_egoexo_prepare_batch(
|
|
294
|
+
limit: int = typer.Option(10, "--limit", min=1, max=200),
|
|
295
|
+
run_key: str = typer.Option("aligned-v1", "--run-key", help="Prepare run key to drain."),
|
|
296
|
+
execution_profile_key: str = typer.Option(
|
|
297
|
+
"gcp.us.media_l4",
|
|
298
|
+
"--execution-profile-key",
|
|
299
|
+
help="Cloud Batch execution profile used for each episode job.",
|
|
300
|
+
),
|
|
301
|
+
provisioning_model: str = typer.Option(
|
|
302
|
+
"standard",
|
|
303
|
+
"--provisioning-model",
|
|
304
|
+
help="Cloud Batch provisioning model: standard or spot.",
|
|
305
|
+
),
|
|
306
|
+
lease_seconds: int = typer.Option(24 * 60 * 60, "--lease-seconds", min=600),
|
|
307
|
+
dry_run: bool = typer.Option(False, "--dry-run", help="Preview ready work without leasing."),
|
|
308
|
+
write: bool = typer.Option(False, "--write", help="Launch jobs. Omit for dry-run."),
|
|
309
|
+
) -> None:
|
|
310
|
+
"""Launch one Cloud Batch prepare job per ready EgoExo episode."""
|
|
311
|
+
if provisioning_model not in {"standard", "spot"}:
|
|
312
|
+
error("--provisioning-model must be one of: standard, spot")
|
|
313
|
+
raise typer.Exit(1)
|
|
314
|
+
_request(
|
|
315
|
+
"/v1/processing/stage-jobs/egoexo/prepare/launch-batch",
|
|
316
|
+
method="POST",
|
|
317
|
+
body={
|
|
318
|
+
"limit": limit,
|
|
319
|
+
"run_key": run_key,
|
|
320
|
+
"execution_profile_key": execution_profile_key,
|
|
321
|
+
"provisioning_model": provisioning_model,
|
|
322
|
+
"lease_seconds": lease_seconds,
|
|
323
|
+
"dry_run": dry_run or not write,
|
|
324
|
+
},
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
@stage_jobs_app.command("launch-egoexo-pose-2d-batch")
|
|
329
|
+
def launch_egoexo_pose_2d_batch(
|
|
330
|
+
limit: int = typer.Option(10, "--limit", min=1, max=200),
|
|
331
|
+
run_key: str = typer.Option("aligned-v1", "--run-key", help="Pose2D run key to drain."),
|
|
332
|
+
task_count: int = typer.Option(
|
|
333
|
+
96,
|
|
334
|
+
"--task-count",
|
|
335
|
+
min=1,
|
|
336
|
+
max=1000,
|
|
337
|
+
help="Cloud Batch tasks per episode job.",
|
|
338
|
+
),
|
|
339
|
+
execution_profile_key: str = typer.Option(
|
|
340
|
+
"gcp.us.gpu_l4",
|
|
341
|
+
"--execution-profile-key",
|
|
342
|
+
help="Cloud Batch execution profile used for each episode job.",
|
|
343
|
+
),
|
|
344
|
+
provisioning_model: str = typer.Option(
|
|
345
|
+
"standard",
|
|
346
|
+
"--provisioning-model",
|
|
347
|
+
help="Cloud Batch provisioning model: standard or spot.",
|
|
348
|
+
),
|
|
349
|
+
lease_seconds: int = typer.Option(24 * 60 * 60, "--lease-seconds", min=600),
|
|
350
|
+
dry_run: bool = typer.Option(False, "--dry-run", help="Preview ready work without leasing."),
|
|
351
|
+
write: bool = typer.Option(False, "--write", help="Launch jobs. Omit for dry-run."),
|
|
352
|
+
) -> None:
|
|
353
|
+
"""Launch one 96-task Cloud Batch Pose2D job per ready EgoExo episode."""
|
|
354
|
+
if provisioning_model not in {"standard", "spot"}:
|
|
355
|
+
error("--provisioning-model must be one of: standard, spot")
|
|
356
|
+
raise typer.Exit(1)
|
|
357
|
+
_request(
|
|
358
|
+
"/v1/processing/stage-jobs/egoexo/pose-2d/launch-batch",
|
|
359
|
+
method="POST",
|
|
360
|
+
body={
|
|
361
|
+
"limit": limit,
|
|
362
|
+
"run_key": run_key,
|
|
363
|
+
"task_count": task_count,
|
|
364
|
+
"execution_profile_key": execution_profile_key,
|
|
365
|
+
"provisioning_model": provisioning_model,
|
|
366
|
+
"lease_seconds": lease_seconds,
|
|
367
|
+
"dry_run": dry_run or not write,
|
|
368
|
+
},
|
|
369
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|