@trillboards/edge-sdk 0.2.61 → 0.2.63

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 (60) hide show
  1. package/deploy/litertlm/test_trillboards_litertlm_shim.py +132 -0
  2. package/deploy/litertlm/trillboards-litertlm-shim.pth +1 -0
  3. package/deploy/litertlm/trillboards_litertlm_shim.py +214 -0
  4. package/deploy/macos/bench-local-vlm.sh +8 -4
  5. package/deploy/macos/build-macos-pkg.sh +4 -0
  6. package/deploy/macos/scripts/setup-litertlm.sh +99 -2
  7. package/deploy/systemd/setup-litertlm.sh +99 -2
  8. package/deploy/windows/build-windows.ps1 +4 -0
  9. package/deploy/windows/register-litertlm-task.ps1 +22 -0
  10. package/deploy/windows/setup-litertlm.ps1 +131 -3
  11. package/deploy/windows/trillboards-edge.cmd +19 -0
  12. package/dist/CloudSensingManager.d.ts +61 -0
  13. package/dist/CloudSensingManager.d.ts.map +1 -1
  14. package/dist/CloudSensingManager.js +52 -30
  15. package/dist/CloudSensingManager.js.map +1 -1
  16. package/dist/EdgeAgent.js +1 -1
  17. package/dist/LiteRtVlmProvider.d.ts +74 -7
  18. package/dist/LiteRtVlmProvider.d.ts.map +1 -1
  19. package/dist/LiteRtVlmProvider.js.map +1 -1
  20. package/dist/MosaicSource.d.ts +18 -0
  21. package/dist/MosaicSource.d.ts.map +1 -1
  22. package/dist/MosaicSource.js +23 -0
  23. package/dist/MosaicSource.js.map +1 -1
  24. package/dist/analyzeCostObserver.d.ts +96 -0
  25. package/dist/analyzeCostObserver.d.ts.map +1 -0
  26. package/dist/analyzeCostObserver.js +130 -0
  27. package/dist/analyzeCostObserver.js.map +1 -0
  28. package/dist/connectorCadence.d.ts +286 -57
  29. package/dist/connectorCadence.d.ts.map +1 -1
  30. package/dist/connectorCadence.js +313 -61
  31. package/dist/connectorCadence.js.map +1 -1
  32. package/dist/deployedCadence.d.ts +8 -2
  33. package/dist/deployedCadence.d.ts.map +1 -1
  34. package/dist/deployedCadence.js +6 -3
  35. package/dist/deployedCadence.js.map +1 -1
  36. package/dist/deployedCadenceSource.d.ts +10 -0
  37. package/dist/deployedCadenceSource.d.ts.map +1 -1
  38. package/dist/deployedCadenceSource.js +11 -0
  39. package/dist/deployedCadenceSource.js.map +1 -1
  40. package/dist/diagnose.d.ts +1 -1
  41. package/dist/diagnose.js +1 -1
  42. package/dist/localInferenceSchema.d.ts +8 -3
  43. package/dist/localInferenceSchema.d.ts.map +1 -1
  44. package/dist/localInferenceSchema.js +8 -3
  45. package/dist/localInferenceSchema.js.map +1 -1
  46. package/dist/localSensing.d.ts +22 -1
  47. package/dist/localSensing.d.ts.map +1 -1
  48. package/dist/localSensing.js +101 -7
  49. package/dist/localSensing.js.map +1 -1
  50. package/dist/localVlmBench.d.ts +82 -0
  51. package/dist/localVlmBench.d.ts.map +1 -1
  52. package/dist/localVlmBench.js +88 -0
  53. package/dist/localVlmBench.js.map +1 -1
  54. package/dist/sensingCatchRate.d.ts.map +1 -1
  55. package/dist/sensingCatchRate.js +75 -10
  56. package/dist/sensingCatchRate.js.map +1 -1
  57. package/dist/sensingRunMode.d.ts.map +1 -1
  58. package/dist/sensingRunMode.js +26 -2
  59. package/dist/sensingRunMode.js.map +1 -1
  60. package/package.json +1 -1
@@ -26,6 +26,28 @@ $TaskName = "TrillboardsLiteRtLm"
26
26
  $UserId = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
27
27
  # litert-lm serve --host 127.0.0.1 --port <port> (loopback only -- the connector
28
28
  # is local; never expose the model server off-box).
29
+ #
30
+ # THE SERVE'S OWN LOG IS DISCARDED ON WINDOWS, AND ONLY ON WINDOWS. A Scheduled
31
+ # Task has no stdout, so everything `litert-lm serve` prints goes nowhere. The
32
+ # other two platforms keep it: the macOS LaunchAgent sets StandardOutPath /
33
+ # StandardErrorPath (com.trillboards.litertlm.plist), and the unit sets
34
+ # StandardOutput=journal (trillboards-litertlm.service). `litert-lm serve` has no
35
+ # --log-file of its own -- only --verbose -- so redirection is the only route.
36
+ #
37
+ # This is not cosmetic. On 2026-08-19 windows-latest could not complete a single
38
+ # frame on the shipped config (run 32227929611: both provisioner probes died with
39
+ # connection-level errors, then two 12-minute request timeouts), and the reason is
40
+ # STILL unknown for exactly this reason -- the one process that knows why wrote
41
+ # its explanation to a handle nobody was holding.
42
+ #
43
+ # DO NOT "fix" this by wrapping the action in cmd.exe /c "... >> log 2>&1". The
44
+ # stop path below filters Win32_Process on Name = python.exe|litert-lm.exe|
45
+ # pythonw.exe, so a cmd.exe parent is invisible to it and would be orphaned on
46
+ # every re-register, and Task Scheduler's restart-on-failure would then be
47
+ # watching the wrapper instead of the server. Capturing this needs either an
48
+ # upstream --log-file or a purpose-built launcher that keeps the image name, and
49
+ # it must be proved against the S4U/boot-trigger ladder (the 0.2.17 incident)
50
+ # before it ships.
29
51
  $argument = 'serve --host 127.0.0.1 --port ' + $Port
30
52
  $Action = New-ScheduledTaskAction -Execute $LitertLmPath -Argument $argument
31
53
 
@@ -138,8 +138,19 @@ function Test-ServeHealthy {
138
138
  # `litert-lm serve` takes NO flags for any of this: serve accepts only
139
139
  # --host/--port/--api/--cors-origin/--verbose. Every engine knob it honours comes
140
140
  # from $LITERT_LM_DIR\config.json, merged per model id by
141
- # litert_lm_cli.config.get_model_config. So this file IS the tuning surface and
142
- # the serve stays stock.
141
+ # litert_lm_cli.config.get_model_config. So this file IS the tuning surface for
142
+ # everything it can express, and the serve binary stays stock: we pass it no
143
+ # flags and we modify none of its files.
144
+ #
145
+ # ONE knob is NOT expressible there, and it is the largest one left. Every
146
+ # request the serve handles gets ConstrainedDecodingConfig(enable=True, ...)
147
+ # built for it unconditionally -- enable is True even when the caller sent no
148
+ # response_format and the generation is therefore unconstrained -- so the native
149
+ # conversation-create builds constraint machinery for a grammar nothing will
150
+ # use, once per frame. config_schema.json on the pinned 0.16.0 has 17 keys and
151
+ # NONE reaches it; no request field reaches it either, and 0.15.0 and 0.16.1
152
+ # construct it identically, so a version move does not reach it. That is why
153
+ # Install-LitertlmShim below exists -- see it for the measurement.
143
154
  #
144
155
  # MEASURED (M4 Max 12P+4E/48G, litert-lm 0.16.0, Gemma 4 E2B, delegate asserted
145
156
  # GPU from the native log, 16 warm-ups, arms interleaved, operator/SOP field set,
@@ -169,7 +180,22 @@ function Write-LitertlmConfig {
169
180
  $cfg = [ordered]@{ models = [ordered]@{ $ModelId = $model } }
170
181
  $path = Get-LitertlmConfigPath
171
182
  $tmp = "$path.tmp"
172
- ($cfg | ConvertTo-Json -Depth 6) | Set-Content -LiteralPath $tmp -Encoding UTF8
183
+ # UTF-8 WITHOUT a BOM, written explicitly rather than via -Encoding.
184
+ #
185
+ # `Set-Content -Encoding UTF8` emits a BOM on Windows PowerShell 5.1 (it is
186
+ # BOM-less only on PowerShell 7+), and this script runs under whichever host
187
+ # the installer happens to invoke. litert-lm parses this file with a plain
188
+ # `json.load`, which REFUSES a BOM:
189
+ # Failed to parse config.json: Unexpected UTF-8 BOM (decode using utf-8-sig)
190
+ # That is a 500 on EVERY inference, not a degraded mode -- and because
191
+ # /v1/models answers 200 without building an engine, the install still looked
192
+ # healthy. Measured on windows-latest 2026-08-19, run 32223243603: 0 frames
193
+ # out of a 3-arm matrix, every arm HTTP 500. The macOS and Linux
194
+ # provisioners write this file with `printf` and were never affected.
195
+ [System.IO.File]::WriteAllText(
196
+ $tmp,
197
+ ($cfg | ConvertTo-Json -Depth 6),
198
+ (New-Object System.Text.UTF8Encoding($false)))
173
199
  Move-Item -LiteralPath $tmp -Destination $path -Force
174
200
  $label = if ($VisionBackend) { $VisionBackend } else { "cpu-default" }
175
201
  Log "wrote $path (vision_backend=$label, speculative_decoding=true)"
@@ -449,6 +475,90 @@ if ((Test-LitertLmCli) -and ($installedLitertLmVersion -eq $LitertLmVersion)) {
449
475
  Log "litert-lm CLI repaired successfully at $(Get-LitertLmVersion)"
450
476
  }
451
477
 
478
+ # -- The one knob config.json cannot express -----------------------------------
479
+ #
480
+ # `litert-lm serve` builds ConstrainedDecodingConfig(enable=True, provider=...)
481
+ # for EVERY request, at both openai_handler.py construction sites, with enable
482
+ # hardcoded True -- so a request that carried no response_format, which is every
483
+ # request the connector sends, still makes the native conversation-create build
484
+ # constraint machinery for a grammar nothing will use. It is rebuilt per request
485
+ # because the serve creates one conversation per request.
486
+ #
487
+ # MEASURED (M4 Max 16c/48G, litert-lm 0.16.0, Gemma 4 E2B, GPU/Metal, vision_backend
488
+ # =gpu + speculative_decoding=true, operator/SOP field set, the two committed CCTV
489
+ # fixtures, arms alternated sample-by-sample with the leading arm rotated each
490
+ # round, load average 22-25):
491
+ #
492
+ # in-process, one engine, n=10 pairs
493
+ # arm create_conversation send_message total
494
+ # stock 0.717 s 0.560 s 1.275 s
495
+ # without it 0.001 s 0.603 s 0.604 s
496
+ # paired 2.194x (min 2.040, max 2.284); generations BYTE-IDENTICAL 10/10;
497
+ # prefill 493 / decode 58 on both arms
498
+ #
499
+ # through two stock serves on two ports, interleaved, n=16 pairs
500
+ # 1.309 s -> 0.592 s p50 (p95 3.664 -> 0.965), paired 2.42x (min 2.174, max
501
+ # 4.657), 16/16 schema-valid and 16/16 byte-identical on both arms
502
+ #
503
+ # bench-local-vlm.mjs --arms gpu-sop, 16 warm-ups, n=8, back to back
504
+ # 1.32 s/frame (2,727 analyses/hour) -> 0.72 s/frame (5,000/hour), 8/8
505
+ # schema-valid and 83.3% field accuracy on BOTH arms
506
+ #
507
+ # A speed change, not an answer change -- the same bar speculative_decoding had
508
+ # to clear. The RATIO is itself load-dependent (3.734x at 0.0% CPU idle vs 2.42x
509
+ # at load 25, because the removed work is CPU-bound and the retained work is
510
+ # GPU-bound), so quote the near-idle figure.
511
+ #
512
+ # We do NOT patch upstream. Two files are ADDED to the litert-lm tool venv's
513
+ # site-packages: our shim, and a one-line .pth that imports it. Every upstream
514
+ # file stays byte-identical, the Scheduled Task's action is untouched (so the
515
+ # model OTA's `schtasks /End; /Run /TN TrillboardsLiteRtLm` still finds the same
516
+ # task), and a serve started by hand gets the fix too. It fails OPEN: any
517
+ # failure leaves stock behaviour and prints one line to the serve's own log, and
518
+ # TRILLBOARDS_LITERTLM_SHIM=0 disables it without uninstalling anything.
519
+ #
520
+ # Runs UNCONDITIONALLY, never inside the install/repair branch: `uv tool install
521
+ # --force` rebuilds the venv and takes both files with it, while Test-LitertLmCli
522
+ # short-circuits that branch on a healthy CLI -- gating this behind it is exactly
523
+ # how a repaired-and-healthy machine would keep the slow serve and report fine.
524
+ # Never throws: this is a speed fix, and it must not be able to fail an install.
525
+ function Install-LitertlmShim {
526
+ param([string]$UvPath)
527
+ try {
528
+ $shim = $null
529
+ foreach ($c in @(
530
+ (Join-Path $PSScriptRoot "trillboards_litertlm_shim.py"),
531
+ (Join-Path $PSScriptRoot "..\litertlm\trillboards_litertlm_shim.py")
532
+ )) { if (Test-Path -LiteralPath $c -PathType Leaf) { $shim = $c; break } }
533
+ if (-not $shim) { Log "WARN: litert-lm shim source not found; serve keeps stock (slower) conversation setup"; return $false }
534
+
535
+ $toolDir = (& $UvPath tool dir 2>$null | Select-Object -First 1)
536
+ if ([string]::IsNullOrWhiteSpace($toolDir)) { Log "WARN: could not resolve 'uv tool dir'; skipping litert-lm shim"; return $false }
537
+ $py = Join-Path $toolDir.Trim() "litert-lm\Scripts\python.exe"
538
+ if (-not (Test-Path -LiteralPath $py -PathType Leaf)) { Log "WARN: litert-lm venv python missing at $py; skipping shim"; return $false }
539
+
540
+ $site = (& $py -c "import sysconfig;print(sysconfig.get_paths()['purelib'])" 2>$null | Select-Object -First 1)
541
+ if ([string]::IsNullOrWhiteSpace($site) -or -not (Test-Path -LiteralPath $site.Trim())) {
542
+ Log "WARN: could not resolve litert-lm site-packages; skipping shim"; return $false
543
+ }
544
+ $site = $site.Trim()
545
+ Copy-Item -LiteralPath $shim -Destination (Join-Path $site "trillboards_litertlm_shim.py") -Force
546
+ Set-Content -LiteralPath (Join-Path $site "trillboards-litertlm-shim.pth") -Value "import trillboards_litertlm_shim" -Encoding ASCII
547
+
548
+ # Capability is established by ATTEMPTING THE OPERATION. Importing litert_lm
549
+ # here is the only thing that proves the wrap landed on the class the serve
550
+ # will use; a file that merely exists proves nothing.
551
+ & $py -c "import litert_lm,sys; sys.exit(0 if getattr(litert_lm.Engine.create_conversation,'_trillboards_litertlm_shim',False) else 1)" *>> $LogPath
552
+ if ($LASTEXITCODE -eq 0) { Log "litert-lm fast-conversation shim active in $site"; return $true }
553
+ Log "WARN: litert-lm shim did not take effect; serve keeps stock (slower) conversation setup"
554
+ return $false
555
+ } catch {
556
+ Log "WARN: litert-lm shim install failed: $_"
557
+ return $false
558
+ }
559
+ }
560
+ Install-LitertlmShim -UvPath $uvCmd.Source | Out-Null
561
+
452
562
  $bundledModelVerified = $false
453
563
  if (-not [string]::IsNullOrWhiteSpace($BundledModelPath)) {
454
564
  if (-not (Test-Path -LiteralPath $BundledModelPath -PathType Leaf)) {
@@ -590,6 +700,24 @@ if (-not (Test-LitertlmVision)) {
590
700
  Stop-SetupLock
591
701
  exit 1
592
702
  }
703
+ # RE-PROBE, with the same probe that sent us here.
704
+ #
705
+ # Test-ServeHealthy above only proves /v1/models answers, and this file's own
706
+ # comment six lines up says that route never builds an engine. So before this
707
+ # check existed, a CPU fallback that ALSO could not infer logged "healthy on
708
+ # the CPU vision encoder (slower, but serving)" and exited 0 on a machine where
709
+ # every frame 500s. That is exactly how the UTF-8 BOM above shipped as a GREEN
710
+ # install: the cascade detected the failure, downgraded a tier, and then
711
+ # verified the downgrade with a check that cannot fail for this reason.
712
+ #
713
+ # A CPU fallback that cannot infer is not a slower tier. It is a broken
714
+ # install, and the operator has to hear so at setup time rather than discover
715
+ # it as silence from a camera weeks later.
716
+ if (-not (Test-LitertlmVision)) {
717
+ Fail-LocalAi "Gemma is installed and the local AI service is answering, but it could not analyze a test image on either the GPU or the CPU vision encoder. See $LogPath."
718
+ Stop-SetupLock
719
+ exit 1
720
+ }
593
721
  Log "local AI healthy on the CPU vision encoder (slower, but serving)"
594
722
  } else {
595
723
  Log "local AI healthy with the GPU vision encoder"
@@ -19,6 +19,25 @@ if /I "%~1"=="auto-sense" (
19
19
  if errorlevel 1 set "NEEDS_LOCAL_AI=1"
20
20
  curl.exe --fail --silent --max-time 2 http://127.0.0.1:9379/v1/models >nul 2>&1
21
21
  if errorlevel 1 set "NEEDS_LOCAL_AI=1"
22
+ REM A CONFIG litert-lm CANNOT PARSE IS INVISIBLE TO EVERY PROBE ABOVE. The
23
+ REM model is installed, the task exists, and /v1/models answers 200 -- that
24
+ REM route never builds an engine -- while EVERY inference returns 500. That is
25
+ REM exactly what shipped on 2026-08-19: setup-litertlm.ps1 wrote config.json
26
+ REM with `Set-Content -Encoding UTF8`, which is BOM-ful on Windows PowerShell
27
+ REM 5.1, and litert-lm parses the file with a plain json.load that refuses a
28
+ REM BOM. Without this check the repaired provisioner would land by auto-update
29
+ REM and never re-run, so the fix would reach NEW INSTALLS ONLY and every
30
+ REM already-broken box would stay broken forever while reporting healthy.
31
+ REM
32
+ REM Byte comparison, not a parse, and the BOM test comes FIRST: PowerShell's
33
+ REM ConvertFrom-Json happily accepts a BOM, so a parse alone would call the
34
+ REM broken file good. Self-clearing -- once the provisioner rewrites the file
35
+ REM without a BOM this never fires again -- and it fails toward REPAIR, which
36
+ REM is the safe direction for a box that cannot sense.
37
+ if exist "!LITERT_ROOT!\config.json" (
38
+ powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "try { $p = '!LITERT_ROOT!\config.json'; $b = [System.IO.File]::ReadAllBytes($p); if ($b.Length -ge 3 -and $b[0] -eq 0xEF -and $b[1] -eq 0xBB -and $b[2] -eq 0xBF) { exit 1 }; $t = [System.Text.Encoding]::UTF8.GetString($b).Trim(); if ($t.Length -gt 0) { [void]($t | ConvertFrom-Json) }; exit 0 } catch { exit 1 }" >nul 2>&1
39
+ if errorlevel 1 set "NEEDS_LOCAL_AI=1"
40
+ )
22
41
  REM Launch the repair through the wscript host, NOT `start`. cmd's `start`
23
42
  REM allocates a NEW console for the child before PowerShell can hide itself,
24
43
  REM so the customer saw a black window on exactly the reboot that needs a
@@ -10,6 +10,7 @@ import { type MotionGateOptions, type MotionGateReason } from './SceneChangeDete
10
10
  import { type VlmCandidateBufferOptions, type VlmCandidateBufferStats } from './VlmCandidateBuffer';
11
11
  import { type DurableVlmCandidateSpoolOptions } from './DurableVlmCandidateSpool';
12
12
  import type { DeployedCadence } from './deployedCadence';
13
+ import { type CaptureMode } from './connectorCadence';
13
14
  import type { LiteRtAccelerator, LiteRtAcceleratorHealth } from './LiteRtVlmProvider';
14
15
  export declare function classifyRtspFailureClass(err: unknown): CameraHealthFailureClass;
15
16
  /**
@@ -46,6 +47,8 @@ export interface SensingClient {
46
47
  */
47
48
  getLocalInferenceStats?(): {
48
49
  completed: number;
50
+ analyzeMsP50?: number | null;
51
+ analyzeSamples?: number;
49
52
  };
50
53
  /**
51
54
  * Which litert-lm delegate this client's on-device runtime resolved, and why
@@ -187,6 +190,23 @@ export interface CloudSensingManagerOptions {
187
190
  * single-conversation server and 16 free-running loops oversubscribe it ~17x.
188
191
  */
189
192
  maxConcurrentAnalyses?: number;
193
+ /**
194
+ * How the loops' `CameraProvider`s acquire frames.
195
+ *
196
+ * Default `'per_grab'` — the historical behaviour, so every existing caller
197
+ * and every test derives exactly the cadence it did before. `buildLocalSensingManager`
198
+ * passes `'persistent'` because `buildLocalSensingLoops` builds
199
+ * `RTSPStreamCameraProvider`s, where a look is a memory read rather than an
200
+ * RTSP handshake and the recorder therefore does not bound the look cadence.
201
+ *
202
+ * This is DECLARED rather than sniffed from the providers on purpose: the
203
+ * providers do not know their mode until `open()` (a feed degrades to
204
+ * per-grab when a recorder will not hold a session), the cadence is needed at
205
+ * construction, and a cadence that changed under a running connector would
206
+ * mean `getSensingHealth()` reporting one number while the timers ran another.
207
+ * A feed that degrades queues on `CaptureAdmission` exactly as it does today.
208
+ */
209
+ captureMode?: CaptureMode;
190
210
  /**
191
211
  * Reclaim an admission slot held longer than this (ms). Default 180000 — the
192
212
  * provider's 120 s HTTP timeout plus retry headroom. Guards a 24/7 connector
@@ -348,6 +368,11 @@ export declare class CloudSensingManager extends EventEmitter {
348
368
  /** Live audio attachments, keyed by feed name. Empty unless audio is enabled. */
349
369
  private audioAttachments;
350
370
  private motionGateOptions;
371
+ /**
372
+ * How this connector's feeds ACQUIRE frames, which decides which machine
373
+ * bounds its look cadence. See `lookIntervalMsForFeedCount`.
374
+ */
375
+ private readonly captureMode;
351
376
  /** Look-rate for a still feed when the cascade is on. null ⇒ cascade off. */
352
377
  private motionScanIntervalMs;
353
378
  /** Stage-1 decimation: what was asked for, the floor, and whether it bit. */
@@ -494,6 +519,42 @@ export declare class CloudSensingManager extends EventEmitter {
494
519
  skipped: number;
495
520
  byReason: Record<MotionGateReason, number>;
496
521
  };
522
+ /**
523
+ * How frames are being ACQUIRED right now, and how many feeds are not
524
+ * getting what was asked for.
525
+ *
526
+ * `RTSPStreamCameraProvider` degrades to the per-grab path when a recorder
527
+ * will not hold a persistent session — deliberately, so this change can
528
+ * never break a camera that works today. But a degrade that nobody can see
529
+ * is the connector's recurring defect wearing a new hat: those feeds keep
530
+ * running at the OLD look cadence (an RTSP handshake per look, ~2 s) while
531
+ * `cascade.scanIntervalMs` reports the fast one, which is exactly the shape
532
+ * of "getSensingHealth() reports a cadence the connector is not running"
533
+ * that `lookIntervalMsForFeedCount` exists to prevent.
534
+ *
535
+ * DERIVED on every call from each provider's own `getStats()`, never
536
+ * latched — a provider's mode is only settled after `open()`, and a feed
537
+ * that degrades on a reconnect must show up here without anything having to
538
+ * remember to re-write a flag.
539
+ */
540
+ capture: {
541
+ /** What this connector was BUILT for. */
542
+ mode: CaptureMode;
543
+ /** Feeds actually holding a persistent session. */
544
+ persistentFeeds: number;
545
+ /** Feeds running the per-grab path, whatever the connector asked for. */
546
+ perGrabFeeds: number;
547
+ /** Feeds whose provider does not report a mode (a fake, or a webcam). */
548
+ unknownFeeds: number;
549
+ /** Why the degraded feeds degraded, counted. */
550
+ degradedByReason: Record<string, number>;
551
+ /** getFrame() calls that found no new frame in time, across all feeds. */
552
+ staleReads: number;
553
+ /** ffmpeg session restarts across all feeds. A silent stream is not one. */
554
+ sessionRestarts: number;
555
+ /** Age of the oldest feed's newest frame, ms. Null when nothing reports. */
556
+ oldestFrameAgeMs: number | null;
557
+ };
497
558
  /**
498
559
  * The bounded hold between the cascade and the gate. `served` is the whole
499
560
  * point — frames that were interesting, could not be analyzed at the
@@ -1 +1 @@
1
- {"version":3,"file":"CloudSensingManager.d.ts","sourceRoot":"","sources":["../src/CloudSensingManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CloudSensingManager.d.ts","sourceRoot":"","sources":["../src/CloudSensingManager.ts"],"names":[],"mappings":"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"}
@@ -327,35 +327,6 @@ class CloudSensingManager extends events_1.EventEmitter {
327
327
  // One gate for the whole process. Defaulting to one slot PER LOOP keeps the
328
328
  // cloud path (a genuinely concurrent backend) exactly as it is today; the
329
329
  // local path passes 1 because its backend is single-conversation.
330
- //
331
- // MEASURED 2026-08-18, and the result is worse than "no speedup" — it is
332
- // SILENT WRONG ANSWERS, so do not raise this for the local path.
333
- //
334
- // Two threads, one `litert_lm.Engine`, one conversation each, real frames:
335
- // thread 0 returned 4/4 correct generations and thread 1 returned the
336
- // EMPTY STRING 4/4 times. No exception, no status code, no log line — each
337
- // empty call still blocked ~2.9 s first. Serial on the same engine in the
338
- // same process was 8/8 valid. So concurrency did not trade correctness for
339
- // throughput, it destroyed both: 1,250 valid analyses/hour against 2,330
340
- // serial.
341
- //
342
- // TWO engines, one per thread, IS safe (8/8 valid, 1.249x) — but it costs a
343
- // second engine's private footprint (~0.9 GB; the 1.3 GB of mapped model is
344
- // clean and shared) and it is unreachable from here anyway, because the
345
- // process on the other end of the socket is `litert-lm serve`.
346
- //
347
- // And that serve settles it independently: it is `http.server.HTTPServer`,
348
- // the SERIAL one, on BOTH 0.13.1 and the pinned 0.16.0. Measured against a
349
- // live serve, two requests issued 0.5 ms apart: the second received its
350
- // first byte at 19,718 ms — exactly the sum of both, i.e. it was not even
351
- // READ until the first had fully answered. There is no overlap to harvest,
352
- // which also rules out pipelining frame N+1's image encode against frame
353
- // N's decode: the seam does not exist at this layer.
354
- //
355
- // The throughput that WAS available came from the engine's configuration, not
356
- // from concurrency — 2.765x on the SOP schema by moving the vision encoder to
357
- // the GPU and enabling speculative decoding. See
358
- // docs/runbooks/cctv-local-inference-hardware-floor.md §10.
359
330
  this.admissionGate = new VlmAdmissionGate_1.VlmAdmissionGate({
360
331
  maxInFlight: Math.max(1, Math.trunc(options.maxConcurrentAnalyses ?? this.loops.length)),
361
332
  maxInFlightMs: options.maxAnalysisInFlightMs,
@@ -367,6 +338,7 @@ class CloudSensingManager extends events_1.EventEmitter {
367
338
  });
368
339
  this.admissionRetryDelayMs = Math.max(1, Math.trunc(options.admissionRetryDelayMs ??
369
340
  Math.min(MAX_ADMISSION_RETRY_MS, Math.max(MIN_ADMISSION_RETRY_MS, this.staggerStepMs()))));
341
+ this.captureMode = options.captureMode ?? 'per_grab';
370
342
  if (motionGateEnabled) {
371
343
  const gateOptions = options.motionGate;
372
344
  // STAGE 1 — decimation. Never look faster than the floor (Frigate's
@@ -379,8 +351,17 @@ class CloudSensingManager extends events_1.EventEmitter {
379
351
  // cadence an accident of the ANALYZE knob: they were both 30 s, so nothing
380
352
  // distinguished them and the 30 s look cadence that caught 8.3% of Instant
381
353
  // events looked deliberate.
354
+ //
355
+ // `captureMode` is the second input and it is what makes the derivation
356
+ // honest after 2026-08-18. A cadence is only real if the machine can
357
+ // deliver it, and WHICH machine bounds it depends on how frames are
358
+ // acquired: per-grab capture is bounded by the RECORDER (an RTSP
359
+ // handshake per look), a persistent session by the DETECTOR (the frame is
360
+ // already in memory). Deriving both from one formula would either promise
361
+ // a per-grab connector a cadence its recorder cannot serve, or hold a
362
+ // persistent one down to a limit that no longer applies to it.
382
363
  const requested = Math.max(1, Math.trunc(gateOptions.scanIntervalMs
383
- ?? (0, connectorCadence_1.lookIntervalMsForFeedCount)(this.loops.length)
364
+ ?? (0, connectorCadence_1.lookIntervalMsForFeedCount)(this.loops.length, this.captureMode)
384
365
  ?? connectorCadence_1.LOOK_INTERVAL_MS));
385
366
  this.motionScanFloorMs = Math.max(0, Math.trunc(gateOptions.minScanIntervalMs ?? DEFAULT_MIN_MOTION_SCAN_INTERVAL_MS));
386
367
  this.motionScanRequestedMs = requested;
@@ -558,6 +539,46 @@ class CloudSensingManager extends events_1.EventEmitter {
558
539
  // never describe two different instants.
559
540
  const candidateStats = this.candidates?.getStats() ?? null;
560
541
  const candidateByFeed = new Map((candidateStats?.perFeed ?? []).map((f) => [f.name, f]));
542
+ // Ask every provider what path it is ACTUALLY on. `getStats` is optional on
543
+ // `CameraProvider` (a webcam adapter has none), so a provider that cannot
544
+ // answer is counted as UNKNOWN rather than assumed to be fine — a capture
545
+ // health block that reported an unanswered feed as healthy would be the same
546
+ // defect one layer up. Mosaic tiles answer through `CropViewProvider` ->
547
+ // `SharedFrameSource`, which forward this call, so every tile of one
548
+ // composite reports that recorder's real mode rather than `unknown`.
549
+ const captureHealth = {
550
+ mode: this.captureMode,
551
+ persistentFeeds: 0,
552
+ perGrabFeeds: 0,
553
+ unknownFeeds: 0,
554
+ degradedByReason: {},
555
+ staleReads: 0,
556
+ sessionRestarts: 0,
557
+ oldestFrameAgeMs: null,
558
+ };
559
+ for (const s of this.loops) {
560
+ const stats = s.deps.camera.getStats?.();
561
+ const mode = stats?.mode;
562
+ if (mode === 'persistent')
563
+ captureHealth.persistentFeeds += 1;
564
+ else if (mode === 'per_grab')
565
+ captureHealth.perGrabFeeds += 1;
566
+ else {
567
+ captureHealth.unknownFeeds += 1;
568
+ continue;
569
+ }
570
+ const reason = stats?.degradedReason;
571
+ if (typeof reason === 'string') {
572
+ captureHealth.degradedByReason[reason] = (captureHealth.degradedByReason[reason] ?? 0) + 1;
573
+ }
574
+ if (typeof stats?.staleReads === 'number')
575
+ captureHealth.staleReads += stats.staleReads;
576
+ if (typeof stats?.restarts === 'number')
577
+ captureHealth.sessionRestarts += stats.restarts;
578
+ if (typeof stats?.frameAgeMs === 'number') {
579
+ captureHealth.oldestFrameAgeMs = Math.max(captureHealth.oldestFrameAgeMs ?? 0, stats.frameAgeMs);
580
+ }
581
+ }
561
582
  const cascadeByReason = emptyMotionReasonCounts();
562
583
  let cascadeEvaluated = 0;
563
584
  let cascadeAnalyzed = 0;
@@ -596,6 +617,7 @@ class CloudSensingManager extends events_1.EventEmitter {
596
617
  skipped: cascadeEvaluated - cascadeAnalyzed,
597
618
  byReason: cascadeByReason,
598
619
  },
620
+ capture: captureHealth,
599
621
  candidateBuffer: {
600
622
  enabled: this.candidates !== null,
601
623
  storage: candidateStats?.storage ?? 'memory',