@camstack/addon-pipeline 1.1.27 → 1.1.28

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 (43) hide show
  1. package/dist/audio-analyzer/index.js +7 -6
  2. package/dist/audio-analyzer/index.mjs +7 -6
  3. package/dist/audio-codec-ffmpeg/index.js +1 -1
  4. package/dist/audio-codec-ffmpeg/index.mjs +1 -1
  5. package/dist/decoder-ffmpeg/index.js +43 -11
  6. package/dist/decoder-ffmpeg/index.mjs +43 -11
  7. package/dist/decoder-nodeav/index.js +13 -8
  8. package/dist/decoder-nodeav/index.mjs +13 -8
  9. package/dist/detection-pipeline/index.js +157 -219
  10. package/dist/detection-pipeline/index.mjs +157 -219
  11. package/dist/{dist-DAIlCdAx.js → dist-Biq62zt4.js} +372 -35
  12. package/dist/{dist-CgEP_0OL.mjs → dist-C6_wgXqF.mjs} +373 -24
  13. package/dist/{frame-handle-plane-Dq20KtKL.mjs → frame-handle-plane-BIoY6nRV.mjs} +13 -5
  14. package/dist/{frame-handle-plane-DtTRX_0n.js → frame-handle-plane-D6BzyEgy.js} +13 -5
  15. package/dist/{frame-ring-sink-BbzrqTWj.js → frame-ring-sink-9J0wCdLF.js} +128 -23
  16. package/dist/{frame-ring-sink-B_NvPTJZ.mjs → frame-ring-sink-Cs9vby6v.mjs} +117 -24
  17. package/dist/motion-wasm/index.js +55 -3
  18. package/dist/motion-wasm/index.mjs +55 -3
  19. package/dist/node-topology-platform-BkR_k6WT.mjs +15 -0
  20. package/dist/node-topology-platform-CFZ7F4xW.js +20 -0
  21. package/dist/pipeline-runner/index.js +50 -16
  22. package/dist/pipeline-runner/index.mjs +50 -16
  23. package/dist/recorder/index.js +36 -40
  24. package/dist/recorder/index.mjs +36 -40
  25. package/dist/stream-broker/_stub.js +2 -2
  26. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-5tQlh9h4.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DoReAb4y.mjs} +3 -3
  27. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DhY3MZ2C.mjs +26 -0
  28. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BJK0-svt.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DtoYGpTp.mjs} +1 -1
  29. package/dist/stream-broker/{hostInit-DyLqyJaS.mjs → hostInit-C0SuwQhL.mjs} +3 -3
  30. package/dist/stream-broker/index.js +61 -25
  31. package/dist/stream-broker/index.mjs +61 -25
  32. package/dist/stream-broker/remoteEntry.js +1 -1
  33. package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-BDLNwJ_F.js → MaskShapeCanvas-DI4BY7W2-Br2yi8ah.js} +1 -1
  34. package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-CoLjNiUN.js → MotionZonesSettings-NcxxQN8r-BSCcPdPf.js} +1 -1
  35. package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-DJE3OU-q.js → PrivacyMaskSettings-APgPLF7p-ztxvxSjS.js} +1 -1
  36. package/embed-dist/assets/index-C5UpuPr8.css +2 -0
  37. package/embed-dist/assets/{index-C-pL8ETk.js → index-CeZV1B-2.js} +10 -10
  38. package/embed-dist/index.html +2 -2
  39. package/package.json +1 -1
  40. package/python/inference_pool.py +93 -102
  41. package/python/test_inference_pool_device_selection.py +43 -38
  42. package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CkOPfV8r.mjs +0 -26
  43. package/embed-dist/assets/index-DrJ0ee3f.css +0 -2
@@ -4,8 +4,8 @@
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <title>CamStack Embed</title>
7
- <script type="module" crossorigin src="./assets/index-C-pL8ETk.js"></script>
8
- <link rel="stylesheet" crossorigin href="./assets/index-DrJ0ee3f.css">
7
+ <script type="module" crossorigin src="./assets/index-CeZV1B-2.js"></script>
8
+ <link rel="stylesheet" crossorigin href="./assets/index-C5UpuPr8.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-pipeline",
3
- "version": "1.1.27",
3
+ "version": "1.1.28",
4
4
  "description": "CamStack Pipeline bundle — runner, detection, motion, decoders, audio + stream broker. Multi-entry npm package shipping 7 addons under a single bundle.",
5
5
  "keywords": [
6
6
  "camstack",
@@ -10,9 +10,10 @@ Per-runtime ML backends (coreml / openvino / onnx):
10
10
  CoreML → ThreadPoolExecutor(1) — ANE is single-context; one
11
11
  Python thread is enough, and avoids GIL thrashing.
12
12
  OpenVINO → ThreadPoolExecutor(OPTIMAL_NUMBER_OF_INFER_REQUESTS),
13
- each thread driving its own InferRequest, with the model
14
- compiled under the THROUGHPUT hint so the streams run
15
- concurrently (a single shared request serialises cameras).
13
+ each worker checking out an InferRequest from a fixed
14
+ per-model pool (created once, post-compile), with the model
15
+ compiled on ONE explicit device under the LATENCY hint (no
16
+ AUTO — its CPU->GPU handover invalidated in-flight requests).
16
17
  ONNX → ThreadPoolExecutor(N) — N independent InferenceSessions
17
18
  where N = concurrency setting; each session pinned to
18
19
  its own worker thread.
@@ -48,7 +49,6 @@ import platform
48
49
  import shutil
49
50
  import struct
50
51
  import sys
51
- import threading
52
52
  import time
53
53
  from collections import deque
54
54
  from dataclasses import dataclass, field
@@ -166,61 +166,47 @@ class ModelSlot:
166
166
  _runtime: str = ""
167
167
  _runtime_lib: Any = None
168
168
  # Max OPTIMAL_NUMBER_OF_INFER_REQUESTS across loaded OpenVINO models — used
169
- # to size the predict pool so the THROUGHPUT streams are actually fed.
169
+ # to size the predict pool so the per-model InferRequest pool is actually fed.
170
170
  _ov_optimal_reqs: int = 0
171
171
  # Default OpenVINO predict-pool size when models load lazily (so we can't yet
172
172
  # query the device's optimal request count). ≈ measured optimal on Intel
173
173
  # CPU/iGPU/NPU (4-5). Threads idle-block on infer, so over-provisioning is cheap.
174
174
  OV_DEFAULT_CONCURRENCY: int = 4
175
- # OpenVINO device-mode decision. AUTO mode can hide errors / cause conflicts
176
- # with NPU and GPU, so we resolve an explicit device and fall back accordingly.
177
- # The intel-iGPU-only case (the N100) compiles explicit "GPU" the exact host
178
- # where the AUTO plugin's mid-flight CPU-helper -> GPU handover invalidated
179
- # in-flight InferRequest output ports ("Cannot find tensor for port
180
- # opset1::Result score_8").
181
-
182
-
183
- def _resolve_ov_mode(available: list[str], full_names: dict[str, str]) -> str:
184
- """Resolve the device-mode string for an AUTO/default device request.
185
-
186
- `available` is `core.available_devices`; `full_names` maps each device to
187
- its FULL_DEVICE_NAME property (entries whose property query failed are
188
- absent a device whose FULL_DEVICE_NAME probe failed is not classified).
189
- The branch matrix:
190
-
191
- npu & gpu -> "AUTO:NPU,GPU,CPU"
192
- npu & !gpu -> "AUTO:NPU,CPU"
193
- NVIDIA dGPU(s) -> "AUTO:<dgpu[,dgpu...]>,CPU"
194
- gpu (intel only) -> "GPU" (explicit the N100 case)
195
- else -> "AUTO"
175
+ # OpenVINO device decision. AUTO is NEVER used: the AUTO plugin runs inference
176
+ # on a CPU "helper" while the GPU JIT-compiles, then hands the model over to the
177
+ # GPU mid-flight. InferRequests created during that window bind to the
178
+ # CPU-helper's Result ports; after handover the served model's ports diverge and
179
+ # req.infer() raises "Cannot find tensor for port opset1::Result score_8" (proven
180
+ # live on the N100 iGPU). Compiling ONE explicit device removes the handover
181
+ # entirely. We resolve an ordered candidate list (NPU > GPU > CPU) and compile the
182
+ # first that succeeds, with CPU as the guaranteed floor.
183
+
184
+
185
+ def _resolve_ov_devices(available: list[str], full_names: dict[str, str]) -> list[str]:
186
+ """Ordered EXPLICIT device candidates for compile-time failover (NPU>GPU>CPU).
187
+
188
+ Never returns an AUTO/AUTO:.. mode (see the module comment above). `available`
189
+ is `core.available_devices`; `full_names` maps each device to its
190
+ FULL_DEVICE_NAME (missing entries = the probe failed, left unclassified). A
191
+ GPU is only accepted when its FULL_DEVICE_NAME probed successfully (this is
192
+ also how an Intel iGPU vs an NVIDIA dGPU is told apart downstream). Ordering:
193
+ NPU(s) -> GPU(s) -> CPU (always last). The compile loop tries each in order
194
+ and stops at the first that compiles; CPU is the guaranteed fallback.
196
195
  """
197
- npu = False
198
- gpu = False
199
- dgpus: list[str] = []
196
+ npus: list[str] = []
197
+ gpus: list[str] = []
200
198
  for device in available:
201
199
  full_device_name = full_names.get(device)
202
- if full_device_name is None:
203
- continue
204
- if "NVIDIA" in full_device_name and "dGPU" in full_device_name:
205
- dgpus.append(device)
206
200
  if "NPU" in device:
207
- npu = True
208
- if "GPU" in device:
209
- gpu = True
210
-
211
- mode = "AUTO"
212
- if npu:
213
- if gpu:
214
- mode = "AUTO:NPU,GPU,CPU"
215
- else:
216
- mode = "AUTO:NPU,CPU"
217
- elif len(dgpus):
218
- mode = f"AUTO:{','.join(dgpus)},CPU"
219
- # forcing GPU can crash on older GPUs — the GPU-mode compile failure falls
220
- # back to AUTO in the compile loop below.
221
- elif gpu:
222
- mode = "GPU"
223
- return mode
201
+ npus.append(device)
202
+ elif "GPU" in device and full_device_name is not None:
203
+ gpus.append(device)
204
+ ordered: list[str] = [*npus, *gpus]
205
+ if "CPU" in available and "CPU" not in ordered:
206
+ ordered.append("CPU")
207
+ if not ordered:
208
+ ordered = ["CPU"]
209
+ return ordered
224
210
 
225
211
 
226
212
  # ONNX Runtime execution-provider names used by _resolve_onnx_providers.
@@ -523,12 +509,13 @@ def _load_model(slot: ModelSlot, config: dict) -> None:
523
509
 
524
510
  elif _runtime == "openvino":
525
511
  core = _runtime_lib
526
- ov_device = str(config.get("device", "AUTO")).upper()
527
- # Device switch (see _resolve_ov_mode above): an AUTO/default request
528
- # classifies the enumerated devices by their FULL_DEVICE_NAME and
529
- # builds an explicit mode string. An operator-pinned device (config
530
- # "device" = gpu/cpu/npu) is honored unchanged — compiled directly.
531
- if ov_device in ("AUTO", "DEFAULT", ""):
512
+ ov_device_req = str(config.get("device", "AUTO")).upper()
513
+ # Device switch (see _resolve_ov_devices above): an AUTO/default request
514
+ # classifies the enumerated devices by FULL_DEVICE_NAME and yields an
515
+ # ORDERED EXPLICIT candidate list (NPU>GPU>CPU) for compile-time
516
+ # failover. An operator-pinned device (config "device" = gpu/cpu/npu) is
517
+ # honored unchanged compiled directly, no failover.
518
+ if ov_device_req in ("AUTO", "DEFAULT", ""):
532
519
  available = list(core.available_devices)
533
520
  full_names: dict[str, str] = {}
534
521
  for dev in available:
@@ -536,40 +523,38 @@ def _load_model(slot: ModelSlot, config: dict) -> None:
536
523
  full_names[dev] = str(core.get_property(dev, "FULL_DEVICE_NAME"))
537
524
  except Exception:
538
525
  pass
539
- ov_device = _resolve_ov_mode(available, full_names)
526
+ candidates = _resolve_ov_devices(available, full_names)
540
527
  sys.stderr.write(
541
- f"OpenVINO: AUTO resolved to mode {ov_device} "
528
+ f"OpenVINO: explicit device candidates {candidates} "
542
529
  f"(available: {available}, names: {full_names})\n"
543
530
  )
544
531
  sys.stderr.flush()
545
532
  else:
546
- sys.stderr.write(f"OpenVINO: operator-pinned device {ov_device}\n")
533
+ candidates = [ov_device_req] # operator pin — compiled directly
534
+ sys.stderr.write(f"OpenVINO: operator-pinned device {ov_device_req}\n")
547
535
  sys.stderr.flush()
548
- # THROUGHPUT hint lets OpenVINO spin up multiple internal execution
549
- # streams. Combined with one InferRequest per predict-pool thread
550
- # (below), concurrent frames from N cameras run in parallel the
551
- # old `compiled(inp)` path drove a single shared default request, so
552
- # every camera serialised through one stream regardless of how many
553
- # predict workers existed. Measured ~1.5–2.4x throughput on CPU/GPU/NPU.
554
- ov_config = {"PERFORMANCE_HINT": "THROUGHPUT"}
536
+ # LATENCY (not THROUGHPUT): one deterministic execution stream instead of
537
+ # N. THROUGHPUT spun up multiple internal streams whose lazy request
538
+ # creation collided with the AUTO handover AND multiplied memory (a factor
539
+ # in the N100 OOM-freeze). LATENCY keeps a single stream; camera-level
540
+ # concurrency comes from the fixed InferRequest pool built below.
541
+ ov_config = {"PERFORMANCE_HINT": "LATENCY"}
555
542
  # Persist compiled GPU/NPU kernels so the multi-second JIT compile is paid
556
543
  # once (first boot) instead of on every pool spawn. The cold compile storm
557
- # (~25s for the full model set on an N100 iGPU) is the window where the AUTO
558
- # CPU->GPU handover races (see the index-fetch note below) and frames pile up.
544
+ # (~25s for the full model set on an N100 iGPU) is where frames pile up;
545
+ # caching the kernels shrinks that window on subsequent boots.
559
546
  try:
560
547
  _cache_dir = os.path.join(os.path.dirname(os.path.abspath(path)), ".ov-cache")
561
548
  os.makedirs(_cache_dir, exist_ok=True)
562
549
  ov_config["CACHE_DIR"] = _cache_dir
563
550
  except OSError:
564
551
  pass
565
- # Compile the resolved mode. Failure fallback: any mode containing
566
- # "GPU" reverts to plain "AUTO" and recompiles once; if THAT also
567
- # fails (or the mode had no GPU), re-raise — the existing load/replace
568
- # error handler reports the failure.
569
- candidates = [ov_device]
570
- if "GPU" in ov_device:
571
- candidates.append("AUTO")
552
+ # Compile-time failover over the explicit candidate list (NO AUTO): try
553
+ # each device in order (NPU>GPU>CPU) and stop at the first that compiles.
554
+ # CPU is the guaranteed floor. If every candidate fails, re-raise — the
555
+ # existing load/replace error handler reports the failure.
572
556
  compiled = None
557
+ ov_device = None
573
558
  last_exc: Optional[BaseException] = None
574
559
  for candidate in candidates:
575
560
  try:
@@ -578,9 +563,9 @@ def _load_model(slot: ModelSlot, config: dict) -> None:
578
563
  break
579
564
  except Exception as exc:
580
565
  last_exc = exc
581
- sys.stderr.write(f"OpenVINO: compile with mode {candidate} failed: {exc}\n")
566
+ sys.stderr.write(f"OpenVINO: compile on {candidate} failed: {exc}\n")
582
567
  if candidate != candidates[-1]:
583
- sys.stderr.write(f"OpenVINO: {candidate} mode failed, reverting to AUTO.\n")
568
+ sys.stderr.write("OpenVINO: falling back to next device.\n")
584
569
  sys.stderr.flush()
585
570
  if compiled is None:
586
571
  if last_exc is not None:
@@ -610,30 +595,36 @@ def _load_model(slot: ModelSlot, config: dict) -> None:
610
595
  except Exception:
611
596
  pass
612
597
 
613
- # One InferRequest per predict thread (thread-local) InferRequests
614
- # are NOT safe to share across threads, and a per-thread request is
615
- # what lets the THROUGHPUT streams run concurrently.
616
- _ov_tls = threading.local()
598
+ # Create ALL InferRequests ONCE, now, post-compile. With AUTO gone there
599
+ # is no CPU->GPU handover, so no request can be born mid-handover and bind
600
+ # to stale ports — the score_8 race is structurally removed. Requests are
601
+ # handed out through a thread-safe queue: an InferRequest is never touched
602
+ # by two threads at once (checkout/return), so sharing a fixed pool is safe
603
+ # and avoids the old thread-local lazy creation. Size the pool to the
604
+ # device's optimal count (>= OV_DEFAULT_CONCURRENCY) so it matches the
605
+ # predict-pool worker count sized in _run().
606
+ import queue as _queue
607
+
608
+ try:
609
+ _n_req = int(compiled.get_property("OPTIMAL_NUMBER_OF_INFER_REQUESTS"))
610
+ except Exception:
611
+ _n_req = 0
612
+ _n_req = max(_n_req, OV_DEFAULT_CONCURRENCY)
613
+ _req_pool: "_queue.Queue" = _queue.Queue()
614
+ for _ in range(_n_req):
615
+ _req_pool.put(compiled.create_infer_request())
616
+ sys.stderr.write(f"OpenVINO: created {_n_req} InferRequest(s) up-front on {ov_device}\n")
617
+ sys.stderr.flush()
617
618
 
618
- def predict(inp_dict: dict, _c=compiled, _names=output_names, _tls=_ov_tls) -> dict:
619
- req = getattr(_tls, "req", None)
620
- if req is None:
621
- req = _tls.req = _c.create_infer_request()
619
+ def predict(inp_dict: dict, _names=output_names, _pool=_req_pool) -> dict:
622
620
  inp = list(inp_dict.values())[0]
621
+ req = _pool.get()
623
622
  try:
624
623
  result = req.infer(inp)
625
- except RuntimeError:
626
- # AUTO CPU->GPU handover race: a request created during the
627
- # CPU-helper phase (while the GPU JIT-compiles) cannot map the
628
- # served model's output ports and raises from INSIDE infer()
629
- # "Cannot find tensor for port ... score_8". (Reproduced live on
630
- # the N100 iGPU under concurrent THROUGHPUT threads; the raise is
631
- # in req.infer(), not the output fetch below.) Recreate the
632
- # thread-local request post-handover and retry once.
633
- req = _tls.req = _c.create_infer_request()
634
- result = req.infer(inp)
635
- # Fetch outputs by positional index (stable across the handover)
636
- # rather than ConstOutput port identity — belt-and-braces.
624
+ finally:
625
+ _pool.put(req)
626
+ # Output fetch by positional index stable and harmless now that the
627
+ # ports no longer diverge (single explicit device, no handover).
637
628
  return {name: result[i] for i, name in enumerate(_names)}
638
629
 
639
630
  slot.model = compiled
@@ -1267,18 +1258,18 @@ async def _run() -> None:
1267
1258
  sys.stderr.flush()
1268
1259
  models.append(slot)
1269
1260
 
1270
- # OpenVINO: size the predict pool so the THROUGHPUT execution streams are
1271
- # actually fed by concurrent infer-requests. The addon passes
1272
- # concurrency=1 (it predates per-thread infer requests) and models load
1261
+ # OpenVINO: size the predict pool so the fixed InferRequest pool (built per
1262
+ # model in _load_model) is actually fed by concurrent predict workers. The
1263
+ # addon passes concurrency=1 (it predates the request pool) and models load
1273
1264
  # lazily AFTER this point, so we can't read OPTIMAL_NUMBER_OF_INFER_REQUESTS
1274
1265
  # here — default to OV_DEFAULT_CONCURRENCY (≈ the measured optimal of 4-5
1275
1266
  # on Intel CPU/iGPU/NPU). If startup-loaded models report a higher optimal,
1276
- # use that. One InferRequest is created per predict thread on first use.
1267
+ # use that. The per-model InferRequest pool is sized to the same target.
1277
1268
  if runtime == "openvino":
1278
1269
  target = max(_ov_optimal_reqs, OV_DEFAULT_CONCURRENCY)
1279
1270
  if target > concurrency:
1280
1271
  sys.stderr.write(
1281
- f"OpenVINO THROUGHPUT: predict concurrency {concurrency} -> {target}\n"
1272
+ f"OpenVINO LATENCY: predict concurrency {concurrency} -> {target}\n"
1282
1273
  )
1283
1274
  sys.stderr.flush()
1284
1275
  concurrency = target
@@ -1,7 +1,7 @@
1
1
  """Unit tests for the runtime device/provider selection in inference_pool.
2
2
 
3
3
  Covers:
4
- - _resolve_ov_mode — the OpenVINO device-mode branch matrix.
4
+ - _resolve_ov_devices — the OpenVINO explicit device-candidate ordering.
5
5
  - _resolve_onnx_providers — the ONNX execution-provider ordering
6
6
  with camstack's pin + availability filter.
7
7
 
@@ -41,29 +41,35 @@ from inference_pool import (
41
41
  ONNX_CPU_EP,
42
42
  ONNX_CUDA_EP,
43
43
  _resolve_onnx_providers,
44
- _resolve_ov_mode,
44
+ _resolve_ov_devices,
45
45
  )
46
46
 
47
47
 
48
- class ResolveOvModeTest(unittest.TestCase):
49
- """Branch matrix of the OpenVINO device switch."""
48
+ class ResolveOvDevicesTest(unittest.TestCase):
49
+ """Ordered EXPLICIT device candidates (NPU>GPU>CPU) no AUTO.
50
50
 
51
- def test_n100_intel_igpu_and_cpu_is_explicit_gpu(self) -> None:
52
- # Intel iGPU + CPU, no NPU, no dGPU — compiles explicit GPU.
51
+ The AUTO plugin's CPU->GPU handover invalidated in-flight InferRequest ports
52
+ ("score_8"); _resolve_ov_devices returns an ordered candidate list the
53
+ compile loop fails over explicitly, so AUTO is never used. CPU is always the
54
+ guaranteed floor/last entry.
55
+ """
56
+
57
+ def test_n100_intel_igpu_and_cpu_is_gpu_then_cpu(self) -> None:
58
+ # Intel iGPU + CPU, no NPU — GPU first, CPU floor.
53
59
  self.assertEqual(
54
- _resolve_ov_mode(
60
+ _resolve_ov_devices(
55
61
  ["CPU", "GPU"],
56
62
  {
57
63
  "CPU": "Intel(R) N100",
58
64
  "GPU": "Intel(R) UHD Graphics [0x46d1] (iGPU)",
59
65
  },
60
66
  ),
61
- "GPU",
67
+ ["GPU", "CPU"],
62
68
  )
63
69
 
64
- def test_hub_npu_gpu_cpu_is_auto_npu_gpu_cpu(self) -> None:
70
+ def test_hub_npu_gpu_cpu_orders_npu_gpu_cpu(self) -> None:
65
71
  self.assertEqual(
66
- _resolve_ov_mode(
72
+ _resolve_ov_devices(
67
73
  ["CPU", "GPU", "NPU"],
68
74
  {
69
75
  "CPU": "Intel(R) Core(TM) Ultra 5 125H",
@@ -71,36 +77,36 @@ class ResolveOvModeTest(unittest.TestCase):
71
77
  "NPU": "Intel(R) AI Boost",
72
78
  },
73
79
  ),
74
- "AUTO:NPU,GPU,CPU",
80
+ ["NPU", "GPU", "CPU"],
75
81
  )
76
82
 
77
- def test_npu_without_gpu_is_auto_npu_cpu(self) -> None:
83
+ def test_npu_without_gpu_orders_npu_cpu(self) -> None:
78
84
  self.assertEqual(
79
- _resolve_ov_mode(
85
+ _resolve_ov_devices(
80
86
  ["CPU", "NPU"],
81
87
  {
82
88
  "CPU": "Intel(R) Core(TM) Ultra",
83
89
  "NPU": "Intel(R) AI Boost",
84
90
  },
85
91
  ),
86
- "AUTO:NPU,CPU",
92
+ ["NPU", "CPU"],
87
93
  )
88
94
 
89
- def test_nvidia_dgpu_is_auto_dgpu_cpu(self) -> None:
95
+ def test_single_nvidia_dgpu_orders_gpu_cpu(self) -> None:
90
96
  self.assertEqual(
91
- _resolve_ov_mode(
97
+ _resolve_ov_devices(
92
98
  ["CPU", "GPU.0"],
93
99
  {
94
100
  "CPU": "Intel(R) Core(TM) i5",
95
101
  "GPU.0": "NVIDIA GeForce RTX 3060 (dGPU)",
96
102
  },
97
103
  ),
98
- "AUTO:GPU.0,CPU",
104
+ ["GPU.0", "CPU"],
99
105
  )
100
106
 
101
- def test_multiple_nvidia_dgpus_join_in_enumeration_order(self) -> None:
107
+ def test_multiple_gpus_join_in_enumeration_order(self) -> None:
102
108
  self.assertEqual(
103
- _resolve_ov_mode(
109
+ _resolve_ov_devices(
104
110
  ["CPU", "GPU.0", "GPU.1"],
105
111
  {
106
112
  "CPU": "Intel(R) Core(TM) i9",
@@ -108,13 +114,14 @@ class ResolveOvModeTest(unittest.TestCase):
108
114
  "GPU.1": "NVIDIA GeForce RTX 4090 (dGPU)",
109
115
  },
110
116
  ),
111
- "AUTO:GPU.0,GPU.1,CPU",
117
+ ["GPU.0", "GPU.1", "CPU"],
112
118
  )
113
119
 
114
- def test_nvidia_dgpu_beats_intel_igpu(self) -> None:
115
- # dGPU branch is checked before the plain-gpu branch (elif order).
120
+ def test_mixed_igpu_and_dgpu_both_candidates_in_order(self) -> None:
121
+ # No dGPU-vs-iGPU precedence now: every named GPU is a failover
122
+ # candidate, tried in enumeration order, CPU last.
116
123
  self.assertEqual(
117
- _resolve_ov_mode(
124
+ _resolve_ov_devices(
118
125
  ["CPU", "GPU.0", "GPU.1"],
119
126
  {
120
127
  "CPU": "Intel(R) Core(TM) i7",
@@ -122,13 +129,12 @@ class ResolveOvModeTest(unittest.TestCase):
122
129
  "GPU.1": "NVIDIA GeForce RTX 3080 (dGPU)",
123
130
  },
124
131
  ),
125
- "AUTO:GPU.1,CPU",
132
+ ["GPU.0", "GPU.1", "CPU"],
126
133
  )
127
134
 
128
- def test_npu_wins_over_nvidia_dgpu(self) -> None:
129
- # npu is checked FIRST — dGPUs only matter when no NPU exists.
135
+ def test_npu_precedes_gpus(self) -> None:
130
136
  self.assertEqual(
131
- _resolve_ov_mode(
137
+ _resolve_ov_devices(
132
138
  ["CPU", "GPU.0", "NPU"],
133
139
  {
134
140
  "CPU": "Intel(R) Core(TM) Ultra",
@@ -136,24 +142,23 @@ class ResolveOvModeTest(unittest.TestCase):
136
142
  "NPU": "Intel(R) AI Boost",
137
143
  },
138
144
  ),
139
- "AUTO:NPU,GPU,CPU",
145
+ ["NPU", "GPU.0", "CPU"],
140
146
  )
141
147
 
142
- def test_cpu_only_is_auto(self) -> None:
148
+ def test_cpu_only_is_cpu(self) -> None:
143
149
  self.assertEqual(
144
- _resolve_ov_mode(["CPU"], {"CPU": "Intel(R) N100"}),
145
- "AUTO",
150
+ _resolve_ov_devices(["CPU"], {"CPU": "Intel(R) N100"}),
151
+ ["CPU"],
146
152
  )
147
153
 
148
- def test_empty_available_is_auto(self) -> None:
149
- self.assertEqual(_resolve_ov_mode([], {}), "AUTO")
154
+ def test_empty_available_falls_back_to_cpu(self) -> None:
155
+ self.assertEqual(_resolve_ov_devices([], {}), ["CPU"])
150
156
 
151
- def test_device_without_full_name_is_not_classified(self) -> None:
152
- # A device whose
153
- # FULL_DEVICE_NAME query failed is skipped entirely.
157
+ def test_gpu_without_full_name_is_not_a_candidate(self) -> None:
158
+ # A GPU whose FULL_DEVICE_NAME query failed is skipped; CPU floor remains.
154
159
  self.assertEqual(
155
- _resolve_ov_mode(["CPU", "GPU"], {"CPU": "Intel(R) N100"}),
156
- "AUTO",
160
+ _resolve_ov_devices(["CPU", "GPU"], {"CPU": "Intel(R) N100"}),
161
+ ["CPU"],
157
162
  )
158
163
 
159
164
 
@@ -1,26 +0,0 @@
1
- //#region \0virtual:mf:__mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js
2
- var e = "__mf_init__virtual:mf:__mfe_internal__addon_stream_broker_widgets__mf_v__runtimeInit__mf_v__.js__", t = globalThis[e];
3
- if (!t) {
4
- let n, r, i = new Promise((e, t) => {
5
- n = e, r = t;
6
- });
7
- t = globalThis[e] = {
8
- initPromise: i,
9
- initResolve: n,
10
- initReject: r
11
- };
12
- }
13
- var n = t.initPromise, r = "__mf_module_cache__";
14
- globalThis[r] ||= {
15
- share: {},
16
- remote: {}
17
- }, globalThis[r].share ||= {}, globalThis[r].remote ||= {};
18
- var i = globalThis[r], a, o = (e) => {
19
- e.ACCESSORY_LABEL, e.ALL_CAPABILITY_DEFINITIONS, e.APPLE_SA_TO_MACRO, e.AUDIO_BACKEND_CHOICES, e.AUDIO_MACRO_LABELS, e.AccessoriesStatusSchema, e.AccessoryKind, e.AddBrokerInputSchema, e.AddonAutoUpdateSchema, e.AddonListItemSchema, e.AddonPageDeclarationSchema, e.AddonPageInfoSchema, e.AdoptionAdoptInputSchema, e.AdoptionAdoptResultSchema, e.AdoptionFilterSchema, e.AdoptionGetCandidateInputSchema, e.AdoptionListCandidatesInputSchema, e.AdoptionListCandidatesOutputSchema, e.AdoptionReleaseInputSchema, e.AdoptionStatusSchema, e.AgentLoadSummarySchema, e.AirQualitySensorStatusSchema, e.AlarmArmModeSchema, e.AlarmPanelStatusSchema, e.AlarmStateSchema, e.AlertSchema, e.AlertSeveritySchema, e.AlertSourceSchema, e.AlertStatusSchema, e.AmbientLightSensorStatusSchema, e.ApiKeyRecordSchema, e.ApiKeySummarySchema, e.ArchiveEntrySchema, e.ArchiveManifestSchema, e.AttachmentMediaTypeSchema, e.AttachmentSchema, e.AudioAnalysisResultSchema, e.AudioAnalysisSettingsSchema, e.AudioChunkInputSchema, e.AudioClassSummarySchema, e.AudioClassificationLabelSchema, e.AudioClassificationResultSchema, e.AudioCodecInfoSchema, e.AudioDecodeSessionConfigSchema, e.AudioEncodeSchema, e.AudioEncodeSessionConfigSchema, e.AudioEncodedChunkSchema, e.AudioEventSchema, e.AudioLevelSchema, e.AudioMetricsHistoryPointSchema, e.AudioMetricsHistorySchema, e.AudioMetricsSnapshotSchema, e.AudioPcmChunkSchema, e.AuthResultSchema, e.AutoUpdateSettingsSchema, e.AutomationControlStatusSchema, e.AvailableIntegrationTypeSchema, e.BACKEND_TO_FORMAT, e.BATTERY_DEVICE_PROFILE, e.BackupDestinationInfoSchema, e.BackupEntrySchema, e.BaseAddon, e.BaseDevice, e.BaseDeviceProvider, e.BatteryStatusSchema, e.BinaryStatusSchema, e.BoundingBoxSchema, e.BrightnessStatusSchema, e.BrokerAddInputSchema, e.BrokerAudioClientSchema, e.BrokerClientsSchema, e.BrokerConnectionDetailsSchema, e.BrokerConsumerAttributionSchema, e.BrokerConsumerKindSchema, e.BrokerDecodedClientSchema, e.BrokerEncodedClientSchema, e.BrokerGetStateInputSchema, e.BrokerInfoSchema, e.BrokerProviderInfoSchema, e.BrokerPublishInputSchema, e.BrokerRegistryStatusSchema, e.BrokerRtspClientSchema, e.BrokerStatsSchema, e.BrokerStatusEnum, e.BrokerStatusSchema, e.BrokerSubscribeInputSchema, e.BrokerSubscribeResultSchema, e.BrokerTestConnectionResultSchema, e.BrokerUnsubscribeInputSchema, e.CAM_PROFILE_ORDER, e.CAPABILITY_NAMES, e.CAPABILITY_ROUTER_KEYS, e.CAP_NAMES_WITH_STATUS, e.CAP_NODE_PIN_CONTEXT_KEY, e.CAP_PROVIDER_KIND_MAP, e.COCO_80_LABELS, e.COCO_TO_MACRO, e.CamProfileSchema, e.CamStreamDescriptorSchema, e.CamStreamKindSchema, e.CamStreamResolutionSchema, e.CameraAssignmentStatusSchema, e.CameraAudioStatusSchema, e.CameraBrokerProfileSchema, e.CameraBrokerStatusSchema, e.CameraCredentialsSchema, e.CameraCredentialsStatusSchema, e.CameraDecoderShmSchema, e.CameraDecoderStatusSchema, e.CameraDetectionPhaseSchema, e.CameraDetectionProvisioningSchema, e.CameraDetectionProvisioningStateSchema, e.CameraDetectionStatusSchema, e.CameraMetricsSchema, e.CameraMetricsWithDeviceIdSchema, e.CameraMotionStatusSchema, e.CameraRecordingModeSchema, e.CameraRecordingStatusSchema, e.CameraSourceStatusSchema, e.CameraSourceStreamSchema, e.CameraStatusSchema, e.CameraStreamSchema, e.CandidateQueryFilterSchema, e.CapScopeSchema, e.CapabilityBindingsSchema, e.CarbonMonoxideStatusSchema, e.ChargingStatus, e.ClientNetworkStatsSchema, e.ClimateControlStatusSchema, e.ClipPlaybackSchema, e.ClipSchema, e.ClusterAddonNodeDeploymentSchema, e.ClusterAddonStatusEntrySchema, e.CollectionColumnSchema, e.CollectionIndexSchema, e.ColorStatusSchema, e.ConfigEntrySchema, e.ConfigSectionWithValuesSchema, e.ConfigTabDeclarationSchema, e.ConnectivityStatusSchema, e.ConsumableItemSchema, e.ConsumablesStatusSchema, e.ContactStatusSchema, e.ControlKindSchema, e.ControlStatusSchema, e.ConvertArtifactSchema, e.ConvertResultSchema, e.ConvertTargetSchema, e.CoverStateSchema, e.CoverStatusSchema, e.CreateApiKeyInputSchema, e.CreateApiKeyResultSchema, e.CreateIntegrationInputSchema, e.CreateScopedTokenInputSchema, e.CreateScopedTokenResultSchema, e.CreateUserInputSchema, e.CustomActionInputSchema, e.CustomModelDescriptorSchema, e.DATAPLANE_SECRET_HEADER, e.DEFAULT_ADDON_PLACEMENT, e.DEFAULT_AUDIO_ANALYZER_CONFIG, e.DEFAULT_DECODER_HWACCEL_CONFIG, e.DEFAULT_FEATURES, e.DEFAULT_RETENTION, e.DEVICE_CAP_NAMES, e.DEVICE_PROFILES, e.DEVICE_SETTINGS_CONTRIBUTION_METHODS, e.DEVICE_STATUS_METHOD, e.DEVICE_TYPE_INFO, e.DecodedAudioChunkSchema, e.DecodedFrameSchema, e.DecoderAssignmentSchema, e.DecoderSessionConfigSchema, e.DecoderStatsSchema, e.DeleteIntegrationResultSchema, e.DetectionSourceSchema, e.DetectorOutputSchema, e.DeviceCodeSeveritySchema, e.DeviceConfig, e.DeviceDiscoveryStatusSchema, e.DeviceExportExposeInputSchema, e.DeviceExportStatusSchema, e.DeviceExportUnexposeInputSchema, e.DeviceFeature, e.DeviceInfoSchema, e.DeviceNetworkStatsSchema, e.DeviceRole, e.DeviceRuntimeState, e.DeviceStatusSchema, e.DeviceType, e.DiscoveredChildDeviceSchema, e.DiscoveredChildStatusSchema, e.DiscoveredDeviceSchema, e.DiscoveredTargetSchema, e.DisposerChain, e.DoorbellPressEventSchema, e.DoorbellStatusSchema, e.EVENT_PAD_MS, e.EXPRESSION_BUILTINS, e.EXPRESSION_BUILTIN_NAMES, e.EXPRESSION_COMPILE_CACHE_CAPACITY, e.EXPRESSION_IDENTIFIER_RE, e.EXPRESSION_INJECTED_NOW, e.ElementConfigStore, e.EmbeddingInfoSchema, e.EmbeddingResultSchema, e.EncodeProfileSchema, e.EncodedPacketSchema, e.EnrichedWidgetMetadataSchema, e.EnumSensorDateTimeFormatSchema, e.EnumSensorStatusSchema, e.EventCategory, e.EventEmitterStatusSchema, e.EventFireSchema, e.EventItemSchema, e.EventKindSchema, e.EventSourceType, e.ExportSetupFieldSchema, e.ExportSetupSchema, e.ExposedDeviceSchema, e.ExposedResourceSchema, e.ExpressionEvalError, e.ExpressionParseError, e.FanControlStatusSchema, e.FanDirectionSchema, e.FeatureManifestSchema, e.FeatureProbeStatusSchema, e.FloodStatusSchema, e.FrameHandleFormatSchema, e.FrameHandleSchema, e.FrameInputSchema, e.GasStatusSchema, e.GetStreamWithCodecInputSchema, e.GlobalMetricsSchema, e.HF_BASE_URL, e.HF_REPO, e.HWACCEL_OPTIONS, e.HealthStatusSchema, e.HistoryPointSchema, e.HistoryResolutionEnum, e.HumidifierStatusSchema, e.HumiditySensorStatusSchema, e.HvacModeSchema, e.ImageStatusSchema, e.InstalledPackageSchema, e.IntegrationLiteSchema, e.IntegrationWithStateSchema, e.IntercomAbilitySchema, e.IntercomStatusSchema, e.KNOWN_CAP_NAMES, e.LabelDefinitionSchema, e.LawnMowerActivitySchema, e.LawnMowerControlStatusSchema, e.LocateSegmentResultSchema, e.LocationStatSchema, e.LockControlStatusSchema, e.LockStateSchema, e.LogEntrySchema, e.LogLevelSchema, e.LogStreamEntrySchema, e.MACRO_LABELS, e.MAX_EXPRESSION_AST_NODES, e.MAX_EXPRESSION_BINDINGS, e.MAX_EXPRESSION_CALL_ARGS, e.MAX_EXPRESSION_EVAL_STEPS, e.MAX_EXPRESSION_SOURCE_LENGTH, e.METHOD_ACCESS_MAP, e.MODEL_FORMATS, e.MaskGridDimsSchema, e.MaskGridShapeSchema, e.MaskLineShapeSchema, e.MaskPointSchema, e.MaskPolygonShapeSchema, e.MaskPolygonVerticesSchema, e.MaskRectShapeSchema, e.MaskShapeKindSchema, e.MaskShapeSchema, e.MediaFileSchema, e.MediaPlayerRepeatSchema, e.MediaPlayerStateSchema, e.MediaPlayerStatusSchema, e.MeshPeerSchema, e.MeshStatusSchema, e.MethodAccessSchema, e.ModelCatalogEntrySchema, e.ModelConvertInputSchema, e.ModelConvertMetadataSchema, e.ModelDistributeInputSchema, e.ModelDistributeResultSchema, e.ModelExtraFileSchema, e.ModelFormatEntrySchema, e.ModelFormatsSchema, e.MotionAnalysisResultSchema, e.MotionEventSchema, e.MotionOnMotionChangedDataSchema, e.MotionRegionSchema, e.MotionSourceEnum, e.MotionSourcesSchema, e.MotionStatusSchema, e.MotionTriggerRuntimeStateSchema, e.MotionTriggerStatusSchema, e.MotionZoneOptionsSchema, e.MotionZonePatchSchema, e.MotionZoneRegionSchema, e.MotionZoneStatusSchema, e.MqttBrokerStatusSchema, e.NativeDetectionSchema, e.NativeObjectClassEnum, e.NativeObjectDetectionRuntimeStateSchema, e.NativeObjectDetectionStatusSchema, e.NetworkAccessStatusSchema, e.NetworkAddressSchema, e.NetworkEndpointSchema, e.NotificationActionSchema, e.NotificationFormatSchema, e.NotificationHistoryEntrySchema, e.NotificationRuleSchema, e.NotificationSchema, e.NotifierStatusSchema, e.NumericSensorStatusSchema, e.OauthIntegrationDescriptorSchema, e.ObjectEventSchema, e.OrchestratorMetricsSchema, e.OsdOverlayKindEnum, e.OsdOverlayPatchSchema, e.OsdOverlaySchema, e.OsdPositionEnum, e.OsdStatusSchema, e.PIPELINE_FLOW_CAPABILITY_NAMES, e.PIPELINE_OWNER_CAPABILITY_NAMES, e.PROVIDER_KIND_CAP_NAMES, e.PYTHON_SCRIPT, e.PackageUpdateSchema, e.PackageVersionInfoSchema, e.PasskeySummarySchema, e.PcmSampleFormatSchema, e.PerScopeBreakdownSchema, e.PickStreamPreferencesSchema, e.PickStreamRequirementsSchema, e.PickedCamStreamSchema, e.PipelineAssignmentSchema, e.PipelineDefaultStepSchema, e.PipelineEngineChoiceSchema, e.PipelineRunResultBridge, e.PipelineStepInputSchema, e.PlaceholderReasonSchema, e.PolygonPointSchema, e.PowerMeterStatusSchema, e.PresenceStatusSchema, e.PressureSensorStatusSchema, e.PrivacyMaskOptionsSchema, e.PrivacyMaskPatchSchema, e.PrivacyMaskRegionSchema, e.PrivacyMaskShapeSchema, e.PrivacyMaskStatusSchema, e.ProfileRtspEntrySchema, e.ProfileSlotSchema, e.ProfileSlotStatusSchema, e.ProviderStatusSchema, e.PtzAutotrackRuntimeStateSchema, e.PtzAutotrackSettingsSchema, e.PtzAutotrackStatusSchema, e.PtzAutotrackTargetOptionSchema, e.PtzMoveCommandSchema, e.PtzPositionSchema, e.PtzPresetSchema, e.PtzStatusSchema, e.QueryFilterSchema, e.RECOGNITION_TYPES, e.RESERVED_BINDING_NAMES, e.RUNTIME_DEFAULTS, e.RUNTIME_TO_FORMAT, e.RawStateResultSchema, e.ReadSegmentBytesResultSchema, e.ReadinessRegistry, e.ReadinessTimeoutError, e.RecordingAvailabilitySchema, e.RecordingBandModeSchema, e.RecordingBandSchema, e.RecordingBandTriggersSchema, e.RecordingConfigSchema, e.RecordingDaysSchema, e.RecordingDeviceUsageSchema, e.RecordingLocationUsageSchema, e.RecordingManifestSchema, e.RecordingModeSchema, e.RecordingRangeSchema, e.RecordingRetentionSchema, e.RecordingRuleSchema, e.RecordingScheduleSchema, e.RecordingStatusSchema, e.RecordingStorageModeSchema, e.RecordingStorageUsageSchema, e.RecordingTriggersSchema, e.RecordingWeekdaySchema, e.RegisteredStreamSchema, e.RenderedAsSchema, e.ReportMotionInputSchema, e.RingBuffer, e.RtpSourceSchema, e.RtspRestreamEntrySchema, e.RunnerCameraConfigSchema, e.RunnerCameraDeviceUIFields, e.RunnerFrameSourceSchema, e.RunnerLocalLoadSchema, e.RunnerLocalMetricsSchema, e.SCOPE_PRESETS, e.SOURCE_INFO_METADATA_KEY, e.STREAM_PROFILE_META, e.STREAM_QUALITY_LABELS, e.SUB_DETECTION_TYPES, e.SYSTEM_CAP_NAMES, e.ScopedTokenSchema, e.ScopedTokenSummarySchema, e.ScoredObjectEventSchema, e.ScriptRunnerStatusSchema, e.SearchResultSchema, e.SendEmailInputSchema, e.SendEmailResultSchema, e.SendResultSchema, e.SettingsPatchSchema, e.SettingsRecordSchema, e.SettingsSchemaWithValuesSchema, e.SettingsUpdateResultSchema, e.ShmRingStatsSchema, e.SmokeStatusSchema, e.SmtpStatusSchema, e.SnapshotImageSchema, e.SourceInfoSchema, e.SpatialDetectionSchema, e.SsoBridgeClaimsSchema, e.StartEmbeddedInputSchema, e.StorageAbortUploadInputSchema, e.StorageBeginDownloadInputSchema, e.StorageBeginDownloadResultSchema, e.StorageBeginUploadInputSchema, e.StorageBeginUploadResultSchema, e.StorageEndDownloadInputSchema, e.StorageFinalizeUploadInputSchema, e.StorageLocationDeclarationSchema, e.StorageLocationRefSchema, e.StorageLocationSchema, e.StorageLocationTypeSchema, e.StorageProviderInfoSchema, e.StorageReadChunkInputSchema, e.StorageTestLocationResultSchema, e.StorageWriteChunkInputSchema, e.StreamCodecSchema, e.StreamFormatSchema, e.StreamInfoSchema, e.StreamNetworkStatsSchema, e.StreamParamsOptionsSchema, e.StreamParamsStatusSchema, e.StreamProfileConfigSchema, e.StreamProfileOptionsSchema, e.StreamProfilePatchSchema, e.StreamProfileSchema, e.StreamSourceEntrySchema, e.StreamSourceSchema, e.SubscribeAudioChunksInputSchema, e.SubscribeAudioChunksResultSchema, e.SubscribeFramesInputSchema, e.SubscribeFramesResultSchema, e.SwitchStatusSchema, e.SystemMetricsSchema, e.SystemMirror, e.TIMEZONES, e.TamperStatusSchema, e.TankStatusSchema, e.TargetKindCapsSchema, e.TargetKindLevelSchema, e.TargetKindSchema, e.TargetSchema, e.TemperatureSensorStatusSchema, e.TestConnectionResultSchema, e.TestResultSchema, e.ToastSchema, e.TokenScopeSchema, e.TopologyNodeSchema, e.TopologyProcessSchema, e.TopologyServiceSchema, e.TrackSchema, e.TrackStateSchema, e.TrackedDetectionSchema, e.TurnServerSchema, e.UNIT_TABLE, e.UnifiedBrokerInfoSchema, e.UnitConversionError, e.UpdateIntegrationInputSchema, e.UpdateStatusSchema, e.UpdateUserInputSchema, e.UserRecordSchema, e.UserSummarySchema, e.VacuumControlStatusSchema, e.VacuumStateSchema, e.ValveStateSchema, e.ValveStatusSchema, e.VibrationStatusSchema, e.VideoEncodeSchema, e.WELL_KNOWN_TABS, e.WELL_KNOWN_TAB_MAP, e.WaterHeaterStatusSchema, e.WeatherStatusSchema, e.WebrtcStreamChoiceSchema, e.WebrtcStreamTargetSchema, e.WidgetHostEnum, e.WidgetMetadataSchema, e.WidgetRemoteSchema, e.WidgetSizeEnum, e.YAMNET_TO_MACRO, e.ZoneKindEnum, e.ZoneRuleModeEnum, e.ZoneRuleSchema, e.ZoneRuleStageEnum, e.ZoneRulesArraySchema, e.ZoneSchema, e.ZoneScopeBreakdownSchema, e.accessoriesCapability, e.accessoryStableId, e.addonPagesCapability, e.addonPagesSourceCapability, e.addonRoutesCapability, e.addonSettingsCapability, e.addonWidgetsCapability, e.addonWidgetsSourceCapability, e.addonsCapability, e.adminUiCapability, e.advancedNotifierCapability, e.airQualitySensorCapability, e.alarmPanelCapability, e.alertsCapability, e.ambientLightSensorCapability, e.applyTransform, e.asBoolean, e.asJsonArray, e.asJsonObject, e.asNumber, e.asString, e.audioAnalysisCapability, e.audioAnalyzerCapability, e.audioCodecCapability, e.audioMetricsCapability, e.authProviderCapability, e.autoAssignProfiles, e.automationControlCapability, e.backupCapability, e.batteryCapability, e.bestLocationMatch, e.binaryCapability, e.bindAddonActions, e.brightnessCapability, e.brokerCapability, e.buildAddonRouteProvider, e.buildStreamParamsConfigSchema, e.buttonCapability, e.cameraCredentialsCapability, e.cameraPipelineConfigCapability, e.cameraStreamsCapability, e.canConvertUnit, e.carbonMonoxideCapability, e.cellsToRects, e.classifyStream, e.classifyStreams, e.climateControlCapability, e.colorCapability, e.compileExpression, e.compileExpressionSafe, e.connectivityCapability, e.consumablesCapability, e.contactCapability, e.controlCapability, e.convertUnit, e.cosineSimilarity, e.coverCapability, e.createDeviceProxy, e.createDurableState, e.createEvent, e.createExpressionScope, e.createLazyTrpcSource, e.createMirrorSource, e.createRuntimeStateBridge, e.createSliceHandle, e.createSystemProxy, e.customAction, e.customModelRegistryCapability, e.decoderCapability, e.defaultDeviceFor, e.defineCustomActions, e.detectionPipelineCapability, e.deviceAdoptionCapability, e.deviceCustomAction, e.deviceDiscoveryCapability, e.deviceExportCapability, e.deviceManagerCapability, e.deviceMatchesProfile, e.deviceOpsCapability, e.deviceProviderCapability, e.deviceStateCapability, e.deviceStatusCapability, e.doorbellCapability, e.embeddingEncoderCapability, e.emitDownForOwnedCaps, e.emitReadiness, e.encodeProfileFromStreamShape, e.enumSensorCapability, e.enumerateItemArrayFields, e.enumerateSchemaFields, e.errMsg, e.evaluateAst, e.evaluateLinkExpression, e.evaluateZoneRules, e.event, e.eventEmitterCapability, e.eventsCapability, e.expandCapMethods, e.extractSourceInfoFromMetadata, e.faceGalleryCapability, e.fanControlCapability, e.featureProbeCapability, e.filesystemBrowseCapability, e.findTimezone, e.floodCapability, e.formatForBackend, e.formatForRuntime, e.frameworkSwapConfirmSchema, e.frameworkSwapPackageSchema, e.gasCapability, e.getAudioMacroClassIds, e.getByPath, e.getCapsByProviderKind, e.hfModelUrl, e.htmlToText, e.humidifierCapability, e.humiditySensorCapability, e.hydrateSchema, e.imageCapability, e.integrationsCapability, e.intercomCapability, e.isAgentOnlyPlacement, e.isDeployableToAgent, e.isDeviceConfigCap, e.isEvent, e.jobKindSchema, e.lawnMowerControlCapability, e.lifecycleJobSchema, e.lifecycleJobScopeSchema, e.lifecycleJobStateSchema, e.lifecycleTaskSchema, e.localNetworkCapability, e.locationSimilarity, e.lockControlCapability, e.logDestinationCapability, e.makeProfileBrokerId, a = e.makeSourceBrokerId, e.mapAudioLabelToMacro, e.markdownToHtmlLite, e.markdownToText, e.maskUrlCredentials, e.mediaPlayerCapability, e.mergeSourceInfo, e.meshNetworkCapability, e.method, e.metricsProviderCapability, e.migrateConfigToBands, e.modelConvertCapability, e.modelDistributorCapability, e.modelFormatForRuntime, e.motionCapability, e.motionDetectionCapability, e.motionTriggerCapability, e.motionZonesCapability, e.mqttBrokerCapability, e.nativeObjectDetectionCapability, e.networkAccessCapability, e.networkQualityCapability, e.nodePin, e.nodesCapability, e.normalizeAddonInitResult, e.normalizeUnit, e.notificationOutputCapability, e.notifierCapability, e.numericSensorCapability, e.oauthIntegrationCapability, e.osdCapability, e.parseCameraStreamConfig, e.parseExpression, e.parseJsonArray, e.parseJsonObject, e.parseJsonUnknown, e.parseProfileBrokerId, e.parseStreamParamsFormPatch, e.pendingFrameworkSwapSchema, e.pickPreferredRtspEntry, e.pipelineAnalyticsCapability, e.pipelineExecutorCapability, e.pipelineOrchestratorCapability, e.pipelineRunnerCapability, e.plateGalleryCapability, e.platformProbeCapability, e.powerMeterCapability, e.prepareNotification, e.presenceCapability, e.pressureSensorCapability, e.privacyMaskCapability, e.ptzAutotrackCapability, e.ptzCapability, e.pythonScriptForBackend, e.readNodePin, e.readinessKey, e.rebootCapability, e.recordingCapability, e.rectsToCells, e.requiresPython, e.resolveAddonExecution, e.resolveAddonGroup, e.resolveAddonPlacement, e.resolveAddonRuntime, e.resolveCapMount, e.resolveDetectionRuntime, e.resolveDeviceProfile, e.resolveFormat, e.resolveModelFormat, e.resolveRunnerId, e.restreamerCapability, e.runInferenceStep, e.runtimeDevices, e.scopeKey, e.scoreRuntimes, e.scriptRunnerCapability, e.selectAssignedProfileSlots, e.setByPath, e.settingsStoreCapability, e.sleep, e.sleepCancellable, e.smokeCapability, e.smtpProviderCapability, e.snapshotCapability, e.snapshotProviderCapability, e.ssoBridgeCapability, e.storageCapability, e.storageEvictableCapability, e.storageProviderCapability, e.streamBrokerCapability, e.streamCatalogCapability, e.streamParamsCapability, e.streamPixels, e.streamQualityLabel, e.streamingEngineCapability, e.supportedRuntimes, e.switchCapability, e.synthesizeSourceInfo, e.systemCapability, e.tamperCapability, e.taskLogEntrySchema, e.taskPhaseSchema, e.taskTargetSchema, e.temperatureSensorCapability, e.textToHtml, e.toDeviceSummary, e.toExpressionValue, e.toStreamSourceEntry, e.toastCapability, e.tokenize, e.transcodeBody, e.tryConvertUnit, e.turnProviderCapability, e.unitDimension, e.unitsForDimension, e.updateCapability, e.userManagementCapability, e.userPasskeysCapability, e.vacuumControlCapability, e.validateExpressionSource, e.valveCapability, e.vibrationCapability, e.videoclipsCapability, e.waterHeaterCapability, e.weatherCapability, e.webrtcCapability, e.webrtcClientHintsSchema, e.webrtcSessionCapability, e.wiringAddonHealthSchema, e.wiringHealthSnapshotSchema, e.wiringNodeHealthSchema, e.wiringProbeKindSchema, e.wiringProbeResultSchema, e.zodEntriesToConfigUI, e.zoneAnalyticsCapability, e.zoneRulesCapability, e.zonesCapability, e.default;
20
- }, s = i.share["default:@camstack/types"];
21
- s === void 0 ? n.then(() => {
22
- if (s = i.share["default:@camstack/types"], s === void 0) throw Error("[Module Federation] Shared module @camstack/types was imported before federation bootstrap finished.");
23
- o(s);
24
- }) : o(s);
25
- //#endregion
26
- export { a as t };