@trillboards/edge-sdk 0.2.58 → 0.2.61
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/deploy/macos/scripts/setup-litertlm.sh +113 -0
- package/deploy/macos/test-setup-litertlm-reinstall.sh +59 -1
- package/deploy/systemd/setup-litertlm.sh +121 -10
- package/deploy/windows/setup-litertlm.ps1 +100 -0
- package/dist/CloudSensingManager.d.ts.map +1 -1
- package/dist/CloudSensingManager.js +29 -0
- package/dist/CloudSensingManager.js.map +1 -1
- package/dist/EdgeAgent.js +1 -1
- package/dist/connectorCadence.d.ts +50 -0
- package/dist/connectorCadence.d.ts.map +1 -1
- package/dist/connectorCadence.js +50 -0
- package/dist/connectorCadence.js.map +1 -1
- package/dist/deployedCadence.d.ts +7 -1
- package/dist/deployedCadence.d.ts.map +1 -1
- package/dist/deployedCadence.js +7 -1
- package/dist/deployedCadence.js.map +1 -1
- package/dist/diagnose.d.ts +1 -1
- package/dist/diagnose.js +1 -1
- package/dist/sensingCatchRate.d.ts.map +1 -1
- package/dist/sensingCatchRate.js +40 -1
- package/dist/sensingCatchRate.js.map +1 -1
- package/package.json +1 -1
|
@@ -61,6 +61,87 @@ mkdir -p "$LOG_DIR" "$LA_DIR" 2>/dev/null || true
|
|
|
61
61
|
LOG="$LOG_DIR/litertlm-setup.log"
|
|
62
62
|
log() { printf '[trillboards setup-litertlm] %s %s\n' "$(date '+%H:%M:%S')" "$*" >>"$LOG" 2>&1; printf '[trillboards setup-litertlm] %s\n' "$*"; }
|
|
63
63
|
fail() { log "ERROR: $*"; exit 1; }
|
|
64
|
+
# -- Local-inference tuning (config.json) ------------------------------------
|
|
65
|
+
#
|
|
66
|
+
# `litert-lm serve` takes NO flags for any of this: `serve` accepts only
|
|
67
|
+
# --host/--port/--api/--cors-origin/--verbose. Every engine knob it honours comes
|
|
68
|
+
# from `$LITERT_LM_DIR/config.json`, which `litert_lm_cli.config.get_model_config`
|
|
69
|
+
# merges per model id. So this file IS the tuning surface, and writing it is the
|
|
70
|
+
# whole change -- the serve stays stock.
|
|
71
|
+
#
|
|
72
|
+
# Two settings, both MEASURED on an M4 Max (12P+4E/48G), litert-lm 0.16.0, Gemma
|
|
73
|
+
# 4 E2B, delegate asserted GPU from the native log, 16 warm-ups before timing,
|
|
74
|
+
# arms interleaved sample-by-sample, operator/SOP field set + the two committed
|
|
75
|
+
# CCTV fixtures:
|
|
76
|
+
#
|
|
77
|
+
# vision_backend=gpu The vision encoder ran on the CPU because NOTHING ASKED
|
|
78
|
+
# IT NOT TO -- `Engine(vision_backend=...)` defaults to
|
|
79
|
+
# None and the 0.13.1 HTTP shim hardcoded Backend.CPU()
|
|
80
|
+
# (upstream b/515805503). It is not a hardware limit and
|
|
81
|
+
# not a model constraint; GPU vision is Google's own
|
|
82
|
+
# reference config and CPU is their FALLBACK tier.
|
|
83
|
+
# Image encode 0.804 s -> 0.175 s p50, i.e. 76% of a SOP
|
|
84
|
+
# frame removed.
|
|
85
|
+
# speculative_decoding 1.433x on the decode-heavy audience schema, and the
|
|
86
|
+
# generations are BYTE-IDENTICAL to greedy (12/12 same
|
|
87
|
+
# text), which is the property that makes it safe: it is
|
|
88
|
+
# a speed change, not an answer change.
|
|
89
|
+
#
|
|
90
|
+
# Together, in-process: 1.054 s -> 0.385 s per SOP frame (2.765x paired, min
|
|
91
|
+
# 2.560 / max 2.919 over 16 rounds); 3,416 -> 9,295 analyses/hour. Through this
|
|
92
|
+
# stock serve over HTTP: 1752.5 ms -> 1005.8 ms p50 (1.742x), 12/12 schema-valid
|
|
93
|
+
# on BOTH arms. Accuracy is not traded for it: people_present 16/16 on both arms,
|
|
94
|
+
# person_count 8/16 on both, and where they differ the GPU encoder is CLOSER to
|
|
95
|
+
# the hand label (4 vs 3 against a truth of 5).
|
|
96
|
+
#
|
|
97
|
+
# WHY THE VERIFY BELOW EXISTS. Pinning the vision encoder to the GPU is the one
|
|
98
|
+
# setting here that can make a host WORSE than it is today: a box whose GPU will
|
|
99
|
+
# not bind fails engine init, and unlike the main backend there is no demotion
|
|
100
|
+
# path for it -- `LiteRtVlmProvider.recordGpuDemotion` re-posts the BARE model
|
|
101
|
+
# id, which changes the main backend and leaves this config untouched. So a
|
|
102
|
+
# blind write would brick sensing on exactly the weak hosts that need it most.
|
|
103
|
+
# We therefore do what Google's own cascade does: try GPU vision, prove it with
|
|
104
|
+
# one real image inference, and fall back to the CPU default if it does not
|
|
105
|
+
# answer.
|
|
106
|
+
CONFIG_JSON="$LITERT_DIR/config.json"
|
|
107
|
+
|
|
108
|
+
# A 223-byte 32x32 grey JPEG. Small enough to inline, real enough that decoding
|
|
109
|
+
# it exercises the vision encoder we are trying to prove.
|
|
110
|
+
LITERTLM_PROBE_JPEG_B64="/9j/4AAQSkZJRgABAgAAAQABAAD//gAPTGF2YzYzLjEuMTAxAP/bAEMACD4+ST5JVVVVVVVVZF1kaGhoZGRkZGhoaHBwcIODg3BwcGhocHB8fIODj5OPh4eDh5OTm5uburqystnZ4P/////EAEoAAQAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAAAAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAARAQAAAAAAAAAAAAAAAAAAAAD/wAARCAAgACADASIAAhEAAxEA/9oADAMBAAIRAxEAPwAAAAAAAAD/2Q=="
|
|
111
|
+
|
|
112
|
+
# Write config.json. $1 = "gpu" pins the vision encoder; empty leaves it on the
|
|
113
|
+
# CPU default. speculative_decoding is written EITHER WAY -- it is delegate
|
|
114
|
+
# independent and byte-identical, so it survives the fallback.
|
|
115
|
+
write_litertlm_config() {
|
|
116
|
+
_vision="$1"
|
|
117
|
+
mkdir -p "$LITERT_DIR" 2>/dev/null || true
|
|
118
|
+
if [ -n "$_vision" ]; then
|
|
119
|
+
printf '{"models":{"%s":{"vision_backend":"%s","speculative_decoding":true}}}\n' \
|
|
120
|
+
"$MODEL_ID" "$_vision" > "$CONFIG_JSON.tmp" 2>/dev/null || return 1
|
|
121
|
+
else
|
|
122
|
+
printf '{"models":{"%s":{"speculative_decoding":true}}}\n' \
|
|
123
|
+
"$MODEL_ID" > "$CONFIG_JSON.tmp" 2>/dev/null || return 1
|
|
124
|
+
fi
|
|
125
|
+
mv -f "$CONFIG_JSON.tmp" "$CONFIG_JSON" 2>/dev/null || return 1
|
|
126
|
+
log "wrote $CONFIG_JSON (vision_backend=${_vision:-cpu-default}, speculative_decoding=true)"
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
# One real image inference against the running serve. A 200 means the vision
|
|
130
|
+
# encoder loaded AND ran on whatever backend config.json just asked for.
|
|
131
|
+
# Deliberately NOT a /v1/models check: that answers 200 without ever building an
|
|
132
|
+
# engine, so it cannot tell a working GPU encoder from one that fails on first
|
|
133
|
+
# use.
|
|
134
|
+
verify_litertlm_vision() {
|
|
135
|
+
_body="$LITERT_DIR/.vision-probe.json"
|
|
136
|
+
printf '{"model":"%s,gpu","messages":[{"role":"user","content":[{"type":"text","text":"Reply with the single word: ok"},{"type":"image_url","image_url":{"url":"data:image/jpeg;base64,%s"}}]}],"max_completion_tokens":8,"temperature":0}' \
|
|
137
|
+
"$MODEL_ID" "$LITERTLM_PROBE_JPEG_B64" > "$_body" 2>/dev/null || return 1
|
|
138
|
+
_code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 180 \
|
|
139
|
+
-X POST "http://127.0.0.1:$SERVE_PORT/v1/chat/completions" \
|
|
140
|
+
-H 'Content-Type: application/json' --data-binary @"$_body" 2>/dev/null)
|
|
141
|
+
rm -f "$_body" 2>/dev/null || true
|
|
142
|
+
[ "$_code" = "200" ]
|
|
143
|
+
}
|
|
144
|
+
|
|
64
145
|
local_ai_healthy() {
|
|
65
146
|
curl -fsS --max-time 3 "http://127.0.0.1:$SERVE_PORT/v1/models" 2>/dev/null \
|
|
66
147
|
| grep -Fq "$MODEL_ID"
|
|
@@ -305,6 +386,7 @@ if [ -f "$TEMPLATE" ]; then
|
|
|
305
386
|
-e "s#__PORT__#$SERVE_PORT#g" \
|
|
306
387
|
-e "s#__LOG_DIR__#$LOG_DIR#g" \
|
|
307
388
|
"$TEMPLATE" > "$TARGET" 2>/dev/null || log "WARN: could not render serve plist"
|
|
389
|
+
write_litertlm_config "gpu" || log "WARN: could not write $CONFIG_JSON - the serve will use its defaults"
|
|
308
390
|
restart_launch_agent \
|
|
309
391
|
|| { [ "$REQUIRE_BUNDLED_MODEL" = "1" ] && fail "local AI service could not be started"; log "WARN: launchctl bootstrap failed for serve agent"; }
|
|
310
392
|
else
|
|
@@ -312,6 +394,29 @@ else
|
|
|
312
394
|
log "WARN: serve plist template missing at $TEMPLATE"
|
|
313
395
|
fi
|
|
314
396
|
|
|
397
|
+
# The GPU-vision cascade. `local_ai_healthy` only proves /v1/models answers, and
|
|
398
|
+
# that route never builds an engine - so it cannot see a GPU vision encoder that
|
|
399
|
+
# fails on first USE. One real image inference is the only thing that can, and if
|
|
400
|
+
# it does not answer we fall back to the CPU encoder rather than leave the host
|
|
401
|
+
# unable to sense at all.
|
|
402
|
+
litertlm_vision_cascade() {
|
|
403
|
+
if verify_litertlm_vision; then
|
|
404
|
+
log "local AI healthy with the GPU vision encoder"
|
|
405
|
+
return 0
|
|
406
|
+
fi
|
|
407
|
+
log "WARN: GPU vision encoder did not answer a probe inference - falling back to the CPU encoder"
|
|
408
|
+
write_litertlm_config "" || log "WARN: could not rewrite $CONFIG_JSON"
|
|
409
|
+
restart_launch_agent || log "WARN: could not restart the serve agent after the vision fallback"
|
|
410
|
+
for _attempt in $(seq 1 60); do
|
|
411
|
+
if local_ai_healthy; then
|
|
412
|
+
log "local AI healthy on the CPU vision encoder (slower, but serving)"
|
|
413
|
+
return 0
|
|
414
|
+
fi
|
|
415
|
+
sleep 2
|
|
416
|
+
done
|
|
417
|
+
return 1
|
|
418
|
+
}
|
|
419
|
+
|
|
315
420
|
if [ "$REQUIRE_BUNDLED_MODEL" = "1" ]; then
|
|
316
421
|
log "waiting for local AI health check"
|
|
317
422
|
HEALTHY=0
|
|
@@ -320,7 +425,15 @@ if [ "$REQUIRE_BUNDLED_MODEL" = "1" ]; then
|
|
|
320
425
|
sleep 2
|
|
321
426
|
done
|
|
322
427
|
[ "$HEALTHY" -eq 1 ] || fail "Gemma is installed, but the local AI service did not respond"
|
|
428
|
+
litertlm_vision_cascade || fail "Gemma is installed, but the local AI service stopped answering after the vision fallback"
|
|
323
429
|
log "local AI is installed and healthy"
|
|
430
|
+
else
|
|
431
|
+
# Best effort, and deliberately NOT a new wait: if the serve is already up we
|
|
432
|
+
# settle the vision backend now; if it is not, ensure-litertlm.sh re-runs this
|
|
433
|
+
# script and we settle it then.
|
|
434
|
+
if local_ai_healthy; then
|
|
435
|
+
litertlm_vision_cascade || log "WARN: the serve stopped answering after the vision fallback"
|
|
436
|
+
fi
|
|
324
437
|
fi
|
|
325
438
|
|
|
326
439
|
log "done"
|
|
@@ -36,8 +36,18 @@ fi
|
|
|
36
36
|
exit 0
|
|
37
37
|
EOF
|
|
38
38
|
|
|
39
|
+
# Fake curl models BOTH endpoints the setup script uses:
|
|
40
|
+
# GET /v1/models -> the catalogue body `local_ai_healthy` greps
|
|
41
|
+
# POST /v1/chat/completions -> the vision probe, which asks for `%{http_code}`
|
|
42
|
+
# TRILLBOARDS_TEST_VISION_PROBE_CODE lets a test drive the GPU-vision fallback.
|
|
39
43
|
cat >"$FAKE_BIN/curl" <<'EOF'
|
|
40
44
|
#!/bin/bash
|
|
45
|
+
for arg in "$@"; do
|
|
46
|
+
if [ "$arg" = "-w" ]; then
|
|
47
|
+
printf '%s' "${TRILLBOARDS_TEST_VISION_PROBE_CODE:-200}"
|
|
48
|
+
exit 0
|
|
49
|
+
fi
|
|
50
|
+
done
|
|
41
51
|
printf '{"data":[{"id":"gemma-4-E2B-it.litertlm"}]}\n'
|
|
42
52
|
EOF
|
|
43
53
|
|
|
@@ -103,7 +113,55 @@ if ! OUTPUT="$(/bin/bash "$SETUP" 2>&1)"; then
|
|
|
103
113
|
fi
|
|
104
114
|
|
|
105
115
|
[ "$(cat "$TRILLBOARDS_TEST_STATE_DIR/bootstrap-attempts")" = "2" ]
|
|
116
|
+
# A host whose GPU vision encoder answers keeps it: config.json must carry
|
|
117
|
+
# vision_backend=gpu and must NOT have been rewritten by the fallback.
|
|
118
|
+
grep -Fq '"vision_backend":"gpu"' "$LITERT_LM_DIR/config.json"
|
|
119
|
+
grep -Fq '"speculative_decoding":true' "$LITERT_LM_DIR/config.json"
|
|
120
|
+
grep -Fq 'local AI healthy with the GPU vision encoder' <<<"$OUTPUT"
|
|
106
121
|
grep -Fq 'Bootstrap failed: 37: Operation already in progress' \
|
|
107
122
|
"$HOME/Library/Logs/Trillboards/litertlm-setup.log"
|
|
108
123
|
grep -Fq 'local AI is installed and healthy' <<<"$OUTPUT"
|
|
109
|
-
|
|
124
|
+
|
|
125
|
+
# -- Scenario 2: a host whose GPU vision encoder does NOT answer --------------
|
|
126
|
+
#
|
|
127
|
+
# This is the case the cascade exists for. Pinning the vision encoder to the GPU
|
|
128
|
+
# is the one setting here that can make a host WORSE than it was, and there is no
|
|
129
|
+
# demotion path for it: `recordGpuDemotion` re-posts the BARE model id, which
|
|
130
|
+
# moves the MAIN backend and leaves vision_backend untouched. So a box whose GPU
|
|
131
|
+
# will not bind must end this script serving on the CPU encoder, not dead.
|
|
132
|
+
#
|
|
133
|
+
# `local_ai_healthy` cannot catch it -- /v1/models answers 200 without ever
|
|
134
|
+
# building an engine. Only a real image inference can, which is why the probe
|
|
135
|
+
# POSTs one and why this test drives its status code.
|
|
136
|
+
printf 'loaded\n' >"$TRILLBOARDS_TEST_STATE_DIR/service-state"
|
|
137
|
+
printf '0\n' >"$TRILLBOARDS_TEST_STATE_DIR/bootstrap-attempts"
|
|
138
|
+
export TRILLBOARDS_TEST_VISION_PROBE_CODE=500
|
|
139
|
+
|
|
140
|
+
if ! OUTPUT2="$(/bin/bash "$SETUP" 2>&1)"; then
|
|
141
|
+
printf '%s\n' "$OUTPUT2" >&2
|
|
142
|
+
printf 'FAIL: setup exited non-zero when the GPU vision probe failed; it must fall back, not fail\n' >&2
|
|
143
|
+
exit 1
|
|
144
|
+
fi
|
|
145
|
+
|
|
146
|
+
grep -Fq 'falling back to the CPU encoder' <<<"$OUTPUT2"
|
|
147
|
+
grep -Fq 'local AI healthy on the CPU vision encoder' <<<"$OUTPUT2"
|
|
148
|
+
grep -Fq 'local AI is installed and healthy' <<<"$OUTPUT2"
|
|
149
|
+
|
|
150
|
+
# The fallback must REMOVE vision_backend and KEEP speculative_decoding: the
|
|
151
|
+
# latter is delegate independent and byte-identical to greedy, so it is still
|
|
152
|
+
# correct on a CPU-vision host and is the only speedup that host keeps.
|
|
153
|
+
if grep -Fq 'vision_backend' "$LITERT_LM_DIR/config.json"; then
|
|
154
|
+
printf 'FAIL: fallback left vision_backend in config.json\n' >&2
|
|
155
|
+
cat "$LITERT_LM_DIR/config.json" >&2
|
|
156
|
+
exit 1
|
|
157
|
+
fi
|
|
158
|
+
grep -Fq '"speculative_decoding":true' "$LITERT_LM_DIR/config.json"
|
|
159
|
+
|
|
160
|
+
# 2 bootstraps for the first start (attempt 1 hits the 37 race), + 1 for the
|
|
161
|
+
# restart the fallback performs.
|
|
162
|
+
[ "$(cat "$TRILLBOARDS_TEST_STATE_DIR/bootstrap-attempts")" = "3" ]
|
|
163
|
+
|
|
164
|
+
unset TRILLBOARDS_TEST_VISION_PROBE_CODE
|
|
165
|
+
|
|
166
|
+
printf 'macOS LiteRT-LM reinstall race + GPU-vision fallback regressions passed\n'
|
|
167
|
+
|
|
@@ -69,6 +69,87 @@ log() {
|
|
|
69
69
|
printf '[trillboards setup-litertlm] %s\n' "$*"
|
|
70
70
|
}
|
|
71
71
|
fail() { log "ERROR: $*"; exit 1; }
|
|
72
|
+
# -- Local-inference tuning (config.json) ------------------------------------
|
|
73
|
+
#
|
|
74
|
+
# `litert-lm serve` takes NO flags for any of this: `serve` accepts only
|
|
75
|
+
# --host/--port/--api/--cors-origin/--verbose. Every engine knob it honours comes
|
|
76
|
+
# from `$LITERT_LM_DIR/config.json`, which `litert_lm_cli.config.get_model_config`
|
|
77
|
+
# merges per model id. So this file IS the tuning surface, and writing it is the
|
|
78
|
+
# whole change -- the serve stays stock.
|
|
79
|
+
#
|
|
80
|
+
# Two settings, both MEASURED on an M4 Max (12P+4E/48G), litert-lm 0.16.0, Gemma
|
|
81
|
+
# 4 E2B, delegate asserted GPU from the native log, 16 warm-ups before timing,
|
|
82
|
+
# arms interleaved sample-by-sample, operator/SOP field set + the two committed
|
|
83
|
+
# CCTV fixtures:
|
|
84
|
+
#
|
|
85
|
+
# vision_backend=gpu The vision encoder ran on the CPU because NOTHING ASKED
|
|
86
|
+
# IT NOT TO -- `Engine(vision_backend=...)` defaults to
|
|
87
|
+
# None and the 0.13.1 HTTP shim hardcoded Backend.CPU()
|
|
88
|
+
# (upstream b/515805503). It is not a hardware limit and
|
|
89
|
+
# not a model constraint; GPU vision is Google's own
|
|
90
|
+
# reference config and CPU is their FALLBACK tier.
|
|
91
|
+
# Image encode 0.804 s -> 0.175 s p50, i.e. 76% of a SOP
|
|
92
|
+
# frame removed.
|
|
93
|
+
# speculative_decoding 1.433x on the decode-heavy audience schema, and the
|
|
94
|
+
# generations are BYTE-IDENTICAL to greedy (12/12 same
|
|
95
|
+
# text), which is the property that makes it safe: it is
|
|
96
|
+
# a speed change, not an answer change.
|
|
97
|
+
#
|
|
98
|
+
# Together, in-process: 1.054 s -> 0.385 s per SOP frame (2.765x paired, min
|
|
99
|
+
# 2.560 / max 2.919 over 16 rounds); 3,416 -> 9,295 analyses/hour. Through this
|
|
100
|
+
# stock serve over HTTP: 1752.5 ms -> 1005.8 ms p50 (1.742x), 12/12 schema-valid
|
|
101
|
+
# on BOTH arms. Accuracy is not traded for it: people_present 16/16 on both arms,
|
|
102
|
+
# person_count 8/16 on both, and where they differ the GPU encoder is CLOSER to
|
|
103
|
+
# the hand label (4 vs 3 against a truth of 5).
|
|
104
|
+
#
|
|
105
|
+
# WHY THE VERIFY BELOW EXISTS. Pinning the vision encoder to the GPU is the one
|
|
106
|
+
# setting here that can make a host WORSE than it is today: a box whose GPU will
|
|
107
|
+
# not bind fails engine init, and unlike the main backend there is no demotion
|
|
108
|
+
# path for it -- `LiteRtVlmProvider.recordGpuDemotion` re-posts the BARE model
|
|
109
|
+
# id, which changes the main backend and leaves this config untouched. So a
|
|
110
|
+
# blind write would brick sensing on exactly the weak hosts that need it most.
|
|
111
|
+
# We therefore do what Google's own cascade does: try GPU vision, prove it with
|
|
112
|
+
# one real image inference, and fall back to the CPU default if it does not
|
|
113
|
+
# answer.
|
|
114
|
+
CONFIG_JSON="$LITERT_DIR/config.json"
|
|
115
|
+
|
|
116
|
+
# A 223-byte 32x32 grey JPEG. Small enough to inline, real enough that decoding
|
|
117
|
+
# it exercises the vision encoder we are trying to prove.
|
|
118
|
+
LITERTLM_PROBE_JPEG_B64="/9j/4AAQSkZJRgABAgAAAQABAAD//gAPTGF2YzYzLjEuMTAxAP/bAEMACD4+ST5JVVVVVVVVZF1kaGhoZGRkZGhoaHBwcIODg3BwcGhocHB8fIODj5OPh4eDh5OTm5uburqystnZ4P/////EAEoAAQAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAAAAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAARAQAAAAAAAAAAAAAAAAAAAAD/wAARCAAgACADASIAAhEAAxEA/9oADAMBAAIRAxEAPwAAAAAAAAD/2Q=="
|
|
119
|
+
|
|
120
|
+
# Write config.json. $1 = "gpu" pins the vision encoder; empty leaves it on the
|
|
121
|
+
# CPU default. speculative_decoding is written EITHER WAY -- it is delegate
|
|
122
|
+
# independent and byte-identical, so it survives the fallback.
|
|
123
|
+
write_litertlm_config() {
|
|
124
|
+
_vision="$1"
|
|
125
|
+
mkdir -p "$LITERT_DIR" 2>/dev/null || true
|
|
126
|
+
if [ -n "$_vision" ]; then
|
|
127
|
+
printf '{"models":{"%s":{"vision_backend":"%s","speculative_decoding":true}}}\n' \
|
|
128
|
+
"$MODEL_ID" "$_vision" > "$CONFIG_JSON.tmp" 2>/dev/null || return 1
|
|
129
|
+
else
|
|
130
|
+
printf '{"models":{"%s":{"speculative_decoding":true}}}\n' \
|
|
131
|
+
"$MODEL_ID" > "$CONFIG_JSON.tmp" 2>/dev/null || return 1
|
|
132
|
+
fi
|
|
133
|
+
mv -f "$CONFIG_JSON.tmp" "$CONFIG_JSON" 2>/dev/null || return 1
|
|
134
|
+
log "wrote $CONFIG_JSON (vision_backend=${_vision:-cpu-default}, speculative_decoding=true)"
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
# One real image inference against the running serve. A 200 means the vision
|
|
138
|
+
# encoder loaded AND ran on whatever backend config.json just asked for.
|
|
139
|
+
# Deliberately NOT a /v1/models check: that answers 200 without ever building an
|
|
140
|
+
# engine, so it cannot tell a working GPU encoder from one that fails on first
|
|
141
|
+
# use.
|
|
142
|
+
verify_litertlm_vision() {
|
|
143
|
+
_body="$LITERT_DIR/.vision-probe.json"
|
|
144
|
+
printf '{"model":"%s,gpu","messages":[{"role":"user","content":[{"type":"text","text":"Reply with the single word: ok"},{"type":"image_url","image_url":{"url":"data:image/jpeg;base64,%s"}}]}],"max_completion_tokens":8,"temperature":0}' \
|
|
145
|
+
"$MODEL_ID" "$LITERTLM_PROBE_JPEG_B64" > "$_body" 2>/dev/null || return 1
|
|
146
|
+
_code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 180 \
|
|
147
|
+
-X POST "http://127.0.0.1:$SERVE_PORT/v1/chat/completions" \
|
|
148
|
+
-H 'Content-Type: application/json' --data-binary @"$_body" 2>/dev/null)
|
|
149
|
+
rm -f "$_body" 2>/dev/null || true
|
|
150
|
+
[ "$_code" = "200" ]
|
|
151
|
+
}
|
|
152
|
+
|
|
72
153
|
local_ai_healthy() {
|
|
73
154
|
curl -fsS --max-time 3 "http://127.0.0.1:$SERVE_PORT/v1/models" 2>/dev/null \
|
|
74
155
|
| grep -Fq "$MODEL_ID"
|
|
@@ -172,25 +253,55 @@ fi
|
|
|
172
253
|
|
|
173
254
|
# 4. Serve unit. Installed by install.sh (which has sudo); here we only start it
|
|
174
255
|
# when we can, so a re-run from the service user still recovers a stopped serve.
|
|
175
|
-
|
|
256
|
+
restart_litertlm_serve() {
|
|
257
|
+
command -v systemctl >/dev/null 2>&1 || return 0
|
|
176
258
|
if systemctl list-unit-files "$SERVE_UNIT.service" >/dev/null 2>&1; then
|
|
177
259
|
systemctl restart "$SERVE_UNIT" >>"$LOG" 2>&1 \
|
|
178
260
|
|| sudo -n systemctl restart "$SERVE_UNIT" >>"$LOG" 2>&1 \
|
|
179
|
-
|| log "WARN: could not restart $SERVE_UNIT
|
|
261
|
+
|| log "WARN: could not restart $SERVE_UNIT - start it with: sudo systemctl restart $SERVE_UNIT"
|
|
180
262
|
else
|
|
181
263
|
log "WARN: $SERVE_UNIT.service is not installed yet (install.sh installs it)"
|
|
182
264
|
fi
|
|
183
|
-
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
wait_for_litertlm_health() {
|
|
268
|
+
log "waiting for local AI health check on :$SERVE_PORT"
|
|
269
|
+
for _attempt in $(seq 1 60); do
|
|
270
|
+
if local_ai_healthy; then return 0; fi
|
|
271
|
+
sleep 2
|
|
272
|
+
done
|
|
273
|
+
return 1
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
# Ask for GPU vision BEFORE the restart so the engine builds with it. The engine
|
|
277
|
+
# is constructed lazily on the first inference, so config.json must be on disk
|
|
278
|
+
# before that request, not merely before the next boot.
|
|
279
|
+
write_litertlm_config "gpu" || log "WARN: could not write $CONFIG_JSON - the serve will use its defaults"
|
|
280
|
+
|
|
281
|
+
restart_litertlm_serve
|
|
184
282
|
|
|
185
|
-
log "waiting for local AI health check on :$SERVE_PORT"
|
|
186
283
|
HEALTHY=0
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
sleep 2
|
|
190
|
-
done
|
|
284
|
+
if wait_for_litertlm_health; then HEALTHY=1; fi
|
|
285
|
+
|
|
191
286
|
if [ "$HEALTHY" -eq 1 ]; then
|
|
192
|
-
|
|
193
|
-
|
|
287
|
+
# The cascade. `local_ai_healthy` only proves /v1/models answers, which it does
|
|
288
|
+
# without ever building an engine - so it CANNOT see a GPU vision encoder that
|
|
289
|
+
# fails on first use. One real image inference is the only thing that can.
|
|
290
|
+
if verify_litertlm_vision; then
|
|
291
|
+
log "local AI healthy with the GPU vision encoder - the connector will run ON-DEVICE"
|
|
292
|
+
else
|
|
293
|
+
log "WARN: GPU vision encoder did not answer a probe inference - falling back to the CPU encoder"
|
|
294
|
+
write_litertlm_config "" || log "WARN: could not rewrite $CONFIG_JSON"
|
|
295
|
+
restart_litertlm_serve
|
|
296
|
+
if wait_for_litertlm_health; then
|
|
297
|
+
log "local AI healthy on the CPU vision encoder (slower, but serving)"
|
|
298
|
+
else
|
|
299
|
+
HEALTHY=0
|
|
300
|
+
fi
|
|
301
|
+
fi
|
|
302
|
+
fi
|
|
303
|
+
|
|
304
|
+
if [ "$HEALTHY" -ne 1 ]; then
|
|
194
305
|
# NOT fatal. auto-sense waits and beacons, so an install that gets this far
|
|
195
306
|
# with the model on disk recovers by itself once the serve comes up.
|
|
196
307
|
log "WARN: Gemma is installed but the serve did not answer yet; auto-sense will"
|
|
@@ -133,6 +133,79 @@ function Test-ServeHealthy {
|
|
|
133
133
|
# that sentence stays gone rather than merely de-prioritised.
|
|
134
134
|
#
|
|
135
135
|
# Never throws: a diagnostic must not be able to fail an install.
|
|
136
|
+
# -- Local-inference tuning (config.json) ------------------------------------
|
|
137
|
+
#
|
|
138
|
+
# `litert-lm serve` takes NO flags for any of this: serve accepts only
|
|
139
|
+
# --host/--port/--api/--cors-origin/--verbose. Every engine knob it honours comes
|
|
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.
|
|
143
|
+
#
|
|
144
|
+
# MEASURED (M4 Max 12P+4E/48G, litert-lm 0.16.0, Gemma 4 E2B, delegate asserted
|
|
145
|
+
# GPU from the native log, 16 warm-ups, arms interleaved, operator/SOP field set,
|
|
146
|
+
# the two committed CCTV fixtures): image encode 0.804 s -> 0.175 s p50 and the
|
|
147
|
+
# whole SOP frame 1.054 s -> 0.385 s (2.765x paired); through the stock serve
|
|
148
|
+
# over HTTP 1752.5 ms -> 1005.8 ms p50 (1.742x), 12/12 schema-valid on both arms.
|
|
149
|
+
# The vision encoder was on the CPU because NOTHING ASKED IT NOT TO -- GPU vision
|
|
150
|
+
# is Google's reference config and CPU is their documented fallback tier.
|
|
151
|
+
# speculative_decoding is written too: 1.433x on the decode-heavy schema with
|
|
152
|
+
# BYTE-IDENTICAL generations, so it is a speed change and not an answer change.
|
|
153
|
+
$script:LitertlmProbeJpegB64 = "/9j/4AAQSkZJRgABAgAAAQABAAD//gAPTGF2YzYzLjEuMTAxAP/bAEMACD4+ST5JVVVVVVVVZF1kaGhoZGRkZGhoaHBwcIODg3BwcGhocHB8fIODj5OPh4eDh5OTm5uburqystnZ4P/////EAEoAAQAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAAAAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAARAQAAAAAAAAAAAAAAAAAAAAD/wAARCAAgACADASIAAhEAAxEA/9oADAMBAAIRAxEAPwAAAAAAAAD/2Q=="
|
|
154
|
+
|
|
155
|
+
function Get-LitertlmConfigPath { Join-Path $LitertDir "config.json" }
|
|
156
|
+
|
|
157
|
+
# $VisionBackend = "gpu" pins the vision encoder; "" leaves it on the CPU
|
|
158
|
+
# default. speculative_decoding is written EITHER WAY -- it is delegate
|
|
159
|
+
# independent, so it survives the fallback.
|
|
160
|
+
function Write-LitertlmConfig {
|
|
161
|
+
param([string]$VisionBackend = "")
|
|
162
|
+
try {
|
|
163
|
+
if (-not (Test-Path -LiteralPath $LitertDir)) {
|
|
164
|
+
New-Item -ItemType Directory -Force -Path $LitertDir | Out-Null
|
|
165
|
+
}
|
|
166
|
+
$model = [ordered]@{}
|
|
167
|
+
if ($VisionBackend) { $model["vision_backend"] = $VisionBackend }
|
|
168
|
+
$model["speculative_decoding"] = $true
|
|
169
|
+
$cfg = [ordered]@{ models = [ordered]@{ $ModelId = $model } }
|
|
170
|
+
$path = Get-LitertlmConfigPath
|
|
171
|
+
$tmp = "$path.tmp"
|
|
172
|
+
($cfg | ConvertTo-Json -Depth 6) | Set-Content -LiteralPath $tmp -Encoding UTF8
|
|
173
|
+
Move-Item -LiteralPath $tmp -Destination $path -Force
|
|
174
|
+
$label = if ($VisionBackend) { $VisionBackend } else { "cpu-default" }
|
|
175
|
+
Log "wrote $path (vision_backend=$label, speculative_decoding=true)"
|
|
176
|
+
return $true
|
|
177
|
+
} catch {
|
|
178
|
+
Log "WARN: could not write litert-lm config.json: $_"
|
|
179
|
+
return $false
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
# One real image inference. A 200 means the vision encoder loaded AND ran on the
|
|
184
|
+
# backend config.json just asked for. Deliberately NOT Test-ServeHealthy:
|
|
185
|
+
# /v1/models answers without ever building an engine, so it cannot tell a working
|
|
186
|
+
# GPU encoder from one that fails on first use.
|
|
187
|
+
function Test-LitertlmVision {
|
|
188
|
+
try {
|
|
189
|
+
$dataUri = "data:image/jpeg;base64," + $script:LitertlmProbeJpegB64
|
|
190
|
+
$body = @{
|
|
191
|
+
model = "$ModelId,gpu"
|
|
192
|
+
messages = @(@{ role = "user"; content = @(
|
|
193
|
+
@{ type = "text"; text = "Reply with the single word: ok" },
|
|
194
|
+
@{ type = "image_url"; image_url = @{ url = $dataUri } }
|
|
195
|
+
)})
|
|
196
|
+
max_completion_tokens = 8
|
|
197
|
+
temperature = 0
|
|
198
|
+
} | ConvertTo-Json -Depth 8
|
|
199
|
+
$resp = Invoke-WebRequest -Uri "http://127.0.0.1:$Port/v1/chat/completions" `
|
|
200
|
+
-Method POST -ContentType "application/json" -Body $body `
|
|
201
|
+
-TimeoutSec 180 -UseBasicParsing
|
|
202
|
+
return ($resp.StatusCode -eq 200)
|
|
203
|
+
} catch {
|
|
204
|
+
Log "vision probe did not answer: $_"
|
|
205
|
+
return $false
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
136
209
|
function Get-AdvertisedModelIds {
|
|
137
210
|
try {
|
|
138
211
|
$response = Invoke-WebRequest -Uri "http://127.0.0.1:$Port/v1/models" -UseBasicParsing -TimeoutSec 5
|
|
@@ -475,6 +548,10 @@ if (-not (Test-Path -LiteralPath $registration)) {
|
|
|
475
548
|
exit 1
|
|
476
549
|
}
|
|
477
550
|
|
|
551
|
+
# Ask for GPU vision BEFORE the serve starts: the engine is built lazily on the
|
|
552
|
+
# first inference, so config.json must be on disk before that request.
|
|
553
|
+
Write-LitertlmConfig -VisionBackend "gpu" | Out-Null
|
|
554
|
+
|
|
478
555
|
Log "registering litert-lm serve Scheduled Task on :$Port"
|
|
479
556
|
& powershell.exe -NoProfile -ExecutionPolicy Bypass -File $registration -LitertLmPath $litertlmPath -Port $Port *>> $LogPath
|
|
480
557
|
if ($LASTEXITCODE -ne 0) {
|
|
@@ -495,6 +572,29 @@ if (-not $healthy) {
|
|
|
495
572
|
exit 1
|
|
496
573
|
}
|
|
497
574
|
|
|
575
|
+
# The GPU-vision cascade. Health only proves /v1/models answers, and that route
|
|
576
|
+
# never builds an engine -- so it cannot see a GPU vision encoder that fails on
|
|
577
|
+
# first USE. If the probe inference does not answer we fall back to the CPU
|
|
578
|
+
# encoder rather than leave this host unable to sense at all.
|
|
579
|
+
if (-not (Test-LitertlmVision)) {
|
|
580
|
+
Log "WARN: GPU vision encoder did not answer a probe inference; falling back to the CPU encoder"
|
|
581
|
+
Write-LitertlmConfig | Out-Null
|
|
582
|
+
& powershell.exe -NoProfile -ExecutionPolicy Bypass -File $registration -LitertLmPath $litertlmPath -Port $Port *>> $LogPath
|
|
583
|
+
$healthy = $false
|
|
584
|
+
for ($attempt = 0; $attempt -lt 60 -and -not $healthy; $attempt++) {
|
|
585
|
+
$healthy = Test-ServeHealthy
|
|
586
|
+
if (-not $healthy) { Start-Sleep -Seconds 2 }
|
|
587
|
+
}
|
|
588
|
+
if (-not $healthy) {
|
|
589
|
+
Fail-LocalAi "Gemma is installed, but the local AI service did not respond. Restart Windows, then retry Local AI."
|
|
590
|
+
Stop-SetupLock
|
|
591
|
+
exit 1
|
|
592
|
+
}
|
|
593
|
+
Log "local AI healthy on the CPU vision encoder (slower, but serving)"
|
|
594
|
+
} else {
|
|
595
|
+
Log "local AI healthy with the GPU vision encoder"
|
|
596
|
+
}
|
|
597
|
+
|
|
498
598
|
Complete-Setup
|
|
499
599
|
Stop-SetupLock
|
|
500
600
|
exit 0
|
|
@@ -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,6 +327,35 @@ 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.
|
|
330
359
|
this.admissionGate = new VlmAdmissionGate_1.VlmAdmissionGate({
|
|
331
360
|
maxInFlight: Math.max(1, Math.trunc(options.maxConcurrentAnalyses ?? this.loops.length)),
|
|
332
361
|
maxInFlightMs: options.maxAnalysisInFlightMs,
|