@camstack/addon-pipeline 1.2.338 → 1.2.340

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 (34) hide show
  1. package/dist/audio-analyzer/index.js +22 -30
  2. package/dist/audio-analyzer/index.mjs +23 -31
  3. package/dist/{custom-model-catalog-CN6WPGB8.mjs → custom-model-catalog-BOnN63HU.mjs} +5 -1448
  4. package/dist/{custom-model-catalog-BYJyfhgj.js → custom-model-catalog-Cjbll1Sf.js} +18 -1461
  5. package/dist/detection-pipeline/index.js +208 -17
  6. package/dist/detection-pipeline/index.mjs +232 -41
  7. package/dist/{dist-WIL4yeyi.js → dist-BWigCRRN.js} +324 -51
  8. package/dist/{dist-CdmlJu1J.mjs → dist-CsA6fY6I.mjs} +311 -50
  9. package/dist/model-catalogs-BFBf8sHb.js +1522 -0
  10. package/dist/model-catalogs-D7JXV0_i.mjs +1445 -0
  11. package/dist/motion-wasm/index.js +1 -1
  12. package/dist/motion-wasm/index.mjs +1 -1
  13. package/dist/{node-CEtew1DU.mjs → node-BZ29vHq2.mjs} +1 -1
  14. package/dist/{node-DCFClFJ1.js → node-D52HHrVZ.js} +1 -1
  15. package/dist/pipeline-runner/index.js +3 -3
  16. package/dist/pipeline-runner/index.mjs +3 -3
  17. package/dist/{process-memory-Bsj_b---.js → process-memory-C9U6dKxS.js} +1 -1
  18. package/dist/{process-memory-maZfOnev.mjs → process-memory-DOEeg2pL.mjs} +1 -1
  19. package/dist/recorder/index.js +6 -2
  20. package/dist/recorder/index.mjs +6 -2
  21. package/dist/{segment-demux-js-CXmBf_nf.js → segment-demux-js-CMZSmwMp.js} +1 -1
  22. package/dist/{segment-demux-js-DnPcYYbc.mjs → segment-demux-js-DDgwrz-e.mjs} +1 -1
  23. package/dist/stream-broker/_stub.js +2 -2
  24. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BdsJXZcP.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-6JIjr_ur.mjs} +2 -2
  25. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js--yC-aoPc.mjs +26 -0
  26. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Bt8aa0wk.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-B-hhg2sP.mjs} +1 -1
  27. package/dist/stream-broker/demux-worker-child.js +1 -1
  28. package/dist/stream-broker/demux-worker-child.mjs +1 -1
  29. package/dist/stream-broker/{hostInit-BU5SBy0i.mjs → hostInit-Ck1wQfKk.mjs} +2 -2
  30. package/dist/stream-broker/index.js +3 -3
  31. package/dist/stream-broker/index.mjs +3 -3
  32. package/dist/stream-broker/remoteEntry.js +1 -1
  33. package/package.json +1 -1
  34. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-1Y-WK-Zy.mjs +0 -26
@@ -12930,16 +12930,53 @@ var ModelFormatEntrySchema = object({
12930
12930
  /** Runtime(s) that can use this format. If omitted, inferred from ModelFormat key */
12931
12931
  runtimes: array(_enum(["python"])).readonly().optional(),
12932
12932
  /**
12933
- * Content revision of the hosted artefact. Set it, or change it, whenever
12934
- * the bytes at `url` are replaced in place (same path, new content). A node
12935
- * records the revision it downloaded next to the file
12933
+ * Content revision of the artefact, for one hosted OFF the CamStack mirror.
12934
+ * A format on the mirror leaves it unset: its revision (the sha256 of its
12935
+ * weight file) comes from the downloader's generated table, kept in step
12936
+ * with the mirror by `scripts/check-hosted-model-revisions.ts` (D744). A
12937
+ * node records the revision it downloaded next to the file
12936
12938
  * (`<file>.revision`); a copy with no record or a different one is stale
12937
- * and is downloaded again, the old copy serving until the new one is
12938
- * complete. Omitted ⇒ a file on disk is current, whatever it holds (D743).
12939
+ * unless its weight file hashes to the revision, and a stale copy is
12940
+ * downloaded again, the old one serving until the new one is complete. No
12941
+ * revision at all ⇒ a file on disk is current, whatever it holds (D743).
12939
12942
  */
12940
12943
  revision: string().min(1).optional()
12941
12944
  });
12942
12945
  /**
12946
+ * What a node holds for one (model, format) (D746). `current` is a complete
12947
+ * copy at its catalog revision — exactly what `downloaded: true` means.
12948
+ * `stale` is bytes on disk that are not (yet) proven current under D743/D744:
12949
+ * no or a different revision record, or a missing sibling. `missing` is no
12950
+ * copy. `downloaded` alone folds `stale` into "not downloaded", which hid
12951
+ * reclaimable bytes and a copy about to be replaced.
12952
+ */
12953
+ var ModelOnDiskStateSchema = _enum([
12954
+ "current",
12955
+ "stale",
12956
+ "missing"
12957
+ ]);
12958
+ /**
12959
+ * The numeric precision of one format's BUILD (D746) — reported only when the
12960
+ * build states it (file-name token, an INT8 variant, an EdgeTPU compile, a
12961
+ * CamStack Core ML export). Absent means "not stated", never "fp32".
12962
+ */
12963
+ var ModelFormatPrecisionSchema = _enum([
12964
+ "fp32",
12965
+ "fp16",
12966
+ "int8"
12967
+ ]);
12968
+ /**
12969
+ * One format of one model as a node's `pipelineExecutor.getSchema` reports it.
12970
+ * `onDisk` / `precision` are optional for version skew: a runner that predates
12971
+ * them omits them, and a reader falls back to `downloaded`.
12972
+ */
12973
+ var PipelineModelFormatStatusSchema = object({
12974
+ downloaded: boolean(),
12975
+ sizeMB: number(),
12976
+ onDisk: ModelOnDiskStateSchema.optional(),
12977
+ precision: ModelFormatPrecisionSchema.optional()
12978
+ });
12979
+ /**
12943
12980
  * Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
12944
12981
  * The downloader fetches from `url` and saves to `{modelsDir}/{filename}`.
12945
12982
  */
@@ -26536,7 +26573,7 @@ var FrameRefSchema = object({
26536
26573
  timestamp: number(),
26537
26574
  capturedAt: number().optional()
26538
26575
  });
26539
- var ModelFormatSchema$1 = _enum([
26576
+ var ModelFormatSchema$2 = _enum([
26540
26577
  "onnx",
26541
26578
  "coreml",
26542
26579
  "openvino",
@@ -26554,7 +26591,7 @@ var PipelineSlotSchema = _enum([
26554
26591
  var PipelineEngineChoiceSchema = object({
26555
26592
  runtime: literal("python"),
26556
26593
  backend: string(),
26557
- format: ModelFormatSchema$1,
26594
+ format: ModelFormatSchema$2,
26558
26595
  device: string().optional()
26559
26596
  });
26560
26597
  /**
@@ -26611,10 +26648,7 @@ var PipelineTemplateSchema$1 = object({
26611
26648
  var PipelineModelOptionSchema = object({
26612
26649
  id: string(),
26613
26650
  name: string(),
26614
- formats: record(string(), object({
26615
- downloaded: boolean(),
26616
- sizeMB: number()
26617
- })),
26651
+ formats: record(string(), PipelineModelFormatStatusSchema),
26618
26652
  group: ModelVariantGroupSchema.optional(),
26619
26653
  legacy: boolean().optional(),
26620
26654
  provider: ModelProviderIdSchema.optional(),
@@ -26829,6 +26863,32 @@ var pipelineExecutorCapability = {
26829
26863
  auth: "admin"
26830
26864
  }),
26831
26865
  /**
26866
+ * Best settings (D745): the MODEL-BOUND thresholds (`bindsToModel` keys of
26867
+ * the object-detection root, and their binding keys) stored in THIS node's
26868
+ * per-camera detector settings — and, unless `dryRun`, remove them so the
26869
+ * running model's own defaults apply. Every other key of a camera's store
26870
+ * is kept. `nodeId` is the ROUTING key. `deviceIds` absent ⇒ every camera
26871
+ * with a store. A camera whose store could not be read is `refused`, never
26872
+ * reported as clean.
26873
+ */
26874
+ clearModelBoundDeviceOverrides: method(object({
26875
+ nodeId: string(),
26876
+ deviceIds: array(number()).readonly().optional(),
26877
+ dryRun: boolean()
26878
+ }), object({
26879
+ entries: array(object({
26880
+ deviceId: number(),
26881
+ keys: array(string()).readonly()
26882
+ })).readonly(),
26883
+ refused: array(object({
26884
+ deviceId: number(),
26885
+ reason: string()
26886
+ })).readonly()
26887
+ }), {
26888
+ kind: "mutation",
26889
+ auth: "admin"
26890
+ }),
26891
+ /**
26832
26892
  * Which of THIS node's inference devices the executor currently refuses,
26833
26893
  * and why. `nodeId` is the ROUTING key (stripped by the generated router).
26834
26894
  *
@@ -26923,12 +26983,12 @@ var pipelineExecutorCapability = {
26923
26983
  downloadModel: method(object({
26924
26984
  addonId: string(),
26925
26985
  modelId: string(),
26926
- format: ModelFormatSchema$1
26986
+ format: ModelFormatSchema$2
26927
26987
  }), DownloadModelResultSchema, { kind: "mutation" }),
26928
26988
  deleteModel: method(object({
26929
26989
  addonId: string(),
26930
26990
  modelId: string(),
26931
- format: ModelFormatSchema$1
26991
+ format: ModelFormatSchema$2
26932
26992
  }), object({ success: literal(true) }), { kind: "mutation" }),
26933
26993
  /**
26934
26994
  * Stateless single-frame execution. Callers (runner, benchmark) pass
@@ -27174,6 +27234,204 @@ var pipelineExecutorCapability = {
27174
27234
  getDetectionConfigSchema: method(_void(), ConfigUISchemaNullableBridge)
27175
27235
  }
27176
27236
  };
27237
+ /**
27238
+ * The wire shapes of the Best settings plan and apply (D745), used by the
27239
+ * `pipeline-orchestrator` cap. The recommender's own types
27240
+ * (`recommend.ts`, `demand.ts`) are the TS face of the same data; these
27241
+ * schemas are what crosses the cap boundary.
27242
+ */
27243
+ var ModelFormatSchema$1 = _enum(MODEL_FORMATS);
27244
+ var HardwareClassIdSchema = _enum([
27245
+ "intel-core-ultra",
27246
+ "intel-n-series",
27247
+ "apple-m-base",
27248
+ "apple-m-pro",
27249
+ "unknown"
27250
+ ]);
27251
+ var AcceleratorKindSchema = _enum([
27252
+ "intel-npu",
27253
+ "intel-igpu",
27254
+ "x86-cpu",
27255
+ "arm-cpu",
27256
+ "apple-ane",
27257
+ "coral"
27258
+ ]);
27259
+ var RecommendationReasonSchema = discriminatedUnion("kind", [
27260
+ object({
27261
+ kind: literal("fits"),
27262
+ utilisation: number()
27263
+ }),
27264
+ object({
27265
+ kind: literal("tie-faster"),
27266
+ over: string(),
27267
+ recallDelta: number()
27268
+ }),
27269
+ object({
27270
+ kind: literal("stepped-down"),
27271
+ from: string(),
27272
+ to: string(),
27273
+ limitedBy: string()
27274
+ }),
27275
+ object({
27276
+ kind: literal("no-fit-lightest"),
27277
+ utilisation: number()
27278
+ }),
27279
+ object({
27280
+ kind: literal("derived-latency"),
27281
+ modelId: string()
27282
+ }),
27283
+ object({
27284
+ kind: literal("estimated-load"),
27285
+ observedForMs: number().nullable()
27286
+ }),
27287
+ object({ kind: literal("cpu-device") }),
27288
+ object({ kind: literal("coral-untouched") }),
27289
+ object({ kind: literal("device-disabled") }),
27290
+ object({ kind: literal("device-unavailable") }),
27291
+ object({ kind: literal("node-offline") }),
27292
+ object({ kind: literal("no-hardware-facts") }),
27293
+ object({
27294
+ kind: literal("no-measured-data"),
27295
+ hardwareClass: HardwareClassIdSchema
27296
+ }),
27297
+ object({
27298
+ kind: literal("no-family-build"),
27299
+ format: ModelFormatSchema$1
27300
+ })
27301
+ ]);
27302
+ var DeviceDemandSchema = object({
27303
+ nodeId: string(),
27304
+ deviceKey: string(),
27305
+ demandFps: number(),
27306
+ maxCameraFps: number(),
27307
+ alwaysOnCameras: number(),
27308
+ onMotionSessions: number(),
27309
+ onMotionSource: _enum([
27310
+ "observed-24h",
27311
+ "estimate",
27312
+ "none"
27313
+ ]),
27314
+ observedForMs: number().nullable()
27315
+ });
27316
+ var DeviceModelChoiceSchema = object({
27317
+ modelId: string(),
27318
+ p50Ms: number(),
27319
+ fps: number(),
27320
+ measured: boolean(),
27321
+ utilisation: number(),
27322
+ personRecall: number()
27323
+ });
27324
+ var DeviceRecommendationSchema = object({
27325
+ deviceKey: string(),
27326
+ accelerator: AcceleratorKindSchema.nullable(),
27327
+ enabled: boolean(),
27328
+ available: boolean(),
27329
+ demand: DeviceDemandSchema.nullable(),
27330
+ chosen: DeviceModelChoiceSchema.nullable(),
27331
+ reasons: array(RecommendationReasonSchema).readonly()
27332
+ });
27333
+ var NodeRecommendationSchema = object({
27334
+ nodeId: string(),
27335
+ reachable: boolean(),
27336
+ hardwareClass: HardwareClassIdSchema.nullable(),
27337
+ cpuModel: string().nullable(),
27338
+ skipped: boolean(),
27339
+ acceleratorModelId: string().nullable(),
27340
+ devices: array(DeviceRecommendationSchema).readonly(),
27341
+ reasons: array(RecommendationReasonSchema).readonly()
27342
+ });
27343
+ var ModelPinChangeSchema = object({
27344
+ stepId: string(),
27345
+ before: string().nullable(),
27346
+ after: string().nullable()
27347
+ });
27348
+ var NodeDeviceChangeSchema = object({
27349
+ nodeId: string(),
27350
+ deviceKey: string(),
27351
+ madeExplicit: boolean(),
27352
+ modelPins: array(ModelPinChangeSchema).readonly(),
27353
+ thresholds: array(object({
27354
+ stepId: string(),
27355
+ keys: array(string()).readonly()
27356
+ })).readonly()
27357
+ });
27358
+ var CameraOverrideClearSchema = object({
27359
+ deviceId: number(),
27360
+ source: _enum(["step-override", "wholesale"]),
27361
+ nodeId: string(),
27362
+ deviceKey: string().nullable(),
27363
+ stepId: string(),
27364
+ modelIdBefore: string().nullable(),
27365
+ keys: array(string()).readonly()
27366
+ });
27367
+ var DetectorStoreClearSchema = object({
27368
+ deviceId: number(),
27369
+ keys: array(string()).readonly()
27370
+ });
27371
+ var BestSettingsWarningSchema = discriminatedUnion("kind", [
27372
+ object({
27373
+ kind: literal("detector-store-cluster-wide"),
27374
+ skippedNodes: array(string()).readonly()
27375
+ }),
27376
+ object({
27377
+ kind: literal("detector-store-unreadable"),
27378
+ error: string()
27379
+ }),
27380
+ object({
27381
+ kind: literal("coral-enabled"),
27382
+ nodeId: string(),
27383
+ deviceKey: string()
27384
+ })
27385
+ ]);
27386
+ var BestSettingsOptionsSchema = object({
27387
+ /** Share of each accelerator's throughput kept free (0.3–0.5). */
27388
+ headroom: number().min(.3).max(.5).default(.4) });
27389
+ var BestSettingsPlanSchema = object({
27390
+ /** Hash of everything the apply will write — the apply refuses a different one. */
27391
+ planHash: string(),
27392
+ family: literal("yolov9"),
27393
+ headroom: number(),
27394
+ generatedAt: number(),
27395
+ nodes: array(NodeRecommendationSchema).readonly(),
27396
+ nodeChanges: array(NodeDeviceChangeSchema).readonly(),
27397
+ cameraClears: array(CameraOverrideClearSchema).readonly(),
27398
+ detectorStoreClears: array(DetectorStoreClearSchema).readonly(),
27399
+ warnings: array(BestSettingsWarningSchema).readonly()
27400
+ });
27401
+ var BestSettingsApplyInputSchema = object({
27402
+ planHash: string(),
27403
+ headroom: number().min(.3).max(.5).default(.4)
27404
+ });
27405
+ var BestSettingsPhaseResultSchema = object({
27406
+ phase: _enum([
27407
+ "download",
27408
+ "camera-overrides",
27409
+ "detector-thresholds",
27410
+ "node-models",
27411
+ "redispatch"
27412
+ ]),
27413
+ ok: boolean(),
27414
+ detail: string()
27415
+ });
27416
+ var BestSettingsApplyResultSchema = discriminatedUnion("kind", [
27417
+ object({
27418
+ kind: literal("applied"),
27419
+ planHash: string(),
27420
+ phases: array(BestSettingsPhaseResultSchema).readonly()
27421
+ }),
27422
+ object({
27423
+ kind: literal("aborted"),
27424
+ phases: array(BestSettingsPhaseResultSchema).readonly()
27425
+ }),
27426
+ object({
27427
+ kind: literal("stale"),
27428
+ plan: BestSettingsPlanSchema
27429
+ }),
27430
+ object({
27431
+ kind: literal("refused"),
27432
+ reason: _enum(["apply-in-progress"])
27433
+ })
27434
+ ]);
27177
27435
  object({
27178
27436
  activeCameras: number(),
27179
27437
  throttledCameras: number(),
@@ -29092,6 +29350,9 @@ method(object({
29092
29350
  }), {
29093
29351
  kind: "mutation",
29094
29352
  auth: "admin"
29353
+ }), method(BestSettingsOptionsSchema, BestSettingsPlanSchema, { auth: "admin" }), method(BestSettingsApplyInputSchema, BestSettingsApplyResultSchema, {
29354
+ kind: "mutation",
29355
+ auth: "admin"
29095
29356
  }), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
29096
29357
  deviceId: number(),
29097
29358
  addonId: string(),
@@ -41165,7 +41426,8 @@ Object.freeze({
41165
41426
  vehicle: .65,
41166
41427
  animal: .65
41167
41428
  });
41168
- var HF_BASE_URL = `https://huggingface.co/camstack/camstack-models/resolve/main`;
41429
+ var HF_REPO = "camstack/camstack-models";
41430
+ `${HF_REPO}`;
41169
41431
  /**
41170
41432
  * Accessory device helpers — shared across drivers.
41171
41433
  *
@@ -45702,6 +45964,12 @@ Object.freeze({
45702
45964
  addonId: null,
45703
45965
  access: "delete"
45704
45966
  },
45967
+ "pipelineExecutor.clearModelBoundDeviceOverrides": {
45968
+ capName: "pipeline-executor",
45969
+ capScope: "system",
45970
+ addonId: null,
45971
+ access: "delete"
45972
+ },
45705
45973
  "pipelineExecutor.deleteModel": {
45706
45974
  capName: "pipeline-executor",
45707
45975
  capScope: "system",
@@ -45918,6 +46186,12 @@ Object.freeze({
45918
46186
  addonId: null,
45919
46187
  access: "view"
45920
46188
  },
46189
+ "pipelineOrchestrator.applyBestSettings": {
46190
+ capName: "pipeline-orchestrator",
46191
+ capScope: "system",
46192
+ addonId: null,
46193
+ access: "create"
46194
+ },
45921
46195
  "pipelineOrchestrator.applyDeviceSettingsPatch": {
45922
46196
  capName: "pipeline-orchestrator",
45923
46197
  capScope: "system",
@@ -46092,6 +46366,12 @@ Object.freeze({
46092
46366
  addonId: null,
46093
46367
  access: "create"
46094
46368
  },
46369
+ "pipelineOrchestrator.planBestSettings": {
46370
+ capName: "pipeline-orchestrator",
46371
+ capScope: "system",
46372
+ addonId: null,
46373
+ access: "view"
46374
+ },
46095
46375
  "pipelineOrchestrator.rebalance": {
46096
46376
  capName: "pipeline-orchestrator",
46097
46377
  capScope: "system",
@@ -51514,6 +51794,11 @@ Object.freeze({
51514
51794
  form: "single",
51515
51795
  optional: false
51516
51796
  }],
51797
+ "pipelineExecutor.clearModelBoundDeviceOverrides": [{
51798
+ name: "deviceIds",
51799
+ form: "array",
51800
+ optional: true
51801
+ }],
51517
51802
  "pipelineExecutor.runPipeline": [{
51518
51803
  name: "deviceId",
51519
51804
  form: "single",
@@ -53420,41 +53705,6 @@ function stepModelRunsOnFormat(models, modelId, format) {
53420
53705
  }
53421
53706
  return models.some((m) => m.legacy !== true && hasBuild(m, format));
53422
53707
  }
53423
- /**
53424
- * Model-bound step settings (D738): an operator value that is only meaningful
53425
- * for ONE model, stored together with that model's id.
53426
- *
53427
- * The per-class confidence floors are the case it exists for. A score is a
53428
- * property of one detector's output scale — on this hub the median score of a
53429
- * correct person was 0.78 on `yolov9m-320-int8`, 0.68 on `yolo26s-320-int8`,
53430
- * 0.40 on `yolo26n-320-int8` and 0.89 on `yolo26s` (640) — so a floor tuned on
53431
- * one model is wrong on the next. The DEFAULT of such a field belongs to the
53432
- * model (the catalog entry); an operator OVERRIDE belongs to the model it was
53433
- * made for.
53434
- *
53435
- * The binding is checked at READ time against the model that RUNS, never
53436
- * enforced by a write on the model-change path: a model can change without any
53437
- * operator write at all (an unpinned root follows the elected device's
53438
- * hardware-aware default, D736), and an event-driven reset could be dropped
53439
- * (events are telemetry, D8/D11). So:
53440
- *
53441
- * effective = override when the stored binding names the running model
53442
- * | override when no binding is stored (a legacy / programmatic
53443
- * value — it applies to whatever runs, as before D738)
53444
- * | the running model's default, when it declares one
53445
- * | the field's global default.
53446
- *
53447
- * Storage shape: the value stays a plain number under its own key (every
53448
- * reader of the raw settings bag keeps working), and the binding is a SIBLING
53449
- * key, {@link modelBindingKey}. Both are flat so the shallow per-key merges of
53450
- * the settings layers (node fold, camera override) carry a value and its
53451
- * binding together whenever one layer writes both — which every writer here
53452
- * does.
53453
- *
53454
- * Lives in the bare `@camstack/types` entry, which every addon bundles, so the
53455
- * runner (`addon-pipeline`) and the editors (`ui-library`, `addon-admin-ui`)
53456
- * apply the same rule.
53457
- */
53458
53708
  /** Suffix of the sibling key that names the model a stored value was made for. */
53459
53709
  var MODEL_BINDING_SUFFIX = "ModelId";
53460
53710
  /** `minConfidencePerson` → `minConfidencePersonModelId`. */
@@ -53514,6 +53764,17 @@ function applyModelBoundSettings(settings, boundKeys, runningModelId) {
53514
53764
  }
53515
53765
  return out;
53516
53766
  }
53767
+ /**
53768
+ * The keys of every `bindsToModel` field of a step's config schema, groups
53769
+ * flattened (D738). One definition for the runner (which applies the binding)
53770
+ * and the orchestrator's Best settings (which clears those overrides, D745).
53771
+ */
53772
+ function collectModelBoundKeys(fields) {
53773
+ return fields.flatMap((field) => {
53774
+ if (field.type === "group") return collectModelBoundKeys(field.fields);
53775
+ return "key" in field && "bindsToModel" in field && field.bindsToModel === true ? [field.key] : [];
53776
+ });
53777
+ }
53517
53778
  /** Side of the square, as a multiple of the face box's longer side. */
53518
53779
  var ROOT_FACE_REFINE_SCALE = 1.6;
53519
53780
  /**
@@ -54948,10 +55209,10 @@ Object.defineProperty(exports, "G711_SCALE_CORRECTION_DB", {
54948
55209
  return G711_SCALE_CORRECTION_DB;
54949
55210
  }
54950
55211
  });
54951
- Object.defineProperty(exports, "HF_BASE_URL", {
55212
+ Object.defineProperty(exports, "HF_REPO", {
54952
55213
  enumerable: true,
54953
55214
  get: function() {
54954
- return HF_BASE_URL;
55215
+ return HF_REPO;
54955
55216
  }
54956
55217
  });
54957
55218
  Object.defineProperty(exports, "LABEL_SUPPLY_MACRO", {
@@ -55158,6 +55419,12 @@ Object.defineProperty(exports, "clipExportFailureOf", {
55158
55419
  return clipExportFailureOf;
55159
55420
  }
55160
55421
  });
55422
+ Object.defineProperty(exports, "collectModelBoundKeys", {
55423
+ enumerable: true,
55424
+ get: function() {
55425
+ return collectModelBoundKeys;
55426
+ }
55427
+ });
55161
55428
  Object.defineProperty(exports, "containingParentIndex", {
55162
55429
  enumerable: true,
55163
55430
  get: function() {
@@ -55464,6 +55731,12 @@ Object.defineProperty(exports, "modeMayWrite", {
55464
55731
  return modeMayWrite;
55465
55732
  }
55466
55733
  });
55734
+ Object.defineProperty(exports, "modelBindingKey", {
55735
+ enumerable: true,
55736
+ get: function() {
55737
+ return modelBindingKey;
55738
+ }
55739
+ });
55467
55740
  Object.defineProperty(exports, "motionDetectionCapability", {
55468
55741
  enumerable: true,
55469
55742
  get: function() {