@trillboards/edge-sdk 0.2.111 → 0.2.116
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/detector/bench/regrade_control_selection.py +291 -28
- package/deploy/detector/bench/run_candidate.py +87 -2
- package/deploy/detector/bench/venue_adjudication.py +13 -2
- package/deploy/detector/tests/test_class_ownership.py +126 -0
- package/deploy/detector/tests/test_regrade_control_selection.py +108 -0
- package/deploy/detector/trillboards_detector/labels.py +60 -3
- package/dist/AudienceAnalyzeClient.d.ts +11 -0
- package/dist/AudienceAnalyzeClient.d.ts.map +1 -1
- package/dist/AudienceAnalyzeClient.js +7 -0
- package/dist/AudienceAnalyzeClient.js.map +1 -1
- package/dist/ChannelProber.d.ts +6 -1
- package/dist/ChannelProber.d.ts.map +1 -1
- package/dist/ChannelProber.js +49 -9
- package/dist/ChannelProber.js.map +1 -1
- package/dist/CloudSensingManager.d.ts +20 -0
- package/dist/CloudSensingManager.d.ts.map +1 -1
- package/dist/CloudSensingManager.js +30 -0
- package/dist/CloudSensingManager.js.map +1 -1
- package/dist/EdgeAgent.js +1 -1
- package/dist/SensingProfileClient.d.ts +10 -0
- package/dist/SensingProfileClient.d.ts.map +1 -1
- package/dist/SensingProfileClient.js +16 -0
- package/dist/SensingProfileClient.js.map +1 -1
- package/dist/diagnose.d.ts +1 -1
- package/dist/diagnose.js +1 -1
- package/dist/discovery.d.ts +1 -1
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +15 -4
- package/dist/discovery.js.map +1 -1
- package/dist/localSensing.d.ts +70 -0
- package/dist/localSensing.d.ts.map +1 -1
- package/dist/localSensing.js +182 -1
- package/dist/localSensing.js.map +1 -1
- package/dist/setupMode.d.ts.map +1 -1
- package/dist/setupMode.js +5 -0
- package/dist/setupMode.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"""Who answers a class when two models on one box can both emit it.
|
|
2
|
+
|
|
3
|
+
`BUILTIN_VOCABULARIES` states the principle — "a class stays on the model it
|
|
4
|
+
was SCORED on" — and used catalogue position as the mechanism. Position is a
|
|
5
|
+
proxy and it had already failed in the shipped catalogue: `fall detected` is
|
|
6
|
+
named by `ppe_vyra_14cls_v8m` (position 3) and by `fall_1cls_11x` (position 6),
|
|
7
|
+
so order handed falls to vyra, whose score card fitted that class at the 0.05
|
|
8
|
+
FLOOR on 1 hit of a HARDHAT corpus, while the model actually scored on
|
|
9
|
+
`person_fall` — 18/94, fitted threshold 0.8783 — sat idle on the same box.
|
|
10
|
+
|
|
11
|
+
Nothing about that is visible downstream. Both models emit real boxes with
|
|
12
|
+
plausible confidences; the only difference is a threshold nobody fitted, on a
|
|
13
|
+
class nobody scored, and every health surface stays green.
|
|
14
|
+
|
|
15
|
+
So ownership is now DECLARED (`ModelVocabulary.owns`) and position decides only
|
|
16
|
+
what no model declares. These tests pin the three things that can silently
|
|
17
|
+
regress: the declared owner wins, an absent declarer does not black-hole its
|
|
18
|
+
class, and two declarers is an error rather than a coin flip.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
import unittest
|
|
24
|
+
|
|
25
|
+
from trillboards_detector.labels import (
|
|
26
|
+
BUILTIN_VOCABULARIES,
|
|
27
|
+
ClassIndex,
|
|
28
|
+
ModelVocabulary,
|
|
29
|
+
VariantContract,
|
|
30
|
+
normalize_class_name,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
_VARIANT = VariantContract(
|
|
34
|
+
output_layout="anchor_4_plus_nc", box_units="normalized", box_scale_to_pixels=640.0
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _vocab(name, classes, owns=frozenset()):
|
|
39
|
+
return ModelVocabulary(
|
|
40
|
+
model_name=name,
|
|
41
|
+
slot_names={i: c for i, c in enumerate(classes)},
|
|
42
|
+
logit_slots=len(classes),
|
|
43
|
+
approx_ram_bytes=1,
|
|
44
|
+
onnx_variant=_VARIANT,
|
|
45
|
+
owns=owns,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class DeclaredOwnershipTest(unittest.TestCase):
|
|
50
|
+
def test_declared_owner_beats_catalogue_order(self):
|
|
51
|
+
general = _vocab("general", ["person", "fall detected"])
|
|
52
|
+
specialist = _vocab("specialist", ["fall detected"], owns=frozenset({"fall detected"}))
|
|
53
|
+
# `general` is FIRST, which is what used to decide it.
|
|
54
|
+
index = ClassIndex([general, specialist])
|
|
55
|
+
self.assertEqual(index.owner_of("fall detected"), "specialist")
|
|
56
|
+
self.assertEqual(index.owner_of("person"), "general")
|
|
57
|
+
|
|
58
|
+
def test_position_still_decides_what_nobody_declares(self):
|
|
59
|
+
a = _vocab("a", ["mask", "gloves"])
|
|
60
|
+
b = _vocab("b", ["mask"])
|
|
61
|
+
self.assertEqual(ClassIndex([a, b]).owner_of("mask"), "a")
|
|
62
|
+
self.assertEqual(ClassIndex([b, a]).owner_of("mask"), "b")
|
|
63
|
+
|
|
64
|
+
def test_a_declarer_that_is_not_resident_owns_nothing(self):
|
|
65
|
+
# `ClassIndex` is built over models whose artifact is ON THE BOX. If the
|
|
66
|
+
# specialist has not arrived, its class must fall through to the model
|
|
67
|
+
# that is actually there rather than becoming unanswerable.
|
|
68
|
+
general = _vocab("general", ["person", "fall detected"])
|
|
69
|
+
index = ClassIndex([general])
|
|
70
|
+
self.assertEqual(index.owner_of("fall detected"), "general")
|
|
71
|
+
self.assertIn("fall detected", index.class_names)
|
|
72
|
+
|
|
73
|
+
def test_two_declarers_is_an_error_not_a_coin_flip(self):
|
|
74
|
+
a = _vocab("a", ["fire"], owns=frozenset({"fire"}))
|
|
75
|
+
b = _vocab("b", ["fire"], owns=frozenset({"fire"}))
|
|
76
|
+
with self.assertRaisesRegex(ValueError, "one authority"):
|
|
77
|
+
ClassIndex([a, b])
|
|
78
|
+
|
|
79
|
+
def test_a_model_cannot_own_a_class_it_cannot_emit(self):
|
|
80
|
+
with self.assertRaisesRegex(ValueError, "not one of its own classes"):
|
|
81
|
+
_vocab("a", ["person"], owns=frozenset({"forklift"}))
|
|
82
|
+
|
|
83
|
+
def test_owned_names_must_be_canonical(self):
|
|
84
|
+
# `owner_of` keys on the canonical name, so `fall_detected` here would
|
|
85
|
+
# own nothing at all while looking correct in the source.
|
|
86
|
+
with self.assertRaisesRegex(ValueError, "not canonical"):
|
|
87
|
+
_vocab("a", ["fall detected"], owns=frozenset({"fall_detected"}))
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class ShippedCatalogueTest(unittest.TestCase):
|
|
91
|
+
"""The catalogue as it ships, so a new model cannot quietly take a class."""
|
|
92
|
+
|
|
93
|
+
def test_every_owned_class_is_canonical_and_emittable(self):
|
|
94
|
+
for vocabulary in BUILTIN_VOCABULARIES:
|
|
95
|
+
for owned in vocabulary.owns:
|
|
96
|
+
self.assertEqual(owned, normalize_class_name(owned), vocabulary.model_name)
|
|
97
|
+
self.assertIn(owned, vocabulary.class_names, vocabulary.model_name)
|
|
98
|
+
|
|
99
|
+
def test_the_scored_model_owns_its_class(self):
|
|
100
|
+
index = ClassIndex(BUILTIN_VOCABULARIES)
|
|
101
|
+
# Each of these is a class whose fitted threshold lives on exactly one
|
|
102
|
+
# model's score card, and which at least one OTHER model also emits.
|
|
103
|
+
self.assertEqual(index.owner_of("fall detected"), "fall_1cls_11x")
|
|
104
|
+
self.assertEqual(index.owner_of("person"), "rfdetr_medium")
|
|
105
|
+
self.assertEqual(index.owner_of("hardhat"), "ppe_vyra_14cls_v8m")
|
|
106
|
+
|
|
107
|
+
def test_declaration_changes_exactly_one_ownership(self):
|
|
108
|
+
# The blast radius, asserted rather than assumed: `owns` is a correction
|
|
109
|
+
# to one class, not a re-shuffle of a 124-class union. If a future model
|
|
110
|
+
# moves a second class, that is a decision someone must make on purpose.
|
|
111
|
+
index = ClassIndex(BUILTIN_VOCABULARIES)
|
|
112
|
+
by_position: dict[str, str] = {}
|
|
113
|
+
for vocabulary in BUILTIN_VOCABULARIES:
|
|
114
|
+
for name in sorted(vocabulary.class_names):
|
|
115
|
+
by_position.setdefault(name, vocabulary.model_name)
|
|
116
|
+
moved = {n: (b, index.owner_of(n)) for n, b in by_position.items() if b != index.owner_of(n)}
|
|
117
|
+
self.assertEqual(moved, {"fall detected": ("ppe_vyra_14cls_v8m", "fall_1cls_11x")})
|
|
118
|
+
|
|
119
|
+
def test_no_class_is_left_without_an_owner(self):
|
|
120
|
+
index = ClassIndex(BUILTIN_VOCABULARIES)
|
|
121
|
+
for name in index.class_names:
|
|
122
|
+
self.assertIsNotNone(index.owner_of(name), name)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
if __name__ == "__main__":
|
|
126
|
+
unittest.main()
|
|
@@ -29,7 +29,10 @@ sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent.parent / "bench")
|
|
|
29
29
|
|
|
30
30
|
from regrade_control_selection import ( # noqa: E402
|
|
31
31
|
PRESERVE_ON_BLOCKING,
|
|
32
|
+
RESCORE_SCHEMAS,
|
|
32
33
|
UNRESOLVED,
|
|
34
|
+
apply_rescore,
|
|
35
|
+
load_rescores,
|
|
33
36
|
rateable_controls,
|
|
34
37
|
regrade_capability,
|
|
35
38
|
)
|
|
@@ -116,5 +119,110 @@ class TestRegradeControlSelection(unittest.TestCase):
|
|
|
116
119
|
self.assertEqual(out["status"], "not_affected")
|
|
117
120
|
|
|
118
121
|
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class RescoreReachesTheLadder(unittest.TestCase):
|
|
125
|
+
"""A control added AFTER the screen ran must be able to settle a verdict.
|
|
126
|
+
|
|
127
|
+
Without this the tool has no input for a set the original run never scored,
|
|
128
|
+
so a capability whose verdict a later measurement settles stays `UNRESOLVED`
|
|
129
|
+
for ever while the registry publishes a model — two stores disagreeing about
|
|
130
|
+
whether a capability is sellable, which is the state this input exists to
|
|
131
|
+
end. Proved empirically first: with `fire_firesense` graded `good` and
|
|
132
|
+
visible to it, the tool still returned UNRESOLVED, because the new control
|
|
133
|
+
appears in no candidate's `per_control`.
|
|
134
|
+
"""
|
|
135
|
+
|
|
136
|
+
RESCORE = {("m1", "fire"): {"control": "fresh", "n": 72, "rate_025": 0.82,
|
|
137
|
+
"rate_at_quiet_t": 0.86, "quiet_t": 0.30,
|
|
138
|
+
"source_file": "rescore.json"}}
|
|
139
|
+
CTLQ3 = dict(CTLQ, fresh={"grade": "good"})
|
|
140
|
+
|
|
141
|
+
def test_a_rescore_settles_an_unresolved(self):
|
|
142
|
+
r = regrade_capability(_cap(UNRESOLVED), self.CTLQ3, BAR, self.RESCORE)
|
|
143
|
+
self.assertEqual(r["regraded_decision"], "PUBLISH")
|
|
144
|
+
self.assertEqual(r["winner"]["control"], "fresh")
|
|
145
|
+
self.assertTrue(r["rescored_controls"], "the rescore must be recorded, not silently used")
|
|
146
|
+
|
|
147
|
+
def test_a_rescore_below_the_committed_threshold_is_REFUSED(self):
|
|
148
|
+
"""`off_target_mean` is INHERITED, and only bounds upward.
|
|
149
|
+
|
|
150
|
+
It is `(scores >= t).mean()`, monotone non-increasing in t, so a value
|
|
151
|
+
measured at a LOWER threshold is an upper bound at a higher one. Below
|
|
152
|
+
the committed threshold the bound runs the wrong way and there is no
|
|
153
|
+
off-target number at that operating point — passing the row would assert
|
|
154
|
+
one nobody measured.
|
|
155
|
+
"""
|
|
156
|
+
low = {("m1", "fire"): dict(self.RESCORE[("m1", "fire")], quiet_t=0.10)}
|
|
157
|
+
r = regrade_capability(_cap(UNRESOLVED), self.CTLQ3, BAR, low)
|
|
158
|
+
self.assertEqual(r["regraded_decision"], UNRESOLVED)
|
|
159
|
+
self.assertTrue(any("refused" in n for n in r["rescored_controls"]))
|
|
160
|
+
|
|
161
|
+
def test_an_ungraded_rescored_control_is_refused_not_trusted(self):
|
|
162
|
+
"""An ungraded set falls through both `liveness_only` and `unusable`."""
|
|
163
|
+
with self.assertRaises(SystemExit):
|
|
164
|
+
apply_rescore(_cap(UNRESOLVED)["candidates"][0], self.RESCORE, CTLQ)
|
|
165
|
+
|
|
166
|
+
def test_a_rescore_never_overturns_a_measured_failure_into_silence(self):
|
|
167
|
+
"""A passing rescore may raise a failure to PUBLISH — that is the point —
|
|
168
|
+
but it must do so through the ladder, with a winner and a recorded source."""
|
|
169
|
+
r = regrade_capability(_cap("NO MODEL CLEARS BAR"), self.CTLQ3, BAR, self.RESCORE)
|
|
170
|
+
self.assertEqual(r["regraded_decision"], "PUBLISH")
|
|
171
|
+
self.assertEqual(r["rescored_controls"][0]["source_file"], "rescore.json")
|
|
172
|
+
|
|
173
|
+
def test_an_unreadable_rescore_schema_is_refused_not_skipped(self):
|
|
174
|
+
import json as _json
|
|
175
|
+
import tempfile
|
|
176
|
+
with tempfile.NamedTemporaryFile("w", suffix=".json", delete=False) as fh:
|
|
177
|
+
_json.dump({"schema": "something.else/1"}, fh)
|
|
178
|
+
bad = fh.name
|
|
179
|
+
with self.assertRaises(SystemExit):
|
|
180
|
+
load_rescores([bad])
|
|
181
|
+
|
|
182
|
+
def test_a_stale_threshold_control_may_not_carry_the_verdict(self):
|
|
183
|
+
"""THE RATE BELONGS TO THE THRESHOLD IT WAS MEASURED AT.
|
|
184
|
+
|
|
185
|
+
A rescore raises the candidate's `quiet_t` but re-measures only its OWN
|
|
186
|
+
control. Every other rate in `per_control` is still the value at the
|
|
187
|
+
committed, LOWER threshold, where `(scores >= t).mean()` is an UPPER
|
|
188
|
+
BOUND — so reading it as the recall at the new operating point overstates
|
|
189
|
+
recall. Here `big` is stale at 0.90 and the rescored control is a genuine
|
|
190
|
+
0.30 failure: without per-control threshold tracking `argmax(rate_025)`
|
|
191
|
+
picks `big` and manufactures a PUBLISH out of a number measured somewhere
|
|
192
|
+
else.
|
|
193
|
+
"""
|
|
194
|
+
cap = _cap(UNRESOLVED, with_elided=False)
|
|
195
|
+
cap["candidates"][0]["per_control"]["big"] = {
|
|
196
|
+
"n": 9, "rate_025": 0.90, "rate_at_quiet_t": 0.90}
|
|
197
|
+
weak = {("m1", "fire"): dict(self.RESCORE[("m1", "fire")],
|
|
198
|
+
rate_025=0.30, rate_at_quiet_t=0.30)}
|
|
199
|
+
r = regrade_capability(cap, self.CTLQ3, BAR, weak)
|
|
200
|
+
self.assertNotEqual(
|
|
201
|
+
r["regraded_decision"], "PUBLISH",
|
|
202
|
+
"a rate measured at the committed threshold was used to clear the bar "
|
|
203
|
+
"at the higher rescored threshold")
|
|
204
|
+
stale = r["stale_threshold_controls"]
|
|
205
|
+
self.assertTrue(stale, "the stale-threshold refusal must be stated, not silent")
|
|
206
|
+
self.assertEqual(stale[0]["control"], "big")
|
|
207
|
+
self.assertEqual((stale[0]["measured_at_t"], stale[0]["applied_t"]), (0.25, 0.30))
|
|
208
|
+
|
|
209
|
+
def test_a_control_at_the_applied_threshold_still_carries_the_verdict(self):
|
|
210
|
+
"""The positive half: the rescored control IS at the applied threshold,
|
|
211
|
+
so it decides — this is the path fire and smoke actually take."""
|
|
212
|
+
r = regrade_capability(_cap(UNRESOLVED, with_elided=False),
|
|
213
|
+
self.CTLQ3, BAR, self.RESCORE)
|
|
214
|
+
self.assertEqual(r["regraded_decision"], "PUBLISH")
|
|
215
|
+
self.assertEqual(r["winner"]["control"], "fresh")
|
|
216
|
+
|
|
217
|
+
def test_without_a_rescore_no_control_is_stamped_stale(self):
|
|
218
|
+
"""The untouched path must be byte-identical — nothing is stamped, so
|
|
219
|
+
every control remains admissible."""
|
|
220
|
+
a = regrade_capability(_cap("NO MODEL CLEARS BAR", rateable_rate=0.8), CTLQ, BAR)
|
|
221
|
+
self.assertEqual(a["regraded_decision"], "PUBLISH")
|
|
222
|
+
|
|
223
|
+
def test_the_known_schema_list_is_not_empty(self):
|
|
224
|
+
self.assertTrue(RESCORE_SCHEMAS)
|
|
225
|
+
|
|
226
|
+
|
|
119
227
|
if __name__ == "__main__":
|
|
120
228
|
unittest.main()
|
|
@@ -275,6 +275,26 @@ class ModelVocabulary:
|
|
|
275
275
|
#: axis over. A model whose output layout is inferred is a model whose boxes
|
|
276
276
|
#: are plausible and wrong.
|
|
277
277
|
onnx_variant: "VariantContract"
|
|
278
|
+
#: The classes THIS model is the authority for, canonical spelling.
|
|
279
|
+
#:
|
|
280
|
+
#: The box-side copy of a relation the registry already holds: a model earns
|
|
281
|
+
#: a class by declaring `<class>_present` / `<class>_count` in its
|
|
282
|
+
#: `outputs_schema`, which is also the field its FITTED threshold hangs off
|
|
283
|
+
#: in `liveness_evidence.classes`. Same discipline as `slot_names` and
|
|
284
|
+
#: `onnx_variant` — the registry row is the authority, this is the copy the
|
|
285
|
+
#: service reads because there is no PostgreSQL on a shop PC, and check 10
|
|
286
|
+
#: of `check-sensing-model-publish-gate.js` fails the build when they drift.
|
|
287
|
+
#:
|
|
288
|
+
#: WHY THIS EXISTS RATHER THAN CATALOGUE ORDER. `BUILTIN_VOCABULARIES` states
|
|
289
|
+
#: the right principle — a class stays on the model it was SCORED on — and
|
|
290
|
+
#: position is a proxy for it that has already failed once. `fall detected`
|
|
291
|
+
#: is named by `ppe_vyra_14cls_v8m` (position 3) and by `fall_1cls_11x`
|
|
292
|
+
#: (position 6), so order hands falls to vyra, whose score card fitted that
|
|
293
|
+
#: class at the 0.05 FLOOR on 1 hit of a hardhat corpus, while the model
|
|
294
|
+
#: actually scored on `person_fall` — 18/94, fitted 0.8783 — sits idle. A
|
|
295
|
+
#: threshold nobody fitted, on plausible boxes, with every health surface
|
|
296
|
+
#: green. Declaration is the in-band signal position was standing in for.
|
|
297
|
+
owns: "frozenset[str]" = frozenset()
|
|
278
298
|
|
|
279
299
|
def __post_init__(self) -> None:
|
|
280
300
|
# The model name IS A DIRECTORY NAME — `resolve_model_path` puts the
|
|
@@ -310,6 +330,19 @@ class ModelVocabulary:
|
|
|
310
330
|
f"{self.model_name}: class name {name!r} is not canonical "
|
|
311
331
|
f"(expected {normalize_class_name(name)!r})"
|
|
312
332
|
)
|
|
333
|
+
for owned in sorted(self.owns):
|
|
334
|
+
# A model cannot be the authority for a class it cannot emit, and an
|
|
335
|
+
# un-canonical entry here would silently own nothing — `ClassIndex`
|
|
336
|
+
# keys on the canonical name.
|
|
337
|
+
if normalize_class_name(owned) != owned:
|
|
338
|
+
raise ValueError(
|
|
339
|
+
f"{self.model_name}: owned class {owned!r} is not canonical "
|
|
340
|
+
f"(expected {normalize_class_name(owned)!r})"
|
|
341
|
+
)
|
|
342
|
+
if owned not in set(self.slot_names.values()):
|
|
343
|
+
raise ValueError(
|
|
344
|
+
f"{self.model_name}: claims to own {owned!r}, which is not one of its own classes"
|
|
345
|
+
)
|
|
313
346
|
if len(set(self.slot_names.values())) != len(self.slot_names):
|
|
314
347
|
raise ValueError(f"{self.model_name}: two slots share one class name, so a filter would be ambiguous")
|
|
315
348
|
|
|
@@ -330,6 +363,7 @@ RFDETR_MEDIUM = ModelVocabulary(
|
|
|
330
363
|
logit_slots=EXPECTED_LOGIT_SLOTS,
|
|
331
364
|
approx_ram_bytes=632 * 1024 * 1024,
|
|
332
365
|
onnx_variant=RFDETR_MEDIUM_ONNX,
|
|
366
|
+
owns=frozenset({"person"}),
|
|
333
367
|
)
|
|
334
368
|
|
|
335
369
|
#: Every model this build knows how to label, IN PRIORITY ORDER.
|
|
@@ -367,6 +401,7 @@ GH_FORKLIFT_COMBINE = ModelVocabulary(
|
|
|
367
401
|
box_units="pixels",
|
|
368
402
|
box_scale_to_pixels=1.0,
|
|
369
403
|
),
|
|
404
|
+
owns=frozenset({"forklift"}),
|
|
370
405
|
)
|
|
371
406
|
|
|
372
407
|
#: PPE Detector (hard hat) — published 2026-08-25 by
|
|
@@ -401,6 +436,7 @@ PPE_VYRA_14CLS_V8M = ModelVocabulary(
|
|
|
401
436
|
box_units="pixels",
|
|
402
437
|
box_scale_to_pixels=1.0,
|
|
403
438
|
),
|
|
439
|
+
owns=frozenset({"hardhat"}),
|
|
404
440
|
)
|
|
405
441
|
|
|
406
442
|
#: Heavy Machinery Detector — published 2026-08-25 by
|
|
@@ -438,6 +474,7 @@ PPE_CONSTRUCTION_17CLS_V8N = ModelVocabulary(
|
|
|
438
474
|
box_units="pixels",
|
|
439
475
|
box_scale_to_pixels=1.0,
|
|
440
476
|
),
|
|
477
|
+
owns=frozenset({"excavators"}),
|
|
441
478
|
)
|
|
442
479
|
|
|
443
480
|
#: Fire-Safety Detector — published 2026-08-25 by
|
|
@@ -477,6 +514,7 @@ PPE_KILLUMINATI_19CLS_V8S = ModelVocabulary(
|
|
|
477
514
|
box_units="pixels",
|
|
478
515
|
box_scale_to_pixels=1.0,
|
|
479
516
|
),
|
|
517
|
+
owns=frozenset({"fire extinguisher"}),
|
|
480
518
|
)
|
|
481
519
|
|
|
482
520
|
#: FIVE SPECIALISTS WERE SCORED; FOUR ARE HERE. `gh_fall_tonlong` IS ABSENT ON
|
|
@@ -542,6 +580,7 @@ FALL_1CLS_11X = ModelVocabulary(
|
|
|
542
580
|
box_units="normalized",
|
|
543
581
|
box_scale_to_pixels=640.0,
|
|
544
582
|
),
|
|
583
|
+
owns=frozenset({"fall detected"}),
|
|
545
584
|
)
|
|
546
585
|
|
|
547
586
|
#: Heavy Machinery Detector (venue-adjudicated) — published 2026-08-27 by
|
|
@@ -572,6 +611,7 @@ GH_PPE_VINAYAK_L = ModelVocabulary(
|
|
|
572
611
|
box_units="pixels",
|
|
573
612
|
box_scale_to_pixels=1.0,
|
|
574
613
|
),
|
|
614
|
+
owns=frozenset({"machinery"}),
|
|
575
615
|
)
|
|
576
616
|
|
|
577
617
|
#: Fire and Smoke Detector — published 2026-08-27 by
|
|
@@ -594,6 +634,7 @@ FIRE_SMOKE_WESLLEYSKAH_11N = ModelVocabulary(
|
|
|
594
634
|
box_units="pixels",
|
|
595
635
|
box_scale_to_pixels=1.0,
|
|
596
636
|
),
|
|
637
|
+
owns=frozenset({"fire", "smoke"}),
|
|
597
638
|
)
|
|
598
639
|
|
|
599
640
|
BUILTIN_VOCABULARIES: "tuple[ModelVocabulary, ...]" = (RFDETR_MEDIUM, GH_FORKLIFT_COMBINE, PPE_VYRA_14CLS_V8M, PPE_CONSTRUCTION_17CLS_V8N, PPE_KILLUMINATI_19CLS_V8S, FALL_1CLS_11X, GH_PPE_VINAYAK_L, FIRE_SMOKE_WESLLEYSKAH_11N,)
|
|
@@ -611,11 +652,27 @@ class ClassIndex:
|
|
|
611
652
|
def __init__(self, vocabularies: "Sequence[ModelVocabulary]"):
|
|
612
653
|
self._vocabularies = tuple(vocabularies)
|
|
613
654
|
owner: "dict[str, str]" = {}
|
|
655
|
+
# DECLARED ownership first, and it is exclusive. `owns` is the class a
|
|
656
|
+
# model was scored on, so this is the principle the catalogue order was
|
|
657
|
+
# standing in for, applied directly. Two models declaring one class is
|
|
658
|
+
# unresolvable rather than arbitrary, so it raises here instead of
|
|
659
|
+
# letting whichever sorted first answer at whatever threshold it carries.
|
|
660
|
+
for vocabulary in self._vocabularies:
|
|
661
|
+
for name in sorted(vocabulary.owns):
|
|
662
|
+
if name in owner:
|
|
663
|
+
raise ValueError(
|
|
664
|
+
f"{name!r} is declared owned by both {owner[name]} and "
|
|
665
|
+
f"{vocabulary.model_name}; a class has one authority"
|
|
666
|
+
)
|
|
667
|
+
owner[name] = vocabulary.model_name
|
|
614
668
|
for vocabulary in self._vocabularies:
|
|
615
669
|
for name in sorted(vocabulary.class_names):
|
|
616
|
-
#
|
|
617
|
-
#
|
|
618
|
-
#
|
|
670
|
+
# Catalogue order for everything NOBODY declares — a class no
|
|
671
|
+
# model was scored on has no principled owner, and order at
|
|
672
|
+
# least keeps it stable. `setdefault`, not assignment: a later
|
|
673
|
+
# specialist must not capture a class an earlier model already
|
|
674
|
+
# owns. A declarer that is not RESIDENT owns nothing, so its
|
|
675
|
+
# class falls through to the best model actually on the box.
|
|
619
676
|
owner.setdefault(name, vocabulary.model_name)
|
|
620
677
|
if len({v.model_name for v in self._vocabularies}) != len(self._vocabularies):
|
|
621
678
|
raise ValueError("two vocabularies share one model name")
|
|
@@ -210,6 +210,17 @@ export declare class AudienceAnalyzeClient {
|
|
|
210
210
|
* local-vlm rows while the cloud path is 100%.
|
|
211
211
|
*/
|
|
212
212
|
promptText?: string;
|
|
213
|
+
/**
|
|
214
|
+
* Which fields of `preAnalyzed` a GRANTED SPECIALIST answered, as
|
|
215
|
+
* `field -> modelId`. Everything not named here was answered by the
|
|
216
|
+
* on-device VLM.
|
|
217
|
+
*
|
|
218
|
+
* The two producers write byte-identical values into the same flat
|
|
219
|
+
* object, so this map is the only thing that can separate them — and the
|
|
220
|
+
* server needs it to stamp `local_detector` in `_provenance_map` rather
|
|
221
|
+
* than flattening the whole observation to `local_connector`.
|
|
222
|
+
*/
|
|
223
|
+
detectorProduced?: Record<string, string>;
|
|
213
224
|
}): Promise<AudienceAnalyzeResponse>;
|
|
214
225
|
/**
|
|
215
226
|
* POST a FRAMELESS camera-health beacon. This is used when the connector can
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudienceAnalyzeClient.d.ts","sourceRoot":"","sources":["../src/AudienceAnalyzeClient.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AudienceAnalyzeClient.d.ts","sourceRoot":"","sources":["../src/AudienceAnalyzeClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -230,6 +230,13 @@ class AudienceAnalyzeClient {
|
|
|
230
230
|
...(typeof request.promptText === 'string' && request.promptText.trim() !== ''
|
|
231
231
|
? { localPromptText: request.promptText }
|
|
232
232
|
: {}),
|
|
233
|
+
// Per-field producer attribution. Sent only when a specialist actually
|
|
234
|
+
// answered something: an absent key means "no specialist answered on this
|
|
235
|
+
// frame", which is a different fact from an empty map and the server
|
|
236
|
+
// treats them the same way only because it never sees the second one.
|
|
237
|
+
...(request.detectorProduced && Object.keys(request.detectorProduced).length > 0
|
|
238
|
+
? { detectorProduced: request.detectorProduced }
|
|
239
|
+
: {}),
|
|
233
240
|
// Same last-spread override semantics as analyze(); see the note there.
|
|
234
241
|
...(request.extra || {}),
|
|
235
242
|
...(evidenceId ? { evidenceId } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudienceAnalyzeClient.js","sourceRoot":"","sources":["../src/AudienceAnalyzeClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AudienceAnalyzeClient.js","sourceRoot":"","sources":["../src/AudienceAnalyzeClient.ts"],"names":[],"mappings":"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"}
|
package/dist/ChannelProber.d.ts
CHANGED
|
@@ -112,7 +112,12 @@ export declare function brandPathCandidates(brand: string | undefined, ch: numbe
|
|
|
112
112
|
export declare function credentialFreePathTemplate(pathValue: string, brand: string | undefined): string;
|
|
113
113
|
/** Restore a credential-free path recipe while writing the local-only config. */
|
|
114
114
|
export declare function materializeCredentialPathTemplate(pathTemplate: string, username: string, password: string): string;
|
|
115
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* Build an RTSP URL without duplicating a vendor's in-path authentication.
|
|
117
|
+
* Ordinary recorders keep RFC userinfo with percent-encoded credentials.
|
|
118
|
+
* XMEye/NETSurveillance paths already carry both values and older firmware
|
|
119
|
+
* rejects the same login when it is also repeated in the URL authority.
|
|
120
|
+
*/
|
|
116
121
|
export declare function buildRtspUrl(host: string, port: number, path: string, username: string, password: string): string;
|
|
117
122
|
/** Inject creds into an ONVIF-returned rtsp URI (they usually come credless). */
|
|
118
123
|
export declare function injectCreds(uri: string, username: string, password: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelProber.d.ts","sourceRoot":"","sources":["../src/ChannelProber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAMtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAG1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,gBAAgB,GAChB,kBAAkB,GAClB,cAAc,GACd,UAAU,GACV,UAAU,GACV,WAAW,GACX,cAAc,GACd,eAAe,CAAC;AAEpB,KAAK,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC;AAMnC,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,sEAAsE;AACtE,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,MAAM,CAOT;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"ChannelProber.d.ts","sourceRoot":"","sources":["../src/ChannelProber.ts"],"names":[],"mappings":"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"}
|
package/dist/ChannelProber.js
CHANGED
|
@@ -112,6 +112,10 @@ function normalizeRecorderBrandHint(brand) {
|
|
|
112
112
|
return 'annke';
|
|
113
113
|
if (normalized.includes('dahua'))
|
|
114
114
|
return 'dahua';
|
|
115
|
+
if (normalized === 'lorex-lha' ||
|
|
116
|
+
normalized.includes('lorex lha') ||
|
|
117
|
+
normalized.includes('lorex lnk'))
|
|
118
|
+
return 'lorex-lha';
|
|
115
119
|
if (normalized.includes('lorex'))
|
|
116
120
|
return 'lorex';
|
|
117
121
|
if (normalized.includes('amcrest')) {
|
|
@@ -147,13 +151,19 @@ function brandPathCandidates(brand, ch, credentials) {
|
|
|
147
151
|
`/cam/realmonitor?channel=${ch}&subtype=1`,
|
|
148
152
|
`/cam/realmonitor?channel=${ch}&subtype=0`,
|
|
149
153
|
];
|
|
154
|
+
// Lorex LHA/LNK recorders document `/chAA/B` (AA = zero-padded channel,
|
|
155
|
+
// B = 1 substream / 0 mainstream). Keep this separate from Dahua-derived
|
|
156
|
+
// Lorex firmware: either family may return 401 for the other's unknown path,
|
|
157
|
+
// which must not bypass the first-auth-failure lockout guard.
|
|
158
|
+
const lorexLha = [
|
|
159
|
+
`/ch${String(ch).padStart(2, '0')}/1`,
|
|
160
|
+
`/ch${String(ch).padStart(2, '0')}/0`,
|
|
161
|
+
];
|
|
150
162
|
const uniview = [`/unicast/c${ch}/s1/live`, `/unicast/c${ch}/s0/live`];
|
|
151
|
-
const xmeyeUser = encodeURIComponent(credentials?.username ?? 'admin');
|
|
152
|
-
const xmeyePassword = encodeURIComponent(credentials?.password ?? '');
|
|
153
163
|
const hanwha = [`/LiveChannel/${Math.max(0, ch - 1)}/media.smp`];
|
|
154
164
|
const xmeye = [
|
|
155
|
-
`/user
|
|
156
|
-
`/user
|
|
165
|
+
materializeCredentialPathTemplate(`/user={username}&password={password}&channel=${ch}&stream=1.sdp?real_stream`, credentials?.username ?? 'admin', credentials?.password ?? ''),
|
|
166
|
+
materializeCredentialPathTemplate(`/user={username}&password={password}&channel=${ch}&stream=0.sdp?real_stream`, credentials?.username ?? 'admin', credentials?.password ?? ''),
|
|
157
167
|
];
|
|
158
168
|
const h264Preview = [
|
|
159
169
|
`/h264Preview_${String(ch).padStart(2, '0')}_sub`,
|
|
@@ -217,9 +227,11 @@ function brandPathCandidates(brand, ch, credentials) {
|
|
|
217
227
|
case 'annke': // Hikvision OEM
|
|
218
228
|
return hik;
|
|
219
229
|
case 'dahua':
|
|
220
|
-
case 'lorex': // Dahua
|
|
230
|
+
case 'lorex': // LHV and Dahua-derived Lorex firmware
|
|
221
231
|
case 'amcrest': // Amcrest IP-camera firmware uses Dahua realmonitor paths
|
|
222
232
|
return dahua;
|
|
233
|
+
case 'lorex-lha':
|
|
234
|
+
return lorexLha;
|
|
223
235
|
case 'amcrest-recorder':
|
|
224
236
|
case 'amcrest-nvr':
|
|
225
237
|
case 'amcrest-dvr':
|
|
@@ -272,17 +284,45 @@ function credentialFreePathTemplate(pathValue, brand) {
|
|
|
272
284
|
return pathValue;
|
|
273
285
|
return pathValue.replace(/^\/user=[^&]*&password=[^&]*(&channel=)/i, '/user={username}&password={password}$1');
|
|
274
286
|
}
|
|
287
|
+
function canUseLegacyXmeyePathCredential(value) {
|
|
288
|
+
// Old NETSurveillance/Xiongmai firmware parses these values itself instead
|
|
289
|
+
// of URL-decoding them. In the field, a password containing `@` worked only
|
|
290
|
+
// as a literal path value and was rejected as `%40`. Keep that compatibility
|
|
291
|
+
// fallback deliberately narrow: delimiters/control characters would change
|
|
292
|
+
// the request target and therefore remain percent-encoded.
|
|
293
|
+
return !/[&?#%/=\s\u0000-\u001f\u007f]/.test(value);
|
|
294
|
+
}
|
|
295
|
+
function isXmeyeCredentialPathTemplate(pathTemplate) {
|
|
296
|
+
return /^\/user=\{username\}&password=\{password\}&channel=/i.test(pathTemplate);
|
|
297
|
+
}
|
|
275
298
|
/** Restore a credential-free path recipe while writing the local-only config. */
|
|
276
299
|
function materializeCredentialPathTemplate(pathTemplate, username, password) {
|
|
300
|
+
const legacyRaw = isXmeyeCredentialPathTemplate(pathTemplate) &&
|
|
301
|
+
canUseLegacyXmeyePathCredential(username) &&
|
|
302
|
+
canUseLegacyXmeyePathCredential(password);
|
|
303
|
+
const materialize = (value) => legacyRaw ? value : encodeURIComponent(value);
|
|
277
304
|
return pathTemplate
|
|
278
|
-
.replace(/\{username\}/g,
|
|
279
|
-
.replace(/\{password\}/g,
|
|
305
|
+
.replace(/\{username\}/g, materialize(username))
|
|
306
|
+
.replace(/\{password\}/g, materialize(password));
|
|
307
|
+
}
|
|
308
|
+
function pathCarriesCredentials(pathValue) {
|
|
309
|
+
const hasUser = /(^|[?&/])(user|username|usr)=[^&#]*/i.test(pathValue);
|
|
310
|
+
const hasPassword = /(^|[?&/])(password|passwd|pwd|pass)=[^&#]*/i.test(pathValue);
|
|
311
|
+
return hasUser && hasPassword;
|
|
280
312
|
}
|
|
281
|
-
/**
|
|
313
|
+
/**
|
|
314
|
+
* Build an RTSP URL without duplicating a vendor's in-path authentication.
|
|
315
|
+
* Ordinary recorders keep RFC userinfo with percent-encoded credentials.
|
|
316
|
+
* XMEye/NETSurveillance paths already carry both values and older firmware
|
|
317
|
+
* rejects the same login when it is also repeated in the URL authority.
|
|
318
|
+
*/
|
|
282
319
|
function buildRtspUrl(host, port, path, username, password) {
|
|
320
|
+
const norm = path.startsWith('/') ? path : `/${path}`;
|
|
321
|
+
if (pathCarriesCredentials(norm)) {
|
|
322
|
+
return `rtsp://${host}:${port}${norm}`;
|
|
323
|
+
}
|
|
283
324
|
const u = encodeURIComponent(username);
|
|
284
325
|
const p = encodeURIComponent(password);
|
|
285
|
-
const norm = path.startsWith('/') ? path : `/${path}`;
|
|
286
326
|
return `rtsp://${u}:${p}@${host}:${port}${norm}`;
|
|
287
327
|
}
|
|
288
328
|
/** Inject creds into an ONVIF-returned rtsp URI (they usually come credless). */
|