Implement resumable downloads with HTTP Range requests for model-cli pull #60
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.
Adds resumable download support to handle interrupted model pulls. On retry, the system checks for
.incompletefiles, verifies server Range request support viaAccept-Rangesheader, and resumes from the last byte position. Falls back to full download if Range not supported. Includes retry logic (3 attempts, exponential backoff: 1s→2s→4s).Changes
go-containerregistry fetcher (
pkg/go-containerregistry/pkg/v1/remote/)fetchBlobWithOffset(offset)to sendRange: bytes={offset}-headerssupportsRangeRequests()to detect server capability via HEAD requestremoteLayerwithCompressedWithOffset()andSupportsRangeRequests()methodsMountableLayerwrapperStore resumable orchestration (
pkg/distribution/internal/store/blobs.go)ResumableBlobinterface andwriteBlobResumable()with:.incompletefile detection and size checkwriteLayer()to detect and use resumable layers via type assertionExample Flow
Maintains full backward compatibility with existing non-resumable download paths.
Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.