@camstack/types 1.1.54 → 1.1.56

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.
@@ -1036,6 +1036,7 @@ export declare const pipelineExecutorCapability: {
1036
1036
  kind: z.ZodEnum<{
1037
1037
  runtime: "runtime";
1038
1038
  "warm-override": "warm-override";
1039
+ "device-pool": "device-pool";
1039
1040
  }>;
1040
1041
  poolPid: z.ZodNullable<z.ZodNumber>;
1041
1042
  idleMs: z.ZodNullable<z.ZodNumber>;
@@ -656,6 +656,10 @@ export declare const pipelineOrchestratorCapability: {
656
656
  audio: z.ZodOptional<z.ZodBoolean>;
657
657
  ingest: z.ZodOptional<z.ZodBoolean>;
658
658
  reachableHost: z.ZodOptional<z.ZodString>;
659
+ inferenceDevices: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
660
+ enabled: z.ZodBoolean;
661
+ weight: z.ZodOptional<z.ZodNumber>;
662
+ }, z.core.$strip>>>;
659
663
  }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
660
664
  /** Enumerate every agent's settings (hub + remote runners). */
661
665
  readonly listAgentSettings: import("./capability-definition.js").CapabilityMethodSchema<z.ZodVoid, z.ZodReadonly<z.ZodArray<z.ZodObject<{
@@ -673,6 +677,10 @@ export declare const pipelineOrchestratorCapability: {
673
677
  audio: z.ZodOptional<z.ZodBoolean>;
674
678
  ingest: z.ZodOptional<z.ZodBoolean>;
675
679
  reachableHost: z.ZodOptional<z.ZodString>;
680
+ inferenceDevices: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
681
+ enabled: z.ZodBoolean;
682
+ weight: z.ZodOptional<z.ZodNumber>;
683
+ }, z.core.$strip>>>;
676
684
  }, z.core.$strip>;
677
685
  }, z.core.$strip>>>, import("./capability-definition.js").CapabilityMethodKind>;
678
686
  /** Bulk-replace ALL addon configs on one agent. Used by the agent-level PipelineEditor which emits the full map per edit. Merges on top of existing entries — omitted addonIds are left alone. */
@@ -10626,6 +10626,7 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
10626
10626
  deviceId?: number | undefined;
10627
10627
  sessionId?: string | undefined;
10628
10628
  plane?: "full" | "frame" | undefined;
10629
+ deviceKey?: string | undefined;
10629
10630
  };
10630
10631
  output: import("@camstack/types").FrameResult;
10631
10632
  meta: object;
@@ -10650,6 +10651,7 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
10650
10651
  deviceId?: number | undefined;
10651
10652
  sessionId?: string | undefined;
10652
10653
  frameId?: number | undefined;
10654
+ deviceKey?: string | undefined;
10653
10655
  };
10654
10656
  output: {
10655
10657
  results: readonly import("@camstack/types").FrameResult[];
@@ -10714,7 +10716,7 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
10714
10716
  };
10715
10717
  modelsLoaded: readonly string[];
10716
10718
  inUseByCameras: readonly number[];
10717
- kind: "runtime" | "warm-override";
10719
+ kind: "runtime" | "warm-override" | "device-pool";
10718
10720
  poolPid: number | null;
10719
10721
  idleMs: number | null;
10720
10722
  idleTtlMs: number | null;
@@ -11123,6 +11125,10 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
11123
11125
  audio?: boolean | undefined;
11124
11126
  ingest?: boolean | undefined;
11125
11127
  reachableHost?: string | undefined;
11128
+ inferenceDevices?: Record<string, {
11129
+ enabled: boolean;
11130
+ weight?: number | undefined;
11131
+ }> | undefined;
11126
11132
  } | null;
11127
11133
  meta: object;
11128
11134
  }>;
@@ -11145,6 +11151,10 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
11145
11151
  audio?: boolean | undefined;
11146
11152
  ingest?: boolean | undefined;
11147
11153
  reachableHost?: string | undefined;
11154
+ inferenceDevices?: Record<string, {
11155
+ enabled: boolean;
11156
+ weight?: number | undefined;
11157
+ }> | undefined;
11148
11158
  };
11149
11159
  }[];
11150
11160
  meta: object;
@@ -11726,6 +11736,7 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
11726
11736
  ownerReachableHost?: string | undefined;
11727
11737
  hubHostnameOverride?: string | undefined;
11728
11738
  } | undefined;
11739
+ deviceKey?: string | undefined;
11729
11740
  };
11730
11741
  output: {
11731
11742
  success: true;
@@ -27370,6 +27381,7 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
27370
27381
  deviceId?: number | undefined;
27371
27382
  sessionId?: string | undefined;
27372
27383
  plane?: "full" | "frame" | undefined;
27384
+ deviceKey?: string | undefined;
27373
27385
  };
27374
27386
  output: import("@camstack/types").FrameResult;
27375
27387
  meta: object;
@@ -27394,6 +27406,7 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
27394
27406
  deviceId?: number | undefined;
27395
27407
  sessionId?: string | undefined;
27396
27408
  frameId?: number | undefined;
27409
+ deviceKey?: string | undefined;
27397
27410
  };
27398
27411
  output: {
27399
27412
  results: readonly import("@camstack/types").FrameResult[];
@@ -27458,7 +27471,7 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
27458
27471
  };
27459
27472
  modelsLoaded: readonly string[];
27460
27473
  inUseByCameras: readonly number[];
27461
- kind: "runtime" | "warm-override";
27474
+ kind: "runtime" | "warm-override" | "device-pool";
27462
27475
  poolPid: number | null;
27463
27476
  idleMs: number | null;
27464
27477
  idleTtlMs: number | null;
@@ -27867,6 +27880,10 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
27867
27880
  audio?: boolean | undefined;
27868
27881
  ingest?: boolean | undefined;
27869
27882
  reachableHost?: string | undefined;
27883
+ inferenceDevices?: Record<string, {
27884
+ enabled: boolean;
27885
+ weight?: number | undefined;
27886
+ }> | undefined;
27870
27887
  } | null;
27871
27888
  meta: object;
27872
27889
  }>;
@@ -27889,6 +27906,10 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
27889
27906
  audio?: boolean | undefined;
27890
27907
  ingest?: boolean | undefined;
27891
27908
  reachableHost?: string | undefined;
27909
+ inferenceDevices?: Record<string, {
27910
+ enabled: boolean;
27911
+ weight?: number | undefined;
27912
+ }> | undefined;
27892
27913
  };
27893
27914
  }[];
27894
27915
  meta: object;
@@ -28470,6 +28491,7 @@ export type AppRouter = import("@trpc/server/unstable-core-do-not-import").Route
28470
28491
  ownerReachableHost?: string | undefined;
28471
28492
  hubHostnameOverride?: string | undefined;
28472
28493
  } | undefined;
28494
+ deviceKey?: string | undefined;
28473
28495
  };
28474
28496
  output: {
28475
28497
  success: true;
package/dist/index.js CHANGED
@@ -8318,8 +8318,18 @@ var pipelineExecutorCapability = {
8318
8318
  * - `runtime` — main camera-serving engine (no idle TTL).
8319
8319
  * - `warm-override` — benchmark/test override held in the warm
8320
8320
  * cache; auto-disposed after the idle TTL.
8321
+ * - `device-pool` — a concurrent per-device pool (Phase 2
8322
+ * multi-device, keyed by `deviceKey`) resolved
8323
+ * via `resolveDeviceFactory`. Runs alongside the
8324
+ * `runtime` engine on a DIFFERENT accelerator
8325
+ * (NPU / iGPU / Coral) — this is how the
8326
+ * Engines tab shows all pools running at once.
8321
8327
  */
8322
- kind: zod.z.enum(["runtime", "warm-override"]),
8328
+ kind: zod.z.enum([
8329
+ "runtime",
8330
+ "warm-override",
8331
+ "device-pool"
8332
+ ]),
8323
8333
  /** Native pid of the underlying Python pool (null when no pool). */
8324
8334
  poolPid: zod.z.number().nullable(),
8325
8335
  /** ms since this factory was last used (null when not warm-tracked). */
@@ -19563,7 +19573,17 @@ var AgentPipelineSettingsSchema = zod.z.object({
19563
19573
  * it already uses to reach the hub). Set this only when the auto-detected
19564
19574
  * address is wrong (multi-homed host, NAT, custom interface).
19565
19575
  */
19566
- reachableHost: zod.z.string().optional()
19576
+ reachableHost: zod.z.string().optional(),
19577
+ /**
19578
+ * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
19579
+ * weight}. Absent / all-disabled ⇒ the node's single default accelerator
19580
+ * (safe default); two+ enabled ⇒ the dispatcher balances detection sessions
19581
+ * across them so they run CONCURRENTLY.
19582
+ */
19583
+ inferenceDevices: zod.z.record(zod.z.string(), zod.z.object({
19584
+ enabled: zod.z.boolean(),
19585
+ weight: zod.z.number().positive().optional()
19586
+ })).optional()
19567
19587
  });
19568
19588
  var CameraPipelineForAgentSchema = zod.z.object({
19569
19589
  steps: zod.z.array(PipelineStepInputSchema).readonly(),
@@ -31504,31 +31524,52 @@ function scoreRuntimes(hw) {
31504
31524
  };
31505
31525
  }
31506
31526
  var DEVICE_FOR_BACKEND = {
31507
- openvino: "gpu",
31508
31527
  cuda: "gpu",
31509
31528
  edgetpu: "usb",
31510
31529
  coreml: "all",
31511
31530
  cpu: "cpu"
31512
31531
  };
31532
+ function device(backend, dev, format, score) {
31533
+ return {
31534
+ key: backend === "cpu" ? "cpu" : `${backend}:${dev}`,
31535
+ backend,
31536
+ device: dev,
31537
+ format,
31538
+ runtime: "python",
31539
+ score,
31540
+ available: true
31541
+ };
31542
+ }
31513
31543
  /**
31514
- * Enumerate every usable inference device on a node, one descriptor per scored
31515
- * backend. Unlike the elected `bestScore`, this returns the FULL set so the
31516
- * orchestrator can run and balance across all accelerators concurrently.
31544
+ * Enumerate every usable inference device on a node one descriptor PER PHYSICAL
31545
+ * ACCELERATOR, so the orchestrator can run and balance across all of them
31546
+ * CONCURRENTLY (each device is its own pool). Critically, OpenVINO is expanded
31547
+ * into its distinct devices (NPU / iGPU / CPU) rather than a single AUTO entry:
31548
+ * the Intel NPU ("AI Boost") and the iGPU are separate accelerators and run in
31549
+ * parallel — collapsing them to AUTO would leave one idle. NPU is scored above
31550
+ * the iGPU (faster for int8 detection AND frees the GPU).
31517
31551
  */
31518
31552
  function enumerateInferenceDevices(hw) {
31519
31553
  const { scores } = scoreRuntimes(hw);
31520
- return scores.map((s) => {
31521
- const device = DEVICE_FOR_BACKEND[s.backend] ?? s.backend;
31522
- return {
31523
- key: s.backend === "cpu" ? "cpu" : `${s.backend}:${device}`,
31524
- backend: s.backend,
31525
- device,
31526
- format: s.format,
31527
- runtime: "python",
31528
- score: s.score,
31529
- available: s.available
31530
- };
31531
- });
31554
+ const out = [];
31555
+ for (const s of scores) {
31556
+ if (s.backend === "openvino") {
31557
+ if (hw.npu?.type === "intel-npu") out.push(device("openvino", "npu", s.format, s.score + 2));
31558
+ if (hw.gpu?.type === "intel") out.push(device("openvino", "gpu", s.format, s.score));
31559
+ continue;
31560
+ }
31561
+ if (s.backend === "edgetpu") {
31562
+ const coralCount = Math.max(1, hw.coral?.count ?? 1);
31563
+ for (let i = 0; i < coralCount; i++) {
31564
+ const dev = i === 0 ? "usb" : `usb:${i}`;
31565
+ out.push(device("edgetpu", dev, s.format, s.score));
31566
+ }
31567
+ continue;
31568
+ }
31569
+ const dev = DEVICE_FOR_BACKEND[s.backend] ?? s.backend;
31570
+ out.push(device(s.backend, dev, s.format, s.score));
31571
+ }
31572
+ return out;
31532
31573
  }
31533
31574
  //#endregion
31534
31575
  exports.ACCESSORY_LABEL = ACCESSORY_LABEL;
package/dist/index.mjs CHANGED
@@ -8317,8 +8317,18 @@ var pipelineExecutorCapability = {
8317
8317
  * - `runtime` — main camera-serving engine (no idle TTL).
8318
8318
  * - `warm-override` — benchmark/test override held in the warm
8319
8319
  * cache; auto-disposed after the idle TTL.
8320
+ * - `device-pool` — a concurrent per-device pool (Phase 2
8321
+ * multi-device, keyed by `deviceKey`) resolved
8322
+ * via `resolveDeviceFactory`. Runs alongside the
8323
+ * `runtime` engine on a DIFFERENT accelerator
8324
+ * (NPU / iGPU / Coral) — this is how the
8325
+ * Engines tab shows all pools running at once.
8320
8326
  */
8321
- kind: z.enum(["runtime", "warm-override"]),
8327
+ kind: z.enum([
8328
+ "runtime",
8329
+ "warm-override",
8330
+ "device-pool"
8331
+ ]),
8322
8332
  /** Native pid of the underlying Python pool (null when no pool). */
8323
8333
  poolPid: z.number().nullable(),
8324
8334
  /** ms since this factory was last used (null when not warm-tracked). */
@@ -19562,7 +19572,17 @@ var AgentPipelineSettingsSchema = z.object({
19562
19572
  * it already uses to reach the hub). Set this only when the auto-detected
19563
19573
  * address is wrong (multi-homed host, NAT, custom interface).
19564
19574
  */
19565
- reachableHost: z.string().optional()
19575
+ reachableHost: z.string().optional(),
19576
+ /**
19577
+ * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
19578
+ * weight}. Absent / all-disabled ⇒ the node's single default accelerator
19579
+ * (safe default); two+ enabled ⇒ the dispatcher balances detection sessions
19580
+ * across them so they run CONCURRENTLY.
19581
+ */
19582
+ inferenceDevices: z.record(z.string(), z.object({
19583
+ enabled: z.boolean(),
19584
+ weight: z.number().positive().optional()
19585
+ })).optional()
19566
19586
  });
19567
19587
  var CameraPipelineForAgentSchema = z.object({
19568
19588
  steps: z.array(PipelineStepInputSchema).readonly(),
@@ -31503,31 +31523,52 @@ function scoreRuntimes(hw) {
31503
31523
  };
31504
31524
  }
31505
31525
  var DEVICE_FOR_BACKEND = {
31506
- openvino: "gpu",
31507
31526
  cuda: "gpu",
31508
31527
  edgetpu: "usb",
31509
31528
  coreml: "all",
31510
31529
  cpu: "cpu"
31511
31530
  };
31531
+ function device(backend, dev, format, score) {
31532
+ return {
31533
+ key: backend === "cpu" ? "cpu" : `${backend}:${dev}`,
31534
+ backend,
31535
+ device: dev,
31536
+ format,
31537
+ runtime: "python",
31538
+ score,
31539
+ available: true
31540
+ };
31541
+ }
31512
31542
  /**
31513
- * Enumerate every usable inference device on a node, one descriptor per scored
31514
- * backend. Unlike the elected `bestScore`, this returns the FULL set so the
31515
- * orchestrator can run and balance across all accelerators concurrently.
31543
+ * Enumerate every usable inference device on a node one descriptor PER PHYSICAL
31544
+ * ACCELERATOR, so the orchestrator can run and balance across all of them
31545
+ * CONCURRENTLY (each device is its own pool). Critically, OpenVINO is expanded
31546
+ * into its distinct devices (NPU / iGPU / CPU) rather than a single AUTO entry:
31547
+ * the Intel NPU ("AI Boost") and the iGPU are separate accelerators and run in
31548
+ * parallel — collapsing them to AUTO would leave one idle. NPU is scored above
31549
+ * the iGPU (faster for int8 detection AND frees the GPU).
31516
31550
  */
31517
31551
  function enumerateInferenceDevices(hw) {
31518
31552
  const { scores } = scoreRuntimes(hw);
31519
- return scores.map((s) => {
31520
- const device = DEVICE_FOR_BACKEND[s.backend] ?? s.backend;
31521
- return {
31522
- key: s.backend === "cpu" ? "cpu" : `${s.backend}:${device}`,
31523
- backend: s.backend,
31524
- device,
31525
- format: s.format,
31526
- runtime: "python",
31527
- score: s.score,
31528
- available: s.available
31529
- };
31530
- });
31553
+ const out = [];
31554
+ for (const s of scores) {
31555
+ if (s.backend === "openvino") {
31556
+ if (hw.npu?.type === "intel-npu") out.push(device("openvino", "npu", s.format, s.score + 2));
31557
+ if (hw.gpu?.type === "intel") out.push(device("openvino", "gpu", s.format, s.score));
31558
+ continue;
31559
+ }
31560
+ if (s.backend === "edgetpu") {
31561
+ const coralCount = Math.max(1, hw.coral?.count ?? 1);
31562
+ for (let i = 0; i < coralCount; i++) {
31563
+ const dev = i === 0 ? "usb" : `usb:${i}`;
31564
+ out.push(device("edgetpu", dev, s.format, s.score));
31565
+ }
31566
+ continue;
31567
+ }
31568
+ const dev = DEVICE_FOR_BACKEND[s.backend] ?? s.backend;
31569
+ out.push(device(s.backend, dev, s.format, s.score));
31570
+ }
31571
+ return out;
31531
31572
  }
31532
31573
  //#endregion
31533
31574
  export { ACCESSORY_LABEL, ALL_CAPABILITY_DEFINITIONS, APPLE_SA_TO_MACRO, AUDIO_BACKEND_CHOICES, AUDIO_MACRO_LABELS, AccessoriesStatusSchema, AccessoryKind, AddBrokerInputSchema, AddonAutoUpdateSchema, AddonListItemSchema, AddonPageDeclarationSchema, AddonPageInfoSchema, AdoptInputSchema as AdoptionAdoptInputSchema, AdoptResultSchema as AdoptionAdoptResultSchema, AdoptionFilterSchema, GetCandidateInputSchema as AdoptionGetCandidateInputSchema, ListCandidatesInputSchema as AdoptionListCandidatesInputSchema, ListCandidatesOutputSchema as AdoptionListCandidatesOutputSchema, ReleaseInputSchema as AdoptionReleaseInputSchema, AdoptionStatusSchema, AgentLoadSummarySchema, AirQualitySensorStatusSchema, AlarmArmModeSchema, AlarmPanelStatusSchema, AlarmStateSchema, AlertSchema, AlertSeveritySchema, AlertSourceSchema, AlertStatusSchema, AmbientLightSensorStatusSchema, ApiKeyRecordSchema, ApiKeySummarySchema, ArchiveEntrySchema, ArchiveManifestSchema, AttachmentMediaTypeSchema, AttachmentSchema, AudioAnalysisResultSchema, AudioAnalysisSettingsSchema, AudioChunkInputSchema, AudioClassSummarySchema, AudioClassificationLabelSchema, AudioClassificationResultSchema, AudioCodecInfoSchema, AudioDecodeSessionConfigSchema, AudioEncodeSchema, AudioEncodeSessionConfigSchema, AudioEncodedChunkSchema, AudioEventSchema, AudioLevelSchema, AudioMetricsHistoryPointSchema, AudioMetricsHistorySchema, AudioMetricsSnapshotSchema, AudioPcmChunkSchema, AuthResultSchema, AutoUpdateSettingsSchema, AutomationControlStatusSchema, AvailableIntegrationTypeSchema, BACKEND_TO_FORMAT, BATTERY_DEVICE_PROFILE, BacklightModeSchema, BackupDestinationInfoSchema, BackupEntrySchema, BaseAddon, BaseDevice, BaseDeviceProvider, BatteryStatusSchema, BinaryStatusSchema, BoundingBoxSchema, BrightnessStatusSchema, AddInputSchema as BrokerAddInputSchema, BrokerAudioClientSchema, BrokerClientsSchema, BrokerConnectionDetailsSchema, BrokerConsumerAttributionSchema, BrokerConsumerKindSchema, BrokerDecodedClientSchema, BrokerEncodedClientSchema, GetStateInputSchema as BrokerGetStateInputSchema, BrokerInfoSchema, BrokerProviderInfoSchema, PublishInputSchema as BrokerPublishInputSchema, RegistryStatusSchema as BrokerRegistryStatusSchema, BrokerRtspClientSchema, BrokerStatsSchema, BrokerStatusEnum, BrokerStatusSchema, SubscribeInputSchema as BrokerSubscribeInputSchema, SubscribeResultSchema as BrokerSubscribeResultSchema, TestConnectionResultSchema as BrokerTestConnectionResultSchema, UnsubscribeInputSchema as BrokerUnsubscribeInputSchema, CAM_PROFILE_ORDER, CAPABILITY_NAMES, CAPABILITY_ROUTER_KEYS, CAP_NAMES_WITH_STATUS, CAP_NODE_PIN_CONTEXT_KEY, CAP_PROVIDER_KIND_MAP, COCO_80_LABELS, COCO_TO_MACRO, CamProfileSchema, CamStreamDescriptorSchema, CamStreamKindSchema, CamStreamResolutionSchema, CameraAssignmentStatusSchema, CameraAudioStatusSchema, CameraBrokerProfileSchema, CameraBrokerStatusSchema, CameraCredentialsSchema, CameraCredentialsStatusSchema, CameraDecoderShmSchema, CameraDecoderStatusSchema, CameraDetectionPhaseSchema, CameraDetectionProvisioningSchema, CameraDetectionProvisioningStateSchema, CameraDetectionStatusSchema, CameraMetricsSchema, CameraMetricsWithDeviceIdSchema, CameraMotionStatusSchema, CameraRecordingModeSchema, CameraRecordingStatusSchema, CameraSourceStatusSchema, CameraSourceStreamSchema, CameraStatusSchema, CameraStreamSchema, CandidateQueryFilterSchema, CapScopeSchema, CapabilityBindingsSchema, CarbonMonoxideStatusSchema, ChargingStatus, ClientNetworkStatsSchema, ClimateControlStatusSchema, ClipPlaybackSchema, ClipSchema, ClusterAddonNodeDeploymentSchema, ClusterAddonStatusEntrySchema, CollectionColumnSchema, CollectionIndexSchema, ColorStatusSchema, ConfigEntrySchema, ConfigSectionWithValuesSchema, ConfigTabDeclarationSchema, ConnectivityStatusSchema, ConsumableItemSchema, ConsumablesStatusSchema, ContactStatusSchema, ControlKindSchema, ControlStatusSchema, ConvertArtifactSchema, ConvertResultSchema, ConvertTargetSchema, CoverStateSchema, CoverStatusSchema, CreateApiKeyInputSchema, CreateApiKeyResultSchema, CreateIntegrationInputSchema, CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, CreateUserInputSchema, CustomActionInputSchema, CustomModelDescriptorSchema, DATAPLANE_SECRET_HEADER, DEFAULT_ADDON_PLACEMENT, DEFAULT_AUDIO_ANALYZER_CONFIG, DEFAULT_DECODER_HWACCEL_CONFIG, DEFAULT_EVENT_COLOR, DEFAULT_FEATURES, DEFAULT_RETENTION, DEFAULT_SCRUB_THUMBNAIL_PRESET, DEVICE_CAP_NAMES, DEVICE_PROFILES, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DEVICE_TYPE_CONTROL_KIND, DEVICE_TYPE_INFO, DayNightModeSchema, DayNightOptionsSchema, DayNightSettingsPatchSchema, DayNightStatusSchema, DecodedAudioChunkSchema, DecodedFrameSchema, DecoderSessionConfigSchema, DecoderStatsSchema, DeleteIntegrationResultSchema, DetectionSourceSchema, DeviceCodeSeveritySchema, DeviceConfig, DeviceDiscoveryStatusSchema, ExposeInputSchema as DeviceExportExposeInputSchema, DeviceExportStatusSchema, UnexposeInputSchema as DeviceExportUnexposeInputSchema, DeviceFeature, DeviceInfoSchema, DeviceLinkModeSchema, DeviceNetworkStatsSchema, DeviceRole, DeviceRuntimeState, DeviceStatusSchema, DeviceType, DiscoveredChildDeviceSchema, DiscoveredChildStatusSchema, DiscoveredDeviceSchema, DiscoveredTargetSchema, DisposerChain, DoorbellPressEventSchema, DoorbellStatusSchema, EVENTFUL_CAP_NAMES, EVENT_KIND_BY_CAP, EVENT_PAD_MS, EVENT_TAXONOMY, EXPRESSION_BUILTINS, EXPRESSION_BUILTIN_NAMES, EXPRESSION_COMPILE_CACHE_CAPACITY, EXPRESSION_IDENTIFIER_RE, EXPRESSION_INJECTED_NOW, ElementConfigStore, EmbeddingInfoSchema, EmbeddingResultSchema, EncodeProfileSchema, EncodedPacketSchema, EnrichedWidgetMetadataSchema, EnumSensorDateTimeFormatSchema, EnumSensorStatusSchema, EventCategory, EventEmitterStatusSchema, EventFireSchema, EventItemSchema, EventKindCategorySchema, EventKindDescriptorSchema, EventKindIconSchema, EventKindSchema, EventSourceType, ExportDownloadSchema, ExportOptionsSchema, ExportRecordSchema, ExportSetupFieldSchema, ExportSetupSchema, ExportSpeedSchema, ExportStateSchema, ExportTimelapseSchema, ExposedDeviceSchema, ExposureModeSchema, ExpressionEvalError, ExpressionParseError, FanControlStatusSchema, FanDirectionSchema, FeatureManifestSchema, FeatureProbeStatusSchema, FloodStatusSchema, FrameHandleFormatSchema, FrameHandleSchema, FrameInputSchema, GasStatusSchema, GetStreamWithCodecInputSchema, GlobalMetricsSchema, HF_BASE_URL, HF_REPO, HWACCEL_OPTIONS, HealthStatusSchema, HistoryPointSchema, HistoryResolutionEnum, HumidifierStatusSchema, HumiditySensorStatusSchema, HvacModeSchema, ImageRotateSchema, ImageSettingsOptionsSchema, ImageSettingsPatchSchema, ImageSettingsStatusSchema, ImageStatusSchema, IngestOwnerSchema, InstalledPackageSchema, IntegrationLiteSchema, IntegrationWithStateSchema, IntercomAbilitySchema, IntercomStatusSchema, KNOWN_CAP_NAMES, KeyEventSchema, LabelDefinitionSchema, LawnMowerActivitySchema, LawnMowerControlStatusSchema, LinkedDeviceSchema, LlmDefaultSchema, LlmDefaultSelectorSchema, LlmErrorCodeSchema, LlmGenerateBaseInputSchema, LlmGenerateErrSchema, LlmGenerateOkSchema, LlmGenerateResultSchema, LlmImageSchema, LlmNodeModelSchema, LlmProfileKindDescriptorSchema, LlmProfileKindSchema, LlmProfileSchema, LlmRuntimeCompleteInputSchema, LlmRuntimeDiskUsageSchema, LlmRuntimeNodeSchema, LlmRuntimeStatusSchema, LlmUsageRollupSchema, LlmUsageSchema, LocateSegmentResultSchema, LocationStatSchema, LockControlStatusSchema, LockStateSchema, LogEntrySchema, LogLevelSchema, LogStreamEntrySchema, LoginMethodContributionSchema, LoginStageEnum, MACRO_LABELS, MAX_EXPRESSION_AST_NODES, MAX_EXPRESSION_BINDINGS, MAX_EXPRESSION_CALL_ARGS, MAX_EXPRESSION_EVAL_STEPS, MAX_EXPRESSION_SOURCE_LENGTH, METHOD_ACCESS_MAP, MODEL_FORMATS, MOTION_TRIGGER_FEATURE, ManagedModelCatalogEntrySchema, ManagedModelRefSchema, ManagedRuntimeConfigSchema, MaskGridDimsSchema, MaskGridShapeSchema, MaskLineShapeSchema, MaskPointSchema, MaskPolygonShapeSchema, MaskPolygonVerticesSchema, MaskRectShapeSchema, MaskShapeKindSchema, MaskShapeSchema, MediaFileSchema, MediaPlayerRepeatSchema, MediaPlayerStateSchema, MediaPlayerStatusSchema, MeshPeerSchema, MeshStatusSchema, MethodAccessSchema, ModelCatalogEntrySchema, ModelConvertInputSchema, ModelConvertMetadataSchema, ModelDistributeInputSchema, ModelDistributeResultSchema, ModelExtraFileSchema, ModelFormatEntrySchema, ModelFormatsSchema, ModelSubstitutionSchema, ModelVariantGroupSchema, MotionAnalysisResultSchema, MotionEventSchema, MotionOnMotionChangedDataSchema, MotionRegionSchema, MotionSourceEnum, MotionSourcesSchema, MotionStatusSchema, MotionTriggerRuntimeStateSchema, MotionTriggerStatusSchema, MotionZoneOptionsSchema, MotionZonePatchSchema, MotionZoneRegionSchema, MotionZoneStatusSchema, StatusSchema as MqttBrokerStatusSchema, NativeDetectionSchema, NativeObjectClassEnum, NativeObjectDetectionRuntimeStateSchema, NativeObjectDetectionStatusSchema, NetworkAccessStatusSchema, NetworkAddressSchema, NetworkEndpointSchema, NotificationActionSchema, NotificationFormatSchema, NotificationHistoryEntrySchema, NotificationRuleSchema, NotificationSchema, NotifierStatusSchema, NumericSensorStatusSchema, OPS_LOG_DEFAULT_LIMIT, OPS_LOG_RING_DEFAULT_MAX, OauthIntegrationDescriptorSchema, ObjectEventSchema, OpsLogDomainSchema, OpsLogEntrySchema, OpsLogOpSchema, OpsLogQueryInputSchema, OpsLogReasonSchema, OrchestratorMetricsSchema, OsdOverlayKindEnum, OsdOverlayPatchSchema, OsdOverlaySchema, OsdPositionEnum, OsdStatusSchema, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, PIPELINE_FLOW_CAPABILITY_NAMES, PIPELINE_OWNER_CAPABILITY_NAMES, PROVIDER_KIND_CAP_NAMES, PYTHON_SCRIPT, PackageUpdateSchema, PackageVersionInfoSchema, PasskeyLoginMethodSchema, PasskeySummarySchema, PcmSampleFormatSchema, PerScopeBreakdownSchema, PetFeederStatusSchema, PickStreamPreferencesSchema, PickStreamRequirementsSchema, PickedCamStreamSchema, PipelineAssignmentSchema, PipelineDefaultStepSchema, PipelineEngineChoiceSchema, PipelineRunResultBridge, PipelineStepInputSchema, PipelineValidationIssueSchema, PipelineValidationResultSchema, PlaceholderReasonSchema, PolygonPointSchema, PowerMeterStatusSchema, PresenceStatusSchema, PressureSensorStatusSchema, PrivacyMaskOptionsSchema, PrivacyMaskPatchSchema, PrivacyMaskRegionSchema, PrivacyMaskShapeSchema, PrivacyMaskStatusSchema, ProfileRtspEntrySchema, ProfileSlotSchema, ProfileSlotStatusSchema, ProviderStatusSchema, PtzAutotrackRuntimeStateSchema, PtzAutotrackSettingsSchema, PtzAutotrackStatusSchema, PtzAutotrackTargetOptionSchema, PtzMoveCommandSchema, PtzPositionSchema, PtzPresetSchema, PtzStatusSchema, QueryFilterSchema, REACHABILITY_FAILURES_TO_OFFLINE, REACHABILITY_POLL_INTERVAL_MS, REACHABILITY_PROBE_TIMEOUT_MS, RECOGNITION_TYPES, RESERVED_BINDING_NAMES, RUNTIME_DEFAULTS, RUNTIME_TO_FORMAT, RawStateResultSchema, ReadSegmentBytesResultSchema, ReadinessRegistry, ReadinessTimeoutError, RecentTracksPageSchema, RecentTracksQueryInput, RecordingAvailabilitySchema, RecordingBandModeSchema, RecordingBandSchema, RecordingBandTriggersSchema, RecordingConfigSchema, RecordingDaysSchema, RecordingDeviceUsageSchema, RecordingLocationUsageSchema, RecordingManifestSchema, RecordingModeSchema, RecordingRangeSchema, RecordingRetentionSchema, RecordingRuleSchema, RecordingScheduleSchema, RecordingStatusSchema, RecordingStorageModeSchema, RecordingStorageUsageSchema, RecordingTriggersSchema, RecordingWeekdaySchema, RedirectLoginMethodSchema, RenderedAsSchema, ReportMotionInputSchema, RingBuffer, RtpSourceSchema, RtspRestreamEntrySchema, RunnerCameraConfigSchema, RunnerCameraDeviceUIFields, RunnerFrameSourceSchema, RunnerLocalLoadSchema, RunnerLocalMetricsSchema, SCOPE_PRESETS, SCRUB_THUMBNAIL_PRESETS, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, SENSOR_FEATURES, SENSOR_MAP, SOURCE_INFO_METADATA_KEY, STREAM_PROFILE_META, STREAM_QUALITY_LABELS, SUB_DETECTION_TYPES, SYSTEM_CAP_NAMES, SceneCheckSchema, SceneConditionSchema, SceneMonitorSchema, SceneMonitorStateSchema, SceneMonitorStatusSchema, SceneReferenceSchema, ScopedTokenSchema, ScopedTokenSummarySchema, ScoredObjectEventSchema, ScriptRunnerStatusSchema, ScrubThumbnailPresetSchema, SearchResultSchema, SendEmailInputSchema, SendEmailResultSchema, SendResultSchema, SensorEventSchema, ServerBootModeSchema, ServerPackageStatusSchema, ServerRollbackInfoSchema, ServerUpdateActionResultSchema, ServerUpdateCheckResultSchema, ServerUpdateStateSchema, SettingsPatchSchema, SettingsRecordSchema, SettingsSchemaWithValuesSchema, SettingsUpdateResultSchema, ShmRingStatsSchema, SmokeStatusSchema, SmtpStatusSchema, SnapshotImageSchema, SourceInfoSchema, SpatialDetectionSchema, SsoBridgeClaimsSchema, StartEmbeddedInputSchema, StationaryObjectSchema, AbortUploadInputSchema as StorageAbortUploadInputSchema, BeginDownloadInputSchema as StorageBeginDownloadInputSchema, BeginDownloadResultSchema as StorageBeginDownloadResultSchema, BeginUploadInputSchema as StorageBeginUploadInputSchema, BeginUploadResultSchema as StorageBeginUploadResultSchema, EndDownloadInputSchema as StorageEndDownloadInputSchema, FinalizeUploadInputSchema as StorageFinalizeUploadInputSchema, StorageLocationDeclarationSchema, StorageLocationRefSchema, StorageLocationSchema, StorageLocationTypeSchema, ProviderInfoSchema as StorageProviderInfoSchema, ReadChunkInputSchema as StorageReadChunkInputSchema, TestLocationResultSchema as StorageTestLocationResultSchema, WriteChunkInputSchema as StorageWriteChunkInputSchema, StreamCodecSchema, StreamFormatSchema, StreamNetworkStatsSchema, StreamParamsOptionsSchema, StreamParamsStatusSchema, StreamProfileConfigSchema, StreamProfileOptionsSchema, StreamProfilePatchSchema, StreamProfileSchema, StreamSourceEntrySchema, StreamSourceSchema, SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, SubscribeFramesInputSchema, SubscribeFramesResultSchema, SwitchStatusSchema, SystemMetricsSchema, SystemMirror, TAXONOMY_COLORS, TIMEZONES, TamperStatusSchema, TankStatusSchema, TargetKindCapsSchema, TargetKindLevelSchema, TargetKindSchema, TargetSchema, TemperatureSensorStatusSchema, TestConnectionResultSchema$1 as TestConnectionResultSchema, TestResultSchema, ToastSchema, TokenScopeSchema, TopologyNodeSchema, TopologyProcessSchema, TopologyServiceSchema, TrackCascadeCountsSchema, TrackEnvelopeSchema, TrackProjectionSchema, TrackSchema, TrackStateSchema, TrackZoneFilterSchema, TrackedDetectionSchema, TurnServerSchema, UNIT_TABLE, BrokerInfoSchema$1 as UnifiedBrokerInfoSchema, UnitConversionError, UpdateIntegrationInputSchema, UpdateStatusSchema, UpdateUserInputSchema, UserRecordSchema, UserSummarySchema, VacuumControlStatusSchema, VacuumStateSchema, ValveStateSchema, ValveStatusSchema, VibrationStatusSchema, VideoEncodeSchema, WELL_KNOWN_TABS, WELL_KNOWN_TAB_MAP, WaterHeaterStatusSchema, WeatherStatusSchema, WebrtcStreamChoiceSchema, WebrtcStreamTargetSchema, WhiteBalanceModeSchema, WidgetHostEnum, WidgetLoginMethodSchema, WidgetMetadataSchema, WidgetRemoteSchema, WidgetSizeEnum, YAMNET_TO_MACRO, ZoneKindEnum, ZoneRuleModeEnum, ZoneRuleSchema, ZoneRuleStageEnum, ZoneRulesArraySchema, ZoneSchema, ZoneScopeBreakdownSchema, accessoriesCapability, accessoryStableId, addonPagesCapability, addonPagesSourceCapability, addonRoutesCapability, addonSettingsCapability, addonWidgetsCapability, addonWidgetsSourceCapability, addonsCapability, adminUiCapability, advancedNotifierCapability, airQualitySensorCapability, alarmPanelCapability, alertsCapability, ambientLightSensorCapability, applyTransform, asBoolean, asJsonArray, asJsonObject, asNumber, asString, audioAnalysisCapability, audioAnalyzerCapability, audioCodecCapability, audioMetricsCapability, authProviderCapability, autoAssignProfiles, automationControlCapability, backupCapability, batteryCapability, bestLocationMatch, binaryCapability, bindAddonActions, brightnessCapability, brokerCapability, buildAddonRouteProvider, buildEventKindDescriptor, buildModelVariantGroups, buildStreamParamsConfigSchema, buttonCapability, cameraCredentialsCapability, cameraPipelineConfigCapability, cameraStreamsCapability, canConvertUnit, carbonMonoxideCapability, cellsToRects, classifyStream, classifyStreams, climateControlCapability, collectHydratedFieldEntries, collectHydratedFieldValues, colorCapability, colorForKind, compileExpression, compileExpressionSafe, connectivityCapability, consumablesCapability, contactCapability, controlCapability, convertUnit, cosineSimilarity, coverCapability, createDeviceProxy, createDurableState, createEvent, createExpressionScope, createLazyTrpcSource, createMirrorSource, createRuntimeStateBridge, createSliceHandle, createSystemProxy, customAction, customModelRegistryCapability, dayNightCapability, decoderCapability, defaultDeviceFor, defineCustomActions, describeModelVariant, detectionPipelineCapability, deviceAdoptionCapability, deviceCustomAction, deviceDiscoveryCapability, deviceExportCapability, deviceManagerCapability, deviceMatchesProfile, deviceOpsCapability, deviceProviderCapability, deviceStateCapability, deviceStatusCapability, doorbellCapability, embeddingEncoderCapability, emitDownForOwnedCaps, emitReadiness, encodeProfileFromStreamShape, enumSensorCapability, enumerateInferenceDevices, enumerateItemArrayFields, enumerateSchemaFields, errMsg, evaluateAst, evaluateLinkExpression, evaluateZoneRules, event, eventEmitterCapability, eventsCapability, expandCapMethods, extractNestedAddonId, extractSourceInfoFromMetadata, faceGalleryCapability, fanControlCapability, featureProbeCapability, filesystemBrowseCapability, findTimezone, floodCapability, formatForBackend, formatForRuntime, gasCapability, getAudioMacroClassIds, getByPath, getCapsByProviderKind, getTaxonomyEntry, hasMotionTrigger, hfModelUrl, htmlToText, humidifierCapability, humiditySensorCapability, hydrateSchema, imageCapability, imageSettingsCapability, integrationsCapability, intercomCapability, isAgentOnlyPlacement, isArrayOutputSchema, isCollectionArrayMethod, isDeployableToAgent, isDeviceConfigCap, isEvent, isNode, isObjectInput, isVoidInput, jobKindSchema, kebabToCamel, lawnMowerControlCapability, lifecycleJobSchema, lifecycleJobScopeSchema, lifecycleJobStateSchema, lifecycleTaskSchema, llmCapability, llmRuntimeCapability, localNetworkCapability, locationSimilarity, lockControlCapability, logDestinationCapability, loginMethodCapability, looseSchema, makeProfileBrokerId, makeSourceBrokerId, mapAudioLabelToMacro, markdownToHtmlLite, markdownToText, maskUrlCredentials, mediaPlayerCapability, mergeSourceInfo, meshNetworkCapability, method, metricsProviderCapability, migrateConfigToBands, modelConvertCapability, modelDistributorCapability, modelFormatForRuntime, motionCapability, motionDetectionCapability, motionTriggerCapability, motionZonesCapability, mqttBrokerCapability, nativeObjectDetectionCapability, networkAccessCapability, networkQualityCapability, nodePin, nodesCapability, normalizeAddonInitResult, normalizeUnit, notificationOutputCapability, notifierCapability, numericSensorCapability, oauthIntegrationCapability, objectInputDeclaresAddonId, osdCapability, parseCameraStreamConfig, parseExpression, parseJsonArray, parseJsonObject, parseJsonUnknown, parseProfileBrokerId, parseStreamParamsFormPatch, petFeederCapability, pickAccessoryControl, pickPreferredRtspEntry, pipelineAnalyticsCapability, pipelineExecutorCapability, pipelineOrchestratorCapability, pipelineRunnerCapability, plateGalleryCapability, platformProbeCapability, powerMeterCapability, prepareNotification, presenceCapability, pressureSensorCapability, privacyMaskCapability, procedureAuthKey, ptzAutotrackCapability, ptzCapability, pythonScriptForBackend, readNodePin, readinessKey, rebootCapability, recordingCapability, recordingExportCapability, rectsToCells, requiresPython, resolveAddonExecution, resolveAddonGroup, resolveAddonPlacement, resolveAddonRuntime, resolveCapMount, resolveDetectionRuntime, resolveDeviceControlKind, resolveDeviceProfile, resolveFormat, resolveHydratedFieldValue, resolveModelFormat, resolveMutate, resolveRunnerId, resolveScrubThumbnailGeometry, resolveVariantModelId, runInferenceStep, runtimeDevices, sceneMonitorCapability, scopeKey, scoreRuntimes, scriptRunnerCapability, selectAssignedProfileSlots, serverManagementCapability, setByPath, settingsStoreCapability, sleep, sleepCancellable, smokeCapability, smtpProviderCapability, snapshotCapability, ssoBridgeCapability, startReachabilityPoll, storageCapability, storageEvictableCapability, storageProviderCapability, streamBrokerCapability, streamCatalogCapability, streamParamsCapability, streamPixels, streamQualityLabel, subKindsOf, supportedRuntimes, switchCapability, synthesizeSourceInfo, systemCapability, tamperCapability, taskLogEntrySchema, taskPhaseSchema, taskTargetSchema, temperatureSensorCapability, textToHtml, toDeviceSummary, toExpressionValue, toStreamSourceEntry, toastCapability, tokenize, transcodeBody, tryConvertUnit, turnProviderCapability, unitDimension, unitsForDimension, updateCapability, userManagementCapability, userPasskeysCapability, vacuumControlCapability, validateExpressionSource, valveCapability, vibrationCapability, videoclipsCapability, viewerUiCapability, waterHeaterCapability, weatherCapability, webrtcClientHintsSchema, webrtcSessionCapability, wiringAddonHealthSchema, wiringHealthSnapshotSchema, wiringNodeHealthSchema, wiringProbeKindSchema, wiringProbeResultSchema, zodEntriesToConfigUI, zoneAnalyticsCapability, zoneRulesCapability, zonesCapability };
@@ -63,9 +63,13 @@ interface ScoreRuntimesResult {
63
63
  */
64
64
  export declare function scoreRuntimes(hw: HardwareInfo): ScoreRuntimesResult;
65
65
  /**
66
- * Enumerate every usable inference device on a node, one descriptor per scored
67
- * backend. Unlike the elected `bestScore`, this returns the FULL set so the
68
- * orchestrator can run and balance across all accelerators concurrently.
66
+ * Enumerate every usable inference device on a node one descriptor PER PHYSICAL
67
+ * ACCELERATOR, so the orchestrator can run and balance across all of them
68
+ * CONCURRENTLY (each device is its own pool). Critically, OpenVINO is expanded
69
+ * into its distinct devices (NPU / iGPU / CPU) rather than a single AUTO entry:
70
+ * the Intel NPU ("AI Boost") and the iGPU are separate accelerators and run in
71
+ * parallel — collapsing them to AUTO would leave one idle. NPU is scored above
72
+ * the iGPU (faster for int8 detection AND frees the GPU).
69
73
  */
70
74
  export declare function enumerateInferenceDevices(hw: HardwareInfo): readonly InferenceDeviceDescriptor[];
71
75
  export {};
@@ -57,6 +57,13 @@ export interface PipelineRunInput {
57
57
  */
58
58
  readonly image?: Uint8Array;
59
59
  readonly deviceId?: number;
60
+ /**
61
+ * Inference-device selector (Phase 2 multi-device). `<backend>:<device>`
62
+ * (e.g. `openvino:npu`, `openvino:gpu`, `edgetpu:usb`, `cpu`). Omitted ⇒ the
63
+ * node's default engine pool. Routes the call to that device's own pool so a
64
+ * node runs detection on NPU + iGPU + Coral concurrently.
65
+ */
66
+ readonly deviceKey?: string;
60
67
  /**
61
68
  * Correlation id tagged on every `pipeline.progress` event emitted
62
69
  * by this run. When a UI-initiated one-shot (`runPipelineTest`)
@@ -34,6 +34,14 @@ export interface CoralInfo {
34
34
  readonly type: 'coral-edgetpu';
35
35
  /** Bus location hint (e.g. `usb`), informational. */
36
36
  readonly bus?: string;
37
+ /**
38
+ * Number of physically attached Coral Edge TPUs. Multiple Corals coexist on
39
+ * one host and run CONCURRENTLY, one inference pool each — the enumerator emits
40
+ * one device descriptor per unit (`edgetpu:usb`, `edgetpu:usb:1`, …). Omitted /
41
+ * undefined ⇒ treat as a single Coral (the probe couldn't count them, e.g. a
42
+ * container with a limited `/sys` USB view — the delegate-presence fallback).
43
+ */
44
+ readonly count?: number;
37
45
  }
38
46
  /** A probed backend with availability and score */
39
47
  export interface PlatformScore {
@@ -100,6 +100,22 @@ export interface AgentPipelineSettings {
100
100
  * auto-detected address is wrong (multi-homed host, NAT, custom interface).
101
101
  */
102
102
  readonly reachableHost?: string;
103
+ /**
104
+ * Multi-device inference opt-in (Phase 4 multi-device). Maps a device key
105
+ * (`openvino:npu`, `openvino:gpu`, `edgetpu:usb`, `edgetpu:usb:1`, `cpu`, …
106
+ * from `enumerateInferenceDevices`) to whether the orchestrator may dispatch
107
+ * detection SESSIONS onto that device's pool, plus a relative `weight`.
108
+ *
109
+ * Absent / all-disabled ⇒ the node runs detection on its single DEFAULT
110
+ * device (the runner picks it; deviceKey is left unset) — the safe default:
111
+ * one best accelerator, others opt-in. When TWO+ keys are enabled the
112
+ * dispatcher balances new sessions across them (weighted, by active-session
113
+ * count) so the accelerators run CONCURRENTLY.
114
+ */
115
+ readonly inferenceDevices?: Readonly<Record<string, {
116
+ readonly enabled: boolean;
117
+ readonly weight?: number;
118
+ }>>;
103
119
  }
104
120
  /**
105
121
  * Per-camera pipeline settings. Sparse by design — a camera that has
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.1.54",
3
+ "version": "1.1.56",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",