@camstack/addon-pipeline 1.2.339 → 1.2.341
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.
- package/dist/audio-analyzer/index.js +3 -3
- package/dist/audio-analyzer/index.mjs +3 -3
- package/dist/{custom-model-catalog-BY35vysX.js → custom-model-catalog-CoJEC8nz.js} +5 -3
- package/dist/{custom-model-catalog-B5sCwSgr.mjs → custom-model-catalog-DNSmyZTT.mjs} +5 -3
- package/dist/detection-pipeline/index.js +188 -17
- package/dist/detection-pipeline/index.mjs +213 -42
- package/dist/{dist-BylL-kRe.mjs → dist-B8oPeJDI.mjs} +487 -57
- package/dist/{dist-BUqvRc-c.js → dist-PiNPe8uQ.js} +504 -56
- package/dist/{model-catalogs-DygV-lXw.js → model-catalogs-CEphd9Va.js} +1 -1
- package/dist/{model-catalogs-x1G07ScE.mjs → model-catalogs-RM3pkuZm.mjs} +1 -1
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/{node-r1KgYS72.js → node-CMTBIa3-.js} +1 -1
- package/dist/{node-4Vnc6mbI.mjs → node-DFUmMJ_f.mjs} +1 -1
- package/dist/pipeline-runner/index.js +3 -3
- package/dist/pipeline-runner/index.mjs +3 -3
- package/dist/{process-memory-DOX7Esg9.mjs → process-memory-C4v8DBKn.mjs} +1 -1
- package/dist/{process-memory-Dr9tFNCX.js → process-memory-CzAfDP9P.js} +1 -1
- package/dist/recorder/index.js +12 -2
- package/dist/recorder/index.mjs +12 -2
- package/dist/{segment-demux-js-5UX_f1ey.js → segment-demux-js-C-n_ZsMK.js} +1 -1
- package/dist/{segment-demux-js-Brk0ORQN.mjs → segment-demux-js-CIpCdbx4.mjs} +1 -1
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-oF4bquCk.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CIDS0Tr9.mjs} +2 -2
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BvfT5BVP.mjs +26 -0
- package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Bt8aa0wk.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-LU_e-xJm.mjs} +1 -1
- package/dist/stream-broker/demux-worker-child.js +1 -1
- package/dist/stream-broker/demux-worker-child.mjs +1 -1
- package/dist/stream-broker/{hostInit-BOteWKrZ.mjs → hostInit-CW_cmeNQ.mjs} +2 -2
- package/dist/stream-broker/index.js +3 -3
- package/dist/stream-broker/index.mjs +3 -3
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-1Y-WK-Zy.mjs +0 -26
|
@@ -12943,6 +12943,40 @@ var ModelFormatEntrySchema = object({
|
|
|
12943
12943
|
revision: string().min(1).optional()
|
|
12944
12944
|
});
|
|
12945
12945
|
/**
|
|
12946
|
+
* What a node holds for one (model, format) (D746). `current` is a complete
|
|
12947
|
+
* copy at its catalog revision — exactly what `downloaded: true` means.
|
|
12948
|
+
* `stale` is bytes on disk that are not (yet) proven current under D743/D744:
|
|
12949
|
+
* no or a different revision record, or a missing sibling. `missing` is no
|
|
12950
|
+
* copy. `downloaded` alone folds `stale` into "not downloaded", which hid
|
|
12951
|
+
* reclaimable bytes and a copy about to be replaced.
|
|
12952
|
+
*/
|
|
12953
|
+
var ModelOnDiskStateSchema = _enum([
|
|
12954
|
+
"current",
|
|
12955
|
+
"stale",
|
|
12956
|
+
"missing"
|
|
12957
|
+
]);
|
|
12958
|
+
/**
|
|
12959
|
+
* The numeric precision of one format's BUILD (D746) — reported only when the
|
|
12960
|
+
* build states it (file-name token, an INT8 variant, an EdgeTPU compile, a
|
|
12961
|
+
* CamStack Core ML export). Absent means "not stated", never "fp32".
|
|
12962
|
+
*/
|
|
12963
|
+
var ModelFormatPrecisionSchema = _enum([
|
|
12964
|
+
"fp32",
|
|
12965
|
+
"fp16",
|
|
12966
|
+
"int8"
|
|
12967
|
+
]);
|
|
12968
|
+
/**
|
|
12969
|
+
* One format of one model as a node's `pipelineExecutor.getSchema` reports it.
|
|
12970
|
+
* `onDisk` / `precision` are optional for version skew: a runner that predates
|
|
12971
|
+
* them omits them, and a reader falls back to `downloaded`.
|
|
12972
|
+
*/
|
|
12973
|
+
var PipelineModelFormatStatusSchema = object({
|
|
12974
|
+
downloaded: boolean(),
|
|
12975
|
+
sizeMB: number(),
|
|
12976
|
+
onDisk: ModelOnDiskStateSchema.optional(),
|
|
12977
|
+
precision: ModelFormatPrecisionSchema.optional()
|
|
12978
|
+
});
|
|
12979
|
+
/**
|
|
12946
12980
|
* Extra file that must be downloaded alongside the model (e.g., labels JSON, dict.txt).
|
|
12947
12981
|
* The downloader fetches from `url` and saves to `{modelsDir}/{filename}`.
|
|
12948
12982
|
*/
|
|
@@ -26539,7 +26573,7 @@ var FrameRefSchema = object({
|
|
|
26539
26573
|
timestamp: number(),
|
|
26540
26574
|
capturedAt: number().optional()
|
|
26541
26575
|
});
|
|
26542
|
-
var ModelFormatSchema$
|
|
26576
|
+
var ModelFormatSchema$2 = _enum([
|
|
26543
26577
|
"onnx",
|
|
26544
26578
|
"coreml",
|
|
26545
26579
|
"openvino",
|
|
@@ -26557,7 +26591,7 @@ var PipelineSlotSchema = _enum([
|
|
|
26557
26591
|
var PipelineEngineChoiceSchema = object({
|
|
26558
26592
|
runtime: literal("python"),
|
|
26559
26593
|
backend: string(),
|
|
26560
|
-
format: ModelFormatSchema$
|
|
26594
|
+
format: ModelFormatSchema$2,
|
|
26561
26595
|
device: string().optional()
|
|
26562
26596
|
});
|
|
26563
26597
|
/**
|
|
@@ -26614,10 +26648,7 @@ var PipelineTemplateSchema$1 = object({
|
|
|
26614
26648
|
var PipelineModelOptionSchema = object({
|
|
26615
26649
|
id: string(),
|
|
26616
26650
|
name: string(),
|
|
26617
|
-
formats: record(string(),
|
|
26618
|
-
downloaded: boolean(),
|
|
26619
|
-
sizeMB: number()
|
|
26620
|
-
})),
|
|
26651
|
+
formats: record(string(), PipelineModelFormatStatusSchema),
|
|
26621
26652
|
group: ModelVariantGroupSchema.optional(),
|
|
26622
26653
|
legacy: boolean().optional(),
|
|
26623
26654
|
provider: ModelProviderIdSchema.optional(),
|
|
@@ -26832,6 +26863,32 @@ var pipelineExecutorCapability = {
|
|
|
26832
26863
|
auth: "admin"
|
|
26833
26864
|
}),
|
|
26834
26865
|
/**
|
|
26866
|
+
* Auto tune (D745): the MODEL-BOUND thresholds (`bindsToModel` keys of
|
|
26867
|
+
* the object-detection root, and their binding keys) stored in THIS node's
|
|
26868
|
+
* per-camera detector settings — and, unless `dryRun`, remove them so the
|
|
26869
|
+
* running model's own defaults apply. Every other key of a camera's store
|
|
26870
|
+
* is kept. `nodeId` is the ROUTING key. `deviceIds` absent ⇒ every camera
|
|
26871
|
+
* with a store. A camera whose store could not be read is `refused`, never
|
|
26872
|
+
* reported as clean.
|
|
26873
|
+
*/
|
|
26874
|
+
clearModelBoundDeviceOverrides: method(object({
|
|
26875
|
+
nodeId: string(),
|
|
26876
|
+
deviceIds: array(number()).readonly().optional(),
|
|
26877
|
+
dryRun: boolean()
|
|
26878
|
+
}), object({
|
|
26879
|
+
entries: array(object({
|
|
26880
|
+
deviceId: number(),
|
|
26881
|
+
keys: array(string()).readonly()
|
|
26882
|
+
})).readonly(),
|
|
26883
|
+
refused: array(object({
|
|
26884
|
+
deviceId: number(),
|
|
26885
|
+
reason: string()
|
|
26886
|
+
})).readonly()
|
|
26887
|
+
}), {
|
|
26888
|
+
kind: "mutation",
|
|
26889
|
+
auth: "admin"
|
|
26890
|
+
}),
|
|
26891
|
+
/**
|
|
26835
26892
|
* Which of THIS node's inference devices the executor currently refuses,
|
|
26836
26893
|
* and why. `nodeId` is the ROUTING key (stripped by the generated router).
|
|
26837
26894
|
*
|
|
@@ -26926,12 +26983,12 @@ var pipelineExecutorCapability = {
|
|
|
26926
26983
|
downloadModel: method(object({
|
|
26927
26984
|
addonId: string(),
|
|
26928
26985
|
modelId: string(),
|
|
26929
|
-
format: ModelFormatSchema$
|
|
26986
|
+
format: ModelFormatSchema$2
|
|
26930
26987
|
}), DownloadModelResultSchema, { kind: "mutation" }),
|
|
26931
26988
|
deleteModel: method(object({
|
|
26932
26989
|
addonId: string(),
|
|
26933
26990
|
modelId: string(),
|
|
26934
|
-
format: ModelFormatSchema$
|
|
26991
|
+
format: ModelFormatSchema$2
|
|
26935
26992
|
}), object({ success: literal(true) }), { kind: "mutation" }),
|
|
26936
26993
|
/**
|
|
26937
26994
|
* Stateless single-frame execution. Callers (runner, benchmark) pass
|
|
@@ -27177,6 +27234,352 @@ var pipelineExecutorCapability = {
|
|
|
27177
27234
|
getDetectionConfigSchema: method(_void(), ConfigUISchemaNullableBridge)
|
|
27178
27235
|
}
|
|
27179
27236
|
};
|
|
27237
|
+
/**
|
|
27238
|
+
* Wire shapes of the Load balancing surface (D748): the session placement
|
|
27239
|
+
* policy, the atomic share write, the observed placement statistics, the
|
|
27240
|
+
* hardware share suggestion and the stale device pins.
|
|
27241
|
+
*/
|
|
27242
|
+
/**
|
|
27243
|
+
* How a new detection session picks its node and device.
|
|
27244
|
+
* - `least-loaded` — the historical rule: lowest `attached / weight`, a
|
|
27245
|
+
* constant node order at a tie (D37). An idle node always ties at 0, so a
|
|
27246
|
+
* weight only bites once a node already holds a session.
|
|
27247
|
+
* - `share` — the share of PARALLEL sessions is held to the weights, and a
|
|
27248
|
+
* full or drowning node yields to a free one (D748).
|
|
27249
|
+
*/
|
|
27250
|
+
var SessionPlacementPolicySchema = _enum(["least-loaded", "share"]);
|
|
27251
|
+
var LoadBalancingSharesInputSchema = object({
|
|
27252
|
+
/** nodeId → share (> 0). A node left out keeps its weight. */
|
|
27253
|
+
nodes: record(string(), number().positive()).default({}),
|
|
27254
|
+
/** nodeId → deviceKey → share (> 0). A device left out keeps its weight. */
|
|
27255
|
+
devices: record(string(), record(string(), number().positive())).default({})
|
|
27256
|
+
});
|
|
27257
|
+
var PlacementStatsInputSchema = object({
|
|
27258
|
+
/** Window the observed shares are averaged over (default 1 h, max 24 h). */
|
|
27259
|
+
windowMs: number().int().min(6e4).max(1440 * 60 * 1e3).default(3600 * 1e3) });
|
|
27260
|
+
var PlacementDeviceStatsSchema = object({
|
|
27261
|
+
deviceKey: string(),
|
|
27262
|
+
/** Sessions running on this device now. */
|
|
27263
|
+
sessionsNow: number(),
|
|
27264
|
+
/** Sessions started on this device inside the window. */
|
|
27265
|
+
sessionsStarted: number(),
|
|
27266
|
+
/** Time-weighted share of the node's parallel sessions over the window (0–1); null = no session ran. */
|
|
27267
|
+
observedShare: number().nullable()
|
|
27268
|
+
});
|
|
27269
|
+
var PlacementNodeStatsSchema = object({
|
|
27270
|
+
nodeId: string(),
|
|
27271
|
+
sessionsNow: number(),
|
|
27272
|
+
sessionsStarted: number(),
|
|
27273
|
+
/** Time-weighted share of the cluster's parallel sessions over the window (0–1); null = none ran. */
|
|
27274
|
+
observedShare: number().nullable(),
|
|
27275
|
+
/** Most sessions this node ran at once inside the window. */
|
|
27276
|
+
peakSessions: number(),
|
|
27277
|
+
/** Sessions a share election handed elsewhere because this node was full or drowning. */
|
|
27278
|
+
yieldsAway: number(),
|
|
27279
|
+
devices: array(PlacementDeviceStatsSchema).readonly()
|
|
27280
|
+
});
|
|
27281
|
+
/** A camera's device pin that the session path cannot honour. */
|
|
27282
|
+
var StaleDevicePinSchema = object({
|
|
27283
|
+
deviceId: number(),
|
|
27284
|
+
deviceKey: string(),
|
|
27285
|
+
/** `disabled` — the key exists on some node but is not enabled anywhere; `absent` — no node has it. */
|
|
27286
|
+
reason: _enum(["disabled", "absent"])
|
|
27287
|
+
});
|
|
27288
|
+
var PlacementStatsSchema = object({
|
|
27289
|
+
policy: SessionPlacementPolicySchema,
|
|
27290
|
+
windowMs: number(),
|
|
27291
|
+
/** How much of the window was actually observed (the hub keeps it in memory). */
|
|
27292
|
+
observedForMs: number(),
|
|
27293
|
+
sessionsNow: number(),
|
|
27294
|
+
/** Most parallel sessions across the cluster inside the window. */
|
|
27295
|
+
clusterPeakSessions: number(),
|
|
27296
|
+
nodes: array(PlacementNodeStatsSchema).readonly(),
|
|
27297
|
+
stalePins: array(StaleDevicePinSchema).readonly()
|
|
27298
|
+
});
|
|
27299
|
+
var SuggestSharesInputSchema = object({ headroom: number().min(.3).max(.5).default(.4) });
|
|
27300
|
+
var SuggestedDeviceShareSchema = object({
|
|
27301
|
+
deviceKey: string(),
|
|
27302
|
+
/** Share of the node (0–100, rounded). */
|
|
27303
|
+
share: number(),
|
|
27304
|
+
modelId: string().nullable(),
|
|
27305
|
+
/** Inferences per second at that model, from the measured table. */
|
|
27306
|
+
fps: number().nullable(),
|
|
27307
|
+
measured: boolean(),
|
|
27308
|
+
/** Advisory session cap: ⌊fps × (1 − headroom) / camera fps⌋. Never enforced. */
|
|
27309
|
+
suggestedMaxSessions: number().nullable()
|
|
27310
|
+
});
|
|
27311
|
+
var SuggestedNodeShareSchema = object({
|
|
27312
|
+
nodeId: string(),
|
|
27313
|
+
/** Share of the cluster (0–100, rounded); null = node skipped (offline, unknown hardware). */
|
|
27314
|
+
share: number().nullable(),
|
|
27315
|
+
/** Parallel sessions the node sustains at the suggested models with the headroom kept free. */
|
|
27316
|
+
capacitySessions: number(),
|
|
27317
|
+
devices: array(SuggestedDeviceShareSchema).readonly(),
|
|
27318
|
+
skippedReason: string().nullable()
|
|
27319
|
+
});
|
|
27320
|
+
var SuggestSharesResultSchema = object({
|
|
27321
|
+
headroom: number(),
|
|
27322
|
+
/** Camera detection rate the capacity is counted in (the fastest camera's fps). */
|
|
27323
|
+
cameraFps: number(),
|
|
27324
|
+
/** How many share → model → capacity rounds ran before the shares stopped moving (≤ 3). */
|
|
27325
|
+
iterations: number(),
|
|
27326
|
+
nodes: array(SuggestedNodeShareSchema).readonly()
|
|
27327
|
+
});
|
|
27328
|
+
/**
|
|
27329
|
+
* Where the node and device shares come from (D750).
|
|
27330
|
+
* - `auto` — computed by the system from the cluster's measured capacity at
|
|
27331
|
+
* the Auto tune models, and recomputed whenever a node or device joins,
|
|
27332
|
+
* leaves, is switched on or off, or changes model.
|
|
27333
|
+
* - `manual` — the operator's stored sliders. A node or device that cannot
|
|
27334
|
+
* take sessions gives its share to the others in proportion; the stored
|
|
27335
|
+
* values are never rewritten for that.
|
|
27336
|
+
*/
|
|
27337
|
+
var ShareSourceSchema = _enum(["auto", "manual"]);
|
|
27338
|
+
var SetShareSourceInputSchema = object({ source: ShareSourceSchema });
|
|
27339
|
+
object({
|
|
27340
|
+
nodes: record(string(), number()),
|
|
27341
|
+
devices: record(string(), record(string(), number()))
|
|
27342
|
+
});
|
|
27343
|
+
var EffectiveDeviceShareSchema = object({
|
|
27344
|
+
deviceKey: string(),
|
|
27345
|
+
/** Can take sessions now (enabled, available, can run the root). */
|
|
27346
|
+
eligible: boolean(),
|
|
27347
|
+
/** The share the source assigns, as a percentage of the node's devices. */
|
|
27348
|
+
configuredPct: number(),
|
|
27349
|
+
/** The share actually used, after an ineligible device's share went to the others. */
|
|
27350
|
+
effectivePct: number()
|
|
27351
|
+
});
|
|
27352
|
+
var EffectiveNodeShareSchema = object({
|
|
27353
|
+
nodeId: string(),
|
|
27354
|
+
eligible: boolean(),
|
|
27355
|
+
configuredPct: number(),
|
|
27356
|
+
effectivePct: number(),
|
|
27357
|
+
devices: array(EffectiveDeviceShareSchema).readonly()
|
|
27358
|
+
});
|
|
27359
|
+
var EffectiveSharesSchema = object({
|
|
27360
|
+
source: ShareSourceSchema,
|
|
27361
|
+
policy: SessionPlacementPolicySchema,
|
|
27362
|
+
/** `auto` with no computed answer yet: the stored sliders are used meanwhile. */
|
|
27363
|
+
autoPending: boolean(),
|
|
27364
|
+
/** When the automatic shares were last computed (ms epoch); null = never. */
|
|
27365
|
+
computedAt: number().nullable(),
|
|
27366
|
+
/** What made the system recompute them last. */
|
|
27367
|
+
trigger: string().nullable(),
|
|
27368
|
+
nodes: array(EffectiveNodeShareSchema).readonly(),
|
|
27369
|
+
/** The relative weights the election reads (before eligibility). */
|
|
27370
|
+
nodeWeights: record(string(), number()),
|
|
27371
|
+
deviceWeights: record(string(), record(string(), number()))
|
|
27372
|
+
});
|
|
27373
|
+
/**
|
|
27374
|
+
* The wire shapes of the Auto tune plan and apply (D745), used by the
|
|
27375
|
+
* `pipeline-orchestrator` cap. The recommender's own types
|
|
27376
|
+
* (`recommend.ts`, `demand.ts`) are the TS face of the same data; these
|
|
27377
|
+
* schemas are what crosses the cap boundary.
|
|
27378
|
+
*/
|
|
27379
|
+
var ModelFormatSchema$1 = _enum(MODEL_FORMATS);
|
|
27380
|
+
var HardwareClassIdSchema = _enum([
|
|
27381
|
+
"intel-core-ultra",
|
|
27382
|
+
"intel-n-series",
|
|
27383
|
+
"apple-m-base",
|
|
27384
|
+
"apple-m-pro",
|
|
27385
|
+
"unknown"
|
|
27386
|
+
]);
|
|
27387
|
+
var AcceleratorKindSchema = _enum([
|
|
27388
|
+
"intel-npu",
|
|
27389
|
+
"intel-igpu",
|
|
27390
|
+
"x86-cpu",
|
|
27391
|
+
"arm-cpu",
|
|
27392
|
+
"apple-ane",
|
|
27393
|
+
"coral"
|
|
27394
|
+
]);
|
|
27395
|
+
var RecommendationReasonSchema = discriminatedUnion("kind", [
|
|
27396
|
+
object({
|
|
27397
|
+
kind: literal("fits"),
|
|
27398
|
+
utilisation: number()
|
|
27399
|
+
}),
|
|
27400
|
+
object({
|
|
27401
|
+
kind: literal("tie-faster"),
|
|
27402
|
+
over: string(),
|
|
27403
|
+
recallDelta: number()
|
|
27404
|
+
}),
|
|
27405
|
+
object({
|
|
27406
|
+
kind: literal("stepped-down"),
|
|
27407
|
+
from: string(),
|
|
27408
|
+
to: string(),
|
|
27409
|
+
limitedBy: string()
|
|
27410
|
+
}),
|
|
27411
|
+
object({
|
|
27412
|
+
kind: literal("no-fit-lightest"),
|
|
27413
|
+
utilisation: number()
|
|
27414
|
+
}),
|
|
27415
|
+
object({
|
|
27416
|
+
kind: literal("derived-latency"),
|
|
27417
|
+
modelId: string()
|
|
27418
|
+
}),
|
|
27419
|
+
object({
|
|
27420
|
+
kind: literal("estimated-load"),
|
|
27421
|
+
observedForMs: number().nullable()
|
|
27422
|
+
}),
|
|
27423
|
+
object({ kind: literal("cpu-device") }),
|
|
27424
|
+
object({ kind: literal("coral-untouched") }),
|
|
27425
|
+
object({ kind: literal("device-disabled") }),
|
|
27426
|
+
object({ kind: literal("device-unavailable") }),
|
|
27427
|
+
object({ kind: literal("node-offline") }),
|
|
27428
|
+
object({ kind: literal("no-hardware-facts") }),
|
|
27429
|
+
object({
|
|
27430
|
+
kind: literal("no-measured-data"),
|
|
27431
|
+
hardwareClass: HardwareClassIdSchema
|
|
27432
|
+
}),
|
|
27433
|
+
object({
|
|
27434
|
+
kind: literal("no-family-build"),
|
|
27435
|
+
format: ModelFormatSchema$1
|
|
27436
|
+
})
|
|
27437
|
+
]);
|
|
27438
|
+
var DeviceDemandSchema = object({
|
|
27439
|
+
nodeId: string(),
|
|
27440
|
+
deviceKey: string(),
|
|
27441
|
+
demandFps: number(),
|
|
27442
|
+
maxCameraFps: number(),
|
|
27443
|
+
alwaysOnCameras: number(),
|
|
27444
|
+
onMotionSessions: number(),
|
|
27445
|
+
onMotionSource: _enum([
|
|
27446
|
+
"observed-24h",
|
|
27447
|
+
"estimate",
|
|
27448
|
+
"none"
|
|
27449
|
+
]),
|
|
27450
|
+
observedForMs: number().nullable(),
|
|
27451
|
+
/** How on-motion sessions were charged: per-device observation, or split by share (D748). */
|
|
27452
|
+
placement: SessionPlacementPolicySchema
|
|
27453
|
+
});
|
|
27454
|
+
var DeviceModelChoiceSchema = object({
|
|
27455
|
+
modelId: string(),
|
|
27456
|
+
p50Ms: number(),
|
|
27457
|
+
fps: number(),
|
|
27458
|
+
measured: boolean(),
|
|
27459
|
+
utilisation: number(),
|
|
27460
|
+
personRecall: number()
|
|
27461
|
+
});
|
|
27462
|
+
var DeviceRecommendationSchema = object({
|
|
27463
|
+
deviceKey: string(),
|
|
27464
|
+
accelerator: AcceleratorKindSchema.nullable(),
|
|
27465
|
+
enabled: boolean(),
|
|
27466
|
+
available: boolean(),
|
|
27467
|
+
demand: DeviceDemandSchema.nullable(),
|
|
27468
|
+
chosen: DeviceModelChoiceSchema.nullable(),
|
|
27469
|
+
reasons: array(RecommendationReasonSchema).readonly()
|
|
27470
|
+
});
|
|
27471
|
+
var NodeRecommendationSchema = object({
|
|
27472
|
+
nodeId: string(),
|
|
27473
|
+
reachable: boolean(),
|
|
27474
|
+
hardwareClass: HardwareClassIdSchema.nullable(),
|
|
27475
|
+
cpuModel: string().nullable(),
|
|
27476
|
+
skipped: boolean(),
|
|
27477
|
+
acceleratorModelId: string().nullable(),
|
|
27478
|
+
devices: array(DeviceRecommendationSchema).readonly(),
|
|
27479
|
+
reasons: array(RecommendationReasonSchema).readonly()
|
|
27480
|
+
});
|
|
27481
|
+
var ModelPinChangeSchema = object({
|
|
27482
|
+
stepId: string(),
|
|
27483
|
+
before: string().nullable(),
|
|
27484
|
+
after: string().nullable()
|
|
27485
|
+
});
|
|
27486
|
+
var NodeDeviceChangeSchema = object({
|
|
27487
|
+
nodeId: string(),
|
|
27488
|
+
deviceKey: string(),
|
|
27489
|
+
madeExplicit: boolean(),
|
|
27490
|
+
modelPins: array(ModelPinChangeSchema).readonly(),
|
|
27491
|
+
thresholds: array(object({
|
|
27492
|
+
stepId: string(),
|
|
27493
|
+
keys: array(string()).readonly()
|
|
27494
|
+
})).readonly()
|
|
27495
|
+
});
|
|
27496
|
+
var CameraOverrideClearSchema = object({
|
|
27497
|
+
deviceId: number(),
|
|
27498
|
+
source: _enum(["step-override", "wholesale"]),
|
|
27499
|
+
nodeId: string(),
|
|
27500
|
+
deviceKey: string().nullable(),
|
|
27501
|
+
stepId: string(),
|
|
27502
|
+
modelIdBefore: string().nullable(),
|
|
27503
|
+
keys: array(string()).readonly()
|
|
27504
|
+
});
|
|
27505
|
+
var DetectorStoreClearSchema = object({
|
|
27506
|
+
deviceId: number(),
|
|
27507
|
+
keys: array(string()).readonly()
|
|
27508
|
+
});
|
|
27509
|
+
var AutoTuneWarningSchema = discriminatedUnion("kind", [
|
|
27510
|
+
object({
|
|
27511
|
+
kind: literal("detector-store-cluster-wide"),
|
|
27512
|
+
skippedNodes: array(string()).readonly()
|
|
27513
|
+
}),
|
|
27514
|
+
object({
|
|
27515
|
+
kind: literal("detector-store-unreadable"),
|
|
27516
|
+
error: string()
|
|
27517
|
+
}),
|
|
27518
|
+
object({
|
|
27519
|
+
kind: literal("coral-enabled"),
|
|
27520
|
+
nodeId: string(),
|
|
27521
|
+
deviceKey: string()
|
|
27522
|
+
})
|
|
27523
|
+
]);
|
|
27524
|
+
var AutoTuneOptionsSchema = object({
|
|
27525
|
+
/** Share of each accelerator's throughput kept free (0.3–0.5). */
|
|
27526
|
+
headroom: number().min(.3).max(.5).default(.4),
|
|
27527
|
+
/**
|
|
27528
|
+
* What-if shares (D748): plan as if these node/device shares were stored
|
|
27529
|
+
* and the policy were `share`. Absent = the stored shares under the stored
|
|
27530
|
+
* policy. A what-if plan is for display; apply always re-plans from what
|
|
27531
|
+
* is stored.
|
|
27532
|
+
*/
|
|
27533
|
+
shares: LoadBalancingSharesInputSchema.optional()
|
|
27534
|
+
});
|
|
27535
|
+
var AutoTunePlanSchema = object({
|
|
27536
|
+
/** Hash of everything the apply will write — the apply refuses a different one. */
|
|
27537
|
+
planHash: string(),
|
|
27538
|
+
family: literal("yolov9"),
|
|
27539
|
+
headroom: number(),
|
|
27540
|
+
/** Planned under what-if shares (D748): for display — apply refuses it as stale. */
|
|
27541
|
+
whatIf: boolean(),
|
|
27542
|
+
generatedAt: number(),
|
|
27543
|
+
nodes: array(NodeRecommendationSchema).readonly(),
|
|
27544
|
+
nodeChanges: array(NodeDeviceChangeSchema).readonly(),
|
|
27545
|
+
cameraClears: array(CameraOverrideClearSchema).readonly(),
|
|
27546
|
+
detectorStoreClears: array(DetectorStoreClearSchema).readonly(),
|
|
27547
|
+
warnings: array(AutoTuneWarningSchema).readonly()
|
|
27548
|
+
});
|
|
27549
|
+
var AutoTuneApplyInputSchema = object({
|
|
27550
|
+
planHash: string(),
|
|
27551
|
+
headroom: number().min(.3).max(.5).default(.4)
|
|
27552
|
+
});
|
|
27553
|
+
var AutoTunePhaseResultSchema = object({
|
|
27554
|
+
phase: _enum([
|
|
27555
|
+
"download",
|
|
27556
|
+
"camera-overrides",
|
|
27557
|
+
"detector-thresholds",
|
|
27558
|
+
"node-models",
|
|
27559
|
+
"redispatch"
|
|
27560
|
+
]),
|
|
27561
|
+
ok: boolean(),
|
|
27562
|
+
detail: string()
|
|
27563
|
+
});
|
|
27564
|
+
var AutoTuneApplyResultSchema = discriminatedUnion("kind", [
|
|
27565
|
+
object({
|
|
27566
|
+
kind: literal("applied"),
|
|
27567
|
+
planHash: string(),
|
|
27568
|
+
phases: array(AutoTunePhaseResultSchema).readonly()
|
|
27569
|
+
}),
|
|
27570
|
+
object({
|
|
27571
|
+
kind: literal("aborted"),
|
|
27572
|
+
phases: array(AutoTunePhaseResultSchema).readonly()
|
|
27573
|
+
}),
|
|
27574
|
+
object({
|
|
27575
|
+
kind: literal("stale"),
|
|
27576
|
+
plan: AutoTunePlanSchema
|
|
27577
|
+
}),
|
|
27578
|
+
object({
|
|
27579
|
+
kind: literal("refused"),
|
|
27580
|
+
reason: _enum(["apply-in-progress"])
|
|
27581
|
+
})
|
|
27582
|
+
]);
|
|
27180
27583
|
object({
|
|
27181
27584
|
activeCameras: number(),
|
|
27182
27585
|
throttledCameras: number(),
|
|
@@ -28549,7 +28952,6 @@ var CameraStepOverridePatchSchema = object({
|
|
|
28549
28952
|
settings: record(string(), unknown()).readonly().optional()
|
|
28550
28953
|
});
|
|
28551
28954
|
var CameraPipelineSettingsSchema = object({
|
|
28552
|
-
pinnedAgentNodeId: string().optional(),
|
|
28553
28955
|
stepToggles: record(string(), boolean()).optional(),
|
|
28554
28956
|
stepOverridesByDevice: record(string(), record(string(), record(string(), CameraStepOverridePatchSchema))).optional(),
|
|
28555
28957
|
pipelineByAgent: record(string(), CameraPipelineForAgentSchema).optional()
|
|
@@ -29048,12 +29450,6 @@ method(object({
|
|
|
29048
29450
|
}), object({ success: literal(true) }), {
|
|
29049
29451
|
kind: "mutation",
|
|
29050
29452
|
auth: "admin"
|
|
29051
|
-
}), method(object({
|
|
29052
|
-
agentNodeId: string(),
|
|
29053
|
-
detectWeight: number().positive().nullable()
|
|
29054
|
-
}), object({ success: literal(true) }), {
|
|
29055
|
-
kind: "mutation",
|
|
29056
|
-
auth: "admin"
|
|
29057
29453
|
}), method(object({
|
|
29058
29454
|
agentNodeId: string(),
|
|
29059
29455
|
detect: boolean().nullable().optional(),
|
|
@@ -29095,6 +29491,15 @@ method(object({
|
|
|
29095
29491
|
}), {
|
|
29096
29492
|
kind: "mutation",
|
|
29097
29493
|
auth: "admin"
|
|
29494
|
+
}), method(AutoTuneOptionsSchema, AutoTunePlanSchema, { auth: "admin" }), method(AutoTuneApplyInputSchema, AutoTuneApplyResultSchema, {
|
|
29495
|
+
kind: "mutation",
|
|
29496
|
+
auth: "admin"
|
|
29497
|
+
}), method(LoadBalancingSharesInputSchema, object({ success: literal(true) }), {
|
|
29498
|
+
kind: "mutation",
|
|
29499
|
+
auth: "admin"
|
|
29500
|
+
}), method(PlacementStatsInputSchema, PlacementStatsSchema, { auth: "admin" }), method(SuggestSharesInputSchema, SuggestSharesResultSchema, { auth: "admin" }), method(_void(), EffectiveSharesSchema, { auth: "admin" }), method(SetShareSourceInputSchema, object({ success: literal(true) }), {
|
|
29501
|
+
kind: "mutation",
|
|
29502
|
+
auth: "admin"
|
|
29098
29503
|
}), method(object({ deviceId: number() }), CameraPipelineSettingsSchema.nullable()), method(object({
|
|
29099
29504
|
deviceId: number(),
|
|
29100
29505
|
addonId: string(),
|
|
@@ -41168,6 +41573,8 @@ Object.freeze({
|
|
|
41168
41573
|
vehicle: .65,
|
|
41169
41574
|
animal: .65
|
|
41170
41575
|
});
|
|
41576
|
+
var HF_REPO = "camstack/camstack-models";
|
|
41577
|
+
`${HF_REPO}`;
|
|
41171
41578
|
/**
|
|
41172
41579
|
* Accessory device helpers — shared across drivers.
|
|
41173
41580
|
*
|
|
@@ -45704,6 +46111,12 @@ Object.freeze({
|
|
|
45704
46111
|
addonId: null,
|
|
45705
46112
|
access: "delete"
|
|
45706
46113
|
},
|
|
46114
|
+
"pipelineExecutor.clearModelBoundDeviceOverrides": {
|
|
46115
|
+
capName: "pipeline-executor",
|
|
46116
|
+
capScope: "system",
|
|
46117
|
+
addonId: null,
|
|
46118
|
+
access: "delete"
|
|
46119
|
+
},
|
|
45707
46120
|
"pipelineExecutor.deleteModel": {
|
|
45708
46121
|
capName: "pipeline-executor",
|
|
45709
46122
|
capScope: "system",
|
|
@@ -45920,6 +46333,12 @@ Object.freeze({
|
|
|
45920
46333
|
addonId: null,
|
|
45921
46334
|
access: "view"
|
|
45922
46335
|
},
|
|
46336
|
+
"pipelineOrchestrator.applyAutoTune": {
|
|
46337
|
+
capName: "pipeline-orchestrator",
|
|
46338
|
+
capScope: "system",
|
|
46339
|
+
addonId: null,
|
|
46340
|
+
access: "create"
|
|
46341
|
+
},
|
|
45923
46342
|
"pipelineOrchestrator.applyDeviceSettingsPatch": {
|
|
45924
46343
|
capName: "pipeline-orchestrator",
|
|
45925
46344
|
capScope: "system",
|
|
@@ -46034,6 +46453,12 @@ Object.freeze({
|
|
|
46034
46453
|
addonId: null,
|
|
46035
46454
|
access: "view"
|
|
46036
46455
|
},
|
|
46456
|
+
"pipelineOrchestrator.getEffectiveShares": {
|
|
46457
|
+
capName: "pipeline-orchestrator",
|
|
46458
|
+
capScope: "system",
|
|
46459
|
+
addonId: null,
|
|
46460
|
+
access: "view"
|
|
46461
|
+
},
|
|
46037
46462
|
"pipelineOrchestrator.getGlobalMetrics": {
|
|
46038
46463
|
capName: "pipeline-orchestrator",
|
|
46039
46464
|
capScope: "system",
|
|
@@ -46070,6 +46495,12 @@ Object.freeze({
|
|
|
46070
46495
|
addonId: null,
|
|
46071
46496
|
access: "view"
|
|
46072
46497
|
},
|
|
46498
|
+
"pipelineOrchestrator.getPlacementStats": {
|
|
46499
|
+
capName: "pipeline-orchestrator",
|
|
46500
|
+
capScope: "system",
|
|
46501
|
+
addonId: null,
|
|
46502
|
+
access: "view"
|
|
46503
|
+
},
|
|
46073
46504
|
"pipelineOrchestrator.getReconcileFromDiskStatus": {
|
|
46074
46505
|
capName: "pipeline-orchestrator",
|
|
46075
46506
|
capScope: "system",
|
|
@@ -46094,6 +46525,12 @@ Object.freeze({
|
|
|
46094
46525
|
addonId: null,
|
|
46095
46526
|
access: "create"
|
|
46096
46527
|
},
|
|
46528
|
+
"pipelineOrchestrator.planAutoTune": {
|
|
46529
|
+
capName: "pipeline-orchestrator",
|
|
46530
|
+
capScope: "system",
|
|
46531
|
+
addonId: null,
|
|
46532
|
+
access: "view"
|
|
46533
|
+
},
|
|
46097
46534
|
"pipelineOrchestrator.rebalance": {
|
|
46098
46535
|
capName: "pipeline-orchestrator",
|
|
46099
46536
|
capScope: "system",
|
|
@@ -46154,12 +46591,6 @@ Object.freeze({
|
|
|
46154
46591
|
addonId: null,
|
|
46155
46592
|
access: "create"
|
|
46156
46593
|
},
|
|
46157
|
-
"pipelineOrchestrator.setAgentDetectWeight": {
|
|
46158
|
-
capName: "pipeline-orchestrator",
|
|
46159
|
-
capScope: "system",
|
|
46160
|
-
addonId: null,
|
|
46161
|
-
access: "create"
|
|
46162
|
-
},
|
|
46163
46594
|
"pipelineOrchestrator.setAgentInferenceDevices": {
|
|
46164
46595
|
capName: "pipeline-orchestrator",
|
|
46165
46596
|
capScope: "system",
|
|
@@ -46214,12 +46645,30 @@ Object.freeze({
|
|
|
46214
46645
|
addonId: null,
|
|
46215
46646
|
access: "create"
|
|
46216
46647
|
},
|
|
46648
|
+
"pipelineOrchestrator.setLoadBalancingShares": {
|
|
46649
|
+
capName: "pipeline-orchestrator",
|
|
46650
|
+
capScope: "system",
|
|
46651
|
+
addonId: null,
|
|
46652
|
+
access: "create"
|
|
46653
|
+
},
|
|
46217
46654
|
"pipelineOrchestrator.setPipelineDevicePin": {
|
|
46218
46655
|
capName: "pipeline-orchestrator",
|
|
46219
46656
|
capScope: "system",
|
|
46220
46657
|
addonId: null,
|
|
46221
46658
|
access: "create"
|
|
46222
46659
|
},
|
|
46660
|
+
"pipelineOrchestrator.setShareSource": {
|
|
46661
|
+
capName: "pipeline-orchestrator",
|
|
46662
|
+
capScope: "system",
|
|
46663
|
+
addonId: null,
|
|
46664
|
+
access: "create"
|
|
46665
|
+
},
|
|
46666
|
+
"pipelineOrchestrator.suggestShares": {
|
|
46667
|
+
capName: "pipeline-orchestrator",
|
|
46668
|
+
capScope: "system",
|
|
46669
|
+
addonId: null,
|
|
46670
|
+
access: "view"
|
|
46671
|
+
},
|
|
46223
46672
|
"pipelineOrchestrator.unassignAudio": {
|
|
46224
46673
|
capName: "pipeline-orchestrator",
|
|
46225
46674
|
capScope: "system",
|
|
@@ -51516,6 +51965,11 @@ Object.freeze({
|
|
|
51516
51965
|
form: "single",
|
|
51517
51966
|
optional: false
|
|
51518
51967
|
}],
|
|
51968
|
+
"pipelineExecutor.clearModelBoundDeviceOverrides": [{
|
|
51969
|
+
name: "deviceIds",
|
|
51970
|
+
form: "array",
|
|
51971
|
+
optional: true
|
|
51972
|
+
}],
|
|
51519
51973
|
"pipelineExecutor.runPipeline": [{
|
|
51520
51974
|
name: "deviceId",
|
|
51521
51975
|
form: "single",
|
|
@@ -53422,41 +53876,6 @@ function stepModelRunsOnFormat(models, modelId, format) {
|
|
|
53422
53876
|
}
|
|
53423
53877
|
return models.some((m) => m.legacy !== true && hasBuild(m, format));
|
|
53424
53878
|
}
|
|
53425
|
-
/**
|
|
53426
|
-
* Model-bound step settings (D738): an operator value that is only meaningful
|
|
53427
|
-
* for ONE model, stored together with that model's id.
|
|
53428
|
-
*
|
|
53429
|
-
* The per-class confidence floors are the case it exists for. A score is a
|
|
53430
|
-
* property of one detector's output scale — on this hub the median score of a
|
|
53431
|
-
* correct person was 0.78 on `yolov9m-320-int8`, 0.68 on `yolo26s-320-int8`,
|
|
53432
|
-
* 0.40 on `yolo26n-320-int8` and 0.89 on `yolo26s` (640) — so a floor tuned on
|
|
53433
|
-
* one model is wrong on the next. The DEFAULT of such a field belongs to the
|
|
53434
|
-
* model (the catalog entry); an operator OVERRIDE belongs to the model it was
|
|
53435
|
-
* made for.
|
|
53436
|
-
*
|
|
53437
|
-
* The binding is checked at READ time against the model that RUNS, never
|
|
53438
|
-
* enforced by a write on the model-change path: a model can change without any
|
|
53439
|
-
* operator write at all (an unpinned root follows the elected device's
|
|
53440
|
-
* hardware-aware default, D736), and an event-driven reset could be dropped
|
|
53441
|
-
* (events are telemetry, D8/D11). So:
|
|
53442
|
-
*
|
|
53443
|
-
* effective = override when the stored binding names the running model
|
|
53444
|
-
* | override when no binding is stored (a legacy / programmatic
|
|
53445
|
-
* value — it applies to whatever runs, as before D738)
|
|
53446
|
-
* | the running model's default, when it declares one
|
|
53447
|
-
* | the field's global default.
|
|
53448
|
-
*
|
|
53449
|
-
* Storage shape: the value stays a plain number under its own key (every
|
|
53450
|
-
* reader of the raw settings bag keeps working), and the binding is a SIBLING
|
|
53451
|
-
* key, {@link modelBindingKey}. Both are flat so the shallow per-key merges of
|
|
53452
|
-
* the settings layers (node fold, camera override) carry a value and its
|
|
53453
|
-
* binding together whenever one layer writes both — which every writer here
|
|
53454
|
-
* does.
|
|
53455
|
-
*
|
|
53456
|
-
* Lives in the bare `@camstack/types` entry, which every addon bundles, so the
|
|
53457
|
-
* runner (`addon-pipeline`) and the editors (`ui-library`, `addon-admin-ui`)
|
|
53458
|
-
* apply the same rule.
|
|
53459
|
-
*/
|
|
53460
53879
|
/** Suffix of the sibling key that names the model a stored value was made for. */
|
|
53461
53880
|
var MODEL_BINDING_SUFFIX = "ModelId";
|
|
53462
53881
|
/** `minConfidencePerson` → `minConfidencePersonModelId`. */
|
|
@@ -53516,6 +53935,17 @@ function applyModelBoundSettings(settings, boundKeys, runningModelId) {
|
|
|
53516
53935
|
}
|
|
53517
53936
|
return out;
|
|
53518
53937
|
}
|
|
53938
|
+
/**
|
|
53939
|
+
* The keys of every `bindsToModel` field of a step's config schema, groups
|
|
53940
|
+
* flattened (D738). One definition for the runner (which applies the binding)
|
|
53941
|
+
* and the orchestrator's Auto tune (which clears those overrides, D745).
|
|
53942
|
+
*/
|
|
53943
|
+
function collectModelBoundKeys(fields) {
|
|
53944
|
+
return fields.flatMap((field) => {
|
|
53945
|
+
if (field.type === "group") return collectModelBoundKeys(field.fields);
|
|
53946
|
+
return "key" in field && "bindsToModel" in field && field.bindsToModel === true ? [field.key] : [];
|
|
53947
|
+
});
|
|
53948
|
+
}
|
|
53519
53949
|
/** Side of the square, as a multiple of the face box's longer side. */
|
|
53520
53950
|
var ROOT_FACE_REFINE_SCALE = 1.6;
|
|
53521
53951
|
/**
|
|
@@ -54950,6 +55380,12 @@ Object.defineProperty(exports, "G711_SCALE_CORRECTION_DB", {
|
|
|
54950
55380
|
return G711_SCALE_CORRECTION_DB;
|
|
54951
55381
|
}
|
|
54952
55382
|
});
|
|
55383
|
+
Object.defineProperty(exports, "HF_REPO", {
|
|
55384
|
+
enumerable: true,
|
|
55385
|
+
get: function() {
|
|
55386
|
+
return HF_REPO;
|
|
55387
|
+
}
|
|
55388
|
+
});
|
|
54953
55389
|
Object.defineProperty(exports, "LABEL_SUPPLY_MACRO", {
|
|
54954
55390
|
enumerable: true,
|
|
54955
55391
|
get: function() {
|
|
@@ -55154,6 +55590,12 @@ Object.defineProperty(exports, "clipExportFailureOf", {
|
|
|
55154
55590
|
return clipExportFailureOf;
|
|
55155
55591
|
}
|
|
55156
55592
|
});
|
|
55593
|
+
Object.defineProperty(exports, "collectModelBoundKeys", {
|
|
55594
|
+
enumerable: true,
|
|
55595
|
+
get: function() {
|
|
55596
|
+
return collectModelBoundKeys;
|
|
55597
|
+
}
|
|
55598
|
+
});
|
|
55157
55599
|
Object.defineProperty(exports, "containingParentIndex", {
|
|
55158
55600
|
enumerable: true,
|
|
55159
55601
|
get: function() {
|
|
@@ -55460,6 +55902,12 @@ Object.defineProperty(exports, "modeMayWrite", {
|
|
|
55460
55902
|
return modeMayWrite;
|
|
55461
55903
|
}
|
|
55462
55904
|
});
|
|
55905
|
+
Object.defineProperty(exports, "modelBindingKey", {
|
|
55906
|
+
enumerable: true,
|
|
55907
|
+
get: function() {
|
|
55908
|
+
return modelBindingKey;
|
|
55909
|
+
}
|
|
55910
|
+
});
|
|
55463
55911
|
Object.defineProperty(exports, "motionDetectionCapability", {
|
|
55464
55912
|
enumerable: true,
|
|
55465
55913
|
get: function() {
|