freesolo-flash-dev 1.2.111__tar.gz → 1.2.112__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (769) hide show
  1. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/bake-kernel-cache.yml +2 -0
  2. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/ci.yml +6 -2
  3. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/deploy-modal-dev.yml +5 -1
  4. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/deploy-modal.yml +3 -2
  5. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-dev.yml +2 -0
  6. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/publish.yml +2 -0
  7. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/Dockerfile +2 -1
  8. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/Dockerfile.serve +2 -1
  9. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/Dockerfile.worker +31 -28
  10. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/PKG-INFO +12 -11
  11. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/worker_output.py +13 -3
  12. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/backend_common.py +10 -5
  13. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/kernel_warmup.py +23 -17
  14. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/sft_train.py +11 -0
  15. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/overrides.py +4 -1
  16. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/verl_config.py +4 -0
  17. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/capabilities.py +51 -15
  18. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/instance.py +3 -2
  19. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/runtime.py +14 -1
  20. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/modal_app.py +3 -1
  21. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/pyproject.toml +27 -15
  22. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_usage_reporter.py +5 -1
  23. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_backend_common.py +73 -24
  24. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_commands_coverage.py +31 -0
  25. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_kernel_fingerprint.py +26 -20
  26. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lora_targeting_pinned_verl.py +1 -1
  27. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_train.py +20 -0
  28. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_rl_train.py +19 -0
  29. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_package.py +3 -3
  30. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_api.py +54 -0
  31. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_train.py +26 -0
  32. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_stack.py +24 -11
  33. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/uv.lock +52 -56
  34. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.dockerignore +0 -0
  35. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.env.example +0 -0
  36. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/CODEOWNERS +0 -0
  37. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  38. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  39. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  40. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  41. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/dependabot.yml +0 -0
  42. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/auto-rebake.yml +0 -0
  43. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/dev-kernel-cache.yml +0 -0
  44. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/main-source-guard.yml +0 -0
  45. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/notify-tests-repo.yml +0 -0
  46. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  47. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-image.yml +0 -0
  48. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-serving-image.yml +0 -0
  49. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/version-parity.yml +0 -0
  50. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/worker-image.yml +0 -0
  51. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.gitignore +0 -0
  52. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/CHANGELOG.md +0 -0
  53. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/CODE_OF_CONDUCT.md +0 -0
  54. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/CONTRIBUTING.md +0 -0
  55. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/LICENSE +0 -0
  56. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/NOTICE +0 -0
  57. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/README.md +0 -0
  58. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/SECURITY.md +0 -0
  59. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/SELF_HOSTING.md +0 -0
  60. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/build/kernel_cache/.gitignore +0 -0
  61. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/build/kernel_cache/.keep +0 -0
  62. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/deploy/infisical/README.md +0 -0
  63. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/deploy/infisical/entrypoint.sh +0 -0
  64. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/Dockerfile.kernelcache +0 -0
  65. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/Dockerfile.kernelcache.relayer +0 -0
  66. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/bake_kernel_cache.py +0 -0
  67. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/bake_pod_entry.py +0 -0
  68. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/extract_cudart_fix.py +0 -0
  69. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/kernel_fingerprint.py +0 -0
  70. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/make_rp_handler.py +0 -0
  71. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docs/serving-contract.md +0 -0
  72. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/__init__.py +0 -0
  73. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/__init__.py +0 -0
  74. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/channel.py +0 -0
  75. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/diagnostics.py +0 -0
  76. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/fileio.py +0 -0
  77. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/logging.py +0 -0
  78. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/paths.py +0 -0
  79. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/adapters/__init__.py +0 -0
  80. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/adapters/artifacts.py +0 -0
  81. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/adapters/fused_experts.py +0 -0
  82. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/adapters/lora_rank.py +0 -0
  83. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/adapters/targets.py +0 -0
  84. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/__init__.py +0 -0
  85. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/__main__.py +0 -0
  86. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/__init__.py +0 -0
  87. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/deploy.py +0 -0
  88. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/__init__.py +0 -0
  89. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/episode.py +0 -0
  90. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/eval.py +0 -0
  91. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/eval_args.py +0 -0
  92. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/imports.py +0 -0
  93. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/list.py +0 -0
  94. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/push.py +0 -0
  95. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/retained.py +0 -0
  96. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/setup.py +0 -0
  97. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/setup_wandb.py +0 -0
  98. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test.py +0 -0
  99. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_evaluations.py +0 -0
  100. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_params.py +0 -0
  101. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_warnings.py +0 -0
  102. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/log_follow.py +0 -0
  103. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/prompt_budget.py +0 -0
  104. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_deploy.py +0 -0
  105. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_identity.py +0 -0
  106. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_status.py +0 -0
  107. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_undeploy.py +0 -0
  108. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/traces.py +0 -0
  109. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/train_cost.py +0 -0
  110. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/errors.py +0 -0
  111. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/scaffold/TRAINING.md +0 -0
  112. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/scaffold/__init__.py +0 -0
  113. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/serve_parser.py +0 -0
  114. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/__init__.py +0 -0
  115. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/cost.py +0 -0
  116. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/env_panels.py +0 -0
  117. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/heartbeat.py +0 -0
  118. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/render.py +0 -0
  119. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/tables.py +0 -0
  120. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/tty.py +0 -0
  121. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/__init__.py +0 -0
  122. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/config.py +0 -0
  123. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/freesolo_api.py +0 -0
  124. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/http.py +0 -0
  125. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/runtime_secrets.py +0 -0
  126. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/shapes.py +0 -0
  127. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/specs.py +0 -0
  128. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/streaming.py +0 -0
  129. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/content/__init__.py +0 -0
  130. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/content/image_descriptors.py +0 -0
  131. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/content/multimodal.py +0 -0
  132. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/content/structured_outputs.py +0 -0
  133. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/content/thinking.py +0 -0
  134. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/core/__init__.py +0 -0
  135. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/core/catalog.py +0 -0
  136. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/core/grpo.py +0 -0
  137. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/core/spec.py +0 -0
  138. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/core/spec_persistence.py +0 -0
  139. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cost/__init__.py +0 -0
  140. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cost/analytical.py +0 -0
  141. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cost/facts.py +0 -0
  142. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cost/spec.py +0 -0
  143. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cost/types.py +0 -0
  144. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/__init__.py +0 -0
  145. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/huggingface.py +0 -0
  146. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/__init__.py +0 -0
  147. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/kv_sizing.py +0 -0
  148. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/model_config_probe.py +0 -0
  149. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/prompt_budget.py +0 -0
  150. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/recipe.py +0 -0
  151. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/steps.py +0 -0
  152. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/vram.py +0 -0
  153. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/__init__.py +0 -0
  154. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/dataset_profile.py +0 -0
  155. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/image_tokens.py +0 -0
  156. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/reasoning_render.py +0 -0
  157. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/sft_image_rows.py +0 -0
  158. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/sft_workload.py +0 -0
  159. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/tokenizer.py +0 -0
  160. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/workload_profile.py +0 -0
  161. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/result/__init__.py +0 -0
  162. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/result/accounting.py +0 -0
  163. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/result/rollout_samples.py +0 -0
  164. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/__init__.py +0 -0
  165. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/__main__.py +0 -0
  166. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/__init__.py +0 -0
  167. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/opd.py +0 -0
  168. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/rl.py +0 -0
  169. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/sft.py +0 -0
  170. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/__init__.py +0 -0
  171. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/heartbeat.py +0 -0
  172. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/hf.py +0 -0
  173. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/prefetch.py +0 -0
  174. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/wandb_log.py +0 -0
  175. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/__init__.py +0 -0
  176. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/adapter.py +0 -0
  177. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/chatml_mask.py +0 -0
  178. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/decoding.py +0 -0
  179. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/lora.py +0 -0
  180. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/packing.py +0 -0
  181. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/opd_train.py +0 -0
  182. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/opd_train_runner.py +0 -0
  183. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/__init__.py +0 -0
  184. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/diagnostics.py +0 -0
  185. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/lifecycle.py +0 -0
  186. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/liger.py +0 -0
  187. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/memory.py +0 -0
  188. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/rl_train.py +0 -0
  189. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/rl_train_runner.py +0 -0
  190. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/__init__.py +0 -0
  191. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/pkg_proxy.py +0 -0
  192. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/rng.py +0 -0
  193. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/score_batcher.py +0 -0
  194. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/sft_train_runner.py +0 -0
  195. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/__init__.py +0 -0
  196. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/client.py +0 -0
  197. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/encoding.py +0 -0
  198. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  199. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/__init__.py +0 -0
  200. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/__init__.py +0 -0
  201. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/checkpoint_lifecycle.py +0 -0
  202. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/__init__.py +0 -0
  203. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/glue.py +0 -0
  204. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/runtime.py +0 -0
  205. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/step_timing.py +0 -0
  206. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/finalize.py +0 -0
  207. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/__init__.py +0 -0
  208. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/batching.py +0 -0
  209. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/bridge.py +0 -0
  210. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/bridge_failures.py +0 -0
  211. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  212. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  213. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/entry.py +0 -0
  214. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
  215. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/plugin.py +0 -0
  216. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  217. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  218. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/structured.py +0 -0
  219. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/failures.py +0 -0
  220. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/gkd.py +0 -0
  221. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/multiturn_media.py +0 -0
  222. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/multiturn_validation.py +0 -0
  223. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/prompts.py +0 -0
  224. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/reporting.py +0 -0
  225. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/scoring.py +0 -0
  226. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/state.py +0 -0
  227. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/validation.py +0 -0
  228. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/__init__.py +0 -0
  229. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/checkpoints.py +0 -0
  230. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  231. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/entry.py +0 -0
  232. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  233. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/patches.py +0 -0
  234. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  235. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/config.py +0 -0
  236. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/identity.py +0 -0
  237. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/inputs.py +0 -0
  238. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/multi_turn.py +0 -0
  239. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/reward_module.py +0 -0
  240. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/scoring.py +0 -0
  241. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/single_turn.py +0 -0
  242. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/__init__.py +0 -0
  243. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/checkpoints.py +0 -0
  244. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/child/entry.py +0 -0
  245. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/child/plugin.py +0 -0
  246. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/config.py +0 -0
  247. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/__init__.py +0 -0
  248. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/checkpoints.py +0 -0
  249. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/child_io.py +0 -0
  250. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/diagnostics.py +0 -0
  251. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/parallelism.py +0 -0
  252. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/parent_work.py +0 -0
  253. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/process_census.py +0 -0
  254. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker_entrypoint.py +0 -0
  255. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/__init__.py +0 -0
  256. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/adapter.py +0 -0
  257. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/base.py +0 -0
  258. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/cache_security.py +0 -0
  259. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/dataset_selection.py +0 -0
  260. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/evaluations.py +0 -0
  261. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/identity.py +0 -0
  262. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/loader.py +0 -0
  263. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/namespace_listing.py +0 -0
  264. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/package/__init__.py +0 -0
  265. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/package/direct_tokens.py +0 -0
  266. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/package/limits.py +0 -0
  267. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/package/unpack.py +0 -0
  268. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/pull.py +0 -0
  269. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/staged.py +0 -0
  270. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/__init__.py +0 -0
  271. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/__init__.py +0 -0
  272. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/auth.py +0 -0
  273. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap.py +0 -0
  274. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_console.py +0 -0
  275. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_pip.py +0 -0
  276. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_secrets.py +0 -0
  277. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/deadline.py +0 -0
  278. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/__init__.py +0 -0
  279. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  280. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/failmark.py +0 -0
  281. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  282. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/http.py +0 -0
  283. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/poll.py +0 -0
  284. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/poll_instance.py +0 -0
  285. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/provider.py +0 -0
  286. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/terminal_artifacts.py +0 -0
  287. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/worker.py +0 -0
  288. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/allocator.py +0 -0
  289. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/__init__.py +0 -0
  290. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/hf.py +0 -0
  291. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/preload_runpod.py +0 -0
  292. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/weight_cache.py +0 -0
  293. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/base.py +0 -0
  294. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/fit_errors.py +0 -0
  295. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/__init__.py +0 -0
  296. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/api.py +0 -0
  297. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/auth.py +0 -0
  298. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/gpus.py +0 -0
  299. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/__init__.py +0 -0
  300. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/builders.py +0 -0
  301. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/reap.py +0 -0
  302. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/preflight.py +0 -0
  303. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/pricing.py +0 -0
  304. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/preflight.py +0 -0
  305. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/realized.py +0 -0
  306. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/__init__.py +0 -0
  307. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/api.py +0 -0
  308. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/auth.py +0 -0
  309. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/cost.py +0 -0
  310. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/gpus.py +0 -0
  311. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/job_execution.py +0 -0
  312. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/jobs.py +0 -0
  313. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/preflight.py +0 -0
  314. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/pricing.py +0 -0
  315. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/resources.py +0 -0
  316. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/serverless/__init__.py +0 -0
  317. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/serverless/endpoints.py +0 -0
  318. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/sharding.py +0 -0
  319. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/__init__.py +0 -0
  320. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/api.py +0 -0
  321. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/auth.py +0 -0
  322. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/jobs/__init__.py +0 -0
  323. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/jobs/builders.py +0 -0
  324. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/preflight.py +0 -0
  325. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/pricing.py +0 -0
  326. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/py.typed +0 -0
  327. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/__init__.py +0 -0
  328. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/artifacts.py +0 -0
  329. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/attempts.py +0 -0
  330. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/costs.py +0 -0
  331. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/deadlines.py +0 -0
  332. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/preparation.py +0 -0
  333. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/reconciliation.py +0 -0
  334. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/results/__init__.py +0 -0
  335. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/results/checkpoints.py +0 -0
  336. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/results/verified_revisions.py +0 -0
  337. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/status.py +0 -0
  338. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/submit.py +0 -0
  339. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/__init__.py +0 -0
  340. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/attach.py +0 -0
  341. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/deploy.py +0 -0
  342. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/lifecycle.py +0 -0
  343. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/recovery.py +0 -0
  344. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/retry_decision.py +0 -0
  345. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/seed_submission.py +0 -0
  346. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/transitions.py +0 -0
  347. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/weight_cache.py +0 -0
  348. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/__init__.py +0 -0
  349. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/build.py +0 -0
  350. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/manifest.py +0 -0
  351. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/profiles.py +0 -0
  352. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/schema/__init__.py +0 -0
  353. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/schema/fields.py +0 -0
  354. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/__init__.py +0 -0
  355. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/adapter_check.py +0 -0
  356. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/__init__.py +0 -0
  357. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/__main__.py +0 -0
  358. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/bootstrap.py +0 -0
  359. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/http.py +0 -0
  360. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/launch.py +0 -0
  361. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/manifest.py +0 -0
  362. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/materialize.py +0 -0
  363. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/openai.py +0 -0
  364. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/progress.py +0 -0
  365. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/contract.py +0 -0
  366. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/__init__.py +0 -0
  367. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/_canonical.py +0 -0
  368. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/_serialization.py +0 -0
  369. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/_urls.py +0 -0
  370. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/credentials.py +0 -0
  371. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/planning.py +0 -0
  372. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/types.py +0 -0
  373. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/deploy.py +0 -0
  374. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/errors.py +0 -0
  375. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/export.py +0 -0
  376. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/preflight.py +0 -0
  377. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/profiles.py +0 -0
  378. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/__init__.py +0 -0
  379. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_common.py +0 -0
  380. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_deployment.py +0 -0
  381. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_lifecycle.py +0 -0
  382. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_plan.py +0 -0
  383. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_probe.py +0 -0
  384. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_readiness.py +0 -0
  385. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_resources.py +0 -0
  386. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_sdk.py +0 -0
  387. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_teardown.py +0 -0
  388. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_wrapper.py +0 -0
  389. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_lifecycle.py +0 -0
  390. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_mutations.py +0 -0
  391. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_plan.py +0 -0
  392. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_probe.py +0 -0
  393. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_protocol.py +0 -0
  394. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_readiness.py +0 -0
  395. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_resources.py +0 -0
  396. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_transport.py +0 -0
  397. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/modal.py +0 -0
  398. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/runpod.py +0 -0
  399. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/request_validation.py +0 -0
  400. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/resolve.py +0 -0
  401. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/responses.py +0 -0
  402. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/__init__.py +0 -0
  403. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/adapters.py +0 -0
  404. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/engine.py +0 -0
  405. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/errors.py +0 -0
  406. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/multimodal.py +0 -0
  407. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/prompt.py +0 -0
  408. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/structured_outputs.py +0 -0
  409. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/types.py +0 -0
  410. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime_support.py +0 -0
  411. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/streaming.py +0 -0
  412. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/thinking.py +0 -0
  413. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/urls.py +0 -0
  414. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/__init__.py +0 -0
  415. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/__main__.py +0 -0
  416. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/app.py +0 -0
  417. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/billing/__init__.py +0 -0
  418. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/billing/charges.py +0 -0
  419. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/billing/retry.py +0 -0
  420. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/__init__.py +0 -0
  421. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/checkpoints.py +0 -0
  422. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/environment_registry.py +0 -0
  423. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/envs.py +0 -0
  424. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/projects.py +0 -0
  425. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/reconcile.py +0 -0
  426. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/repo_cleanup.py +0 -0
  427. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/run_registry.py +0 -0
  428. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/serving_resources.py +0 -0
  429. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_broker.py +0 -0
  430. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_errors.py +0 -0
  431. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_requests.py +0 -0
  432. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/__init__.py +0 -0
  433. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/auth.py +0 -0
  434. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/db.py +0 -0
  435. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/deps.py +0 -0
  436. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/internal_client.py +0 -0
  437. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/locks.py +0 -0
  438. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/__init__.py +0 -0
  439. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/envs.py +0 -0
  440. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/meta.py +0 -0
  441. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/runs.py +0 -0
  442. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving.py +0 -0
  443. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_completion.py +0 -0
  444. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_revisions.py +0 -0
  445. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_smoke.py +0 -0
  446. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/teacher.py +0 -0
  447. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/README.md +0 -0
  448. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/__init__.py +0 -0
  449. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/__init__.py +0 -0
  450. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/adapter_routes.py +0 -0
  451. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/body_limit.py +0 -0
  452. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/context.py +0 -0
  453. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_boot.py +0 -0
  454. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_errors.py +0 -0
  455. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_support.py +0 -0
  456. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/http_headers.py +0 -0
  457. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/inference_routes.py +0 -0
  458. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/lookup.py +0 -0
  459. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/lora_engine.py +0 -0
  460. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/lora_entries.py +0 -0
  461. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/model_config.py +0 -0
  462. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/multimodal.py +0 -0
  463. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/persisted_columns.py +0 -0
  464. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/persistence.py +0 -0
  465. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/prequant_config.py +0 -0
  466. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/registration.py +0 -0
  467. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/registry.py +0 -0
  468. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/responses.py +0 -0
  469. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/router.py +0 -0
  470. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/routing.py +0 -0
  471. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/schemas.py +0 -0
  472. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/serving_io.py +0 -0
  473. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/settings.py +0 -0
  474. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/streaming.py +0 -0
  475. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/structured_outputs.py +0 -0
  476. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/supabase_rest.py +0 -0
  477. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/undeploy.py +0 -0
  478. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/usage.py +0 -0
  479. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/source_snapshot.py +0 -0
  480. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/teacher/__init__.py +0 -0
  481. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/teacher/limits.py +0 -0
  482. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/teacher/provider_status.py +0 -0
  483. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/teacher/retry_contract.py +0 -0
  484. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/build_dev_dist.py +0 -0
  485. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/check_file_size.py +0 -0
  486. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/check_function_size.py +0 -0
  487. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/check_rollout_identity_actor.py +0 -0
  488. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/check_verl_pin_exists.py +0 -0
  489. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/scrub_history.sh +0 -0
  490. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/serve_launch.py +0 -0
  491. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/__init__.py +0 -0
  492. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/__init__.py +0 -0
  493. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/profile.py +0 -0
  494. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/runner.py +0 -0
  495. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/source_snapshot.py +0 -0
  496. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/specs.py +0 -0
  497. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/teacher.py +0 -0
  498. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/vast.py +0 -0
  499. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/capture_image_sft_processor_oracle.py +0 -0
  500. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/conftest.py +0 -0
  501. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  502. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/fixtures/qwen35_08b_target_metadata.json +0 -0
  503. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/__init__.py +0 -0
  504. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/conftest.py +0 -0
  505. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/test_lambda_live.py +0 -0
  506. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/test_runpod_live.py +0 -0
  507. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/test_sft_thinking_render_live.py +0 -0
  508. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/test_vast_live.py +0 -0
  509. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/conftest.py +0 -0
  510. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_base_model_serving.py +0 -0
  511. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_chat_auth.py +0 -0
  512. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_chat_authorizer.py +0 -0
  513. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_checkpoint_model_validation.py +0 -0
  514. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_engine_error_status.py +0 -0
  515. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_fp8_config.py +0 -0
  516. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_engine.py +0 -0
  517. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_revisions.py +0 -0
  518. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_schemas.py +0 -0
  519. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_modal_deploy_identity.py +0 -0
  520. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_modal_image_paths.py +0 -0
  521. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_model_config.py +0 -0
  522. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_multimodal.py +0 -0
  523. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_openai_stream_options.py +0 -0
  524. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_per_model_gpu.py +0 -0
  525. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_persistence.py +0 -0
  526. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_pre_first_disconnect.py +0 -0
  527. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_prequant_config.py +0 -0
  528. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_registry.py +0 -0
  529. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_registry_coverage.py +0 -0
  530. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_request_body_limit.py +0 -0
  531. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_router.py +0 -0
  532. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_router_coverage.py +0 -0
  533. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_router_edge_coverage.py +0 -0
  534. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_schemas_coverage.py +0 -0
  535. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_reasoning_split.py +0 -0
  536. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_structured_outputs.py +0 -0
  537. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_thinking.py +0 -0
  538. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_settings.py +0 -0
  539. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_structured_outputs.py +0 -0
  540. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_structured_outputs_coverage.py +0 -0
  541. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_supabase_rest_coverage.py +0 -0
  542. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/__init__.py +0 -0
  543. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/conftest.py +0 -0
  544. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/test_contract.py +0 -0
  545. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_accounting_coverage.py +0 -0
  546. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_adapter_shard_completeness.py +0 -0
  547. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_agent_flash_cli_contract.py +0 -0
  548. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_algorithms.py +0 -0
  549. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_allocator.py +0 -0
  550. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_backend_jobspec_contract.py +0 -0
  551. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_bake_kernel_cache.py +0 -0
  552. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_base_model_provenance.py +0 -0
  553. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_billing_retry.py +0 -0
  554. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_build_context_contract.py +0 -0
  555. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cancel_remote.py +0 -0
  556. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_catalog_consistency.py +0 -0
  557. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_catalog_only_models.py +0 -0
  558. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_charge_pricing.py +0 -0
  559. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_checkpoint_lifecycle.py +0 -0
  560. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_checkpoints.py +0 -0
  561. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_commands.py +0 -0
  562. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_credential_shadowing.py +0 -0
  563. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_errors.py +0 -0
  564. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_estimate.py +0 -0
  565. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_gpus_flag.py +0 -0
  566. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_help.py +0 -0
  567. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_main_coverage.py +0 -0
  568. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_managed.py +0 -0
  569. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_render_coverage.py +0 -0
  570. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_render_theme.py +0 -0
  571. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_deploy.py +0 -0
  572. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_status.py +0 -0
  573. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_undeploy.py +0 -0
  574. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_traces.py +0 -0
  575. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_wandb_warning.py +0 -0
  576. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_client.py +0 -0
  577. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_client_import_purity.py +0 -0
  578. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_client_server_integration.py +0 -0
  579. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_client_stream_reads.py +0 -0
  580. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_config_env_vars.py +0 -0
  581. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_config_overrides.py +0 -0
  582. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_console_upload.py +0 -0
  583. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_controlled_experiment_repairs.py +0 -0
  584. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cost_analytical.py +0 -0
  585. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cost_equation.py +0 -0
  586. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cost_estimate.py +0 -0
  587. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cost_hardware.py +0 -0
  588. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cost_models.py +0 -0
  589. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_dataset_profile.py +0 -0
  590. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_deploy_alias_move_warning.py +0 -0
  591. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_deploy_latency.py +0 -0
  592. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_dev_channel.py +0 -0
  593. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_disk_gb.py +0 -0
  594. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_endpoint_name.py +0 -0
  595. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_cache_evict.py +0 -0
  596. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_delete.py +0 -0
  597. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_download.py +0 -0
  598. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_download_api.py +0 -0
  599. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_evaluations.py +0 -0
  600. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_list_api.py +0 -0
  601. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_list_cli.py +0 -0
  602. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_list_hub.py +0 -0
  603. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_no_install.py +0 -0
  604. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_publish.py +0 -0
  605. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_pull.py +0 -0
  606. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_coverage.py +0 -0
  607. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_loader_coverage.py +0 -0
  608. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_managed_control_plane.py +0 -0
  609. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_push.py +0 -0
  610. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_rate_limit_resolve.py +0 -0
  611. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_ref_pinning.py +0 -0
  612. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_test.py +0 -0
  613. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_envs_coverage.py +0 -0
  614. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_export.py +0 -0
  615. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_flash_mvp.py +0 -0
  616. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_flash_worker.py +0 -0
  617. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_flashinfer_cache_dirs.py +0 -0
  618. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_freesolo_api_transport.py +0 -0
  619. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_fused_expert_warmstart.py +0 -0
  620. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_github_urlopen_retry.py +0 -0
  621. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_gpu_type_single_field.py +0 -0
  622. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_gpus.py +0 -0
  623. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_params.py +0 -0
  624. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_process_census.py +0 -0
  625. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_resident_sizing.py +0 -0
  626. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_reward_batching.py +0 -0
  627. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_rollout_contract.py +0 -0
  628. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_rollout_identity.py +0 -0
  629. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_health_liveness.py +0 -0
  630. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_hf_retry.py +0 -0
  631. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_idle_endpoint_reaper.py +0 -0
  632. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_image_environment_capability.py +0 -0
  633. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_image_incremental_processor.py +0 -0
  634. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_image_sft_markers.py +0 -0
  635. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_image_sft_processor_parity.py +0 -0
  636. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_image_tokens.py +0 -0
  637. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_infisical_secrets.py +0 -0
  638. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_instance_bootstrap_coverage.py +0 -0
  639. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_internal_client.py +0 -0
  640. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_jobs.py +0 -0
  641. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_kernel_cache.py +0 -0
  642. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_kv_util.py +0 -0
  643. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lambda_api_coverage.py +0 -0
  644. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lambda_runner.py +0 -0
  645. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_logging.py +0 -0
  646. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_login_perms.py +0 -0
  647. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_coverage.py +0 -0
  648. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_nested_rung.py +0 -0
  649. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_preflight.py +0 -0
  650. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lora_targeting.py +0 -0
  651. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_managed_config_fields.py +0 -0
  652. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_managed_hf_repo.py +0 -0
  653. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_metrics_schema_agent_contract.py +0 -0
  654. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_mig_guard.py +0 -0
  655. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_multi_gpu_gate.py +0 -0
  656. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_multimodal_training.py +0 -0
  657. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_named_reward_metrics.py +0 -0
  658. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_oom_escalate_gpu.py +0 -0
  659. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd.py +0 -0
  660. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_limits.py +0 -0
  661. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  662. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_multiturn_failure_exit.py +0 -0
  663. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_replay_guard.py +0 -0
  664. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_resume_safety.py +0 -0
  665. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_orchestrator_flash.py +0 -0
  666. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_packing.py +0 -0
  667. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_packing_coverage.py +0 -0
  668. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_parasail_teacher.py +0 -0
  669. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_persisted_spec_envelope.py +0 -0
  670. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_poll_helpers.py +0 -0
  671. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_preflight.py +0 -0
  672. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_projects.py +0 -0
  673. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_prompt_budget.py +0 -0
  674. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_provider_preflight_coverage.py +0 -0
  675. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_provider_routing.py +0 -0
  676. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_provider_teardown_robustness.py +0 -0
  677. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_providers_symmetry.py +0 -0
  678. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_realized_cost.py +0 -0
  679. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_repo_cleanup.py +0 -0
  680. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_resolve_params_b.py +0 -0
  681. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_resume_on_retry.py +0 -0
  682. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_rollout_samples.py +0 -0
  683. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_runmgmt.py +0 -0
  684. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_runpod_api_delete.py +0 -0
  685. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_runpod_key_fingerprint.py +0 -0
  686. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_runpod_key_waterfall.py +0 -0
  687. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_runtime_capsule.py +0 -0
  688. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve.py +0 -0
  689. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_bootstrap_http.py +0 -0
  690. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_launch.py +0 -0
  691. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_manifest.py +0 -0
  692. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_materialize.py +0 -0
  693. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_packaging.py +0 -0
  694. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_control.py +0 -0
  695. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_sdk.py +0 -0
  696. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  697. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_teardown_identity.py +0 -0
  698. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_profiles.py +0 -0
  699. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_common.py +0 -0
  700. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_modal.py +0 -0
  701. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_runpod.py +0 -0
  702. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_reasoning_content.py +0 -0
  703. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_resolve_provenance.py +0 -0
  704. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_adapters.py +0 -0
  705. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_engine.py +0 -0
  706. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_types.py +0 -0
  707. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_app_coverage.py +0 -0
  708. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_auth_singleflight.py +0 -0
  709. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_billing.py +0 -0
  710. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_checkpoints_coverage.py +0 -0
  711. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_db.py +0 -0
  712. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_envs_coverage.py +0 -0
  713. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_locks_coverage.py +0 -0
  714. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_serving_resources.py +0 -0
  715. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_standalone.py +0 -0
  716. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serving_conformance_gate.py +0 -0
  717. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serving_context_preflight.py +0 -0
  718. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serving_contract.py +0 -0
  719. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serving_schema_coverage.py +0 -0
  720. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_chunked_nll.py +0 -0
  721. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_example_selection.py +0 -0
  722. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_gc_off.py +0 -0
  723. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_max_context.py +0 -0
  724. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_startup_block.py +0 -0
  725. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_workload.py +0 -0
  726. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_source_attestation_flow.py +0 -0
  727. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_source_snapshot.py +0 -0
  728. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_spec_and_validation.py +0 -0
  729. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_spec_contract_bytes.py +0 -0
  730. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_staged_environment.py +0 -0
  731. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_step_floor.py +0 -0
  732. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_step_metrics.py +0 -0
  733. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_step_timing.py +0 -0
  734. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_structured_outputs.py +0 -0
  735. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_teacher_broker.py +0 -0
  736. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_teacher_encoding_contract.py +0 -0
  737. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_terminal_artifacts.py +0 -0
  738. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_thinking_config.py +0 -0
  739. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_train_context_preflight.py +0 -0
  740. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_training_controls.py +0 -0
  741. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_type_comment_prose.py +0 -0
  742. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vast_api.py +0 -0
  743. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vast_api_coverage.py +0 -0
  744. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vast_offers.py +0 -0
  745. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vast_provider_coverage.py +0 -0
  746. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vast_runner.py +0 -0
  747. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_verified_revisions.py +0 -0
  748. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_verifiers.py +0 -0
  749. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_verl_checkpoint_export.py +0 -0
  750. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_verl_child_plugins.py +0 -0
  751. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_verl_silence_watchdog.py +0 -0
  752. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_version.py +0 -0
  753. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  754. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vram_architecture.py +0 -0
  755. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_wandb_link.py +0 -0
  756. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_wandb_naming.py +0 -0
  757. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_adapter_download.py +0 -0
  758. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_cross_repo.py +0 -0
  759. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_error_attribution.py +0 -0
  760. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_image_adapters.py +0 -0
  761. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_weight_cache.py +0 -0
  762. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_dryrun.py +0 -0
  763. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_hardexit.py +0 -0
  764. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_image.py +0 -0
  765. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_init_heartbeat.py +0 -0
  766. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_thinking.py +0 -0
  767. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_workflow_contracts.py +0 -0
  768. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_workload_profile.py +0 -0
  769. {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_zero2_sharding_gate.py +0 -0
@@ -197,6 +197,8 @@ jobs:
197
197
  if: steps.gate.outputs.run == 'true'
198
198
  uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
199
199
  with:
200
+ # pin the installed binary as well as the action implementation.
201
+ version: "0.12.5"
200
202
  # no cache: the post-run cache-prune calls `uv`, but the "Free disk space" step deletes
201
203
  # /opt/hostedtoolcache (where setup-uv put uv), so the post step fails ("uv not found") and
202
204
  # marks the whole job red even though the bake + push already succeeded.
@@ -35,10 +35,12 @@ jobs:
35
35
  - name: Install uv
36
36
  uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
37
37
  with:
38
+ # pin the installed binary as well as the action implementation.
39
+ version: "0.12.5"
38
40
  python-version: ${{ matrix.python-version }}
39
41
 
40
42
  - name: Sync (server extra + dev)
41
- run: uv sync --extra server --extra serving --dev
43
+ run: uv sync --extra server --extra serving --dev --locked
42
44
 
43
45
  - name: Ruff check
44
46
  run: uv run ruff check .
@@ -158,10 +160,12 @@ jobs:
158
160
  - name: Install uv
159
161
  uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
160
162
  with:
163
+ # pin the installed binary as well as the action implementation.
164
+ version: "0.12.5"
161
165
  python-version: "3.11"
162
166
 
163
167
  - name: Sync (server extra + dev)
164
- run: uv sync --extra server --extra serving --dev
168
+ run: uv sync --extra server --extra serving --dev --locked
165
169
 
166
170
  - name: mypy
167
171
  run: |
@@ -99,6 +99,9 @@ jobs:
99
99
 
100
100
  - uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6
101
101
  if: steps.gate.outputs.deploy == 'true'
102
+ with:
103
+ # pin the installed binary as well as the action implementation.
104
+ version: "0.12.5"
102
105
 
103
106
  - name: Install Modal client
104
107
  if: steps.gate.outputs.deploy == 'true'
@@ -109,7 +112,8 @@ jobs:
109
112
  # app file, so running from the repo root is what resolves `from flash.serving.src...`.
110
113
  # pinned to the exact client pyproject declares; see deploy-modal.yml for why an
111
114
  # unbounded range is unsafe for the deploy path.
112
- uv pip install --system "modal==1.5.4" "python-dotenv>=1.0.0"
115
+ # exact pins keep the deploy client bootstrap reproducible across runner image changes.
116
+ uv pip install --system "modal==1.5.4" "python-dotenv==1.2.3"
113
117
 
114
118
  - name: Verify development deployment inputs
115
119
  if: steps.gate.outputs.deploy == 'true'
@@ -143,11 +143,12 @@ jobs:
143
143
  # `working-directory` default) is what makes `from flash.serving.src...` resolve at deploy
144
144
  # time. Installing flash here would instead risk importing a DIFFERENT copy than the one
145
145
  # `add_local_python_source("flash")` ships to the container.
146
- python -m pip install --upgrade pip
146
+ # exact pins keep the deploy client bootstrap reproducible across runner image changes.
147
+ python -m pip install --upgrade "pip==26.2.1"
147
148
  # pinned to the exact client pyproject declares and the provisioning path was validated
148
149
  # against: deploy behaviour (app lifecycle, tags, lookup) is client-version sensitive, so
149
150
  # an unbounded range lets a future release change deploys with no diff here.
150
- python -m pip install "modal==1.5.4" "python-dotenv>=1.0.0"
151
+ python -m pip install "modal==1.5.4" "python-dotenv==1.2.3"
151
152
 
152
153
  - name: Verify Modal auth is configured
153
154
  if: steps.gate.outputs.deploy == 'true'
@@ -138,6 +138,8 @@ jobs:
138
138
  if: steps.decide.outputs.publish == 'true'
139
139
  uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
140
140
  with:
141
+ # pin the installed binary as well as the action implementation.
142
+ version: "0.12.5"
141
143
  python-version: "3.11"
142
144
 
143
145
  - name: Build dev-channel distribution
@@ -204,6 +204,8 @@ jobs:
204
204
  if: github.event_name == 'workflow_dispatch' || steps.changes.outputs.package_changed == 'true'
205
205
  uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
206
206
  with:
207
+ # pin the installed binary as well as the action implementation.
208
+ version: "0.12.5"
207
209
  python-version: "3.11"
208
210
 
209
211
  - name: Build distributions
@@ -14,7 +14,8 @@
14
14
  # also mount its own volume at the new location — otherwise state lands on the container's
15
15
  # writable layer and disappears when the container is replaced.
16
16
 
17
- FROM python:3.12-slim
17
+ # digest-pinned so control-plane rebuilds reuse the exact reviewed base image bytes.
18
+ FROM python:3.12-slim@sha256:2c941e860699f878900b0edc2403613c234d4b32eda3cc9fa7036991a2a63c4a
18
19
 
19
20
  WORKDIR /app
20
21
  COPY . .
@@ -1,6 +1,7 @@
1
1
  # immutable flash serving runtime. the cuda major version is set by the serve-runtime vllm pin,
2
2
  # whose compiled extension links libcudart.so.13 -- see the assertion below.
3
- FROM pytorch/pytorch:2.11.0-cuda13.0-cudnn9-devel
3
+ # digest-pinned so serving rebuilds reuse the exact cuda and torch base image bytes.
4
+ FROM pytorch/pytorch:2.11.0-cuda13.0-cudnn9-devel@sha256:6e8a7a6dedf900096f90190f66f988e7e658cda4f1e6cbc7c17e3a38980a4f89
4
5
 
5
6
  # PIP_BREAK_SYSTEM_PACKAGES matches Dockerfile.worker, which shares this base image. The base
6
7
  # ships a Debian-style PEP 668 marker (/usr/lib/python3.12/EXTERNALLY-MANAGED), so the pinned-uv
@@ -11,9 +11,10 @@
11
11
  # # then make the GHCR package public (org packages settings) once.
12
12
  #
13
13
  # Base is torch 2.10 / cu12.8 / cudnn9 (-devel = has nvcc for any source builds); it ships the
14
- # CUDA 12.8 runtime libs the PyPI wheels link against. The pinned stack mirrors
15
- # flash/providers/_lifecycle/worker.py:WORKER_DEPS.
16
- FROM pytorch/pytorch:2.10.0-cuda12.8-cudnn9-devel
14
+ # CUDA 12.8 runtime libs the PyPI wheels link against. The exact install block below is the deployed
15
+ # worker stack source of truth; the fallback verl venv is kept in lockstep in capabilities.py.
16
+ # digest-pinned so worker rebuilds reuse the exact torch and cuda base image bytes.
17
+ FROM pytorch/pytorch:2.10.0-cuda12.8-cudnn9-devel@sha256:b574d4ccf6d8856a5d87dcadc667aa4f95dc18d337ef3a28d02b7b01897d7081
17
18
 
18
19
  ENV DEBIAN_FRONTEND=noninteractive \
19
20
  HF_HUB_ENABLE_HF_TRANSFER=1 \
@@ -47,23 +48,24 @@ RUN apt-get update && apt-get install -y --no-install-recommends build-essential
47
48
  && rm -rf /var/lib/apt/lists/*
48
49
 
49
50
  # The pinned worker stack (torch already in the base image, version-matched so pip skips it).
51
+ # exact pins preserve the already-resolved worker environment across image rebuilds.
50
52
  RUN pip install --no-cache-dir \
51
- "transformers>=5.6,<5.13" \
52
- "peft>=0.19" \
53
+ "transformers==5.12.1" \
54
+ "peft==0.20.0" \
53
55
  "vllm==0.19.1" \
54
56
  "flashinfer-python==0.6.6" \
55
- "bitsandbytes>=0.49" \
56
- "datasets>=4.7,<6" \
57
- "huggingface_hub>=1.2.0" \
58
- "accelerate>=1.4" \
59
- "wandb>=0.17" \
57
+ "bitsandbytes==0.50.1" \
58
+ "datasets==5.0.1" \
59
+ "huggingface_hub==1.28.0" \
60
+ "accelerate==1.14.0" \
61
+ "wandb==0.28.2" \
60
62
  "flash-linear-attention @ git+https://github.com/fla-org/flash-linear-attention.git@9c8e42e762fce087c27b673af4922795d9edb85e" \
61
63
  "flash-qla==0.1.2" \
62
64
  "tilelang==0.1.9" \
63
65
  "apache-tvm-ffi==0.1.9" \
64
- "hf_transfer" \
65
- "freesolo>=0.4.1" \
66
- "runpod"
66
+ "hf_transfer==0.1.9" \
67
+ "freesolo==0.4.1" \
68
+ "runpod==1.12.0"
67
69
  # Gated-DeltaNet (Qwen3.5/3.6) runs on flash-linear-attention's Triton kernels. On consumer cards
68
70
  # (Ampere/Ada/Blackwell) the Triton path is correct. On Hopper (sm90) fla's GDN chunk_bwd is
69
71
  # miscomputed with Triton>=3.4 (fla #640) — the fix is fla's TILELANG backend (correct there), so
@@ -310,22 +312,22 @@ print('worker stack OK | torch', torch.__version__, '| cudnn', cudnn, '| triton'
310
312
  # fallback protects nobody and a vllm respin breaks launch on the default image alone. Keep them in
311
313
  # lockstep with verl/capabilities.py's install list.
312
314
  #
313
- # transformers is pinned to the SAME range as the main interpreter (>=5.6,<5.13) and in the override
314
- # file, not just the direct list -- verl and vllm both depend on transformers, so without the
315
- # override a transitive requirement re-widens it. The venv is the interpreter that TRAINS, and
316
- # transformers owns the gdn modelling code the boundary-reset shim patches (chunk_gated_delta_rule,
317
- # the causal conv, and the kwargs they read), so leaving it unbounded means the training path rides
318
- # a transformers line nothing validated. The main interpreter carrying the pin protects nothing in
319
- # here (/opt/verl-venv is built without --system-site-packages). Raising this ceiling means
320
- # re-validating the gdn shim against the new line, not just bumping the number.
315
+ # transformers is exact-pinned in both the direct list and override file to the version this image
316
+ # already resolved. verl and vllm both depend on transformers, so without the exact override a
317
+ # transitive requirement can re-widen even an exact direct pin. the
318
+ # venv is the interpreter that trains, and transformers owns the gdn modelling code the boundary-
319
+ # reset shim patches (chunk_gated_delta_rule, the causal conv, and the kwargs they read). the main
320
+ # interpreter carrying an exact pin protects nothing in here (/opt/verl-venv is built without
321
+ # --system-site-packages). changing this exact pin means re-validating the gdn shim against the new
322
+ # version, not just bumping the number.
321
323
  #
322
324
  # This pin is NOT what makes the sanity block below pass. is_flash_linear_attention_available() and
323
325
  # is_causal_conv1d_available() are byte-identical in 5.12.1 and 5.14.1, and both begin with
324
326
  # is_torch_cuda_available() -- they answer False on this cpu builder at every version. An earlier
325
327
  # revision of this comment blamed a 5.13 import-path move; no such move exists.
326
- ARG VERL_SPEC=verl[vllm]@git+https://github.com/freesolo-co/verl@32d6200de81dc484893baf8b9cf30297ebe7fa49
328
+ ARG VERL_SPEC=verl[vllm]@git+https://github.com/freesolo-co/verl@f71a02ddb32a9c6a6915f7519bda6dede92e9dd0
327
329
  ENV FLASH_VERL_PYTHON=/opt/verl-venv/bin/python
328
- RUN printf '%s\n' "numpy==2.2.6" "xgrammar==0.1.25" "vllm==0.19.1" "transformers>=5.6,<5.13" > /tmp/verl-overrides.txt \
330
+ RUN printf '%s\n' "numpy==2.2.6" "xgrammar==0.1.25" "vllm==0.19.1" "transformers==5.12.1" > /tmp/verl-overrides.txt \
329
331
  && uv venv --seed /opt/verl-venv \
330
332
  && VIRTUAL_ENV=/opt/verl-venv uv pip install --python /opt/verl-venv/bin/python \
331
333
  --override /tmp/verl-overrides.txt \
@@ -333,12 +335,13 @@ RUN printf '%s\n' "numpy==2.2.6" "xgrammar==0.1.25" "vllm==0.19.1" "transformers
333
335
  "vllm==0.19.1" \
334
336
  "xgrammar==0.1.25" \
335
337
  "numpy==2.2.6" \
336
- "transformers>=5.6,<5.13" \
337
- "datasets>=4.7,<6" \
338
+ "transformers==5.12.1" \
339
+ "datasets==5.0.1" \
338
340
  "TransferQueue==0.1.7" \
339
- "bitsandbytes>=0.49" qwen-vl-utils \
340
- "wandb>=0.17" \
341
- cachetools uvicorn fastapi torchvision tqdm pyarrow \
341
+ "bitsandbytes==0.50.1" "qwen-vl-utils==0.0.14" \
342
+ "wandb==0.28.2" \
343
+ "cachetools==7.1.7" "uvicorn==0.52.4" "fastapi==0.141.1" \
344
+ "torchvision==0.25.0" "tqdm==4.70.0" "pyarrow==25.0.1" \
342
345
  "flash-linear-attention @ git+https://github.com/fla-org/flash-linear-attention.git@9c8e42e762fce087c27b673af4922795d9edb85e" \
343
346
  "flash-qla==0.1.2" \
344
347
  "tilelang==0.1.9" \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.2.111
3
+ Version: 1.2.112
4
4
  Summary: Flash — managed LoRA post-training (SFT/GRPO/OPD) for Freesolo environments, driven by the `flash` CLI
5
5
  Project-URL: Homepage, https://github.com/freesolo-co/flash
6
6
  Project-URL: Repository, https://github.com/freesolo-co/flash
@@ -18,22 +18,23 @@ Classifier: Programming Language :: Python :: 3.12
18
18
  Requires-Python: <3.13,>=3.11
19
19
  Provides-Extra: dev
20
20
  Requires-Dist: datasets>=2.19; extra == 'dev'
21
- Requires-Dist: fastapi; extra == 'dev'
21
+ Requires-Dist: fastapi<1,>=0.136; extra == 'dev'
22
22
  Requires-Dist: freesolo>=0.4.1; extra == 'dev'
23
23
  Requires-Dist: httpx>=0.27; extra == 'dev'
24
24
  Requires-Dist: huggingface-hub>=1.2.0; extra == 'dev'
25
25
  Requires-Dist: jsonschema>=4.23; extra == 'dev'
26
26
  Requires-Dist: mypy>=1.13.0; extra == 'dev'
27
+ Requires-Dist: packaging<27,>=24; extra == 'dev'
27
28
  Requires-Dist: pillow>=11; extra == 'dev'
28
29
  Requires-Dist: pytest>=9.0.3; extra == 'dev'
29
30
  Requires-Dist: referencing>=0.28.4; extra == 'dev'
30
31
  Requires-Dist: regex>=2024.11.6; extra == 'dev'
31
32
  Requires-Dist: ruff<0.17,>=0.6; extra == 'dev'
32
- Requires-Dist: runpod-flash; extra == 'dev'
33
+ Requires-Dist: runpod-flash<2,>=1.19; extra == 'dev'
33
34
  Requires-Dist: tiktoken>=0.12; extra == 'dev'
34
35
  Requires-Dist: tokenizers>=0.22; extra == 'dev'
35
36
  Requires-Dist: transformers<5.13,>=5.6; extra == 'dev'
36
- Requires-Dist: uvicorn; extra == 'dev'
37
+ Requires-Dist: uvicorn<1,>=0.52; extra == 'dev'
37
38
  Provides-Extra: gpu
38
39
  Requires-Dist: accelerate>=1.4; extra == 'gpu'
39
40
  Requires-Dist: bitsandbytes>=0.49; extra == 'gpu'
@@ -48,16 +49,16 @@ Requires-Dist: transformers<5.13,>=5.6; extra == 'gpu'
48
49
  Requires-Dist: uv>=0.5; extra == 'gpu'
49
50
  Requires-Dist: vllm==0.19.1; extra == 'gpu'
50
51
  Provides-Extra: serve-runtime
51
- Requires-Dist: fastapi; extra == 'serve-runtime'
52
+ Requires-Dist: fastapi<0.137,>=0.136; extra == 'serve-runtime'
52
53
  Requires-Dist: huggingface-hub>=1.2.0; extra == 'serve-runtime'
53
54
  Requires-Dist: pillow>=11.0.0; extra == 'serve-runtime'
54
- Requires-Dist: safetensors; extra == 'serve-runtime'
55
+ Requires-Dist: safetensors<1,>=0.8; extra == 'serve-runtime'
55
56
  Requires-Dist: transformers<5.13,>=5.6; extra == 'serve-runtime'
56
- Requires-Dist: uvicorn; extra == 'serve-runtime'
57
+ Requires-Dist: uvicorn<1,>=0.52; extra == 'serve-runtime'
57
58
  Requires-Dist: vllm==0.23.0; extra == 'serve-runtime'
58
59
  Provides-Extra: server
59
60
  Requires-Dist: datasets>=2.19; extra == 'server'
60
- Requires-Dist: fastapi; extra == 'server'
61
+ Requires-Dist: fastapi<1,>=0.136; extra == 'server'
61
62
  Requires-Dist: freesolo>=0.4.1; extra == 'server'
62
63
  Requires-Dist: httpx>=0.27; extra == 'server'
63
64
  Requires-Dist: huggingface-hub>=1.2.0; extra == 'server'
@@ -66,11 +67,11 @@ Requires-Dist: modal==1.5.4; extra == 'server'
66
67
  Requires-Dist: pillow>=11; extra == 'server'
67
68
  Requires-Dist: referencing>=0.28.4; extra == 'server'
68
69
  Requires-Dist: regex>=2024.11.6; extra == 'server'
69
- Requires-Dist: runpod-flash; extra == 'server'
70
+ Requires-Dist: runpod-flash<2,>=1.19; extra == 'server'
70
71
  Requires-Dist: transformers<5.13,>=5.6; extra == 'server'
71
- Requires-Dist: uvicorn; extra == 'server'
72
+ Requires-Dist: uvicorn<1,>=0.52; extra == 'server'
72
73
  Provides-Extra: serving
73
- Requires-Dist: fastapi; extra == 'serving'
74
+ Requires-Dist: fastapi<1,>=0.136; extra == 'serving'
74
75
  Requires-Dist: httpx>=0.27.0; extra == 'serving'
75
76
  Requires-Dist: modal==1.5.4; extra == 'serving'
76
77
  Requires-Dist: orjson>=3.10.0; extra == 'serving'
@@ -55,7 +55,7 @@ def _worker_section_name(name: str, current_attempt: int | str | None) -> str:
55
55
  _HEARTBEAT_LINE_RE = re.compile(r"(?m)^(HEARTBEAT )(?!\[superseded)")
56
56
 
57
57
 
58
- def _mark_superseded_heartbeats(text: str, attempt: int, current_attempt: int | str) -> str:
58
+ def _mark_superseded_heartbeats(text: str, attempt: int | None, current_attempt: int | str) -> str:
59
59
  """Tag every HEARTBEAT line in a dead attempt's console dump.
60
60
 
61
61
  The section heading already says which attempt produced this text, but a heading is only read
@@ -71,13 +71,19 @@ def _mark_superseded_heartbeats(text: str, attempt: int, current_attempt: int |
71
71
  Tagging the line itself means the provenance survives the pipe. A consumer that filters on the
72
72
  tag gets only live heartbeats; one that does not at least sees the attempt in the line it
73
73
  printed rather than silently trusting a dead worker's last words.
74
+
75
+ ``attempt`` is ``None`` for the canonical ``console_<phase>.txt``, which encodes no attempt in
76
+ its name. That is reported as ``attempt=unknown`` rather than guessed: the file is written at
77
+ teardown, so on a retry whose terminal upload never ran it belongs to an OLDER attempt, and
78
+ naming a number the filename does not carry would be a second wrong answer rather than a fix.
74
79
  """
75
80
  current = (
76
81
  "worker torn down"
77
82
  if current_attempt == _NO_LIVE_WORKER
78
83
  else f"current attempt={current_attempt}"
79
84
  )
80
- return _HEARTBEAT_LINE_RE.sub(f"\\1[superseded attempt={attempt}; {current}] ", text)
85
+ which = "unknown" if attempt is None else attempt
86
+ return _HEARTBEAT_LINE_RE.sub(f"\\1[superseded attempt={which}; {current}] ", text)
81
87
 
82
88
 
83
89
  def _worker_sections(client: ApiClient, run_id: str) -> dict[str, str]:
@@ -133,11 +139,15 @@ def _print_worker_output(
133
139
  # heartbeats carry their own provenance into the pipe. `_NO_LIVE_WORKER` tags every
134
140
  # attempt: during teardown the plane has PROVEN no worker is live, so every heartbeat on
135
141
  # screen is a dead one and none of them may reach a monitor unmarked.
142
+ # an artifact whose name encodes NO attempt (the canonical `console_<phase>.txt`) is tagged
143
+ # too. it is fetched alongside the scoped snapshot and appended last, so it is what a pipe
144
+ # sees -- and being written at teardown it can belong to an older attempt on a retry.
145
+ # unknown provenance is not evidence of liveness, so it does not earn an untagged pass.
136
146
  attempt = _artifact_attempt(name)
137
147
  supersedes = current_attempt is not None and (
138
148
  current_attempt == _NO_LIVE_WORKER or attempt != current_attempt
139
149
  )
140
- if attempt is not None and supersedes:
150
+ if supersedes:
141
151
  text = _mark_superseded_heartbeats(text, attempt, current_attempt)
142
152
  sep = "\n" if printed_any else ""
143
153
  if render.styled():
@@ -25,13 +25,14 @@ from concurrent.futures import thread as _thread_module
25
25
  from http.server import ThreadingHTTPServer
26
26
  from typing import Self
27
27
 
28
- # verl 0.8.0 exactly, plus the truncation-mask, 3d position-id, and ulysses fused-label fixes.
28
+ # verl 0.8.0 exactly, plus the truncation-mask, 3d position-id, and ulysses fused-label fixes, the
29
+ # whole-adapter lora bucket sync, and the fused-linear grad-flag preservation.
29
30
  # it must stay on the 0.8.0 base: the opd plugin patches 0.8.0 internals and imports
30
31
  # verl.trainer.main_ppo_sync, which verl deleted after 0.8.0, and opd's exact-version gate reads the
31
32
  # version file this branch pins to the release value.
32
33
  VERL_REQUIREMENT_NAME = "verl"
33
34
  VERL_REQUIREMENT_URL = (
34
- "git+https://github.com/freesolo-co/verl@32d6200de81dc484893baf8b9cf30297ebe7fa49"
35
+ "git+https://github.com/freesolo-co/verl@f71a02ddb32a9c6a6915f7519bda6dede92e9dd0"
35
36
  )
36
37
  # the pin, as the venv stamp records it. the provisioning install asks for the [vllm] extra of this
37
38
  # same commit; the stamp stays extra-free so it identifies the verl a venv holds, not how it was
@@ -92,11 +93,13 @@ CAUSAL_CONV1D_REQUIREMENT = "causal-conv1d==1.6.2.post1"
92
93
  # installed version. An earlier revision of this comment claimed a 5.13 import-path move made them
93
94
  # answer False; that mechanism does not exist. See Dockerfile.worker's sanity block.
94
95
  TRANSFORMERS_REQUIREMENT = "transformers>=5.6,<5.13"
96
+ # exact deployed install and override pin; the range above remains public package metadata.
97
+ TRANSFORMERS_INSTALL_REQUIREMENT = "transformers==5.12.1"
95
98
 
96
99
  # the stamp must identify every separately installed package the venv holds. omitting flash-attn,
97
- # fla, causal_conv1d, or the transformers range lets an older partial venv match forever; conv1d
100
+ # fla, causal_conv1d, or the exact transformers pin lets an older partial venv match forever; conv1d
98
101
  # leaves GRPO/OPD failing ``require_gdn_boundary_resets`` with no rebuild path, and a stale venv
99
- # resolved before the transformers pin keeps training on an out-of-range transformers indefinitely.
102
+ # resolved before the transformers pin keeps training on a different transformers indefinitely.
100
103
  # bump when a repair applied at build time changes what a fully provisioned venv looks like. the
101
104
  # libcudart repair runs only on the rebuild path, so a venv stamped by a release that predates it
102
105
  # matches, is reused, and keeps tilelang's original stub -- vLLM then aborts its import in the child
@@ -110,7 +113,8 @@ VERL_VENV_BUILD_REPAIRS = "libcudart-stub-neutralized-v1"
110
113
  # digest instead of letting it match forever and reuse an install that was never re-verified.
111
114
  VERL_VENV_STAMP = (
112
115
  f"{VERL_REQUIREMENT}\n{FLASH_ATTN_INSTALL_SPEC}\n{FLA_REQUIREMENT}\n{FLASH_QLA_REQUIREMENT}\n"
113
- f"{CAUSAL_CONV1D_REQUIREMENT}\n{TRANSFORMERS_REQUIREMENT}\n{VERL_VENV_BUILD_REPAIRS}"
116
+ f"{CAUSAL_CONV1D_REQUIREMENT}\n{TRANSFORMERS_INSTALL_REQUIREMENT}\n"
117
+ f"{VERL_VENV_BUILD_REPAIRS}"
114
118
  )
115
119
 
116
120
 
@@ -927,6 +931,7 @@ from flash.engine.worker.verl.capabilities import ( # noqa: E402,F401
927
931
  _CAPABILITIES_UNAVAILABLE,
928
932
  _CAPABILITY_PROBE,
929
933
  _CAPABILITY_PROBE_TIMEOUT_S,
934
+ actor_fsdp_strategy_overrides,
930
935
  gdn_probe_module,
931
936
  gdn_reset_arch_from_caps,
932
937
  probe_verl_capabilities,
@@ -16,29 +16,35 @@ DEFAULT_CACHE_DIR = "/opt/flash/kernelcache"
16
16
  MEGA_CACHE_FILENAME = "mega_cache.bin"
17
17
  MEGA_CACHE_META_FILENAME = "mega_cache.json"
18
18
 
19
+ # every env var that addresses the baked kernel cache, mapped to its subdirectory of the cache root.
20
+ # Dockerfile.worker sets these image-wide to the same layout; this module re-forces them so a stale
21
+ # image or a prior run cannot defeat the redirect. it is also the allowlist the verl child inherits
22
+ # (see sft_train._CHILD_ENV_EXACT) -- the child is the interpreter that actually trains, so a cache
23
+ # only the parent can see is no cache at all. one definition, so a var added here cannot be added
24
+ # without the child getting it too.
25
+ KERNEL_CACHE_ENV_SUBDIRS = {
26
+ "TRITON_CACHE_DIR": "triton",
27
+ "TORCHINDUCTOR_CACHE_DIR": "inductor",
28
+ # flashinfer downloads b200 attention cubins and builds a host wrapper on first use. redirect
29
+ # both to distinct persistent-cache subdirs so cold workers do not depend on nvidia artifactory
30
+ # or pay the first-step build repeatedly. it reads FLASHINFER_CUBIN_DIR for cubins and
31
+ # FLASHINFER_WORKSPACE_BASE for the 0.6.x jit wrapper; FLASHINFER_CACHE_DIR is
32
+ # forward-compatible only, and is set anyway so a future version cannot silently miss the cache.
33
+ "FLASHINFER_CUBIN_DIR": "flashinfer_cubin",
34
+ "FLASHINFER_CACHE_DIR": "flashinfer",
35
+ "FLASHINFER_WORKSPACE_BASE": "flashinfer",
36
+ }
37
+
19
38
 
20
39
  def _log(msg: str) -> None:
21
40
  print(f"[kernel-warmup] {msg}", flush=True)
22
41
 
23
42
 
24
43
  def _point_backends_at(cache_dir: str) -> None:
25
- os.makedirs(os.path.join(cache_dir, "triton"), exist_ok=True)
26
- os.makedirs(os.path.join(cache_dir, "inductor"), exist_ok=True)
27
- os.environ["TRITON_CACHE_DIR"] = os.path.join(cache_dir, "triton")
28
- os.environ["TORCHINDUCTOR_CACHE_DIR"] = os.path.join(cache_dir, "inductor")
29
- # flashinfer downloads b200 attention cubins and builds a host wrapper on first use. redirect both
30
- # to distinct persistent-cache subdirs so cold workers do not depend on nvidia artifactory or pay
31
- # the first-step build repeatedly.
32
- fi_cubin = os.path.join(cache_dir, "flashinfer_cubin")
33
- fi_cache = os.path.join(cache_dir, "flashinfer")
34
- os.makedirs(fi_cubin, exist_ok=True)
35
- os.makedirs(fi_cache, exist_ok=True)
36
- # flashinfer reads FLASHINFER_CUBIN_DIR for cubins and FLASHINFER_WORKSPACE_BASE for the 0.6.x
37
- # jit wrapper; FLASHINFER_CACHE_DIR is forward-compatible only. force all three so stale image or
38
- # prior-run env values cannot defeat this workspace redirect.
39
- os.environ["FLASHINFER_CUBIN_DIR"] = fi_cubin
40
- os.environ["FLASHINFER_CACHE_DIR"] = fi_cache
41
- os.environ["FLASHINFER_WORKSPACE_BASE"] = fi_cache
44
+ for var, subdir in KERNEL_CACHE_ENV_SUBDIRS.items():
45
+ path = os.path.join(cache_dir, subdir)
46
+ os.makedirs(path, exist_ok=True)
47
+ os.environ[var] = path
42
48
 
43
49
 
44
50
  def _torch_sm(torch) -> str:
@@ -16,6 +16,7 @@ import time
16
16
 
17
17
  from flash._internal.diagnostics import SECRET_ENV_KEYS_ENV
18
18
  from flash.adapters.lora_rank import alpha_from_adapter_config, rank_from_adapter_config
19
+ from flash.engine.worker.runtime.kernel_warmup import KERNEL_CACHE_ENV_SUBDIRS
19
20
  from flash.engine.worker.runtime.pkg_proxy import W as _w
20
21
  from flash.engine.worker.verl.checkpoints import resume_checkpoint_is_loadable
21
22
  from flash.engine.worker.verl.parallelism import ULYSSES_SEQUENCE_PARALLEL_SIZE
@@ -209,6 +210,16 @@ _CHILD_ENV_EXACT = frozenset(
209
210
  "TOKENIZERS_PARALLELISM",
210
211
  "FLASH_VERL_PYTHON",
211
212
  }
213
+ # the baked per-sm kernel cache is addressed ONLY through these vars, and the child is the
214
+ # interpreter that actually trains: a cache the child never sees is no cache at all, so without
215
+ # them it falls back to $HOME/.cache and re-JITs the FA2/GDN triton kernels the bake already paid
216
+ # ~124s to build. taken from kernel_warmup rather than restated so the two cannot drift -- and
217
+ # they must be named EXACTly, because TORCHINDUCTOR_CACHE_DIR does NOT match the "TORCH_" prefix
218
+ # below (its sixth character is "I"), which is how it was dropped despite looking like it passes.
219
+ # safe to share: /opt/verl-venv resolves the SAME torch as the parent (both 2.10.0+cu128 on the
220
+ # published cu128-sm90 image), and both are image-local, so this shares nothing across tenants --
221
+ # see providers/_lifecycle/worker.py, which keeps JIT caches OFF the multi-tenant volume.
222
+ | KERNEL_CACHE_ENV_SUBDIRS.keys()
212
223
  )
213
224
  _CHILD_ENV_PREFIXES = (
214
225
  "CUDA_",
@@ -15,6 +15,7 @@ import os
15
15
 
16
16
  from flash.content.structured_outputs import reasoning_parser_for
17
17
  from flash.engine.worker.backend_common import (
18
+ actor_fsdp_strategy_overrides,
18
19
  agent_loop_workers,
19
20
  ray_num_cpus,
20
21
  rollout_layered_summon_overrides,
@@ -131,7 +132,6 @@ def _actor_rollout_overrides(config: dict, *, max_tokens: int) -> list[str]:
131
132
  else []
132
133
  ),
133
134
  f"actor_rollout_ref.model.lora_adapter_path={_hydra_val(config.get('lora_adapter_path'))}",
134
- "actor_rollout_ref.actor.strategy=fsdp",
135
135
  "actor_rollout_ref.actor.use_kl_loss=false",
136
136
  "actor_rollout_ref.actor.loss_agg_mode=seq-mean-token-mean",
137
137
  "actor_rollout_ref.actor.use_dynamic_bsz=true",
@@ -149,6 +149,9 @@ def _actor_rollout_overrides(config: dict, *, max_tokens: int) -> list[str]:
149
149
  # absent -> True, verl's own default: a config built without the gate must render the
150
150
  # lower-memory strategy, never fall into zero-2 by omission.
151
151
  f"actor_rollout_ref.actor.fsdp_config.reshard_after_forward={_hydra_val(bool(config.get('reshard_after_forward', True)))}",
152
+ # fused-expert lora is a parametrization on a named tensor, which only fsdp2 can host.
153
+ # writes `actor.strategy` for both cases, so the dense default lands here too.
154
+ *actor_fsdp_strategy_overrides(config.get("target_parameters")),
152
155
  # store the frozen base in bf16, not verl's fp32 yaml default. shared with the rl driver.
153
156
  *trainer_dtype_overrides(),
154
157
  "actor_rollout_ref.rollout.name=vllm",
@@ -17,6 +17,7 @@ from flash.adapters.targets import resolve_lora_targeting
17
17
  from flash.content.multimodal import messages_with_decoded_images
18
18
  from flash.content.structured_outputs import reasoning_parser_for
19
19
  from flash.engine.worker.backend_common import (
20
+ actor_fsdp_strategy_overrides,
20
21
  agent_loop_workers,
21
22
  ray_num_cpus,
22
23
  rollout_layered_summon_overrides,
@@ -300,6 +301,9 @@ def _actor_overrides(cfg: dict) -> list[str]:
300
301
  # absent -> True, verl's own default: a cfg built without the gate must render the
301
302
  # lower-memory strategy, never fall into zero-2 by omission.
302
303
  f"actor_rollout_ref.actor.fsdp_config.reshard_after_forward={_hydra_val(bool(cfg.get('reshard_after_forward', True)))}",
304
+ # fused-expert lora is a parametrization on a named tensor, which only fsdp2 can host.
305
+ # shared with the opd driver; sft has always been on fsdp2 for the same reason.
306
+ *actor_fsdp_strategy_overrides(cfg.get("target_parameters")),
303
307
  # store the frozen base in bf16, not verl's fp32 yaml default. shared with the opd driver.
304
308
  *trainer_dtype_overrides(),
305
309
  ]
@@ -21,7 +21,7 @@ from flash.engine.worker.backend_common import (
21
21
  CAUSAL_CONV1D_REQUIREMENT,
22
22
  FLA_REQUIREMENT,
23
23
  FLASH_QLA_REQUIREMENT,
24
- TRANSFORMERS_REQUIREMENT,
24
+ TRANSFORMERS_INSTALL_REQUIREMENT,
25
25
  VERL_REQUIREMENT_NAME,
26
26
  VERL_REQUIREMENT_URL,
27
27
  VERL_VENV_PYTHON,
@@ -438,7 +438,10 @@ def resolve_verl_python(workdir: str, *, install_wandb: bool = False) -> str:
438
438
  # and transformers owns the gdn modelling code the boundary-reset shim patches.
439
439
  overrides = os.path.join(workdir, "verl-overrides.txt")
440
440
  with open(overrides, "w") as f:
441
- f.write(f"numpy==2.2.6\nxgrammar==0.1.25\nvllm==0.19.1\n{TRANSFORMERS_REQUIREMENT}\n")
441
+ f.write(
442
+ f"numpy==2.2.6\nxgrammar==0.1.25\nvllm==0.19.1\n"
443
+ f"{TRANSFORMERS_INSTALL_REQUIREMENT}\n"
444
+ )
442
445
  subprocess.run(
443
446
  [
444
447
  "uv",
@@ -454,25 +457,25 @@ def resolve_verl_python(workdir: str, *, install_wandb: bool = False) -> str:
454
457
  f"{VERL_REQUIREMENT_NAME}[vllm] @ {VERL_REQUIREMENT_URL}",
455
458
  "vllm==0.19.1",
456
459
  "numpy==2.2.6",
457
- TRANSFORMERS_REQUIREMENT,
458
- # NOT transitively guaranteed: verl imports these at MODULE level on the launch path
460
+ TRANSFORMERS_INSTALL_REQUIREMENT,
461
+ # not transitively guaranteed: verl imports these at module level on the launch path
459
462
  # (main_ppo -> ppo.ray_trainer -> rollout.llm_server imports cachetools, and
460
463
  # rollout.utils imports uvicorn + fastapi), yet declares none of them. vllm happens
461
464
  # to pull cachetools and fastapi today, but that is vllm's dependency choice, not a
462
- # contract verl states -- name them so a vllm respin cannot silently break launch.
463
- "cachetools",
464
- "uvicorn",
465
- "fastapi",
465
+ # contract verl states -- exact pins mirror the worker dockerfile's resolved venv.
466
+ "cachetools==7.1.7",
467
+ "uvicorn==0.52.4",
468
+ "fastapi==0.141.1",
466
469
  # opd's entrypoint calls tq.init()/tq.close(); absent from verl's setup.py.
467
470
  "TransferQueue==0.1.7",
468
471
  # older raises AttributeError on PyArrow PyExtensionType.
469
- "datasets>=4.7,<6",
470
- "bitsandbytes>=0.49",
471
- "qwen-vl-utils",
472
- "torchvision",
472
+ "datasets==5.0.1",
473
+ "bitsandbytes==0.50.1",
474
+ "qwen-vl-utils==0.0.14",
475
+ "torchvision==0.25.0",
473
476
  "xgrammar==0.1.25",
474
- "tqdm",
475
- "pyarrow",
477
+ "tqdm==4.70.0",
478
+ "pyarrow==25.0.1",
476
479
  # gated-deltanet kernels, in LOCKSTEP with Dockerfile.worker's
477
480
  # verl-venv layer (same fla sha, same tilelang pins). the model
478
481
  # trains in THIS interpreter, so fla being installed in the
@@ -536,7 +539,8 @@ def resolve_verl_python(workdir: str, *, install_wandb: bool = False) -> str:
536
539
  # keep wandb outside the stamped rebuild branch. wandb is absent from the stamp, so reused venvs
537
540
  # and transient failures must retry it on later runs; installing an already satisfied package
538
541
  # is a cheap no-op.
539
- subprocess.run(["uv", "pip", "install", "--python", py, "wandb"], check=False)
542
+ # exact-pinned to the same version baked into Dockerfile.worker's verl venv.
543
+ subprocess.run(["uv", "pip", "install", "--python", py, "wandb==0.28.2"], check=False)
540
544
  return py
541
545
 
542
546
 
@@ -860,6 +864,38 @@ def rollout_layered_summon_overrides(target_parameters: Sequence[str] | None) ->
860
864
  return ["actor_rollout_ref.rollout.layered_summon=true"]
861
865
 
862
866
 
867
+ def actor_fsdp_strategy_overrides(target_parameters: list[str] | None) -> list[str]:
868
+ """select the actor's fsdp wrapper: fused-expert lora needs fsdp2, dense keeps fsdp1.
869
+
870
+ PEFT implements ``target_parameters`` by registering a torch parametrization onto a NAMED
871
+ TENSOR at forward time (``peft/tuners/lora/layer.py:2463``), unlike ``target_modules``, which
872
+ swaps in a wrapper layer once at injection. ``register_parametrization`` calls
873
+ ``delattr(module, name)`` and then asserts the name is gone
874
+ (``torch/nn/utils/parametrize.py:387``). fsdp1 cannot satisfy that on either setting:
875
+ ``use_orig_params=False`` (verl's default, ``workers/config/engine.py:254``) flattens the
876
+ tensor away so the name never resolves (``parametrize.py:639``), and ``use_orig_params=True``
877
+ leaves ``FSDP.__getattr__`` resolving it from ``_fsdp_wrapped_module``, so ``hasattr`` stays
878
+ True after ``delattr`` and the bare assert fires (``parametrize.py:634`` -> ``:387``).
879
+
880
+ no config value satisfies that assert while fsdp1 owns the module, so the strategy itself has
881
+ to change. fsdp2's ``fully_shard`` keeps parameters under their own names with no wrapper
882
+ indirection. flash's sft driver has always pinned ``engine.strategy=fsdp2``
883
+ (``train/sft/config.py:138``) and trains this same model with these same ``target_parameters``.
884
+
885
+ verl supports it here: ``strategy`` is declared in ``actor/dp_actor.yaml:26`` so it takes a
886
+ bare override, ``workers/config/engine.py:265`` accepts ``fsdp2``, the ref policy interpolates
887
+ the actor's value (``ref/ref.yaml:5``) so the two cannot drift, and ``layered_summon_lora_params``
888
+ carries an explicit fsdp2 prefix block (``utils/fsdp_utils.py:646-649``).
889
+
890
+ dense models stay on fsdp1: their lora lives on wrapper modules swapped in at injection, so no
891
+ parametrization is ever registered. the key is written for BOTH cases rather than omitted for
892
+ dense, so it has exactly one writer per config and the rl and opd drivers cannot disagree about
893
+ the dense default or inherit a future change to verl's yaml.
894
+ """
895
+ strategy = "fsdp2" if target_parameters else "fsdp"
896
+ return [f"actor_rollout_ref.actor.strategy={strategy}"]
897
+
898
+
863
899
  def rollout_mm_processor_cache_overrides() -> list[str]:
864
900
  """disable vllm's split multimodal processor cache for every verl rollout.
865
901