Repository navigation
FIX: modal_setup.py deploys on a new Modal workspace (image builder 2026.10) - #212
Merged
ConalMullan merged 1 commit intoNov 12, 2026
Conversation
… builder version (2026.10) is retried with 2025.06, which the rest of the run keeps A Modal workspace created now defaults to image builder 2026.10. The Modal client in uv.lock (1.5.0) only knows 2023.12 to 2025.06, so every deploy failed before building anything until MODAL_IMAGE_BUILDER_VERSION was exported by hand. modal_setup.py now recognises that error (after joining the lines of the CLI's wrapped error panel), retries the step with 2025.06 and keeps it for later apps in the run. A version the user set (shell, .env or ~/.modal.toml) is left alone and gets a hint instead, and a workspace the client accepts is never pinned, so its cached images aren't rebuilt. Bumping modal (1.6.3 accepts 2026.10) is not enough on its own: 2026.10 drops Python 3.10, which the sadtalker and propainter images use. Docs: modal-setup.md, /setup and .env.example tell deploys by hand to export the variable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
|
Thanks, this is a clear fix and a careful write-up. One small thing: the comment beside |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
What broke
A Modal workspace created now (seen 2026-11-10) builds images with builder version
2026.10by default. The client inuv.lockismodal==1.5.0, which only knows2023.12,2024.04,2024.10and2025.06, so everymodal deployfrom/setupfailed before building anything:Exporting
MODAL_IMAGE_BUILDER_VERSION=2025.06by hand fixed it: qwen3_tts, flux2 and music_gen built and deployed on 2025.06.Why the toolkit needs it: without it,
/setupcan't deploy any Modal app for anyone who signs up for Modal today. It is a fix to an existing tool, not a feature: no new dependency, service, licence or cost.The fix
tools/modal_setup.pyrecognises that error, retries the step withMODAL_IMAGE_BUILDER_VERSION=2025.06, and keeps the variable for the rest of the run, so only the first app fails once. It applies to SoulX'spopulate_weightsstep as well..env(the tool loads it) or in~/.modal.tomlis left alone. If the client refuses that one, the new hint says to set a listed version or remove it.--dry-runand--jsonshow the version when one is set.Docs:
docs/modal-setup.mdgets a section with the error, the bash and PowerShell exports for a deploy by hand, and why not to set it on an older workspace./setupsays the first deploy failing and retrying is expected, and.env.examplepoints deploys by hand at the variable. CHANGELOG entry under Unreleased.Why not bump
modalinsteaduv lock --upgrade-package modalwould pick 1.6.3, which does accept2026.10(checked in an isolated env). In 1.6.3's source, builder2026.10:SUPPORTED_PYTHON_SERIES["2026.10"]starts at 3.11), anddocker/modal-sadtalkeranddocker/modal-propainteruseadd_python="3.10", so those two would stop building on a new workspace;FROMline of a Dockerfile into its own image.So a bump alone would trade one failure for another. It needs either this pin or sadtalker and propainter moved to 3.11 and rebuilt, and that is worth its own PR with real deploys. A comment beside
FALLBACK_BUILDER_VERSIONsays so. All nine apps already installfastapi[standard]themselves, so 2025.06 (which no longer puts the client's dependencies in the image) doesn't break their web endpoints.Testing
tests/python/test_modal_setup.py(8 tests, deploy subprocess faked): the real wrapped panel from modal 1.5.0 at 80 columns and the bare message both trigger one retry, a later app starts pinned, SoulX's weights step retries, a version from the env var or~/.modal.tomlis not overridden and gets the hint, other failures aren't retried, an accepted workspace is never pinned, and the dry run shows the variable._get_image_builder_version("2026.10")raises, for both the workspace default and the env var source.uv run tools/copy_lint.py --diff origin/main --commits origin/mainis clean; CI's ruff selection passes.🤖 Generated with Claude Code