freesolo-flash-dev 1.2.110__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.110 → freesolo_flash_dev-1.2.112}/.github/workflows/bake-kernel-cache.yml +2 -0
  2. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/ci.yml +6 -2
  3. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/deploy-modal-dev.yml +5 -1
  4. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/deploy-modal.yml +3 -2
  5. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-dev.yml +2 -0
  6. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/publish.yml +2 -0
  7. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/Dockerfile +2 -1
  8. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/Dockerfile.serve +2 -1
  9. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/Dockerfile.worker +31 -28
  10. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/PKG-INFO +12 -11
  11. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/worker_output.py +13 -3
  12. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/scaffold/TRAINING.md +1 -1
  13. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/core/grpo.py +1 -1
  14. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/backend_common.py +11 -5
  15. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/kernel_warmup.py +23 -17
  16. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/sft_train.py +11 -0
  17. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/overrides.py +8 -1
  18. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/verl_config.py +9 -0
  19. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/capabilities.py +83 -15
  20. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/instance.py +3 -2
  21. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/runtime.py +14 -1
  22. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/modal_app.py +3 -1
  23. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/pyproject.toml +27 -15
  24. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_usage_reporter.py +5 -1
  25. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_backend_common.py +106 -24
  26. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_commands_coverage.py +31 -0
  27. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_params.py +9 -1
  28. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_rollout_contract.py +37 -10
  29. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_kernel_fingerprint.py +26 -20
  30. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lora_targeting_pinned_verl.py +1 -1
  31. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_train.py +42 -0
  32. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_rl_train.py +37 -1
  33. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_package.py +3 -3
  34. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_api.py +54 -0
  35. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_train.py +26 -0
  36. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_stack.py +24 -11
  37. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/uv.lock +52 -56
  38. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.dockerignore +0 -0
  39. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.env.example +0 -0
  40. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/CODEOWNERS +0 -0
  41. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  42. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  43. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  44. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  45. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/dependabot.yml +0 -0
  46. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/auto-rebake.yml +0 -0
  47. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/dev-kernel-cache.yml +0 -0
  48. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/main-source-guard.yml +0 -0
  49. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/notify-tests-repo.yml +0 -0
  50. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  51. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-image.yml +0 -0
  52. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-serving-image.yml +0 -0
  53. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/version-parity.yml +0 -0
  54. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/worker-image.yml +0 -0
  55. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.gitignore +0 -0
  56. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/CHANGELOG.md +0 -0
  57. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/CODE_OF_CONDUCT.md +0 -0
  58. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/CONTRIBUTING.md +0 -0
  59. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/LICENSE +0 -0
  60. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/NOTICE +0 -0
  61. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/README.md +0 -0
  62. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/SECURITY.md +0 -0
  63. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/SELF_HOSTING.md +0 -0
  64. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/build/kernel_cache/.gitignore +0 -0
  65. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/build/kernel_cache/.keep +0 -0
  66. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/deploy/infisical/README.md +0 -0
  67. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/deploy/infisical/entrypoint.sh +0 -0
  68. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/Dockerfile.kernelcache +0 -0
  69. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/Dockerfile.kernelcache.relayer +0 -0
  70. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/bake_kernel_cache.py +0 -0
  71. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/bake_pod_entry.py +0 -0
  72. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/extract_cudart_fix.py +0 -0
  73. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/kernel_fingerprint.py +0 -0
  74. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/make_rp_handler.py +0 -0
  75. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docs/serving-contract.md +0 -0
  76. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/__init__.py +0 -0
  77. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/__init__.py +0 -0
  78. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/channel.py +0 -0
  79. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/diagnostics.py +0 -0
  80. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/fileio.py +0 -0
  81. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/logging.py +0 -0
  82. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/paths.py +0 -0
  83. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/adapters/__init__.py +0 -0
  84. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/adapters/artifacts.py +0 -0
  85. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/adapters/fused_experts.py +0 -0
  86. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/adapters/lora_rank.py +0 -0
  87. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/adapters/targets.py +0 -0
  88. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/__init__.py +0 -0
  89. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/__main__.py +0 -0
  90. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/__init__.py +0 -0
  91. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/deploy.py +0 -0
  92. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/__init__.py +0 -0
  93. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/episode.py +0 -0
  94. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/eval.py +0 -0
  95. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/eval_args.py +0 -0
  96. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/imports.py +0 -0
  97. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/list.py +0 -0
  98. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/push.py +0 -0
  99. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/retained.py +0 -0
  100. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/setup.py +0 -0
  101. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/setup_wandb.py +0 -0
  102. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test.py +0 -0
  103. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_evaluations.py +0 -0
  104. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_params.py +0 -0
  105. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_warnings.py +0 -0
  106. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/log_follow.py +0 -0
  107. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/prompt_budget.py +0 -0
  108. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_deploy.py +0 -0
  109. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_identity.py +0 -0
  110. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_status.py +0 -0
  111. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_undeploy.py +0 -0
  112. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/traces.py +0 -0
  113. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/train_cost.py +0 -0
  114. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/errors.py +0 -0
  115. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/scaffold/__init__.py +0 -0
  116. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/serve_parser.py +0 -0
  117. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/__init__.py +0 -0
  118. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/cost.py +0 -0
  119. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/env_panels.py +0 -0
  120. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/heartbeat.py +0 -0
  121. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/render.py +0 -0
  122. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/tables.py +0 -0
  123. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/tty.py +0 -0
  124. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/__init__.py +0 -0
  125. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/config.py +0 -0
  126. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/freesolo_api.py +0 -0
  127. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/http.py +0 -0
  128. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/runtime_secrets.py +0 -0
  129. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/shapes.py +0 -0
  130. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/specs.py +0 -0
  131. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/streaming.py +0 -0
  132. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/content/__init__.py +0 -0
  133. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/content/image_descriptors.py +0 -0
  134. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/content/multimodal.py +0 -0
  135. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/content/structured_outputs.py +0 -0
  136. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/content/thinking.py +0 -0
  137. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/core/__init__.py +0 -0
  138. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/core/catalog.py +0 -0
  139. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/core/spec.py +0 -0
  140. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/core/spec_persistence.py +0 -0
  141. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cost/__init__.py +0 -0
  142. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cost/analytical.py +0 -0
  143. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cost/facts.py +0 -0
  144. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cost/spec.py +0 -0
  145. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cost/types.py +0 -0
  146. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/__init__.py +0 -0
  147. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/huggingface.py +0 -0
  148. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/__init__.py +0 -0
  149. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/kv_sizing.py +0 -0
  150. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/model_config_probe.py +0 -0
  151. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/prompt_budget.py +0 -0
  152. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/recipe.py +0 -0
  153. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/steps.py +0 -0
  154. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/vram.py +0 -0
  155. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/__init__.py +0 -0
  156. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/dataset_profile.py +0 -0
  157. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/image_tokens.py +0 -0
  158. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/reasoning_render.py +0 -0
  159. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/sft_image_rows.py +0 -0
  160. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/sft_workload.py +0 -0
  161. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/tokenizer.py +0 -0
  162. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/workload_profile.py +0 -0
  163. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/result/__init__.py +0 -0
  164. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/result/accounting.py +0 -0
  165. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/result/rollout_samples.py +0 -0
  166. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/__init__.py +0 -0
  167. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/__main__.py +0 -0
  168. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/__init__.py +0 -0
  169. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/opd.py +0 -0
  170. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/rl.py +0 -0
  171. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/sft.py +0 -0
  172. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/__init__.py +0 -0
  173. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/heartbeat.py +0 -0
  174. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/hf.py +0 -0
  175. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/prefetch.py +0 -0
  176. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/wandb_log.py +0 -0
  177. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/__init__.py +0 -0
  178. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/adapter.py +0 -0
  179. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/chatml_mask.py +0 -0
  180. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/decoding.py +0 -0
  181. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/lora.py +0 -0
  182. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/packing.py +0 -0
  183. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/opd_train.py +0 -0
  184. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/opd_train_runner.py +0 -0
  185. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/__init__.py +0 -0
  186. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/diagnostics.py +0 -0
  187. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/lifecycle.py +0 -0
  188. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/liger.py +0 -0
  189. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/memory.py +0 -0
  190. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/rl_train.py +0 -0
  191. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/rl_train_runner.py +0 -0
  192. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/__init__.py +0 -0
  193. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/pkg_proxy.py +0 -0
  194. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/rng.py +0 -0
  195. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/score_batcher.py +0 -0
  196. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/sft_train_runner.py +0 -0
  197. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/__init__.py +0 -0
  198. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/client.py +0 -0
  199. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/encoding.py +0 -0
  200. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  201. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/__init__.py +0 -0
  202. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/__init__.py +0 -0
  203. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/checkpoint_lifecycle.py +0 -0
  204. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/__init__.py +0 -0
  205. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/glue.py +0 -0
  206. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/runtime.py +0 -0
  207. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/step_timing.py +0 -0
  208. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/finalize.py +0 -0
  209. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/__init__.py +0 -0
  210. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/batching.py +0 -0
  211. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/bridge.py +0 -0
  212. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/bridge_failures.py +0 -0
  213. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  214. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  215. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/entry.py +0 -0
  216. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
  217. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/plugin.py +0 -0
  218. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  219. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  220. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/structured.py +0 -0
  221. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/failures.py +0 -0
  222. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/gkd.py +0 -0
  223. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/multiturn_media.py +0 -0
  224. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/multiturn_validation.py +0 -0
  225. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/prompts.py +0 -0
  226. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/reporting.py +0 -0
  227. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/scoring.py +0 -0
  228. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/state.py +0 -0
  229. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/validation.py +0 -0
  230. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/__init__.py +0 -0
  231. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/checkpoints.py +0 -0
  232. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  233. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/entry.py +0 -0
  234. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  235. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/patches.py +0 -0
  236. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  237. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/config.py +0 -0
  238. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/identity.py +0 -0
  239. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/inputs.py +0 -0
  240. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/multi_turn.py +0 -0
  241. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/reward_module.py +0 -0
  242. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/scoring.py +0 -0
  243. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/single_turn.py +0 -0
  244. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/__init__.py +0 -0
  245. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/checkpoints.py +0 -0
  246. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/child/entry.py +0 -0
  247. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/child/plugin.py +0 -0
  248. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/config.py +0 -0
  249. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/__init__.py +0 -0
  250. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/checkpoints.py +0 -0
  251. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/child_io.py +0 -0
  252. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/diagnostics.py +0 -0
  253. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/parallelism.py +0 -0
  254. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/parent_work.py +0 -0
  255. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/process_census.py +0 -0
  256. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker_entrypoint.py +0 -0
  257. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/__init__.py +0 -0
  258. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/adapter.py +0 -0
  259. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/base.py +0 -0
  260. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/cache_security.py +0 -0
  261. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/dataset_selection.py +0 -0
  262. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/evaluations.py +0 -0
  263. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/identity.py +0 -0
  264. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/loader.py +0 -0
  265. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/namespace_listing.py +0 -0
  266. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/package/__init__.py +0 -0
  267. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/package/direct_tokens.py +0 -0
  268. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/package/limits.py +0 -0
  269. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/package/unpack.py +0 -0
  270. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/pull.py +0 -0
  271. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/staged.py +0 -0
  272. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/__init__.py +0 -0
  273. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/__init__.py +0 -0
  274. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/auth.py +0 -0
  275. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap.py +0 -0
  276. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_console.py +0 -0
  277. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_pip.py +0 -0
  278. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_secrets.py +0 -0
  279. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/deadline.py +0 -0
  280. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/__init__.py +0 -0
  281. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  282. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/failmark.py +0 -0
  283. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  284. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/http.py +0 -0
  285. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/poll.py +0 -0
  286. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/poll_instance.py +0 -0
  287. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/provider.py +0 -0
  288. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/terminal_artifacts.py +0 -0
  289. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/worker.py +0 -0
  290. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/allocator.py +0 -0
  291. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/__init__.py +0 -0
  292. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/hf.py +0 -0
  293. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/preload_runpod.py +0 -0
  294. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/weight_cache.py +0 -0
  295. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/base.py +0 -0
  296. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/fit_errors.py +0 -0
  297. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/__init__.py +0 -0
  298. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/api.py +0 -0
  299. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/auth.py +0 -0
  300. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/gpus.py +0 -0
  301. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/__init__.py +0 -0
  302. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/builders.py +0 -0
  303. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/reap.py +0 -0
  304. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/preflight.py +0 -0
  305. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/pricing.py +0 -0
  306. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/preflight.py +0 -0
  307. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/realized.py +0 -0
  308. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/__init__.py +0 -0
  309. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/api.py +0 -0
  310. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/auth.py +0 -0
  311. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/cost.py +0 -0
  312. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/gpus.py +0 -0
  313. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/job_execution.py +0 -0
  314. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/jobs.py +0 -0
  315. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/preflight.py +0 -0
  316. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/pricing.py +0 -0
  317. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/resources.py +0 -0
  318. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/serverless/__init__.py +0 -0
  319. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/serverless/endpoints.py +0 -0
  320. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/sharding.py +0 -0
  321. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/__init__.py +0 -0
  322. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/api.py +0 -0
  323. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/auth.py +0 -0
  324. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/jobs/__init__.py +0 -0
  325. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/jobs/builders.py +0 -0
  326. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/preflight.py +0 -0
  327. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/pricing.py +0 -0
  328. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/py.typed +0 -0
  329. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/__init__.py +0 -0
  330. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/artifacts.py +0 -0
  331. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/attempts.py +0 -0
  332. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/costs.py +0 -0
  333. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/deadlines.py +0 -0
  334. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/preparation.py +0 -0
  335. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/reconciliation.py +0 -0
  336. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/results/__init__.py +0 -0
  337. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/results/checkpoints.py +0 -0
  338. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/results/verified_revisions.py +0 -0
  339. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/status.py +0 -0
  340. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/submit.py +0 -0
  341. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/__init__.py +0 -0
  342. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/attach.py +0 -0
  343. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/deploy.py +0 -0
  344. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/lifecycle.py +0 -0
  345. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/recovery.py +0 -0
  346. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/retry_decision.py +0 -0
  347. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/seed_submission.py +0 -0
  348. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/transitions.py +0 -0
  349. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/weight_cache.py +0 -0
  350. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/__init__.py +0 -0
  351. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/build.py +0 -0
  352. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/manifest.py +0 -0
  353. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/profiles.py +0 -0
  354. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/schema/__init__.py +0 -0
  355. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/schema/fields.py +0 -0
  356. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/__init__.py +0 -0
  357. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/adapter_check.py +0 -0
  358. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/__init__.py +0 -0
  359. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/__main__.py +0 -0
  360. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/bootstrap.py +0 -0
  361. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/http.py +0 -0
  362. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/launch.py +0 -0
  363. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/manifest.py +0 -0
  364. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/materialize.py +0 -0
  365. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/openai.py +0 -0
  366. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/progress.py +0 -0
  367. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/contract.py +0 -0
  368. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/__init__.py +0 -0
  369. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/_canonical.py +0 -0
  370. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/_serialization.py +0 -0
  371. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/_urls.py +0 -0
  372. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/credentials.py +0 -0
  373. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/planning.py +0 -0
  374. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/types.py +0 -0
  375. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/deploy.py +0 -0
  376. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/errors.py +0 -0
  377. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/export.py +0 -0
  378. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/preflight.py +0 -0
  379. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/profiles.py +0 -0
  380. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/__init__.py +0 -0
  381. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_common.py +0 -0
  382. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_deployment.py +0 -0
  383. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_lifecycle.py +0 -0
  384. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_plan.py +0 -0
  385. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_probe.py +0 -0
  386. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_readiness.py +0 -0
  387. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_resources.py +0 -0
  388. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_sdk.py +0 -0
  389. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_teardown.py +0 -0
  390. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_wrapper.py +0 -0
  391. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_lifecycle.py +0 -0
  392. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_mutations.py +0 -0
  393. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_plan.py +0 -0
  394. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_probe.py +0 -0
  395. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_protocol.py +0 -0
  396. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_readiness.py +0 -0
  397. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_resources.py +0 -0
  398. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_transport.py +0 -0
  399. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/modal.py +0 -0
  400. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/runpod.py +0 -0
  401. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/request_validation.py +0 -0
  402. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/resolve.py +0 -0
  403. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/responses.py +0 -0
  404. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/__init__.py +0 -0
  405. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/adapters.py +0 -0
  406. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/engine.py +0 -0
  407. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/errors.py +0 -0
  408. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/multimodal.py +0 -0
  409. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/prompt.py +0 -0
  410. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/structured_outputs.py +0 -0
  411. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/types.py +0 -0
  412. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime_support.py +0 -0
  413. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/streaming.py +0 -0
  414. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/thinking.py +0 -0
  415. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/urls.py +0 -0
  416. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/__init__.py +0 -0
  417. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/__main__.py +0 -0
  418. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/app.py +0 -0
  419. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/billing/__init__.py +0 -0
  420. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/billing/charges.py +0 -0
  421. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/billing/retry.py +0 -0
  422. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/__init__.py +0 -0
  423. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/checkpoints.py +0 -0
  424. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/environment_registry.py +0 -0
  425. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/envs.py +0 -0
  426. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/projects.py +0 -0
  427. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/reconcile.py +0 -0
  428. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/repo_cleanup.py +0 -0
  429. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/run_registry.py +0 -0
  430. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/serving_resources.py +0 -0
  431. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_broker.py +0 -0
  432. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_errors.py +0 -0
  433. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_requests.py +0 -0
  434. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/__init__.py +0 -0
  435. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/auth.py +0 -0
  436. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/db.py +0 -0
  437. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/deps.py +0 -0
  438. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/internal_client.py +0 -0
  439. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/locks.py +0 -0
  440. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/__init__.py +0 -0
  441. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/envs.py +0 -0
  442. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/meta.py +0 -0
  443. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/runs.py +0 -0
  444. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving.py +0 -0
  445. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_completion.py +0 -0
  446. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_revisions.py +0 -0
  447. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_smoke.py +0 -0
  448. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/teacher.py +0 -0
  449. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/README.md +0 -0
  450. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/__init__.py +0 -0
  451. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/__init__.py +0 -0
  452. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/adapter_routes.py +0 -0
  453. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/body_limit.py +0 -0
  454. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/context.py +0 -0
  455. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_boot.py +0 -0
  456. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_errors.py +0 -0
  457. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_support.py +0 -0
  458. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/http_headers.py +0 -0
  459. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/inference_routes.py +0 -0
  460. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/lookup.py +0 -0
  461. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/lora_engine.py +0 -0
  462. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/lora_entries.py +0 -0
  463. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/model_config.py +0 -0
  464. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/multimodal.py +0 -0
  465. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/persisted_columns.py +0 -0
  466. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/persistence.py +0 -0
  467. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/prequant_config.py +0 -0
  468. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/registration.py +0 -0
  469. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/registry.py +0 -0
  470. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/responses.py +0 -0
  471. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/router.py +0 -0
  472. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/routing.py +0 -0
  473. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/schemas.py +0 -0
  474. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/serving_io.py +0 -0
  475. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/settings.py +0 -0
  476. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/streaming.py +0 -0
  477. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/structured_outputs.py +0 -0
  478. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/supabase_rest.py +0 -0
  479. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/undeploy.py +0 -0
  480. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/usage.py +0 -0
  481. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/source_snapshot.py +0 -0
  482. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/teacher/__init__.py +0 -0
  483. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/teacher/limits.py +0 -0
  484. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/teacher/provider_status.py +0 -0
  485. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/teacher/retry_contract.py +0 -0
  486. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/build_dev_dist.py +0 -0
  487. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/check_file_size.py +0 -0
  488. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/check_function_size.py +0 -0
  489. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/check_rollout_identity_actor.py +0 -0
  490. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/check_verl_pin_exists.py +0 -0
  491. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/scrub_history.sh +0 -0
  492. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/serve_launch.py +0 -0
  493. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/__init__.py +0 -0
  494. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/__init__.py +0 -0
  495. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/profile.py +0 -0
  496. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/runner.py +0 -0
  497. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/source_snapshot.py +0 -0
  498. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/specs.py +0 -0
  499. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/teacher.py +0 -0
  500. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/vast.py +0 -0
  501. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/capture_image_sft_processor_oracle.py +0 -0
  502. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/conftest.py +0 -0
  503. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  504. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/fixtures/qwen35_08b_target_metadata.json +0 -0
  505. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/__init__.py +0 -0
  506. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/conftest.py +0 -0
  507. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/test_lambda_live.py +0 -0
  508. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/test_runpod_live.py +0 -0
  509. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/test_sft_thinking_render_live.py +0 -0
  510. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/test_vast_live.py +0 -0
  511. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/conftest.py +0 -0
  512. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_base_model_serving.py +0 -0
  513. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_chat_auth.py +0 -0
  514. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_chat_authorizer.py +0 -0
  515. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_checkpoint_model_validation.py +0 -0
  516. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_engine_error_status.py +0 -0
  517. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_fp8_config.py +0 -0
  518. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_engine.py +0 -0
  519. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_revisions.py +0 -0
  520. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_schemas.py +0 -0
  521. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_modal_deploy_identity.py +0 -0
  522. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_modal_image_paths.py +0 -0
  523. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_model_config.py +0 -0
  524. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_multimodal.py +0 -0
  525. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_openai_stream_options.py +0 -0
  526. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_per_model_gpu.py +0 -0
  527. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_persistence.py +0 -0
  528. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_pre_first_disconnect.py +0 -0
  529. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_prequant_config.py +0 -0
  530. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_registry.py +0 -0
  531. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_registry_coverage.py +0 -0
  532. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_request_body_limit.py +0 -0
  533. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_router.py +0 -0
  534. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_router_coverage.py +0 -0
  535. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_router_edge_coverage.py +0 -0
  536. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_schemas_coverage.py +0 -0
  537. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_reasoning_split.py +0 -0
  538. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_structured_outputs.py +0 -0
  539. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_thinking.py +0 -0
  540. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_settings.py +0 -0
  541. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_structured_outputs.py +0 -0
  542. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_structured_outputs_coverage.py +0 -0
  543. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_supabase_rest_coverage.py +0 -0
  544. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/__init__.py +0 -0
  545. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/conftest.py +0 -0
  546. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/test_contract.py +0 -0
  547. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_accounting_coverage.py +0 -0
  548. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_adapter_shard_completeness.py +0 -0
  549. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_agent_flash_cli_contract.py +0 -0
  550. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_algorithms.py +0 -0
  551. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_allocator.py +0 -0
  552. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_backend_jobspec_contract.py +0 -0
  553. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_bake_kernel_cache.py +0 -0
  554. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_base_model_provenance.py +0 -0
  555. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_billing_retry.py +0 -0
  556. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_build_context_contract.py +0 -0
  557. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cancel_remote.py +0 -0
  558. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_catalog_consistency.py +0 -0
  559. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_catalog_only_models.py +0 -0
  560. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_charge_pricing.py +0 -0
  561. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_checkpoint_lifecycle.py +0 -0
  562. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_checkpoints.py +0 -0
  563. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_commands.py +0 -0
  564. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_credential_shadowing.py +0 -0
  565. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_errors.py +0 -0
  566. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_estimate.py +0 -0
  567. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_gpus_flag.py +0 -0
  568. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_help.py +0 -0
  569. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_main_coverage.py +0 -0
  570. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_managed.py +0 -0
  571. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_render_coverage.py +0 -0
  572. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_render_theme.py +0 -0
  573. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_deploy.py +0 -0
  574. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_status.py +0 -0
  575. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_undeploy.py +0 -0
  576. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_traces.py +0 -0
  577. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_wandb_warning.py +0 -0
  578. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_client.py +0 -0
  579. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_client_import_purity.py +0 -0
  580. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_client_server_integration.py +0 -0
  581. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_client_stream_reads.py +0 -0
  582. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_config_env_vars.py +0 -0
  583. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_config_overrides.py +0 -0
  584. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_console_upload.py +0 -0
  585. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_controlled_experiment_repairs.py +0 -0
  586. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cost_analytical.py +0 -0
  587. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cost_equation.py +0 -0
  588. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cost_estimate.py +0 -0
  589. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cost_hardware.py +0 -0
  590. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cost_models.py +0 -0
  591. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_dataset_profile.py +0 -0
  592. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_deploy_alias_move_warning.py +0 -0
  593. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_deploy_latency.py +0 -0
  594. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_dev_channel.py +0 -0
  595. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_disk_gb.py +0 -0
  596. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_endpoint_name.py +0 -0
  597. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_cache_evict.py +0 -0
  598. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_delete.py +0 -0
  599. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_download.py +0 -0
  600. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_download_api.py +0 -0
  601. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_evaluations.py +0 -0
  602. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_list_api.py +0 -0
  603. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_list_cli.py +0 -0
  604. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_list_hub.py +0 -0
  605. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_no_install.py +0 -0
  606. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_publish.py +0 -0
  607. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_pull.py +0 -0
  608. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_coverage.py +0 -0
  609. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_loader_coverage.py +0 -0
  610. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_managed_control_plane.py +0 -0
  611. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_push.py +0 -0
  612. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_rate_limit_resolve.py +0 -0
  613. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_ref_pinning.py +0 -0
  614. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_test.py +0 -0
  615. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_envs_coverage.py +0 -0
  616. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_export.py +0 -0
  617. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_flash_mvp.py +0 -0
  618. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_flash_worker.py +0 -0
  619. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_flashinfer_cache_dirs.py +0 -0
  620. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_freesolo_api_transport.py +0 -0
  621. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_fused_expert_warmstart.py +0 -0
  622. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_github_urlopen_retry.py +0 -0
  623. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_gpu_type_single_field.py +0 -0
  624. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_gpus.py +0 -0
  625. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_process_census.py +0 -0
  626. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_resident_sizing.py +0 -0
  627. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_reward_batching.py +0 -0
  628. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_rollout_identity.py +0 -0
  629. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_health_liveness.py +0 -0
  630. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_hf_retry.py +0 -0
  631. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_idle_endpoint_reaper.py +0 -0
  632. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_image_environment_capability.py +0 -0
  633. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_image_incremental_processor.py +0 -0
  634. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_image_sft_markers.py +0 -0
  635. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_image_sft_processor_parity.py +0 -0
  636. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_image_tokens.py +0 -0
  637. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_infisical_secrets.py +0 -0
  638. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_instance_bootstrap_coverage.py +0 -0
  639. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_internal_client.py +0 -0
  640. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_jobs.py +0 -0
  641. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_kernel_cache.py +0 -0
  642. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_kv_util.py +0 -0
  643. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lambda_api_coverage.py +0 -0
  644. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lambda_runner.py +0 -0
  645. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_logging.py +0 -0
  646. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_login_perms.py +0 -0
  647. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_coverage.py +0 -0
  648. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_nested_rung.py +0 -0
  649. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_preflight.py +0 -0
  650. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lora_targeting.py +0 -0
  651. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_managed_config_fields.py +0 -0
  652. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_managed_hf_repo.py +0 -0
  653. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_metrics_schema_agent_contract.py +0 -0
  654. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_mig_guard.py +0 -0
  655. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_multi_gpu_gate.py +0 -0
  656. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_multimodal_training.py +0 -0
  657. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_named_reward_metrics.py +0 -0
  658. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_oom_escalate_gpu.py +0 -0
  659. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd.py +0 -0
  660. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_limits.py +0 -0
  661. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  662. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_multiturn_failure_exit.py +0 -0
  663. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_replay_guard.py +0 -0
  664. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_resume_safety.py +0 -0
  665. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_orchestrator_flash.py +0 -0
  666. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_packing.py +0 -0
  667. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_packing_coverage.py +0 -0
  668. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_parasail_teacher.py +0 -0
  669. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_persisted_spec_envelope.py +0 -0
  670. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_poll_helpers.py +0 -0
  671. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_preflight.py +0 -0
  672. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_projects.py +0 -0
  673. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_prompt_budget.py +0 -0
  674. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_provider_preflight_coverage.py +0 -0
  675. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_provider_routing.py +0 -0
  676. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_provider_teardown_robustness.py +0 -0
  677. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_providers_symmetry.py +0 -0
  678. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_realized_cost.py +0 -0
  679. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_repo_cleanup.py +0 -0
  680. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_resolve_params_b.py +0 -0
  681. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_resume_on_retry.py +0 -0
  682. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_rollout_samples.py +0 -0
  683. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_runmgmt.py +0 -0
  684. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_runpod_api_delete.py +0 -0
  685. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_runpod_key_fingerprint.py +0 -0
  686. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_runpod_key_waterfall.py +0 -0
  687. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_runtime_capsule.py +0 -0
  688. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve.py +0 -0
  689. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_bootstrap_http.py +0 -0
  690. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_launch.py +0 -0
  691. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_manifest.py +0 -0
  692. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_materialize.py +0 -0
  693. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_packaging.py +0 -0
  694. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_control.py +0 -0
  695. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_sdk.py +0 -0
  696. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  697. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_teardown_identity.py +0 -0
  698. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_profiles.py +0 -0
  699. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_common.py +0 -0
  700. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_modal.py +0 -0
  701. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_runpod.py +0 -0
  702. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_reasoning_content.py +0 -0
  703. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_resolve_provenance.py +0 -0
  704. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_adapters.py +0 -0
  705. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_engine.py +0 -0
  706. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_types.py +0 -0
  707. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_app_coverage.py +0 -0
  708. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_auth_singleflight.py +0 -0
  709. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_billing.py +0 -0
  710. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_checkpoints_coverage.py +0 -0
  711. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_db.py +0 -0
  712. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_envs_coverage.py +0 -0
  713. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_locks_coverage.py +0 -0
  714. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_serving_resources.py +0 -0
  715. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_standalone.py +0 -0
  716. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serving_conformance_gate.py +0 -0
  717. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serving_context_preflight.py +0 -0
  718. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serving_contract.py +0 -0
  719. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serving_schema_coverage.py +0 -0
  720. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_chunked_nll.py +0 -0
  721. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_example_selection.py +0 -0
  722. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_gc_off.py +0 -0
  723. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_max_context.py +0 -0
  724. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_startup_block.py +0 -0
  725. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_workload.py +0 -0
  726. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_source_attestation_flow.py +0 -0
  727. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_source_snapshot.py +0 -0
  728. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_spec_and_validation.py +0 -0
  729. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_spec_contract_bytes.py +0 -0
  730. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_staged_environment.py +0 -0
  731. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_step_floor.py +0 -0
  732. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_step_metrics.py +0 -0
  733. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_step_timing.py +0 -0
  734. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_structured_outputs.py +0 -0
  735. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_teacher_broker.py +0 -0
  736. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_teacher_encoding_contract.py +0 -0
  737. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_terminal_artifacts.py +0 -0
  738. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_thinking_config.py +0 -0
  739. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_train_context_preflight.py +0 -0
  740. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_training_controls.py +0 -0
  741. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_type_comment_prose.py +0 -0
  742. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vast_api.py +0 -0
  743. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vast_api_coverage.py +0 -0
  744. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vast_offers.py +0 -0
  745. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vast_provider_coverage.py +0 -0
  746. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vast_runner.py +0 -0
  747. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_verified_revisions.py +0 -0
  748. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_verifiers.py +0 -0
  749. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_verl_checkpoint_export.py +0 -0
  750. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_verl_child_plugins.py +0 -0
  751. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_verl_silence_watchdog.py +0 -0
  752. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_version.py +0 -0
  753. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  754. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vram_architecture.py +0 -0
  755. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_wandb_link.py +0 -0
  756. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_wandb_naming.py +0 -0
  757. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_adapter_download.py +0 -0
  758. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_cross_repo.py +0 -0
  759. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_error_attribution.py +0 -0
  760. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_image_adapters.py +0 -0
  761. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_weight_cache.py +0 -0
  762. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_dryrun.py +0 -0
  763. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_hardexit.py +0 -0
  764. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_image.py +0 -0
  765. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_init_heartbeat.py +0 -0
  766. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_thinking.py +0 -0
  767. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_workflow_contracts.py +0 -0
  768. {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_workload_profile.py +0 -0
  769. {freesolo_flash_dev-1.2.110 → 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.110
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():
@@ -1104,7 +1104,7 @@ in a sensible value, so only override with a reason.
1104
1104
 
1105
1105
  | Knob | Convention |
1106
1106
  | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1107
- | `group_size` | Completions sampled per prompt. GRPO accepts exactly `2`, `4`, or `8` and defaults to `8`; Flash never changes the configured value. More completions can improve the within-group comparison but multiply rollout cost. |
1107
+ | `group_size` | Completions sampled per prompt. GRPO accepts exactly `2`, `4`, `8`, or `16` and defaults to `8`; Flash never changes the configured value. More completions can improve the within-group comparison but multiply rollout cost. |
1108
1108
  | `max_completion_tokens` | Completion cap for each model turn, not the whole episode. In multi-turn runs every turn gets the full cap again, while the whole transcript (all model turns plus environment replies) must fit inside `max_context_tokens`. Size `max_context_tokens` for the whole episode, not just one turn; an undersized turn cap silently truncates good answers and poisons the reward. |
1109
1109
  | `temperature` | Rollout sampling temperature. Keep it near 1.0 for GRPO — too low collapses diversity (and the model can collapse within a few steps); raise it to widen exploration against uniform-reward groups. |
1110
1110
  | `kl_penalty_coef` | Keeps the trained model from drifting too far from the base. Raise it to anchor against entropy collapse; lower it for more freedom to move. |
@@ -9,7 +9,7 @@ from typing import Any
9
9
 
10
10
  DEFAULT_GRPO_PROMPTS_PER_STEP = 64
11
11
  DEFAULT_GRPO_GROUP_SIZE = 8
12
- SUPPORTED_GRPO_GROUP_SIZES = (2, 4, 8)
12
+ SUPPORTED_GRPO_GROUP_SIZES = (2, 4, 8, 16)
13
13
  MAX_GRPO_COMPLETIONS_PER_STEP = 512
14
14
 
15
15
  GRPO_NATIVE_THREAD_ENV: Mapping[str, str] = MappingProxyType(
@@ -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,
@@ -936,6 +941,7 @@ from flash.engine.worker.verl.capabilities import ( # noqa: E402,F401
936
941
  resolve_verl_loggers,
937
942
  resolve_verl_python,
938
943
  rollout_fp8_kv,
944
+ rollout_layered_summon_overrides,
939
945
  rollout_mm_processor_cache_overrides,
940
946
  rollout_resident_overrides,
941
947
  rollout_sleep_unsupported,
@@ -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,8 +15,10 @@ 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,
21
+ rollout_layered_summon_overrides,
20
22
  rollout_mm_processor_cache_overrides,
21
23
  rollout_resident_overrides,
22
24
  shim_marker_file,
@@ -130,7 +132,6 @@ def _actor_rollout_overrides(config: dict, *, max_tokens: int) -> list[str]:
130
132
  else []
131
133
  ),
132
134
  f"actor_rollout_ref.model.lora_adapter_path={_hydra_val(config.get('lora_adapter_path'))}",
133
- "actor_rollout_ref.actor.strategy=fsdp",
134
135
  "actor_rollout_ref.actor.use_kl_loss=false",
135
136
  "actor_rollout_ref.actor.loss_agg_mode=seq-mean-token-mean",
136
137
  "actor_rollout_ref.actor.use_dynamic_bsz=true",
@@ -148,6 +149,9 @@ def _actor_rollout_overrides(config: dict, *, max_tokens: int) -> list[str]:
148
149
  # absent -> True, verl's own default: a config built without the gate must render the
149
150
  # lower-memory strategy, never fall into zero-2 by omission.
150
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")),
151
155
  # store the frozen base in bf16, not verl's fp32 yaml default. shared with the rl driver.
152
156
  *trainer_dtype_overrides(),
153
157
  "actor_rollout_ref.rollout.name=vllm",
@@ -181,6 +185,9 @@ def _actor_rollout_overrides(config: dict, *, max_tokens: int) -> list[str]:
181
185
  if config.get("mm_encoder_attn_backend")
182
186
  else []
183
187
  ),
188
+ # fused-expert lora models gather the weight sync one submodule at a time, as the grpo path
189
+ # does; opd shares verl's collect_lora_params. requires load_format=safetensors above.
190
+ *rollout_layered_summon_overrides(config.get("target_parameters")),
184
191
  *rollout_mm_processor_cache_overrides(),
185
192
  # keep the rollout engine RESIDENT for models whose vLLM wake/reload HANGS (catalog
186
193
  # sleep_unsupported), exactly as the grpo path does. opd is NOT exempt: main_ppo_sync calls
@@ -17,8 +17,10 @@ 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,
23
+ rollout_layered_summon_overrides,
22
24
  rollout_mm_processor_cache_overrides,
23
25
  rollout_resident_overrides,
24
26
  rollout_sleep_unsupported,
@@ -299,6 +301,9 @@ def _actor_overrides(cfg: dict) -> list[str]:
299
301
  # absent -> True, verl's own default: a cfg built without the gate must render the
300
302
  # lower-memory strategy, never fall into zero-2 by omission.
301
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")),
302
307
  # store the frozen base in bf16, not verl's fp32 yaml default. shared with the opd driver.
303
308
  *trainer_dtype_overrides(),
304
309
  ]
@@ -350,6 +355,10 @@ def _rollout_overrides(cfg: dict) -> list[str]:
350
355
  ),
351
356
  # safetensors load format is required for lora rollout on vllm.
352
357
  "actor_rollout_ref.rollout.load_format=safetensors",
358
+ # fused-expert lora models gather the weight sync one submodule at a time; the whole-model
359
+ # summon materializes every layer's expert stack at once. requires load_format=safetensors
360
+ # above, which verl checks as base_sync_done before allowing the layered walk.
361
+ *rollout_layered_summon_overrides(cfg.get("target_parameters")),
353
362
  *rollout_mm_processor_cache_overrides(),
354
363
  # keep the rollout engine RESIDENT for models whose vLLM wake/reload HANGS (catalog
355
364
  # sleep_unsupported). shared with the opd driver, which runs the same verl sleep path.