Skip to content

fix(tests): make e2e backend model downloads resumable and stall-based#10766

Merged
mudler merged 1 commit into
masterfrom
fix/e2e-backends-large-model-download
Jul 10, 2026
Merged

fix(tests): make e2e backend model downloads resumable and stall-based#10766
mudler merged 1 commit into
masterfrom
fix/e2e-backends-large-model-download

Conversation

@localai-bot

Copy link
Copy Markdown
Collaborator

What

tests-vibevoice-cpp-grpc-transcription hangs until the inner go test -timeout 30m fires whenever the HF CDN has a slow day, and it just failed twice in a row on #10764 (the goroutine dump shows the suite parked inside downloadFile for the full 30 minutes). The same root cause previously forced skipping the job on release tags (#10567).

Why it can never recover today:

  • the ASR Q4_K model is >10 GB (x-linked-size: 10392063296)
  • downloadFile caps every curl attempt at --max-time 600, which needs a sustained ~17 MB/s to fit
  • curl's --retry restarts from byte zero, so 6 capped attempts make zero forward progress and just burn the suite timeout

Fix

  • Replace the wall-clock cap with stall detection: abort an attempt only when throughput drops below 1 MiB/s for 120s (--speed-limit/--speed-time)
  • Resume from the bytes already on disk with -C -; the retry loop moves into Go because curl does not re-evaluate the resume offset on its internal retries
  • Parameterize the suite timeout (BACKEND_TEST_TIMEOUT, default unchanged at 30m) and raise it to 120m for the vibevoice transcription wrapper (a 10 GB pull + 25 specs doesn't fit 30m even on a good day; the job-level GHA timeout there is already 150m)

Verification

  • Resume verified against the real HF Xet CDN object: killed a transfer mid-flight at 114 MB, re-invoked with the same flags, file grew to 235 MB with the GGUF magic intact (appended, not restarted)
  • Makefile plumbing dry-run: default target renders go test -v -timeout 30m, the vibevoice wrapper renders -timeout 120m
  • golangci-lint run --new-from-merge-base=origin/master ./tests/e2e-backends/...: 0 issues

🤖 Generated with Claude Code

The vibevoice transcription e2e hangs until the go test timeout when
the HF CDN is slow: the ASR Q4_K model is >10 GB, downloadFile capped
every curl attempt at --max-time 600 (needs a sustained ~17 MB/s to
fit), and curl's --retry restarts from byte zero, so no attempt ever
makes forward progress. This killed the job twice on PR #10764 and
previously forced skipping it on release tags (#10567).

Replace the wall-clock cap with stall detection (--speed-limit 1 MiB/s
over --speed-time 120s) and resume from the bytes already on disk with
-C -, retrying from Go because curl does not re-evaluate the resume
offset on its internal retries. Resume against the HF Xet CDN was
verified by killing a transfer mid-flight and confirming the next
invocation appended (114 MB -> 235 MB, GGUF magic intact).

Also parameterize the suite timeout (BACKEND_TEST_TIMEOUT, default
30m) and raise it to 120m for the vibevoice transcription wrapper: a
10 GB download plus 25 specs does not fit in 30m even on a good day,
and the job-level GHA timeout there is already 150m.

Signed-off-by: Ettore Di Giacinto <[email protected]>
Assisted-by: Claude:claude-fable-5 [Claude Code]
@mudler mudler merged commit 7e8542b into master Jul 10, 2026
67 checks passed
@mudler mudler deleted the fix/e2e-backends-large-model-download branch July 10, 2026 07:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants