ruview @ v1021
integrity
- size
- 54.8 MiB
- downloaded
- last checked
release notes
Automated release from CI pipeline
Changes: feat(cog-person-count): v0.0.1 scaffold + tests + fusion math + bench (ADR-103) (#694)
First implementation PR for ADR-103. Same incremental shape that ADR-101 used: scaffold the cog crate, ship a stub-backend release that satisfies the runtime contract + 15 tests + measured cold-start, then follow up with the trained count_v1.safetensors in a separate PR.
What ships:
-
v2/crates/cog-person-count/ — new workspace member.
- Cargo.toml: candle-core/candle-nn 0.9 (cpu default, cuda feature opt-in), safetensors, ureq, sha2 — same dep shape as the pose cog but minus wifi-densepose-train (this cog has no training-side consumer, so the dep tree is materially smaller → 2.36 MB binary vs the pose cog's 4.5 MB).
- src/inference.rs: CountNet (Conv1d 56→64→128→128 encoder + count
head Linear(128→64→8)+softmax + confidence head
Linear(128→32→1)+sigmoid). Stub backend returns
{1-person, 0-confidence}honestly when no safetensors present. - src/fusion.rs: fuse_confidence_weighted() — Bayesian product of
per-node distributions with confidence-weighted log-sum, plus
fuse_with_mincut_clip() hook for the v0.2.0 Stoer-Wagner
upper-bound (
ruvector-mincutdep lands when min-cut graph builder is ready). Confidences floored at 1e-3 and probs floored at 1e-9 before logs — no NaN propagation. - src/publisher.rs: emits {count, confidence, count_p95_low, count_p95_high, n_nodes, probs} per ADR-103 §"Output".
- src/main.rs: full ADR-100 four-verb CLI (version|manifest|health
|run). The
runsubcommand explicitly returns "wiring pending v0.0.1" so the in-process library API is the v0.0.1-clean integration path. - tests/smoke.rs (8 tests) + fusion::tests (7 tests, in-lib) — 15 total, all green. Cover stub-backend behaviour, wrong-shape rejection, fusion math (empty / single / agreement / high-conf override / normalisation), p95-range correctness, and min-cut clip semantics.
- cog/{manifest.template.json, config.schema.json, README.md} + cog/artifacts/ placeholder dir.
-
v2/Cargo.toml: registers the new workspace member.
Verified locally:
cargo check -p cog-person-count --no-default-features → clean
cargo test -p cog-person-count --no-default-features → 8/8 pass
cargo test -p cog-person-count --lib → 7/7 pass
cargo build -p cog-person-count --release → 2.36 MB binary
./cog-person-count version → "person-count 0.3.0"
./cog-person-count manifest → JSON skeleton
./cog-person-count health → backend:stub,
count:1, conf:0,
p95:[1,1]
Cold-start: 30 sequential health invocations → 53.3 ms/invocation
(vs cog-pose-estimation's 76.2 ms — smaller dep tree)
cog/README.md adds:
- Security section — six-row threat table covering safetensor mmap trust, non-finite outputs, sensing fetch failures, fusion divide-by-zero / log-of-zero, min-cut degenerate cases, and stdout spoofing.
- Performance / optimization section — binary size, release profile (already opt-level=3 / lto=fat / codegen-units=1 / strip=true at workspace level), cold-start comparison table, projected warm-path latency budget.
Still pending (separate PRs, ADR-103 §"Migration"):
- Train count_v1.safetensors on the existing 1,077 paired samples
with
n_personslabels (Candle on RTX 5080, same script that produced pose_v1.safetensors yesterday). runsubcommand wiring (long-running polling loop, same shape as cog-pose-estimation::runtime).- Cross-compile + sign + GCS upload (mirror of cog-pose-estimation release pipeline).
- Server-side
csi.rs::score_to_person_countcall-site rewire to consume this cog when installed; falls back to PR #491's heuristic when not.
Docker Image:
ghcr.io/ruvnet/RuView:6959a4231202357fe95dc9dfdfac46d29e37595f
download
curl -fL -o v1021.zip https://ratatoskr.space/pkg/ruview/v1021.zip
printf '%s %s\n' 'd86b02d72cc78bfa25f9b8942a375c9b46529afe3ab10ca41bf23b50ddb71023' 'v1021.zip' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v1021.zip"
$out = "v1021.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "d86b02d72cc78bfa25f9b8942a375c9b46529afe3ab10ca41bf23b50ddb71023") { throw "sha256 mismatch" }
curl -fL -o v1021.tar.gz https://ratatoskr.space/pkg/ruview/v1021.tar.gz
printf '%s %s\n' '357153de81f8a269c87f2b6854262147bc7c71a6cd4bfedb330369246829ce7e' 'v1021.tar.gz' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ruview/v1021.tar.gz"
$out = "v1021.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "357153de81f8a269c87f2b6854262147bc7c71a6cd4bfedb330369246829ce7e") { throw "sha256 mismatch" }
download via yggdrasil mesh
curl -fL -o v1021.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1021.zip
printf '%s %s\n' 'd86b02d72cc78bfa25f9b8942a375c9b46529afe3ab10ca41bf23b50ddb71023' 'v1021.zip' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1021.zip"
$out = "v1021.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "d86b02d72cc78bfa25f9b8942a375c9b46529afe3ab10ca41bf23b50ddb71023") { throw "sha256 mismatch" }
curl -fL -o v1021.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1021.tar.gz
printf '%s %s\n' '357153de81f8a269c87f2b6854262147bc7c71a6cd4bfedb330369246829ce7e' 'v1021.tar.gz' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1021.tar.gz"
$out = "v1021.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "357153de81f8a269c87f2b6854262147bc7c71a6cd4bfedb330369246829ce7e") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v1021.zip | zip | 54.7 MiB |
blake3-24 d2f0f49c30245001d6069603335ff991244eb1b4bb750732
sha256 d86b02d72cc78bfa25f9b8942a375c9b46529afe3ab10ca41bf23b50ddb71023
sha1 87cfc33951f48d03a8da33546713da3e72e2a7dc
|
| v1021.tar.gz | tar.gz | 53.4 MiB |
blake3-24 13fe25c216588011bf77a9797746f032bb6cbc78d459031b
sha256 357153de81f8a269c87f2b6854262147bc7c71a6cd4bfedb330369246829ce7e
sha1 29be38cd924f67b6a997f6ec7948e9f72db894b6
|
install
http_archive(
name = "ruview",
urls = ["https://ratatoskr.space/pkg/ruview/v1021.tar.gz"],
integrity = "sha256-NXFT3oH4omnIfytoVCYhR7x8cabNS/7bMwNpJGgpzn4=",
strip_prefix = "ruview-v1021",
)
.url = "https://ratatoskr.space/pkg/ruview/v1021.tar.gz",
install via yggdrasil mesh
http_archive(
name = "ruview",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1021.tar.gz"],
integrity = "sha256-NXFT3oH4omnIfytoVCYhR7x8cabNS/7bMwNpJGgpzn4=",
strip_prefix = "ruview-v1021",
)
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ruview/v1021.tar.gz",