buildai-cli 0.3.89__tar.gz → 0.3.90__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.89 → buildai_cli-0.3.90}/PKG-INFO +1 -1
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/ego_frame_search.py +76 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/pyproject.toml +1 -1
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/.gitignore +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/AGENTS.md +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/CLAUDE.md +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/buildai_bootstrap.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/__init__.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/_has_core.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/auth_local.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/__init__.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/api_proxy.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/auth.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/__init__.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/broker.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/common.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/migrate.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/query.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/schema.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/status.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/tunnel.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/dev.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/doctor.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/egoexo.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/gigcamera.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/grid.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/ingest.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/ingest_docs.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/processing.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/spec.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/config.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/console.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/context.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/db_broker.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/guard.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/internal_api.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/main.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/nl_query/__init__.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/nl_query/dataset_tools.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/ops_init.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/output.py +0 -0
- {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/pagination.py +0 -0
|
@@ -567,3 +567,79 @@ def queue_missing_sampled_frames(
|
|
|
567
567
|
render(manifest, format=format)
|
|
568
568
|
|
|
569
569
|
asyncio.run(run())
|
|
570
|
+
|
|
571
|
+
|
|
572
|
+
@app.command("queue-missing-demian-labels")
|
|
573
|
+
def queue_missing_demian_labels(
|
|
574
|
+
ctx: typer.Context,
|
|
575
|
+
corpus_key: list[str] = typer.Option(..., "--corpus-key", help="Corpus key. Repeatable."),
|
|
576
|
+
selection_kind: str = typer.Option("near_90s", "--selection-kind"),
|
|
577
|
+
observation_kind: str = typer.Option("demian_frame_label_v1", "--observation-kind"),
|
|
578
|
+
label_model_id: str = typer.Option("demian-v1", "--label-model-id"),
|
|
579
|
+
label_prompt_version: str = typer.Option(
|
|
580
|
+
"demian-frame-label-v1",
|
|
581
|
+
"--label-prompt-version",
|
|
582
|
+
),
|
|
583
|
+
model_config_hash: str | None = typer.Option(None, "--model-config-hash"),
|
|
584
|
+
endpoint_url: str | None = typer.Option(None, "--endpoint-url"),
|
|
585
|
+
limit: int | None = typer.Option(None, "--limit", min=1, help="Cap selected frames."),
|
|
586
|
+
idempotency_key: str = typer.Option(..., "--idempotency-key", help="Manifest idempotency key."),
|
|
587
|
+
cost_cap_usd: float | None = typer.Option(None, "--cost-cap-usd", min=0.0),
|
|
588
|
+
max_parallel_requests: int = typer.Option(1, "--max-parallel-requests", min=1),
|
|
589
|
+
endpoint_timeout_sec: int = typer.Option(300, "--endpoint-timeout-sec", min=1),
|
|
590
|
+
write: bool = typer.Option(False, "--write", help="Create the processing manifest."),
|
|
591
|
+
format: Format = format_option(),
|
|
592
|
+
) -> None:
|
|
593
|
+
"""Queue missing-only DeMiAn labels for canonical sampled corpus frames."""
|
|
594
|
+
_require_internal_admin_for_write(ctx, write=write)
|
|
595
|
+
settings = _settings_for_command(ctx, write=write)
|
|
596
|
+
|
|
597
|
+
async def run() -> None:
|
|
598
|
+
from dal.processing import media_jobs
|
|
599
|
+
|
|
600
|
+
async with get_cli_context(settings, profile=(ctx.obj or {}).get("cli_profile")) as (
|
|
601
|
+
_db,
|
|
602
|
+
dal_ctx,
|
|
603
|
+
):
|
|
604
|
+
selection_spec = {
|
|
605
|
+
"kind": "by_corpus",
|
|
606
|
+
"corpus_keys": corpus_key,
|
|
607
|
+
"selection_kind": selection_kind,
|
|
608
|
+
"observation_kind": observation_kind,
|
|
609
|
+
"label_model_id": label_model_id,
|
|
610
|
+
"label_prompt_version": label_prompt_version,
|
|
611
|
+
"model_config_hash": model_config_hash,
|
|
612
|
+
"endpoint_url": endpoint_url,
|
|
613
|
+
"limit": limit,
|
|
614
|
+
"only_missing_labels": True,
|
|
615
|
+
"max_parallel_requests_per_worker": max_parallel_requests,
|
|
616
|
+
"endpoint_timeout_sec": endpoint_timeout_sec,
|
|
617
|
+
}
|
|
618
|
+
sink_overrides = {
|
|
619
|
+
"observation": {
|
|
620
|
+
"table": "observations.frame_observations",
|
|
621
|
+
"observation_kind": observation_kind,
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
resource_overrides = {"cost_cap_usd": cost_cap_usd} if cost_cap_usd is not None else {}
|
|
625
|
+
if write:
|
|
626
|
+
manifest = await media_jobs.queue_processor_job(
|
|
627
|
+
dal_ctx,
|
|
628
|
+
processor_ref=media_jobs.DEMIAN_FRAME_LABEL_PROCESSOR_REF,
|
|
629
|
+
selection_spec=selection_spec,
|
|
630
|
+
sink_overrides=sink_overrides,
|
|
631
|
+
resource_overrides=resource_overrides,
|
|
632
|
+
submitted_by_principal=_SUBMITTED_BY,
|
|
633
|
+
idempotency_key=idempotency_key,
|
|
634
|
+
)
|
|
635
|
+
else:
|
|
636
|
+
manifest = {
|
|
637
|
+
"dry_run": True,
|
|
638
|
+
"processor_ref": media_jobs.DEMIAN_FRAME_LABEL_PROCESSOR_REF,
|
|
639
|
+
"selection_spec": selection_spec,
|
|
640
|
+
"sink_overrides": sink_overrides,
|
|
641
|
+
"resource_overrides": resource_overrides,
|
|
642
|
+
}
|
|
643
|
+
render(manifest, format=format)
|
|
644
|
+
|
|
645
|
+
asyncio.run(run())
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|