Implement resumable downloads using HTTP Range requests #71
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Downloads interrupted by network issues or user cancellation currently restart from scratch. When pulling large models (e.g.,
ai/smollm2:135M-Q4_0), interrupting and resuming results in downloading from 0 bytes again instead of continuing from the partial download.Changes
ResumableTransport wrapper (
pkg/distribution/internal/store/resume.go)Range: bytes=N-headers based on partial file sizeDidResume()to coordinate with file writing logicStore layer modifications (
pkg/distribution/internal/store/blobs.go).incompletefiles before initiating downloadswriteBlobResumable()appends to partial files when resume succeeds, overwrites when server doesn't support RangewriteLayer()coordinates resume offset between transport and file I/ODistribution client wiring (
pkg/distribution/distribution/client.go)Fetcher compatibility (
pkg/go-containerregistry/pkg/v1/remote/fetcher.go)Behavior
Gracefully falls back to full download when registry doesn't support Range requests (returns 416 or ignores Range header).
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.