@camstack/addon-pipeline 1.1.70 → 1.1.71

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 +1 -1
  2. package/dist/audio-analyzer/index.mjs +1 -1
  3. package/dist/detection-pipeline/index.js +181 -469
  4. package/dist/detection-pipeline/index.mjs +182 -469
  5. package/dist/{dist-CurVt3xC.mjs → dist-DyALtmD7.mjs} +229 -49
  6. package/dist/{dist-BWn5k0A5.js → dist-DzTjxf39.js} +240 -48
  7. package/dist/motion-wasm/index.js +1 -1
  8. package/dist/motion-wasm/index.mjs +1 -1
  9. package/dist/pipeline-runner/index.js +24 -2
  10. package/dist/pipeline-runner/index.mjs +24 -2
  11. package/dist/recorder/index.js +1 -1
  12. package/dist/recorder/index.mjs +1 -1
  13. package/dist/session-decode/decode-worker-child.js +177 -12
  14. package/dist/session-decode/decode-worker-child.mjs +177 -12
  15. package/dist/{step-definitions-B7e8rPe3.js → step-definitions-Djy8aZLt.js} +6 -2
  16. package/dist/{step-definitions-BKm17nce.mjs → step-definitions-rmBALHX4.mjs} +6 -2
  17. package/dist/stream-broker/_stub.js +2 -2
  18. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-yAAGMET5.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CMP316sx.mjs} +2 -2
  19. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BflyNuZv.mjs +26 -0
  20. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-5Zc9wj-A.mjs +26 -0
  21. package/dist/stream-broker/{hostInit-DUzRsTmt.mjs → hostInit-DLJNx0Ly.mjs} +2 -2
  22. package/dist/stream-broker/index.js +1 -1
  23. package/dist/stream-broker/index.mjs +1 -1
  24. package/dist/stream-broker/remoteEntry.js +1 -1
  25. package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-D6bWMuew.js → MaskShapeCanvas-DI4BY7W2-sOOxiGvP.js} +1 -1
  26. package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-C-1enV21.js → MotionZonesSettings-NcxxQN8r-DdTQuT23.js} +1 -1
  27. package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-By9pdGP7.js → PrivacyMaskSettings-APgPLF7p-BrR0L3ql.js} +1 -1
  28. package/embed-dist/assets/index-D4MGuECB.css +2 -0
  29. package/embed-dist/assets/{index-BPGh79kn.js → index-Dk21l1_3.js} +14 -14
  30. package/embed-dist/index.html +2 -2
  31. package/package.json +1 -1
  32. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D68Lj69v.mjs +0 -26
  33. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CDBALHSV.mjs +0 -26
  34. package/embed-dist/assets/index-D2pF9Z3W.css +0 -2
@@ -7924,6 +7924,24 @@ function nodePin(nodeId) {
7924
7924
  function hfModelUrl(repo, path) {
7925
7925
  return `https://huggingface.co/${repo}/resolve/main/${path}`;
7926
7926
  }
7927
+ /**
7928
+ * DEVICE-POOL backend → model format — the SSOT for the multi-device inference
7929
+ * DESCRIPTOR path (Python per-device pools), distinct from {@link BACKEND_TO_FORMAT}
7930
+ * above which is the legacy NODE runtime map (where `coreml → onnx` because
7931
+ * onnxruntime-node's CoreML EP loads `.onnx`). Here a device pool runs the
7932
+ * backend NATIVELY, so `coreml → coreml` and `edgetpu → tflite`. Consumed by
7933
+ * `resolveDeviceEngine` (addon-pipeline) and the orchestrator's
7934
+ * `parseDeviceKey`/`getNodeInferenceDevices` — the previously-duplicated
7935
+ * `BACKEND_FORMAT` maps (R3/node-F2). `cpu`/`cuda` floor to onnx.
7936
+ */
7937
+ var DEVICE_BACKEND_TO_FORMAT = {
7938
+ openvino: "openvino",
7939
+ edgetpu: "tflite",
7940
+ coreml: "coreml",
7941
+ onnx: "onnx",
7942
+ cpu: "onnx",
7943
+ cuda: "onnx"
7944
+ };
7927
7945
  var COCO_80_LABELS = [
7928
7946
  {
7929
7947
  id: "person",
@@ -11941,20 +11959,6 @@ var pipelineExecutorCapability = {
11941
11959
  getSelectedEngine: method(_void(), PipelineEngineChoiceSchema),
11942
11960
  getDefaultSteps: method(PipelineEngineChoiceSchema, array(PipelineDefaultStepSchema)),
11943
11961
  /**
11944
- * Re-run the platform probe for the inference engine and write the
11945
- * detected runtime / backend / device back into the addon's own
11946
- * global settings store. Returns the engine that was picked so the
11947
- * UI can confirm without a second round-trip. Triggers the standard
11948
- * `requiresRestart` auto-restart flow because all three fields are
11949
- * marked restart-required. Replaces the legacy per-agent
11950
- * `pipeline-orchestrator.reprobeAgentHwAccel` surface for the
11951
- * engine dimension — each addon now owns its own probe.
11952
- */
11953
- reprobeEngine: method(_void(), PipelineEngineChoiceSchema, {
11954
- kind: "mutation",
11955
- auth: "admin"
11956
- }),
11957
- /**
11958
11962
  * Per-node detection-engine provisioning snapshot. Returns the live
11959
11963
  * state of the lazy runtime-provisioning machine on `nodeId`
11960
11964
  * (idle / installing / verifying / ready / failed). The UI pairs this
@@ -12585,6 +12589,19 @@ var RunnerLocalLoadSchema = object({
12585
12589
  avgInferenceTimeMs: number(),
12586
12590
  /** Total queue depth across motion + detection queues. */
12587
12591
  queueDepthTotal: number(),
12592
+ /**
12593
+ * Per-inference-device live load (multi-device C4). One entry per deviceKey
12594
+ * this runner currently has attached cameras on, so the orchestrator's second
12595
+ * `balance()` pass (over a node's devices) weights on real per-pool session
12596
+ * counts. Empty on single-device / pre-multi-device runners. `queueDepthTotal`
12597
+ * per device is 0 until the pool backlog gets a public accessor (follow-up).
12598
+ */
12599
+ devices: array(object({
12600
+ deviceKey: string(),
12601
+ backend: string(),
12602
+ attachedCameras: number(),
12603
+ queueDepthTotal: number()
12604
+ })).default([]),
12588
12605
  /** Hardware capability flags reported by this node. */
12589
12606
  hardware: object({
12590
12607
  hasGpu: boolean(),
@@ -18016,13 +18033,11 @@ var PipelineTemplateSchema = object({
18016
18033
  createdAt: string(),
18017
18034
  updatedAt: string()
18018
18035
  });
18019
- var AgentAddonConfigSchema = object({
18020
- enabled: boolean(),
18036
+ var DeviceStepConfigSchema = object({
18021
18037
  modelId: string().optional(),
18022
- settings: record(string(), unknown()).readonly()
18038
+ settings: record(string(), unknown()).optional()
18023
18039
  });
18024
18040
  var AgentPipelineSettingsSchema = object({
18025
- addonDefaults: record(string(), AgentAddonConfigSchema).readonly(),
18026
18041
  maxCameras: number().int().nonnegative().nullable().default(null),
18027
18042
  /** Per-node detection weight (relative share for the quota balancer). */
18028
18043
  detectWeight: number().positive().optional(),
@@ -18049,13 +18064,18 @@ var AgentPipelineSettingsSchema = object({
18049
18064
  reachableHost: string().optional(),
18050
18065
  /**
18051
18066
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
18052
- * weight}. Absent / all-disabled ⇒ the node's single default accelerator
18053
- * (safe default); two+ enabled ⇒ the dispatcher balances detection sessions
18054
- * across them so they run CONCURRENTLY.
18067
+ * weight, steps}. Absent / all-disabled ⇒ the node's single default
18068
+ * accelerator (safe default); two+ enabled ⇒ the dispatcher balances
18069
+ * detection sessions across them so they run CONCURRENTLY. `steps` is the
18070
+ * per-(node,device) BASE provisioning (`stepId → {modelId?, settings?}`) —
18071
+ * the default model/settings for every camera landing on that accelerator;
18072
+ * a stepId absent ⇒ the step uses that device's format default.
18055
18073
  */
18056
18074
  inferenceDevices: record(string(), object({
18057
18075
  enabled: boolean(),
18058
- weight: number().positive().optional()
18076
+ weight: number().positive().optional(),
18077
+ maxSessions: number().int().positive().optional(),
18078
+ steps: record(string(), DeviceStepConfigSchema).optional()
18059
18079
  })).optional()
18060
18080
  });
18061
18081
  var CameraPipelineForAgentSchema = object({
@@ -18066,14 +18086,13 @@ var CameraPipelineForAgentSchema = object({
18066
18086
  }).nullable()
18067
18087
  });
18068
18088
  var CameraStepOverridePatchSchema = object({
18069
- enabled: boolean().optional(),
18070
18089
  modelId: string().optional(),
18071
18090
  settings: record(string(), unknown()).readonly().optional()
18072
18091
  });
18073
18092
  var CameraPipelineSettingsSchema = object({
18074
18093
  pinnedAgentNodeId: string().optional(),
18075
18094
  stepToggles: record(string(), boolean()).optional(),
18076
- stepOverridesByAgent: record(string(), record(string(), CameraStepOverridePatchSchema)).optional(),
18095
+ stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
18077
18096
  pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
18078
18097
  });
18079
18098
  /**
@@ -18287,6 +18306,44 @@ var CameraStatusSchema = object({
18287
18306
  /** Unix timestamp (ms) when this snapshot was composed server-side. */
18288
18307
  fetchedAt: number()
18289
18308
  });
18309
+ var NodeInferenceDeviceSchema = object({
18310
+ /** Stable per-node device key, e.g. `openvino:npu`, `edgetpu:usb`, `cpu`. */
18311
+ key: string(),
18312
+ backend: string(),
18313
+ device: string(),
18314
+ format: _enum(MODEL_FORMATS),
18315
+ /** Whether the node's live probe reports the device as usable right now. */
18316
+ available: boolean(),
18317
+ /**
18318
+ * Whether this device participates in dispatch. AUTO default (spec C2):
18319
+ * accelerators are opt-OUT (a discovered NPU/iGPU/Coral/ANE with no stored
18320
+ * entry is `true`); CPU is opt-IN (`false` by default — the fallback pool,
18321
+ * not a balanced target). An explicit stored value always wins; a stored-only
18322
+ * (unavailable) key keeps its stored value.
18323
+ */
18324
+ enabled: boolean(),
18325
+ /** Relative balancer weight for the enabled device (default 1). */
18326
+ weight: number(),
18327
+ /** Per-device concurrent-session cap; null = unlimited (multi-device C4). */
18328
+ maxSessions: number().nullable(),
18329
+ /** Object-detection model the executor defaults to for this deviceKey. */
18330
+ defaultModelId: string(),
18331
+ /**
18332
+ * Per-(node,device) BASE provisioning (C7.2/C7.4) — the RAW stored
18333
+ * `stepId → {modelId?, settings?}` map from `inferenceDevices[key].steps`.
18334
+ * Absent/empty ⇒ no base (every step uses its device format default). The
18335
+ * UI cross-references `pipelineExecutor.getSchema` for the models actually
18336
+ * available per format; this is the stored selection that becomes the
18337
+ * default for EVERY camera landing on this accelerator.
18338
+ */
18339
+ steps: record(string(), DeviceStepConfigSchema).optional()
18340
+ });
18341
+ var NodeInferenceDevicesSchema = object({
18342
+ nodeId: string(),
18343
+ /** False when the node's platform-probe was unreachable (no live device set). */
18344
+ reachable: boolean(),
18345
+ devices: array(NodeInferenceDeviceSchema).readonly()
18346
+ });
18290
18347
  method(object({
18291
18348
  deviceId: number(),
18292
18349
  agentNodeId: string()
@@ -18296,7 +18353,13 @@ method(object({
18296
18353
  }), method(object({ deviceId: number() }), object({ success: literal(true) }), {
18297
18354
  kind: "mutation",
18298
18355
  auth: "admin"
18299
- }), method(_void(), object({ migrated: number() }), {
18356
+ }), method(object({
18357
+ deviceId: number(),
18358
+ deviceKey: string()
18359
+ }), object({ success: literal(true) }), {
18360
+ kind: "mutation",
18361
+ auth: "admin"
18362
+ }), method(object({ deviceId: number() }), object({ deviceKey: string().nullable() })), method(_void(), object({ migrated: number() }), {
18300
18363
  kind: "mutation",
18301
18364
  auth: "admin"
18302
18365
  }), method(_void(), array(PipelineAssignmentSchema).readonly()), method(object({ deviceId: number() }), PipelineAssignmentSchema.nullable()), method(_void(), array(AgentLoadSummarySchema).readonly()), method(_void(), GlobalMetricsSchema), method(object({ deviceId: number() }), CameraMetricsSchema.nullable()), method(object({ nodeId: string() }), CapabilityBindingsSchema), method(object({
@@ -18330,13 +18393,7 @@ method(object({
18330
18393
  }))), method(object({ agentNodeId: string() }), AgentPipelineSettingsSchema.nullable()), method(_void(), array(object({
18331
18394
  nodeId: string(),
18332
18395
  settings: AgentPipelineSettingsSchema
18333
- })).readonly()), method(object({
18334
- agentNodeId: string(),
18335
- defaults: record(string(), AgentAddonConfigSchema)
18336
- }), object({ success: literal(true) }), {
18337
- kind: "mutation",
18338
- auth: "admin"
18339
- }), method(object({ agentNodeId: string() }), object({
18396
+ })).readonly()), method(object({ agentNodeId: string() }), object({
18340
18397
  success: boolean(),
18341
18398
  removed: boolean()
18342
18399
  }), {
@@ -18372,12 +18429,14 @@ method(object({
18372
18429
  agentNodeId: string(),
18373
18430
  inferenceDevices: record(string(), object({
18374
18431
  enabled: boolean(),
18375
- weight: number().positive().optional()
18432
+ weight: number().positive().optional(),
18433
+ maxSessions: number().int().positive().optional(),
18434
+ steps: record(string(), DeviceStepConfigSchema).optional()
18376
18435
  }))
18377
18436
  }), object({ success: literal(true) }), {
18378
18437
  kind: "mutation",
18379
18438
  auth: "admin"
18380
- }), method(object({ agentNodeId: string() }), object({
18439
+ }), method(object({ nodeId: string() }), NodeInferenceDevicesSchema), method(object({ agentNodeId: string() }), object({
18381
18440
  success: literal(true),
18382
18441
  /** Hardware-aware default detection model now in effect on the node (null when unresolvable). */
18383
18442
  effectiveModelId: string().nullable(),
@@ -18393,9 +18452,10 @@ method(object({
18393
18452
  }), object({ success: literal(true) }), {
18394
18453
  kind: "mutation",
18395
18454
  auth: "admin"
18396
- }), method(object({ deviceId: number() }), record(string(), record(string(), CameraStepOverridePatchSchema)).nullable()), method(object({
18455
+ }), method(object({ deviceId: number() }), record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).nullable()), method(object({
18397
18456
  deviceId: number(),
18398
18457
  agentNodeId: string(),
18458
+ deviceKey: string(),
18399
18459
  addonId: string(),
18400
18460
  patch: CameraStepOverridePatchSchema.nullable()
18401
18461
  }), object({ success: literal(true) }), {
@@ -18547,7 +18607,8 @@ method(_void(), ServerPackageStatusSchema, { auth: "admin" }), method(_void(), S
18547
18607
  /** Explicit target version; omitted = latest from the registry. */
18548
18608
  version: string().optional() }), ServerUpdateActionResultSchema, {
18549
18609
  kind: "mutation",
18550
- auth: "admin"
18610
+ auth: "admin",
18611
+ timeoutMs: 16 * 6e4
18551
18612
  }), method(_void(), ServerUpdateActionResultSchema, {
18552
18613
  kind: "mutation",
18553
18614
  auth: "admin"
@@ -24804,12 +24865,6 @@ Object.freeze({
24804
24865
  addonId: null,
24805
24866
  access: "view"
24806
24867
  },
24807
- "pipelineExecutor.reprobeEngine": {
24808
- capName: "pipeline-executor",
24809
- capScope: "system",
24810
- addonId: null,
24811
- access: "create"
24812
- },
24813
24868
  "pipelineExecutor.runAudioTest": {
24814
24869
  capName: "pipeline-executor",
24815
24870
  capScope: "system",
@@ -24960,6 +25015,12 @@ Object.freeze({
24960
25015
  addonId: null,
24961
25016
  access: "view"
24962
25017
  },
25018
+ "pipelineOrchestrator.getNodeInferenceDevices": {
25019
+ capName: "pipeline-orchestrator",
25020
+ capScope: "system",
25021
+ addonId: null,
25022
+ access: "view"
25023
+ },
24963
25024
  "pipelineOrchestrator.getPipelineAssignment": {
24964
25025
  capName: "pipeline-orchestrator",
24965
25026
  capScope: "system",
@@ -24972,6 +25033,12 @@ Object.freeze({
24972
25033
  addonId: null,
24973
25034
  access: "view"
24974
25035
  },
25036
+ "pipelineOrchestrator.getPipelineDevicePin": {
25037
+ capName: "pipeline-orchestrator",
25038
+ capScope: "system",
25039
+ addonId: null,
25040
+ access: "view"
25041
+ },
24975
25042
  "pipelineOrchestrator.listAgentSettings": {
24976
25043
  capName: "pipeline-orchestrator",
24977
25044
  capScope: "system",
@@ -25014,12 +25081,6 @@ Object.freeze({
25014
25081
  addonId: null,
25015
25082
  access: "create"
25016
25083
  },
25017
- "pipelineOrchestrator.setAgentAddonDefaults": {
25018
- capName: "pipeline-orchestrator",
25019
- capScope: "system",
25020
- addonId: null,
25021
- access: "create"
25022
- },
25023
25084
  "pipelineOrchestrator.setAgentCapabilities": {
25024
25085
  capName: "pipeline-orchestrator",
25025
25086
  capScope: "system",
@@ -25074,6 +25135,12 @@ Object.freeze({
25074
25135
  addonId: null,
25075
25136
  access: "create"
25076
25137
  },
25138
+ "pipelineOrchestrator.setPipelineDevicePin": {
25139
+ capName: "pipeline-orchestrator",
25140
+ capScope: "system",
25141
+ addonId: null,
25142
+ access: "create"
25143
+ },
25077
25144
  "pipelineOrchestrator.unassignAudio": {
25078
25145
  capName: "pipeline-orchestrator",
25079
25146
  capScope: "system",
@@ -26828,5 +26895,118 @@ function runtimeDevices(id, hw) {
26828
26895
  function defaultDeviceFor(id) {
26829
26896
  return def(id).defaultDevice;
26830
26897
  }
26898
+ /**
26899
+ * Scores all applicable inference backends for the given hardware.
26900
+ *
26901
+ * Rules (hardware-driven only — no Python import probes):
26902
+ * - coreml: score 95, darwin+arm64
26903
+ * - cuda: score 85, nvidia gpu
26904
+ * - openvino: score 90 if intel-npu present, else 80 if intel gpu
26905
+ * - edgetpu: score 70, coral usb present
26906
+ * - cpu: score 50 (universal floor, always included)
26907
+ *
26908
+ * All hardware-matched entries are `available: true`.
26909
+ * Scores are sorted descending; `best` is the first available entry
26910
+ * (or last entry as fallback).
26911
+ */
26912
+ function scoreRuntimes(hw) {
26913
+ const scores = [];
26914
+ if (hw.platform === "darwin" && hw.arch === "arm64") scores.push({
26915
+ runtime: "python",
26916
+ backend: "coreml",
26917
+ format: "coreml",
26918
+ score: 95,
26919
+ reason: "Apple Neural Engine (Python CoreML)",
26920
+ available: true
26921
+ });
26922
+ if (hw.gpu?.type === "nvidia") scores.push({
26923
+ runtime: "python",
26924
+ backend: "cuda",
26925
+ format: "onnx",
26926
+ score: 85,
26927
+ reason: "NVIDIA CUDA (Python ONNX Runtime)",
26928
+ available: true
26929
+ });
26930
+ if (hw.gpu?.type === "intel") {
26931
+ const score = hw.npu?.type === "intel-npu" ? 90 : 80;
26932
+ scores.push({
26933
+ runtime: "python",
26934
+ backend: "openvino",
26935
+ format: "openvino",
26936
+ score,
26937
+ reason: "Intel OpenVINO",
26938
+ available: true
26939
+ });
26940
+ }
26941
+ if (hw.coral != null) scores.push({
26942
+ runtime: "python",
26943
+ backend: "edgetpu",
26944
+ format: "tflite",
26945
+ score: 70,
26946
+ reason: "Coral Edge TPU (Python LiteRT)",
26947
+ available: true
26948
+ });
26949
+ scores.push({
26950
+ runtime: "python",
26951
+ backend: "cpu",
26952
+ format: "onnx",
26953
+ score: 50,
26954
+ reason: "CPU (Python ONNX Runtime)",
26955
+ available: true
26956
+ });
26957
+ const sorted = scores.toSorted((a, b) => b.score - a.score);
26958
+ return {
26959
+ scores: sorted,
26960
+ best: sorted.find((s) => s.available) ?? sorted[sorted.length - 1]
26961
+ };
26962
+ }
26963
+ var DEVICE_FOR_BACKEND = {
26964
+ cuda: "gpu",
26965
+ edgetpu: "usb",
26966
+ coreml: "all",
26967
+ cpu: "cpu"
26968
+ };
26969
+ function device(backend, dev, format, score) {
26970
+ return {
26971
+ key: backend === "cpu" ? "cpu" : `${backend}:${dev}`,
26972
+ backend,
26973
+ device: dev,
26974
+ format,
26975
+ runtime: "python",
26976
+ score,
26977
+ available: true
26978
+ };
26979
+ }
26980
+ /**
26981
+ * Enumerate every usable inference device on a node — one descriptor PER PHYSICAL
26982
+ * ACCELERATOR, so the orchestrator can run and balance across all of them
26983
+ * CONCURRENTLY (each device is its own pool). Critically, OpenVINO is expanded
26984
+ * into its distinct devices (NPU / iGPU / CPU) rather than a single AUTO entry:
26985
+ * the Intel NPU ("AI Boost") and the iGPU are separate accelerators and run in
26986
+ * parallel — collapsing them to AUTO would leave one idle. NPU is scored above
26987
+ * the iGPU (faster for int8 detection AND frees the GPU).
26988
+ */
26989
+ function enumerateInferenceDevices(hw) {
26990
+ const { scores } = scoreRuntimes(hw);
26991
+ const out = [];
26992
+ for (const s of scores) {
26993
+ if (s.backend === "openvino") {
26994
+ if (hw.npu?.type === "intel-npu") out.push(device("openvino", "npu", s.format, s.score + 2));
26995
+ if (hw.gpu?.type === "intel") out.push(device("openvino", "gpu", s.format, s.score));
26996
+ continue;
26997
+ }
26998
+ if (s.backend === "edgetpu") {
26999
+ const coralCount = Math.max(1, hw.coral?.count ?? 1);
27000
+ for (let i = 0; i < coralCount; i++) {
27001
+ const dev = i === 0 ? "usb" : `usb:${i}`;
27002
+ out.push(device("edgetpu", dev, s.format, s.score));
27003
+ }
27004
+ continue;
27005
+ }
27006
+ const dev = DEVICE_FOR_BACKEND[s.backend] ?? s.backend;
27007
+ out.push(device(s.backend, dev, s.format, s.score));
27008
+ }
27009
+ return out;
27010
+ }
26831
27011
  //#endregion
26832
- export { sleep as $, pipelineExecutorCapability as A, errMsg as B, evaluateZoneRules as C, migrateConfigToBands as D, maskUrlCredentials as E, runtimeDevices as F, createEvent as G, CAM_PROFILE_ORDER as H, storageEvictableCapability as I, makeProfileBrokerId as J, hydrateSchema as K, streamBrokerCapability as L, recordingCapability as M, recordingExportCapability as N, motionDetectionCapability as O, resolveScrubThumbnailGeometry as P, selectAssignedProfileSlots as Q, supportedRuntimes as R, detectionPipelineCapability as S, mapAudioLabelToMacro as T, DeviceFeature as U, BaseAddon as V, DeviceType as W, parseJsonUnknown as X, makeSourceBrokerId as Y, parseProfileBrokerId as Z, audioAnalyzerCapability as _, COCO_TO_MACRO as a, literal as at, defaultDeviceFor as b, EncodeProfileSchema as c, record as ct, OpsLogEntrySchema as d, EventCategory as dt, _enum as et, RecordingConfigSchema as f, audioAnalysisCapability as g, addonWidgetsSourceCapability as h, COCO_80_LABELS as i, lazy as it, pipelineRunnerCapability as j, nodePin as k, ExportRecordSchema as l, string as lt, YAMNET_TO_MACRO as m, AUDIO_BACKEND_CHOICES as n, boolean as nt, DEFAULT_AUDIO_ANALYZER_CONFIG as o, number as ot, RingBuffer as p, isEvent as q, AUDIO_MACRO_LABELS as r, discriminatedUnion as rt, EVENT_PAD_MS as s, object as st, APPLE_SA_TO_MACRO as t, array as tt, HF_BASE_URL as u, union as ut, cameraStreamsCapability as v, hfModelUrl as w, defineCustomActions as x, customAction as y, webrtcSessionCapability as z };
27012
+ export { parseProfileBrokerId as $, motionDetectionCapability as A, supportedRuntimes as B, detectionPipelineCapability as C, mapAudioLabelToMacro as D, hfModelUrl as E, recordingExportCapability as F, DeviceFeature as G, errMsg as H, resolveScrubThumbnailGeometry as I, hydrateSchema as J, DeviceType as K, runtimeDevices as L, pipelineExecutorCapability as M, pipelineRunnerCapability as N, maskUrlCredentials as O, recordingCapability as P, parseJsonUnknown as Q, storageEvictableCapability as R, defineCustomActions as S, evaluateZoneRules as T, BaseAddon as U, webrtcSessionCapability as V, CAM_PROFILE_ORDER as W, makeProfileBrokerId as X, isEvent as Y, makeSourceBrokerId as Z, audioAnalysisCapability as _, COCO_TO_MACRO as a, discriminatedUnion as at, customAction as b, EVENT_PAD_MS as c, number as ct, HF_BASE_URL as d, string as dt, selectAssignedProfileSlots as et, OpsLogEntrySchema as f, union as ft, addonWidgetsSourceCapability as g, YAMNET_TO_MACRO as h, COCO_80_LABELS as i, boolean as it, nodePin as j, migrateConfigToBands as k, EncodeProfileSchema as l, object as lt, RingBuffer as m, AUDIO_BACKEND_CHOICES as n, _enum as nt, DEFAULT_AUDIO_ANALYZER_CONFIG as o, lazy as ot, RecordingConfigSchema as p, EventCategory as pt, createEvent as q, AUDIO_MACRO_LABELS as r, array as rt, DEVICE_BACKEND_TO_FORMAT as s, literal as st, APPLE_SA_TO_MACRO as t, sleep as tt, ExportRecordSchema as u, record as ut, audioAnalyzerCapability as v, enumerateInferenceDevices as w, defaultDeviceFor as x, cameraStreamsCapability as y, streamBrokerCapability as z };