312 Commits

Author SHA1 Message Date
Comma Device 89bf18f9d4 pandad: recover internal panda after one normal boot window 2026-10-27 21:02:16 +08:00
Comma Device dc4208faca ui: expose limited branch switcher in updates menu 2026-10-26 20:17:42 +08:00
Jason Wen df462672bd controls: decouple RELC from BSM blocking, allow nudge override (#2049)
* controls: decouple RELC from BSM blocking, allow nudge override

* nah
2026-10-26 20:13:30 +08:00
Comma Device fd89bfd549 camerad: downscale C3XL OX03C10 to 1344x760 2026-10-26 11:47:38 +08:00
Comma Device 3634987ff1 Revert "camerad: downscale C3XL OX03C10 to 1344x760"
This reverts commit b47ceba267.
2026-10-26 09:50:04 +08:00
Comma Device c497efe5e4 Revert "agnos: update C3XL system and boot to 20.2"
This reverts commit f2b92ba455.
2026-10-25 21:18:50 +08:00
Comma Device 4fcd830e93 ui: rebrand screen saver to MR.ONE and improve clarity 2026-10-25 21:10:33 +08:00
Comma Device f2b92ba455 agnos: update C3XL system and boot to 20.2 2026-10-25 20:59:36 +08:00
Comma Device ca7cdcaae3 tinygrad: merge upstream 92b742f7 (02e698160e) 2026-10-25 17:13:32 +08:00
Comma Device 26a226cd22 tests: tolerate compiled-kernel cache overhead for synthetic artifacts 2026-10-25 17:07:23 +08:00
Comma Device 7ead034def vendor: sync opendbc RX frequency regression tests 2026-10-25 17:05:11 +08:00
Comma Device 2f857d46a9 models: keep HuggingFace mirror fallback for parallel downloads 2026-10-25 17:05:11 +08:00
James Vecellio-Grant 359ef47228 models: self healing test for tg (#2072)
* models: self healing test for tg

* rm container

* ew

* set env

* set var

(cherry picked from commit 9d029d683dea3fd034659d6bc291e3eb46669d7e)
2026-10-25 16:56:59 +08:00
Amy Jeanes db3f3dd46d models: publish the download speed and derive the eta from it (#2052)
* models: publish the download speed and derive the eta from it

Fills in DownloadProgress.speed (bytes per second, declared with the parallel
downloader). The reporter measures the rate between its 0.5 s reports, smooths
it, and derives the eta from the bytes remaining at that rate instead of
extrapolating elapsed time. Speed is zeroed when a download ends, fails or is
cancelled and for a cached artifact, and copied across artifacts that share a
file like the other progress fields.

The big UI's Models page shows "12.3 MB/s" next to the progress bar and the
mici models panel shows it beside the percentage. Both take the max across a
bundle's artifacts, not the sum, since artifacts sharing a file mirror the same
transfer and only one file is ever in flight.

A stall decays the smoothed speed toward 0 without ever reaching it, so below
0.05 MB/s, which would only display as "0.0 MB/s", it snaps to 0. Both UIs
then show "--.- MB/s" while downloading with no rate (before the first reading
or during a stall) instead of a stuck "0.0 MB/s" or nothing, and the speed
recovers straight to the real rate once data flows again. The snap also keeps
the eta in range: without it a stall of about 25 s drove remaining / speed past
the capnp UInt32 eta, and the capnp error failed the download outright instead
of leaving the stall to the read timeout and retries. A test holds a piece
stalled until the published speed reaches exactly 0, and errors on that
overflow without the snap.

Assisted-by: Claude Code (Claude Opus 4.8)
Assisted-by: Claude Code (Claude Opus 5.5)

* remove unneeded comments

Assisted-by: Claude Code (Claude Opus 5.5)

* models: take the speed baseline before the workers start

The reporter took its starting byte count after the piece workers were
submitted, and starting each pool thread lets earlier workers run, so
bytes landed in that gap never counted toward a speed sample. Take the
baseline in _download_file before any worker exists and pass it in.

The test runs every piece inline in submit, so the whole file lands
before the reporter starts; with the late baseline the speed stays 0.

Assisted-by: Claude Code (Claude Opus 5.5)
(cherry picked from commit f78c6c23773f4e6badcf62ee3ac222eb94c0eeb3)
2026-10-25 16:56:42 +08:00
Amy Jeanes 99d9e0658c models: download whole-file artifacts with parallel byte ranges (#2051)
* models: download whole-file artifacts with parallel byte ranges

HuggingFace's Xet CAS throttles each connection to roughly 1-2 MB/s but does
not limit connection count, so the single-stream _download_file left the link
idle most of the time. Replace it with a downloader that probes the size with
a one-byte Range request, creates the file at its final size and streams each
8 MB piece straight to its offset from one of 12 worker threads. The file is
never copied or assembled and only ever occupies its own size on disk. A
server that answers the probe with 200 gets one plain stream instead.
Every request sends Accept-Encoding: identity, because byte ranges count
encoded bytes while requests hands back decoded ones, so a compressed
response would land at the wrong offsets and fail as a short read.

Workers only write bytes; a reporter coroutine on the event loop publishes
progress every 0.5 s (instead of every 128 KB), re-raises the first worker
failure and polls the cancel ref. Transient errors (connection, timeout,
truncated body, HTTP 408/429/500/502/503/504) give a piece up to three
attempts; any other HTTP error fails the download at once. The whole-file
path now also publishes "verifying" while hashing before and after the
transfer, and the download is hashed against the manifest exactly as before.

A cancel has to wait for in-flight pieces to unwind (a blocked socket read
cannot be interrupted), so the row shows "canceling..." through a new
DownloadProgress.canceling flag instead of a frozen bar, and the mici cancel
button hides once the ref is gone, as it already does on the big UI.

DownloadProgress gains speed, canceling and resuming, appended to the capnp so
older readers are unaffected. All three are declared here so the wire format
lands in one place; speed and resuming are filled in by the follow-up speed
and resume changes.

Builds on #2050, which drops chunking and publishes models as whole files;
this makes that whole-file download parallel.

Measured on a comma 3X on WiFi: ~2 MB/s single stream, 17-24 MB/s steady and
30-60 MB/s peak with 12 range connections, the count picked from an on-device
sweep. Disk is not the bottleneck (eMMC writes at 56-67 MB/s with fdatasync).

Tests drive the real downloader against a local threaded range server: piece
tiling, actual parallelism (a stalled piece does not block the others), the
no-range fallback, per-piece retry, 4xx, cancel via ModelManager_DownloadRef
and mid-piece, verify/cached/downloaded state, a probe failure moving
past verifying, and hash mismatch cleanup.

Also drops two chunk-era leftovers in the tests: a stale "no chunks" note on
manifest_bundle and a one-item URL loop in the live manifest check.

Assisted-by: Claude Code (Claude Opus 4.8)
Assisted-by: Claude Code (Claude Opus 5.5)

* remove unneeded comments

* models: trim the manager tests to the regressions they catch

Each remaining test is there because a deliberate break in manager.py,
helpers.py or fetcher.py fails it. Tests that only re-checked what another
already catches are merged into a happy-path download or a table, and
checks of constants rather than behaviour are dropped. The fake server
now starts per test, keeps its state in one dataclass, and can cut a
response short.

Against 66 deliberate breaks, every one the old tests caught still fails,
and a 404 being retried, a short read and its retry, and the display
flags choosing the big model without a GPU are now caught too.

Assisted-by: Claude Code (Claude Opus 5.5)

* Update test_manager_download.py

* Update manager.py

---------

Co-authored-by: James Vecellio-Grant <159560811+Discountchubbs@users.noreply.github.com>
(cherry picked from commit ddd7b14ebca76ccf92d59dd7d8aba391c1231a1a)
2026-10-25 16:55:48 +08:00
Comma Device 63ce8dbdf1 ui: hide uninstall from software settings 2026-10-25 16:45:26 +08:00
Comma Device b47ceba267 camerad: downscale C3XL OX03C10 to 1344x760 2026-10-25 15:24:38 +08:00
Comma Device 609f72c6af ui: move road camera view selection to visual settings 2026-10-23 23:13:14 +08:00
Comma Device 6dfa2c35d8 onroad: add wide and narrow camera toggle 2026-10-23 21:24:51 +08:00
Comma Device 1b944d2e6f volkswagen: guard against stale params library 2026-10-23 21:17:15 +08:00
Comma Device 67701e1833 volkswagen: select gateway or camera connection 2026-10-23 21:13:01 +08:00
1okko df4fa9719f navigation: stream phone maps and remove NAS gateway 2026-10-22 23:08:48 +08:00
1okko e61928652d phone_navi: fix manager process startup 2026-10-22 22:19:24 +08:00
1okko a4fdfa76ec navigation: receive phone routes over LAN and publish cereal 2026-10-22 22:10:59 +08:00
1okko a0d67e6f99 panda: release BOOT0 after reset before SPI flashing 2026-10-22 20:46:21 +08:00
1okko b55df3854f repository: remove unused neural network data 2026-10-22 20:40:14 +08:00
1okko 98e4a6557b repository: vendor neural network data as regular files 2026-10-22 20:39:43 +08:00
1okko b9aaa29827 navigation: isolate route tests from device host config 2026-10-22 19:25:48 +08:00
1okko 8425934c84 navigation: support sidecar LAN host override 2026-10-22 19:23:07 +08:00
1okko 8cf2d99e99 navigation: allow LAN API host override 2026-10-22 19:21:16 +08:00
1okko e3ec766da3 navigation: fetch map tiles on demand 2026-10-22 19:11:45 +08:00
1okko 83b2ab2889 navigation: fix auth test scope 2026-10-22 19:09:58 +08:00
1okko bc1a3b2ed7 navigation: avoid stale tile connections 2026-10-22 19:02:19 +08:00
1okko fd81c4a0bc navigation: prefetch only current map view 2026-10-22 18:46:37 +08:00
1okko 329e1e9e00 navigation: retry flaky gateway requests 2026-10-22 18:38:13 +08:00
1okko dac85d8c3f navigation: use authenticated nav gateway 2026-10-22 18:29:59 +08:00
1okko dd006d3af1 build: refresh params library after cleanup 2026-10-21 21:36:46 +08:00
1okko 156a8e3e3f cleanup: remove unused uploader and runner controls 2026-10-21 21:33:25 +08:00
1okko bac6b3ee58 sunnylink: remove stale references 2026-10-21 21:29:49 +08:00
1okko 96ce41dced sunnypilot: remove Sunnylink integration 2026-10-21 21:24:22 +08:00
1okko 4cad7dde60 hardware: release STM BOOT0 after entering DFU 2026-10-21 21:14:41 +08:00
1okko eac005172f build: refresh generated filters and runtime binaries 2026-10-21 20:59:04 +08:00
1okko f6fd048d7e sunnypilot: use GPS service for map-based SCC 2026-10-21 20:59:02 +08:00
1okko cb72480647 ui: remove MJPEG remote streaming 2026-10-21 20:50:48 +08:00
1okko b409ae7fc4 ui: match C3XL display rate and gate stream encoding 2026-10-21 20:47:12 +08:00
1okko cea05f0842 loggerd: rebuild encoderd with timeout recovery logging 2026-10-21 20:38:05 +08:00
1okko a59b0dac41 loggerd: rate-limit encoder dequeue timeouts 2026-10-21 20:37:37 +08:00
1okko ab5a3f28e9 locationd: rebuild car filter without mass dependency 2026-10-21 20:37:35 +08:00
1okko 8186e88bbc ui: remove unused mici main interface 2026-10-21 20:11:25 +08:00
1okko 2a8c940097 test: sync selfdrived bookmark and model settling behavior 2026-10-21 20:00:15 +08:00