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.
Files changed (42) hide show
  1. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/PKG-INFO +1 -1
  2. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/ego_frame_search.py +76 -0
  3. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/pyproject.toml +1 -1
  4. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/.gitignore +0 -0
  5. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/AGENTS.md +0 -0
  6. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/CLAUDE.md +0 -0
  7. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/buildai_bootstrap.py +0 -0
  8. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/__init__.py +0 -0
  9. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/_has_core.py +0 -0
  10. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/auth_local.py +0 -0
  11. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/__init__.py +0 -0
  12. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/api_proxy.py +0 -0
  13. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/auth.py +0 -0
  14. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/__init__.py +0 -0
  15. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/broker.py +0 -0
  16. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/common.py +0 -0
  17. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/migrate.py +0 -0
  18. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/query.py +0 -0
  19. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/schema.py +0 -0
  20. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/status.py +0 -0
  21. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/db/tunnel.py +0 -0
  22. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/dev.py +0 -0
  23. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/doctor.py +0 -0
  24. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/egoexo.py +0 -0
  25. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/gigcamera.py +0 -0
  26. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/grid.py +0 -0
  27. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/ingest.py +0 -0
  28. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/ingest_docs.py +0 -0
  29. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/processing.py +0 -0
  30. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/commands/spec.py +0 -0
  31. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/config.py +0 -0
  32. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/console.py +0 -0
  33. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/context.py +0 -0
  34. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/db_broker.py +0 -0
  35. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/guard.py +0 -0
  36. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/internal_api.py +0 -0
  37. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/main.py +0 -0
  38. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/nl_query/__init__.py +0 -0
  39. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/nl_query/dataset_tools.py +0 -0
  40. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/ops_init.py +0 -0
  41. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/output.py +0 -0
  42. {buildai_cli-0.3.89 → buildai_cli-0.3.90}/cli/pagination.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: buildai-cli
3
- Version: 0.3.89
3
+ Version: 0.3.90
4
4
  Summary: Build AI CLI (Typer)
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: httpx>=0.27.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())
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "buildai-cli"
7
- version = "0.3.89"
7
+ version = "0.3.90"
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