freesolo-flash-dev 1.2.69__tar.gz → 1.2.87__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 (593) hide show
  1. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/workflows/auto-rebake.yml +31 -14
  2. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/workflows/bake-kernel-cache.yml +15 -23
  3. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/workflows/ci.yml +2 -2
  4. freesolo_flash_dev-1.2.87/.github/workflows/dev-kernel-cache.yml +212 -0
  5. freesolo_flash_dev-1.2.87/.github/workflows/production-kernel-cache-ready.yml +98 -0
  6. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/workflows/publish-dev.yml +1 -1
  7. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/workflows/publish.yml +1 -1
  8. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/workflows/worker-image.yml +40 -3
  9. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/CHANGELOG.md +7 -0
  10. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/Dockerfile.worker +12 -5
  11. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/PKG-INFO +1 -1
  12. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/docker/bake_kernel_cache.py +78 -29
  13. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/adapters/fused_experts.py +30 -28
  14. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/scaffold/TRAINING.md +11 -5
  15. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/plan/vram.py +28 -2
  16. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/__init__.py +0 -5
  17. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/backend_common.py +1 -0
  18. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/opd_train.py +3 -2
  19. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/perf/__init__.py +4 -3
  20. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/rl_train.py +5 -2
  21. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/sft_train.py +10 -4
  22. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/verl/capabilities.py +35 -4
  23. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/__init__.py +0 -1
  24. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/preparation.py +18 -10
  25. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/submit.py +0 -1
  26. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/schema/__init__.py +0 -5
  27. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/pyproject.toml +2 -2
  28. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_bake_kernel_cache.py +60 -26
  29. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_fused_expert_warmstart.py +148 -21
  30. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_lora_rank_preflight.py +0 -1
  31. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_multi_gpu_gate.py +103 -0
  32. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_opd.py +173 -8
  33. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_opd_train.py +19 -0
  34. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_sft_train.py +16 -0
  35. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_spec_and_validation.py +32 -16
  36. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_warmstart_cross_repo.py +236 -0
  37. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_worker_hardexit.py +21 -11
  38. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_worker_stack.py +80 -21
  39. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_workflow_contracts.py +134 -0
  40. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/uv.lock +68 -70
  41. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.dockerignore +0 -0
  42. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.env.example +0 -0
  43. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/CODEOWNERS +0 -0
  44. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  45. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  46. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  47. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  48. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/dependabot.yml +0 -0
  49. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/workflows/main-source-guard.yml +0 -0
  50. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/workflows/notify-tests-repo.yml +0 -0
  51. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/workflows/publish-image.yml +0 -0
  52. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.github/workflows/version-parity.yml +0 -0
  53. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/.gitignore +0 -0
  54. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/CODE_OF_CONDUCT.md +0 -0
  55. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/CONTRIBUTING.md +0 -0
  56. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/Dockerfile +0 -0
  57. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/LICENSE +0 -0
  58. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/NOTICE +0 -0
  59. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/README.md +0 -0
  60. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/SECURITY.md +0 -0
  61. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/SELF_HOSTING.md +0 -0
  62. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/build/kernel_cache/.gitignore +0 -0
  63. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/build/kernel_cache/.keep +0 -0
  64. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/deploy/infisical/README.md +0 -0
  65. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/deploy/infisical/entrypoint.sh +0 -0
  66. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/docker/Dockerfile.kernelcache +0 -0
  67. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/docker/Dockerfile.kernelcache.relayer +0 -0
  68. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/docker/bake_pod_entry.py +0 -0
  69. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/docker/extract_cudart_fix.py +0 -0
  70. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/docker/kernel_fingerprint.py +0 -0
  71. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/docker/make_rp_handler.py +0 -0
  72. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/__init__.py +0 -0
  73. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/_internal/__init__.py +0 -0
  74. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/_internal/channel.py +0 -0
  75. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/_internal/diagnostics.py +0 -0
  76. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/_internal/fileio.py +0 -0
  77. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/_internal/logging.py +0 -0
  78. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/_internal/paths.py +0 -0
  79. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/adapters/__init__.py +0 -0
  80. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/adapters/artifacts.py +0 -0
  81. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/adapters/lora_rank.py +0 -0
  82. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/__init__.py +0 -0
  83. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/__main__.py +0 -0
  84. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/__init__.py +0 -0
  85. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/deploy.py +0 -0
  86. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/__init__.py +0 -0
  87. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/episode.py +0 -0
  88. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/eval.py +0 -0
  89. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/eval_args.py +0 -0
  90. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/imports.py +0 -0
  91. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/list.py +0 -0
  92. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/push.py +0 -0
  93. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/retained.py +0 -0
  94. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/setup.py +0 -0
  95. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/setup_wandb.py +0 -0
  96. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/test.py +0 -0
  97. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/test_evaluations.py +0 -0
  98. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/test_params.py +0 -0
  99. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/env/test_warnings.py +0 -0
  100. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/prompt_budget.py +0 -0
  101. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/traces.py +0 -0
  102. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/commands/train_cost.py +0 -0
  103. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/scaffold/__init__.py +0 -0
  104. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/ui/__init__.py +0 -0
  105. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/ui/cost.py +0 -0
  106. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/ui/env_panels.py +0 -0
  107. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/ui/heartbeat.py +0 -0
  108. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/ui/render.py +0 -0
  109. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/ui/tables.py +0 -0
  110. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cli/ui/tty.py +0 -0
  111. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/client/__init__.py +0 -0
  112. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/client/config.py +0 -0
  113. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/client/freesolo_api.py +0 -0
  114. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/client/http.py +0 -0
  115. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/client/runtime_secrets.py +0 -0
  116. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/client/shapes.py +0 -0
  117. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/client/specs.py +0 -0
  118. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/client/streaming.py +0 -0
  119. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/content/__init__.py +0 -0
  120. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/content/multimodal.py +0 -0
  121. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/content/structured_outputs.py +0 -0
  122. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/content/thinking.py +0 -0
  123. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/core/__init__.py +0 -0
  124. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/core/catalog.py +0 -0
  125. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/core/spec.py +0 -0
  126. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/core/spec_persistence.py +0 -0
  127. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cost/__init__.py +0 -0
  128. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cost/analytical.py +0 -0
  129. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cost/facts.py +0 -0
  130. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cost/spec.py +0 -0
  131. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/cost/types.py +0 -0
  132. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/__init__.py +0 -0
  133. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/huggingface.py +0 -0
  134. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/plan/__init__.py +0 -0
  135. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/plan/kv_sizing.py +0 -0
  136. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/plan/model_config_probe.py +0 -0
  137. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/plan/prompt_budget.py +0 -0
  138. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/plan/recipe.py +0 -0
  139. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/plan/steps.py +0 -0
  140. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/profiling/__init__.py +0 -0
  141. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/profiling/dataset_profile.py +0 -0
  142. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/profiling/image_tokens.py +0 -0
  143. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/profiling/reasoning_render.py +0 -0
  144. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/profiling/sft_image_rows.py +0 -0
  145. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/profiling/sft_workload.py +0 -0
  146. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/profiling/tokenizer.py +0 -0
  147. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/profiling/workload_profile.py +0 -0
  148. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/result/__init__.py +0 -0
  149. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/result/accounting.py +0 -0
  150. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/result/rollout_samples.py +0 -0
  151. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/__main__.py +0 -0
  152. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/entry/__init__.py +0 -0
  153. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/entry/opd.py +0 -0
  154. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/entry/rl.py +0 -0
  155. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/entry/sft.py +0 -0
  156. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/io/__init__.py +0 -0
  157. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/io/heartbeat.py +0 -0
  158. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/io/hf.py +0 -0
  159. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/io/prefetch.py +0 -0
  160. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/io/wandb_log.py +0 -0
  161. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/model/__init__.py +0 -0
  162. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/model/adapter.py +0 -0
  163. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/model/chatml_mask.py +0 -0
  164. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/model/decoding.py +0 -0
  165. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/model/lora.py +0 -0
  166. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/model/packing.py +0 -0
  167. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/opd_train_runner.py +0 -0
  168. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/perf/diagnostics.py +0 -0
  169. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/perf/lifecycle.py +0 -0
  170. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/perf/liger.py +0 -0
  171. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/perf/memory.py +0 -0
  172. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/rl_train_runner.py +0 -0
  173. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/runtime/__init__.py +0 -0
  174. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  175. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/runtime/pkg_proxy.py +0 -0
  176. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/runtime/rng.py +0 -0
  177. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/score_batcher.py +0 -0
  178. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/sft_train_runner.py +0 -0
  179. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/teacher/__init__.py +0 -0
  180. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/teacher/client.py +0 -0
  181. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/teacher/encoding.py +0 -0
  182. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  183. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/__init__.py +0 -0
  184. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/core/__init__.py +0 -0
  185. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/core/checkpoint_lifecycle.py +0 -0
  186. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/core/child/__init__.py +0 -0
  187. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/core/child/glue.py +0 -0
  188. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/core/child/runtime.py +0 -0
  189. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/core/step_timing.py +0 -0
  190. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/finalize.py +0 -0
  191. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/__init__.py +0 -0
  192. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/batching.py +0 -0
  193. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/bridge.py +0 -0
  194. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/bridge_failures.py +0 -0
  195. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  196. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  197. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/child/entry.py +0 -0
  198. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
  199. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/child/plugin.py +0 -0
  200. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  201. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  202. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/child/structured.py +0 -0
  203. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/failures.py +0 -0
  204. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/gkd.py +0 -0
  205. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/multiturn_validation.py +0 -0
  206. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/overrides.py +0 -0
  207. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/prompts.py +0 -0
  208. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/reporting.py +0 -0
  209. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/scoring.py +0 -0
  210. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/state.py +0 -0
  211. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/opd/validation.py +0 -0
  212. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/__init__.py +0 -0
  213. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/checkpoints.py +0 -0
  214. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  215. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/child/entry.py +0 -0
  216. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  217. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/child/patches.py +0 -0
  218. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  219. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/config.py +0 -0
  220. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/inputs.py +0 -0
  221. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/multi_turn.py +0 -0
  222. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/reward_module.py +0 -0
  223. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/scoring.py +0 -0
  224. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/single_turn.py +0 -0
  225. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/rl/verl_config.py +0 -0
  226. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/sft/__init__.py +0 -0
  227. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/sft/checkpoints.py +0 -0
  228. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/sft/child/entry.py +0 -0
  229. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/sft/child/plugin.py +0 -0
  230. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/train/sft/config.py +0 -0
  231. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/verl/__init__.py +0 -0
  232. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/verl/checkpoints.py +0 -0
  233. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/verl/child_io.py +0 -0
  234. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/verl/diagnostics.py +0 -0
  235. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/verl/parallelism.py +0 -0
  236. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker/verl/parent_work.py +0 -0
  237. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/engine/worker_entrypoint.py +0 -0
  238. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/__init__.py +0 -0
  239. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/adapter.py +0 -0
  240. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/base.py +0 -0
  241. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/cache_security.py +0 -0
  242. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/dataset_selection.py +0 -0
  243. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/evaluations.py +0 -0
  244. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/identity.py +0 -0
  245. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/loader.py +0 -0
  246. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/namespace_listing.py +0 -0
  247. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/package/__init__.py +0 -0
  248. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/package/direct_tokens.py +0 -0
  249. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/package/limits.py +0 -0
  250. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/package/unpack.py +0 -0
  251. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/envs/pull.py +0 -0
  252. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/__init__.py +0 -0
  253. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/__init__.py +0 -0
  254. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/auth.py +0 -0
  255. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/bootstrap.py +0 -0
  256. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/bootstrap_console.py +0 -0
  257. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/bootstrap_pip.py +0 -0
  258. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/bootstrap_secrets.py +0 -0
  259. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/deadline.py +0 -0
  260. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/host/__init__.py +0 -0
  261. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  262. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/host/failmark.py +0 -0
  263. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  264. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/http.py +0 -0
  265. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/instance.py +0 -0
  266. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/poll.py +0 -0
  267. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/poll_instance.py +0 -0
  268. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/provider.py +0 -0
  269. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/terminal_artifacts.py +0 -0
  270. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/_lifecycle/worker.py +0 -0
  271. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/allocator.py +0 -0
  272. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/artifacts/__init__.py +0 -0
  273. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/artifacts/hf.py +0 -0
  274. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/artifacts/preload_runpod.py +0 -0
  275. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/artifacts/weight_cache.py +0 -0
  276. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/base.py +0 -0
  277. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/fit_errors.py +0 -0
  278. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/lambda_/__init__.py +0 -0
  279. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/lambda_/api.py +0 -0
  280. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/lambda_/auth.py +0 -0
  281. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/lambda_/gpus.py +0 -0
  282. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/lambda_/jobs/__init__.py +0 -0
  283. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/lambda_/jobs/builders.py +0 -0
  284. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/lambda_/jobs/reap.py +0 -0
  285. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/lambda_/preflight.py +0 -0
  286. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/lambda_/pricing.py +0 -0
  287. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/preflight.py +0 -0
  288. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/realized.py +0 -0
  289. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/__init__.py +0 -0
  290. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/api.py +0 -0
  291. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/auth.py +0 -0
  292. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/cost.py +0 -0
  293. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/gpus.py +0 -0
  294. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/job_execution.py +0 -0
  295. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/jobs.py +0 -0
  296. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/preflight.py +0 -0
  297. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/pricing.py +0 -0
  298. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/resources.py +0 -0
  299. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/serverless/__init__.py +0 -0
  300. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/runpod/serverless/endpoints.py +0 -0
  301. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/sharding.py +0 -0
  302. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/vast/__init__.py +0 -0
  303. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/vast/api.py +0 -0
  304. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/vast/auth.py +0 -0
  305. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/vast/jobs/__init__.py +0 -0
  306. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/vast/jobs/builders.py +0 -0
  307. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/vast/preflight.py +0 -0
  308. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/providers/vast/pricing.py +0 -0
  309. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/py.typed +0 -0
  310. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/artifacts.py +0 -0
  311. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/attempts.py +0 -0
  312. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/costs.py +0 -0
  313. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/deadlines.py +0 -0
  314. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/reconciliation.py +0 -0
  315. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/results/__init__.py +0 -0
  316. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/results/checkpoints.py +0 -0
  317. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/results/verified_revisions.py +0 -0
  318. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/status.py +0 -0
  319. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/supervise/__init__.py +0 -0
  320. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/supervise/attach.py +0 -0
  321. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/supervise/deploy.py +0 -0
  322. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/supervise/lifecycle.py +0 -0
  323. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/supervise/recovery.py +0 -0
  324. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/supervise/retry_decision.py +0 -0
  325. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/supervise/seed_submission.py +0 -0
  326. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/supervise/transitions.py +0 -0
  327. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runner/weight_cache.py +0 -0
  328. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runtime_capsule/__init__.py +0 -0
  329. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runtime_capsule/build.py +0 -0
  330. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runtime_capsule/manifest.py +0 -0
  331. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/runtime_capsule/profiles.py +0 -0
  332. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/schema/fields.py +0 -0
  333. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/serve/__init__.py +0 -0
  334. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/serve/adapter_check.py +0 -0
  335. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/serve/deploy.py +0 -0
  336. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/serve/errors.py +0 -0
  337. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/serve/export.py +0 -0
  338. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/serve/preflight.py +0 -0
  339. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/serve/responses.py +0 -0
  340. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/serve/streaming.py +0 -0
  341. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/serve/thinking.py +0 -0
  342. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/serve/urls.py +0 -0
  343. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/__init__.py +0 -0
  344. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/__main__.py +0 -0
  345. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/app.py +0 -0
  346. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/billing/__init__.py +0 -0
  347. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/billing/charges.py +0 -0
  348. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/billing/retry.py +0 -0
  349. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/domain/__init__.py +0 -0
  350. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/domain/checkpoints.py +0 -0
  351. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/domain/environment_registry.py +0 -0
  352. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/domain/envs.py +0 -0
  353. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/domain/projects.py +0 -0
  354. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/domain/reconcile.py +0 -0
  355. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/domain/repo_cleanup.py +0 -0
  356. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/domain/run_registry.py +0 -0
  357. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/domain/teacher_broker.py +0 -0
  358. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/domain/teacher_errors.py +0 -0
  359. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/domain/teacher_requests.py +0 -0
  360. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/platform/__init__.py +0 -0
  361. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/platform/auth.py +0 -0
  362. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/platform/db.py +0 -0
  363. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/platform/deps.py +0 -0
  364. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/platform/internal_client.py +0 -0
  365. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/platform/locks.py +0 -0
  366. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/platform/runtime.py +0 -0
  367. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/routes/__init__.py +0 -0
  368. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/routes/envs.py +0 -0
  369. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/routes/meta.py +0 -0
  370. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/routes/runs.py +0 -0
  371. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/routes/serving.py +0 -0
  372. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/routes/serving_completion.py +0 -0
  373. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/routes/serving_revisions.py +0 -0
  374. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/routes/serving_smoke.py +0 -0
  375. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/server/routes/teacher.py +0 -0
  376. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/source_snapshot.py +0 -0
  377. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/teacher/__init__.py +0 -0
  378. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/teacher/limits.py +0 -0
  379. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/flash/teacher/retry_contract.py +0 -0
  380. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/scripts/build_dev_dist.py +0 -0
  381. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/scripts/check_file_size.py +0 -0
  382. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/scripts/check_function_size.py +0 -0
  383. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/scripts/check_verl_pin_exists.py +0 -0
  384. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/scripts/scrub_history.sh +0 -0
  385. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/__init__.py +0 -0
  386. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/_helpers/__init__.py +0 -0
  387. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/_helpers/profile.py +0 -0
  388. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/_helpers/runner.py +0 -0
  389. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/_helpers/source_snapshot.py +0 -0
  390. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/_helpers/specs.py +0 -0
  391. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/_helpers/teacher.py +0 -0
  392. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/_helpers/vast.py +0 -0
  393. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/capture_image_sft_processor_oracle.py +0 -0
  394. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/conftest.py +0 -0
  395. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  396. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/fixtures/math_eval.jsonl +0 -0
  397. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/fixtures/math_train.jsonl +0 -0
  398. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/live/__init__.py +0 -0
  399. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/live/conftest.py +0 -0
  400. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/live/test_lambda_live.py +0 -0
  401. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/live/test_runpod_live.py +0 -0
  402. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/live/test_sft_thinking_render_live.py +0 -0
  403. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/live/test_vast_live.py +0 -0
  404. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_accounting_coverage.py +0 -0
  405. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_adapter_shard_completeness.py +0 -0
  406. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_agent_flash_cli_contract.py +0 -0
  407. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_algorithms.py +0 -0
  408. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_allocator.py +0 -0
  409. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_backend_common.py +0 -0
  410. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_backend_jobspec_contract.py +0 -0
  411. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_base_model_provenance.py +0 -0
  412. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_billing_retry.py +0 -0
  413. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_build_context_contract.py +0 -0
  414. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cancel_remote.py +0 -0
  415. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_catalog_consistency.py +0 -0
  416. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_catalog_only_models.py +0 -0
  417. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_charge_pricing.py +0 -0
  418. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_checkpoint_lifecycle.py +0 -0
  419. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_checkpoints.py +0 -0
  420. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_commands.py +0 -0
  421. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_commands_coverage.py +0 -0
  422. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_credential_shadowing.py +0 -0
  423. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_errors.py +0 -0
  424. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_estimate.py +0 -0
  425. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_gpus_flag.py +0 -0
  426. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_help.py +0 -0
  427. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_main_coverage.py +0 -0
  428. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_managed.py +0 -0
  429. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_render_coverage.py +0 -0
  430. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_render_theme.py +0 -0
  431. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_traces.py +0 -0
  432. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cli_wandb_warning.py +0 -0
  433. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_client.py +0 -0
  434. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_client_import_purity.py +0 -0
  435. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_client_server_integration.py +0 -0
  436. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_client_stream_reads.py +0 -0
  437. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_config_env_vars.py +0 -0
  438. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_config_overrides.py +0 -0
  439. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_console_upload.py +0 -0
  440. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_controlled_experiment_repairs.py +0 -0
  441. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cost_analytical.py +0 -0
  442. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cost_equation.py +0 -0
  443. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cost_estimate.py +0 -0
  444. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cost_hardware.py +0 -0
  445. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_cost_models.py +0 -0
  446. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_dataset_profile.py +0 -0
  447. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_deploy_alias_move_warning.py +0 -0
  448. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_deploy_latency.py +0 -0
  449. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_dev_channel.py +0 -0
  450. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_disk_gb.py +0 -0
  451. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_endpoint_name.py +0 -0
  452. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_cache_evict.py +0 -0
  453. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_delete.py +0 -0
  454. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_download.py +0 -0
  455. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_download_api.py +0 -0
  456. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_evaluations.py +0 -0
  457. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_list_api.py +0 -0
  458. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_list_cli.py +0 -0
  459. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_list_hub.py +0 -0
  460. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_no_install.py +0 -0
  461. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_publish.py +0 -0
  462. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_pull.py +0 -0
  463. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_pull_coverage.py +0 -0
  464. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_pull_loader_coverage.py +0 -0
  465. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_pull_managed_control_plane.py +0 -0
  466. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_push.py +0 -0
  467. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_rate_limit_resolve.py +0 -0
  468. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_ref_pinning.py +0 -0
  469. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_env_test.py +0 -0
  470. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_envs_coverage.py +0 -0
  471. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_export.py +0 -0
  472. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_flash_mvp.py +0 -0
  473. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_flash_worker.py +0 -0
  474. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_flashinfer_cache_dirs.py +0 -0
  475. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_freesolo_api_transport.py +0 -0
  476. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_github_urlopen_retry.py +0 -0
  477. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_gpu_type_single_field.py +0 -0
  478. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_gpus.py +0 -0
  479. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_grpo_params.py +0 -0
  480. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_grpo_resident_sizing.py +0 -0
  481. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_grpo_reward_batching.py +0 -0
  482. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_health_liveness.py +0 -0
  483. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_hf_retry.py +0 -0
  484. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_idle_endpoint_reaper.py +0 -0
  485. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_image_sft_markers.py +0 -0
  486. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_image_sft_processor_parity.py +0 -0
  487. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_image_tokens.py +0 -0
  488. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_infisical_secrets.py +0 -0
  489. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_instance_bootstrap_coverage.py +0 -0
  490. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_internal_client.py +0 -0
  491. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_jobs.py +0 -0
  492. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_kernel_cache.py +0 -0
  493. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_kernel_fingerprint.py +0 -0
  494. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_kv_util.py +0 -0
  495. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_lambda_api_coverage.py +0 -0
  496. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_lambda_runner.py +0 -0
  497. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_logging.py +0 -0
  498. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_login_perms.py +0 -0
  499. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_lora_rank_coverage.py +0 -0
  500. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_managed_config_fields.py +0 -0
  501. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_managed_hf_repo.py +0 -0
  502. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_metrics_schema_agent_contract.py +0 -0
  503. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_mig_guard.py +0 -0
  504. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_multimodal_training.py +0 -0
  505. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_named_reward_metrics.py +0 -0
  506. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_oom_escalate_gpu.py +0 -0
  507. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_opd_limits.py +0 -0
  508. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  509. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_opd_multiturn_failure_exit.py +0 -0
  510. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_opd_replay_guard.py +0 -0
  511. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_opd_resume_safety.py +0 -0
  512. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_orchestrator_flash.py +0 -0
  513. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_packing.py +0 -0
  514. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_packing_coverage.py +0 -0
  515. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_parasail_teacher.py +0 -0
  516. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_persisted_spec_envelope.py +0 -0
  517. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_poll_helpers.py +0 -0
  518. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_preflight.py +0 -0
  519. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_projects.py +0 -0
  520. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_prompt_budget.py +0 -0
  521. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_provider_preflight_coverage.py +0 -0
  522. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_provider_routing.py +0 -0
  523. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_provider_teardown_robustness.py +0 -0
  524. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_providers_symmetry.py +0 -0
  525. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_realized_cost.py +0 -0
  526. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_repo_cleanup.py +0 -0
  527. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_resolve_params_b.py +0 -0
  528. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_resume_on_retry.py +0 -0
  529. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_rl_train.py +0 -0
  530. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_rollout_samples.py +0 -0
  531. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_runmgmt.py +0 -0
  532. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_runpod_api_delete.py +0 -0
  533. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_runpod_key_fingerprint.py +0 -0
  534. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_runpod_key_waterfall.py +0 -0
  535. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_runtime_capsule.py +0 -0
  536. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_serve.py +0 -0
  537. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_serve_reasoning_content.py +0 -0
  538. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_server_api.py +0 -0
  539. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_server_app_coverage.py +0 -0
  540. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_server_auth_singleflight.py +0 -0
  541. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_server_billing.py +0 -0
  542. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_server_checkpoints_coverage.py +0 -0
  543. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_server_db.py +0 -0
  544. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_server_envs_coverage.py +0 -0
  545. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_server_locks_coverage.py +0 -0
  546. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_server_standalone.py +0 -0
  547. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_serving_context_preflight.py +0 -0
  548. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_serving_contract.py +0 -0
  549. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_serving_schema_coverage.py +0 -0
  550. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_sft_chunked_nll.py +0 -0
  551. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_sft_example_selection.py +0 -0
  552. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_sft_gc_off.py +0 -0
  553. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_sft_max_context.py +0 -0
  554. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_sft_startup_block.py +0 -0
  555. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_sft_workload.py +0 -0
  556. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_source_attestation_flow.py +0 -0
  557. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_source_snapshot.py +0 -0
  558. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_spec_contract_bytes.py +0 -0
  559. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_step_floor.py +0 -0
  560. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_step_metrics.py +0 -0
  561. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_step_timing.py +0 -0
  562. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_structured_outputs.py +0 -0
  563. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_teacher_broker.py +0 -0
  564. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_teacher_encoding_contract.py +0 -0
  565. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_terminal_artifacts.py +0 -0
  566. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_thinking_config.py +0 -0
  567. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_train_context_preflight.py +0 -0
  568. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_training_controls.py +0 -0
  569. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_type_comment_prose.py +0 -0
  570. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_vast_api.py +0 -0
  571. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_vast_api_coverage.py +0 -0
  572. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_vast_offers.py +0 -0
  573. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_vast_provider_coverage.py +0 -0
  574. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_vast_runner.py +0 -0
  575. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_verified_revisions.py +0 -0
  576. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_verifiers.py +0 -0
  577. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_verl_checkpoint_export.py +0 -0
  578. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_verl_child_plugins.py +0 -0
  579. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_verl_silence_watchdog.py +0 -0
  580. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_version.py +0 -0
  581. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  582. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_vram_architecture.py +0 -0
  583. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_wandb_link.py +0 -0
  584. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_wandb_naming.py +0 -0
  585. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_warmstart_adapter_download.py +0 -0
  586. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_warmstart_error_attribution.py +0 -0
  587. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_weight_cache.py +0 -0
  588. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_worker_dryrun.py +0 -0
  589. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_worker_image.py +0 -0
  590. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_worker_init_heartbeat.py +0 -0
  591. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_worker_thinking.py +0 -0
  592. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_workload_profile.py +0 -0
  593. {freesolo_flash_dev-1.2.69 → freesolo_flash_dev-1.2.87}/tests/test_zero2_sharding_gate.py +0 -0
@@ -5,9 +5,8 @@ name: auto-rebake per-arch kernel cache
5
5
  # the per-arch tags pointing at the OLD base until rebaked. "Out of date" has two flavors, keyed off
6
6
  # the fp_cache / fp_base labels worker-image.yml stamps on :cu128 (docker/kernel_fingerprint.py):
7
7
  #
8
- # * fp_cache changed -> the baked Triton/Inductor mega-cache is INVALID -> a real GPU re-warm is
9
- # required (bake-kernel-cache.yml). PAID, and AUTO-fired by this detection (no manual approval) --
10
- # fp_cache only moves on a deliberate toolchain bump, so spend stays tied to real need.
8
+ # * fp_cache changed -> promote a matching dev-ready cache by free re-layer. a real gpu re-warm is
9
+ # only the fail-safe when the required candidate is absent.
11
10
  # * fp_cache same but fp_base changed -> the cache is still valid, the base just moved (FA wheel /
12
11
  # causal-conv1d / rp_handler / a non-kernel dep) -> a FREE re-layer grafts the existing cache onto
13
12
  # the fresh base (docker/Dockerfile.kernelcache.relayer), no GPU.
@@ -54,7 +53,7 @@ jobs:
54
53
  timeout-minutes: 15
55
54
  outputs:
56
55
  proceed: ${{ steps.base.outputs.proceed }}
57
- relayer_sms: ${{ steps.classify.outputs.relayer_sms }}
56
+ relayer_matrix: ${{ steps.classify.outputs.relayer_matrix }}
58
57
  gpu_sms: ${{ steps.classify.outputs.gpu_sms }}
59
58
  fp_cache: ${{ steps.base.outputs.fp_cache }}
60
59
  fp_base: ${{ steps.base.outputs.fp_base }}
@@ -138,9 +137,23 @@ jobs:
138
137
  pc="(missing)"; pb="(missing)"
139
138
  fi
140
139
  if [ "$pc" != "$FP_CACHE" ]; then
141
- gpu+=("$sm"); action="GPU re-warm (cache invalid)"
140
+ candidate="ghcr.io/freesolo-co/flash-worker:cu128-dev-ready-$sm"
141
+ candidate_pc=""; candidate_ref=""
142
+ if candidate_digest=$(crane digest "$candidate" 2>/dev/null); then
143
+ candidate_ref="${candidate%:*}@$candidate_digest"
144
+ fi
145
+ if [ -n "$candidate_ref" ] && candidate_cfg=$(crane config "$candidate_ref" 2>/dev/null); then
146
+ candidate_pc=$(echo "$candidate_cfg" | jq -r '.config.Labels["co.freesolo.flash.kernelcache.fp_cache"] // ""')
147
+ fi
148
+ if [ "$candidate_pc" = "$FP_CACHE" ]; then
149
+ relayer+=("$(jq -cn --arg sm "$sm" --arg source "$candidate_ref" '{sm:$sm, source:$source}')")
150
+ action="promote dev cache (free)"
151
+ else
152
+ gpu+=("$sm"); action="gpu re-warm (candidate missing)"
153
+ fi
142
154
  elif [ "$pb" != "$FP_BASE" ]; then
143
- relayer+=("$sm"); action="re-layer (free)"
155
+ relayer+=("$(jq -cn --arg sm "$sm" --arg source "$img" '{sm:$sm, source:$source}')")
156
+ action="re-layer (free)"
144
157
  else
145
158
  action="up to date"
146
159
  fi
@@ -148,12 +161,12 @@ jobs:
148
161
  summary="$summary| $sm | \`$pc\` | \`$pb\` | $action |\n"
149
162
  done
150
163
  if [ ${#relayer[@]} -gt 0 ]; then
151
- relayer_json=$(printf '%s\n' "${relayer[@]}" | jq -R . | jq -cs .)
164
+ relayer_json=$(printf '%s\n' "${relayer[@]}" | jq -cs .)
152
165
  else
153
166
  relayer_json='[]'
154
167
  fi
155
168
  gpu_csv=$(IFS=,; echo "${gpu[*]}")
156
- echo "relayer_sms=$relayer_json" >> "$GITHUB_OUTPUT"
169
+ echo "relayer_matrix=$relayer_json" >> "$GITHUB_OUTPUT"
157
170
  echo "gpu_sms=$gpu_csv" >> "$GITHUB_OUTPUT"
158
171
  {
159
172
  echo "### auto-rebake plan (base rev \`$REV\`, fp_cache \`$FP_CACHE\` fp_base \`$FP_BASE\`)"
@@ -189,7 +202,7 @@ jobs:
189
202
  # FREE path: graft the existing valid cache onto the fresh base, no GPU. Runs automatically.
190
203
  relayer:
191
204
  needs: gate
192
- if: needs.gate.outputs.proceed == 'true' && needs.gate.outputs.relayer_sms != '[]' && needs.gate.outputs.relayer_sms != ''
205
+ if: needs.gate.outputs.proceed == 'true' && needs.gate.outputs.relayer_matrix != '[]' && needs.gate.outputs.relayer_matrix != ''
193
206
  runs-on: ubuntu-24.04-8core
194
207
  # The graft pulls two ~20GB images and pushes one. 21min is the slowest auto-rebake run on
195
208
  # record; 60 covers a slow registry without holding the org's larger runner indefinitely.
@@ -197,7 +210,7 @@ jobs:
197
210
  strategy:
198
211
  fail-fast: false
199
212
  matrix:
200
- sm: ${{ fromJson(needs.gate.outputs.relayer_sms || '[]') }}
213
+ include: ${{ fromJson(needs.gate.outputs.relayer_matrix || '[]') }}
201
214
  env:
202
215
  BASE_REF: ${{ needs.gate.outputs.base_ref }}
203
216
  FP_CACHE: ${{ needs.gate.outputs.fp_cache }}
@@ -232,10 +245,14 @@ jobs:
232
245
  - name: Resolve old per-arch cache digest
233
246
  id: old
234
247
  run: |
235
- img="ghcr.io/freesolo-co/flash-worker:cu128-${{ matrix.sm }}"
236
- digest=$(docker buildx imagetools inspect "$img" --format '{{.Manifest.Digest}}')
237
- # canonical digest ref (repo@sha256, no tag) for the FROM in the relayer build.
238
- echo "ref=${img%:*}@$digest" >> "$GITHUB_OUTPUT"
248
+ img="${{ matrix.source }}"
249
+ if [[ "$img" == *@sha256:* ]]; then
250
+ echo "ref=$img" >> "$GITHUB_OUTPUT"
251
+ else
252
+ digest=$(docker buildx imagetools inspect "$img" --format '{{.Manifest.Digest}}')
253
+ # canonical digest ref (repo@sha256, no tag) for the FROM in the relayer build.
254
+ echo "ref=${img%:*}@$digest" >> "$GITHUB_OUTPUT"
255
+ fi
239
256
 
240
257
  - name: Re-layer cache onto the fresh base (no GPU)
241
258
  uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
@@ -24,6 +24,10 @@ on:
24
24
  description: "comma-separated sm list to bake; default is all validated arches"
25
25
  default: "sm80,sm86,sm89,sm90,sm120,sm100"
26
26
  required: false
27
+ target_tag_prefix:
28
+ description: "target image tag before the -sm suffix"
29
+ default: "cu128"
30
+ required: false
27
31
  # auto-rebake.yml calls this for the EXPENSIVE path (the cache is invalid and must be re-warmed on a
28
32
  # real GPU). It passes the arch subset, the fingerprints to stamp, and a digest-pinned base so the
29
33
  # warm runs inside the exact :cu128 the per-arch tag will sit on.
@@ -48,6 +52,10 @@ on:
48
52
  type: string
49
53
  required: false
50
54
  default: ""
55
+ target_tag_prefix:
56
+ type: string
57
+ required: false
58
+ default: "cu128"
51
59
 
52
60
  permissions:
53
61
  contents: read
@@ -85,51 +93,36 @@ jobs:
85
93
  - {
86
94
  sm: sm80,
87
95
  arch: "8.0",
88
- gpu_type_id: "NVIDIA A100 80GB PCIe",
89
96
  allowed_cuda: "",
90
97
  }
91
98
  - {
92
99
  sm: sm86,
93
100
  arch: "8.6",
94
- gpu_type_id: "NVIDIA RTX A6000",
95
101
  allowed_cuda: "",
96
102
  }
97
- # sm89 (Ada): warm on the L40S -- a DATACENTER Ada card with reliable secure-cloud capacity --
98
- # instead of the consumer RTX 4090 (scarce/cold on secure cloud, where the bake pod often never
99
- # finished pulling the ~20GB image before the deadline). The cache is sm-keyed, so an L40S-warmed
100
- # sm89 cache is valid on every sm89 card (4090/L40/L4). NB: verify the exact RunPod gpuTypeId.
103
+ # the controller walks ordered same-sm secure-cloud gpu types from its per-sm map.
104
+ # preferred datacenter cards stay first, but one empty sku cannot strand this architecture
105
+ # on a stale image and send ordinary starts through jit.
101
106
  - {
102
107
  sm: sm89,
103
108
  arch: "8.9",
104
- gpu_type_id: "NVIDIA L40S",
105
109
  allowed_cuda: "",
106
110
  }
107
- # sm90 (Hopper): warm on the H200 (141GB, sm90) -- better secure-cloud capacity than the
108
- # heavily-contended H100 80GB HBM3 (which cold-pull-stalled the bake). Same sm90, so the cache
109
- # is valid on every H100/H200. H200 is in flash's validated GPU catalog (providers/base.py).
110
111
  - {
111
112
  sm: sm90,
112
113
  arch: "9.0",
113
- gpu_type_id: "NVIDIA H200",
114
114
  allowed_cuda: "",
115
115
  }
116
- # Blackwell needs CUDA-13 hosts to JIT its PTX (matches min_cuda_for in the provider). Bake
117
- # sm120 on the RTX Pro 6000 (Server Edition): it's the same sm120 (cache is sm-keyed, so it's
118
- # valid for RTX 5090 too) but has far better secure-cloud on-demand capacity -- the RTX 5090
119
- # pool repeatedly returned "machine does not have the resources" at create_pod.
116
+ # blackwell needs cuda-13 hosts to jit its ptx (matches min_cuda_for in the provider).
120
117
  - {
121
118
  sm: sm120,
122
119
  arch: "12.0",
123
- gpu_type_id: "NVIDIA RTX PRO 6000 Blackwell Server Edition",
124
120
  allowed_cuda: "13.0",
125
121
  }
126
- # datacenter blackwell (sm100, distinct from the sm120 rtx pro 6000). b200 has 180 gb,
127
- # good secure-cloud capacity, and is validated. promote its image only after a successful
128
- # real-b200 bake, then include it in default and automatic rebakes.
122
+ # datacenter blackwell is distinct from sm120. b200 is the only validated sm100 type.
129
123
  - {
130
124
  sm: sm100,
131
125
  arch: "10.0",
132
- gpu_type_id: "NVIDIA B200",
133
126
  allowed_cuda: "13.0",
134
127
  }
135
128
  steps:
@@ -202,7 +195,7 @@ jobs:
202
195
 
203
196
  - name: Install uv
204
197
  if: steps.gate.outputs.run == 'true'
205
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
198
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
206
199
  with:
207
200
  # no cache: the post-run cache-prune calls `uv`, but the "Free disk space" step deletes
208
201
  # /opt/hostedtoolcache (where setup-uv put uv), so the post step fails ("uv not found") and
@@ -227,7 +220,6 @@ jobs:
227
220
  run: |
228
221
  uv run python docker/bake_kernel_cache.py \
229
222
  --arch "${{ matrix.arch }}" --sm "${{ matrix.sm }}" \
230
- --gpu-type-id "${{ matrix.gpu_type_id }}" \
231
223
  --allowed-cuda "${{ matrix.allowed_cuda }}" \
232
224
  --image "$BASE_IMAGE" \
233
225
  --out build/kernel_cache
@@ -256,7 +248,7 @@ jobs:
256
248
  context: .
257
249
  file: docker/Dockerfile.kernelcache
258
250
  push: true
259
- tags: ghcr.io/freesolo-co/flash-worker:cu128-${{ matrix.sm }}
251
+ tags: ghcr.io/freesolo-co/flash-worker:${{ inputs.target_tag_prefix || 'cu128' }}-${{ matrix.sm }}
260
252
  provenance: false
261
253
  build-args: |
262
254
  BASE=${{ steps.base.outputs.ref }}
@@ -33,7 +33,7 @@ jobs:
33
33
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
34
34
 
35
35
  - name: Install uv
36
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
36
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
37
37
  with:
38
38
  python-version: ${{ matrix.python-version }}
39
39
 
@@ -156,7 +156,7 @@ jobs:
156
156
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
157
157
 
158
158
  - name: Install uv
159
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
159
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
160
160
  with:
161
161
  python-version: "3.11"
162
162
 
@@ -0,0 +1,212 @@
1
+ name: dev kernel-cache candidate
2
+
3
+ # dev pushes only run the metadata detector. the scheduled or manual run builds the newest
4
+ # missing candidate, so several daytime changes coalesce into one off-peak gpu bake.
5
+
6
+ on:
7
+ push:
8
+ branches: [dev]
9
+ paths:
10
+ - Dockerfile.worker
11
+ - .github/workflows/worker-image.yml
12
+ - .github/workflows/bake-kernel-cache.yml
13
+ - .github/workflows/dev-kernel-cache.yml
14
+ - docker/kernel_fingerprint.py
15
+ - docker/make_rp_handler.py
16
+ - docker/extract_cudart_fix.py
17
+ - flash/**
18
+ - pyproject.toml
19
+ schedule:
20
+ # 09:00 utc is 01:00 pst / 02:00 pdt.
21
+ - cron: "0 9 * * *"
22
+ workflow_dispatch:
23
+
24
+ permissions:
25
+ actions: write
26
+ contents: read
27
+ packages: write
28
+
29
+ concurrency:
30
+ group: dev-kernel-cache
31
+ cancel-in-progress: false
32
+
33
+ jobs:
34
+ dispatch-dev:
35
+ if: github.repository == 'freesolo-co/flash' && github.event_name == 'schedule'
36
+ runs-on: ubuntu-latest
37
+ timeout-minutes: 5
38
+ env:
39
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
40
+ steps:
41
+ - name: Dispatch the dev workflow definition
42
+ run: gh workflow run dev-kernel-cache.yml --repo "$GITHUB_REPOSITORY" --ref dev
43
+
44
+ detect:
45
+ if: github.repository == 'freesolo-co/flash' && github.event_name != 'schedule'
46
+ runs-on: ubuntu-latest
47
+ timeout-minutes: 15
48
+ outputs:
49
+ needs_bake: ${{ steps.classify.outputs.needs_bake }}
50
+ revision: ${{ steps.source.outputs.revision }}
51
+ fp_cache: ${{ steps.fp.outputs.fp_cache }}
52
+ fp_base: ${{ steps.fp.outputs.fp_base }}
53
+ sms: ${{ steps.source.outputs.sms }}
54
+ env:
55
+ FA2_SPEC: https://github.com/mjun0812/flash-attention-prebuild-wheels/releases/download/v0.9.0/flash_attn-2.8.3%2Bcu128torch2.10-cp312-cp312-linux_x86_64.whl
56
+ FA2_SHA256: a58c95a080363606e691c342d47dd173b510f4c013a8c5fcb8744def12e36a0f
57
+ steps:
58
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
59
+ with:
60
+ ref: ${{ github.sha }}
61
+
62
+ - name: Resolve source metadata
63
+ id: source
64
+ run: |
65
+ echo "revision=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
66
+ arches=$(python3 docker/kernel_fingerprint.py --print-baked-arches)
67
+ echo "sms=$(echo "$arches" | tr ' ' ',')" >> "$GITHUB_OUTPUT"
68
+
69
+ - name: Compute kernel fingerprints
70
+ id: fp
71
+ run: python3 docker/kernel_fingerprint.py --format github --fa2-spec "$FA2_SPEC" --fa2-sha256 "$FA2_SHA256" >> "$GITHUB_OUTPUT"
72
+
73
+ - name: Install crane
74
+ run: |
75
+ set -euo pipefail
76
+ ver=v0.20.2
77
+ sha=c14340087103ba9dadf61d45acd20675490fd0ccbd56ac7901fc1b502137f44b
78
+ curl -fsSL -o /tmp/crane.tar.gz \
79
+ "https://github.com/google/go-containerregistry/releases/download/${ver}/go-containerregistry_Linux_x86_64.tar.gz"
80
+ echo "${sha} /tmp/crane.tar.gz" | sha256sum -c -
81
+ sudo tar -xz -C /usr/local/bin -f /tmp/crane.tar.gz crane
82
+ rm -f /tmp/crane.tar.gz
83
+ crane version
84
+
85
+ - name: Log in to GHCR
86
+ uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
87
+ with:
88
+ registry: ghcr.io
89
+ username: ${{ github.actor }}
90
+ password: ${{ secrets.GITHUB_TOKEN }}
91
+
92
+ - name: Check published caches
93
+ id: classify
94
+ env:
95
+ FP_CACHE: ${{ steps.fp.outputs.fp_cache }}
96
+ REVISION: ${{ steps.source.outputs.revision }}
97
+ run: |
98
+ set -euo pipefail
99
+ arches=$(python3 docker/kernel_fingerprint.py --print-baked-arches)
100
+ uncovered=false
101
+ summary="| arch | production | dev candidate |\n|---|---|---|\n"
102
+ for sm in $arches; do
103
+ prod="ghcr.io/freesolo-co/flash-worker:cu128-$sm"
104
+ candidate="ghcr.io/freesolo-co/flash-worker:cu128-dev-ready-$sm"
105
+
106
+ prod_pc=""
107
+ if cfg=$(crane config "$prod" 2>/dev/null); then
108
+ prod_pc=$(echo "$cfg" | jq -r '.config.Labels["co.freesolo.flash.kernelcache.fp_cache"] // ""')
109
+ fi
110
+ candidate_pc=""; candidate_rev=""
111
+ if cfg=$(crane config "$candidate" 2>/dev/null); then
112
+ candidate_pc=$(echo "$cfg" | jq -r '.config.Labels["co.freesolo.flash.kernelcache.fp_cache"] // ""')
113
+ candidate_rev=$(echo "$cfg" | jq -r '.config.Labels["org.opencontainers.image.revision"] // ""')
114
+ fi
115
+ if [ "$prod_pc" != "$FP_CACHE" ] && [ "$candidate_pc" != "$FP_CACHE" ]; then
116
+ uncovered=true
117
+ fi
118
+
119
+ summary="$summary| $sm | \`${prod_pc:-missing}\` | \`${candidate_pc:-missing}\` at \`${candidate_rev:-unknown}\` |\n"
120
+ done
121
+
122
+ if [ "$uncovered" = true ]; then
123
+ echo "needs_bake=true" >> "$GITHUB_OUTPUT"
124
+ else
125
+ echo "needs_bake=false" >> "$GITHUB_OUTPUT"
126
+ fi
127
+ {
128
+ echo "### dev kernel-cache candidate"
129
+ echo ""
130
+ echo "source revision: \`$REVISION\`"
131
+ echo ""
132
+ echo -e "$summary"
133
+ if [ "${{ github.event_name }}" = push ] && [ "$uncovered" = true ]; then
134
+ echo "A bake is pending for the next off-peak run. Use workflow dispatch for an urgent release."
135
+ fi
136
+ } >> "$GITHUB_STEP_SUMMARY"
137
+
138
+ build-base:
139
+ needs: detect
140
+ if: github.event_name == 'workflow_dispatch' && needs.detect.outputs.needs_bake == 'true'
141
+ uses: ./.github/workflows/worker-image.yml
142
+ with:
143
+ tag: cu128-dev-${{ needs.detect.outputs.revision }}
144
+ source_ref: ${{ needs.detect.outputs.revision }}
145
+ secrets: inherit
146
+
147
+ bake:
148
+ needs: [detect, build-base]
149
+ if: github.event_name == 'workflow_dispatch' && needs.detect.outputs.needs_bake == 'true'
150
+ uses: ./.github/workflows/bake-kernel-cache.yml
151
+ with:
152
+ sms: ${{ needs.detect.outputs.sms }}
153
+ fp_cache: ${{ needs.build-base.outputs.fp_cache }}
154
+ fp_base: ${{ needs.build-base.outputs.fp_base }}
155
+ base_ref: ${{ needs.build-base.outputs.base_ref }}
156
+ base_revision: ${{ needs.build-base.outputs.base_revision }}
157
+ target_tag_prefix: cu128-dev-${{ needs.detect.outputs.revision }}
158
+ secrets: inherit
159
+
160
+ publish-ready:
161
+ needs: [detect, bake]
162
+ if: github.event_name == 'workflow_dispatch' && needs.detect.outputs.needs_bake == 'true'
163
+ runs-on: ubuntu-latest
164
+ timeout-minutes: 15
165
+ steps:
166
+ - name: Install crane
167
+ run: |
168
+ set -euo pipefail
169
+ ver=v0.20.2
170
+ sha=c14340087103ba9dadf61d45acd20675490fd0ccbd56ac7901fc1b502137f44b
171
+ curl -fsSL -o /tmp/crane.tar.gz \
172
+ "https://github.com/google/go-containerregistry/releases/download/${ver}/go-containerregistry_Linux_x86_64.tar.gz"
173
+ echo "${sha} /tmp/crane.tar.gz" | sha256sum -c -
174
+ sudo tar -xz -C /usr/local/bin -f /tmp/crane.tar.gz crane
175
+ rm -f /tmp/crane.tar.gz
176
+ crane version
177
+
178
+ - name: Log in to GHCR
179
+ uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
180
+ with:
181
+ registry: ghcr.io
182
+ username: ${{ github.actor }}
183
+ password: ${{ secrets.GITHUB_TOKEN }}
184
+
185
+ - name: Publish ready aliases
186
+ env:
187
+ FP_CACHE: ${{ needs.detect.outputs.fp_cache }}
188
+ REVISION: ${{ needs.detect.outputs.revision }}
189
+ SMS: ${{ needs.detect.outputs.sms }}
190
+ run: |
191
+ set -euo pipefail
192
+ repo=ghcr.io/freesolo-co/flash-worker
193
+ for sm in ${SMS//,/ }; do
194
+ source="$repo:cu128-dev-$REVISION-$sm"
195
+ cfg=$(crane config "$source")
196
+ pc=$(echo "$cfg" | jq -r '.config.Labels["co.freesolo.flash.kernelcache.fp_cache"] // ""')
197
+ rev=$(echo "$cfg" | jq -r '.config.Labels["org.opencontainers.image.revision"] // ""')
198
+ if [ "$pc" != "$FP_CACHE" ] || [ "$rev" != "$REVISION" ]; then
199
+ echo "candidate validation failed for $sm: fp_cache=$pc revision=$rev" >&2
200
+ exit 1
201
+ fi
202
+ done
203
+ for sm in ${SMS//,/ }; do
204
+ crane copy \
205
+ "$repo:cu128-dev-$REVISION-$sm" \
206
+ "$repo:cu128-dev-ready-$sm"
207
+ done
208
+
209
+ - name: Re-run production readiness for dev
210
+ env:
211
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
212
+ run: gh workflow run production-kernel-cache-ready.yml --repo "$GITHUB_REPOSITORY" --ref dev
@@ -0,0 +1,98 @@
1
+ name: production kernel-cache readiness
2
+
3
+ # this check is registry-only and never starts a gpu. branch protection can require its named job
4
+ # to prove every production sm already has the cache or has a compatible dev candidate to promote.
5
+
6
+ on:
7
+ pull_request:
8
+ branches: [main]
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+ packages: read
14
+
15
+ jobs:
16
+ ready:
17
+ name: production kernel cache ready
18
+ if: github.repository == 'freesolo-co/flash'
19
+ runs-on: ubuntu-latest
20
+ timeout-minutes: 15
21
+ env:
22
+ FA2_SPEC: https://github.com/mjun0812/flash-attention-prebuild-wheels/releases/download/v0.9.0/flash_attn-2.8.3%2Bcu128torch2.10-cp312-cp312-linux_x86_64.whl
23
+ FA2_SHA256: a58c95a080363606e691c342d47dd173b510f4c013a8c5fcb8744def12e36a0f
24
+ steps:
25
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
26
+ with:
27
+ ref: ${{ github.event.pull_request.head.sha || github.sha }}
28
+
29
+ - name: Compute proposed kernel fingerprint
30
+ id: fp
31
+ run: python3 docker/kernel_fingerprint.py --format github --fa2-spec "$FA2_SPEC" --fa2-sha256 "$FA2_SHA256" >> "$GITHUB_OUTPUT"
32
+
33
+ - name: Install crane
34
+ run: |
35
+ set -euo pipefail
36
+ ver=v0.20.2
37
+ sha=c14340087103ba9dadf61d45acd20675490fd0ccbd56ac7901fc1b502137f44b
38
+ curl -fsSL -o /tmp/crane.tar.gz \
39
+ "https://github.com/google/go-containerregistry/releases/download/${ver}/go-containerregistry_Linux_x86_64.tar.gz"
40
+ echo "${sha} /tmp/crane.tar.gz" | sha256sum -c -
41
+ sudo tar -xz -C /usr/local/bin -f /tmp/crane.tar.gz crane
42
+ rm -f /tmp/crane.tar.gz
43
+ crane version
44
+
45
+ - name: Log in to GHCR
46
+ uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
47
+ with:
48
+ registry: ghcr.io
49
+ username: ${{ github.actor }}
50
+ password: ${{ secrets.GITHUB_TOKEN }}
51
+
52
+ - name: Verify every sm cache is ready
53
+ env:
54
+ FP_CACHE: ${{ steps.fp.outputs.fp_cache }}
55
+ HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
56
+ run: |
57
+ set -euo pipefail
58
+ arches=$(python3 docker/kernel_fingerprint.py --print-baked-arches)
59
+ missing=()
60
+ summary="| arch | production | dev candidate | result |\n|---|---|---|---|\n"
61
+ for sm in $arches; do
62
+ prod="ghcr.io/freesolo-co/flash-worker:cu128-$sm"
63
+ candidate="ghcr.io/freesolo-co/flash-worker:cu128-dev-ready-$sm"
64
+
65
+ prod_pc=""
66
+ if cfg=$(crane config "$prod" 2>/dev/null); then
67
+ prod_pc=$(echo "$cfg" | jq -r '.config.Labels["co.freesolo.flash.kernelcache.fp_cache"] // ""')
68
+ fi
69
+
70
+ candidate_pc=""; candidate_rev=""
71
+ if cfg=$(crane config "$candidate" 2>/dev/null); then
72
+ candidate_pc=$(echo "$cfg" | jq -r '.config.Labels["co.freesolo.flash.kernelcache.fp_cache"] // ""')
73
+ candidate_rev=$(echo "$cfg" | jq -r '.config.Labels["org.opencontainers.image.revision"] // ""')
74
+ fi
75
+
76
+ if [ "$prod_pc" = "$FP_CACHE" ]; then
77
+ result="production ready"
78
+ elif [ "$candidate_pc" = "$FP_CACHE" ]; then
79
+ result="dev candidate ready"
80
+ else
81
+ result="missing"
82
+ missing+=("$sm")
83
+ fi
84
+ summary="$summary| $sm | \`${prod_pc:-missing}\` | \`${candidate_pc:-missing}\` at \`${candidate_rev:-unknown}\` | $result |\n"
85
+ done
86
+
87
+ {
88
+ echo "### production kernel-cache readiness"
89
+ echo ""
90
+ echo "required fp_cache: \`$FP_CACHE\`"
91
+ echo ""
92
+ echo -e "$summary"
93
+ } >> "$GITHUB_STEP_SUMMARY"
94
+
95
+ if [ ${#missing[@]} -gt 0 ]; then
96
+ echo "::error::missing kernel-cache candidates for: ${missing[*]}. Run the dev kernel-cache candidate workflow for $HEAD_SHA."
97
+ exit 1
98
+ fi
@@ -136,7 +136,7 @@ jobs:
136
136
 
137
137
  - name: Install uv
138
138
  if: steps.decide.outputs.publish == 'true'
139
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
139
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
140
140
  with:
141
141
  python-version: "3.11"
142
142
 
@@ -202,7 +202,7 @@ jobs:
202
202
 
203
203
  - name: Install uv
204
204
  if: github.event_name == 'workflow_dispatch' || steps.changes.outputs.package_changed == 'true'
205
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
205
+ uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
206
206
  with:
207
207
  python-version: "3.11"
208
208
 
@@ -12,6 +12,27 @@ name: flash worker image
12
12
  # means only the flash COPY+install layer reruns on pure Python changes (~minutes, not hours).
13
13
 
14
14
  on:
15
+ workflow_call:
16
+ inputs:
17
+ tag:
18
+ type: string
19
+ required: true
20
+ source_ref:
21
+ type: string
22
+ required: true
23
+ outputs:
24
+ base_ref:
25
+ description: digest-pinned worker base
26
+ value: ${{ jobs.build.outputs.base_ref }}
27
+ fp_cache:
28
+ description: kernel-cache compatibility fingerprint
29
+ value: ${{ jobs.build.outputs.fp_cache }}
30
+ fp_base:
31
+ description: full worker-base fingerprint
32
+ value: ${{ jobs.build.outputs.fp_base }}
33
+ base_revision:
34
+ description: resolved source revision
35
+ value: ${{ jobs.build.outputs.base_revision }}
15
36
  workflow_dispatch:
16
37
  inputs:
17
38
  tag:
@@ -46,7 +67,7 @@ permissions:
46
67
  # a non-prod `tag=cu128-test` dispatch can't cancel an in-flight prod `cu128` push on the same ref
47
68
  # (which would leave :cu128 unpublished for that commit and auto-rebake blind to it).
48
69
  concurrency:
49
- group: worker-image-${{ github.ref }}-${{ github.event.inputs.tag || 'cu128' }}
70
+ group: worker-image-${{ github.ref }}-${{ inputs.tag || github.event.inputs.tag || 'cu128' }}
50
71
  cancel-in-progress: true
51
72
 
52
73
  jobs:
@@ -63,6 +84,11 @@ jobs:
63
84
  # vllm and the flash-attn wheels from scratch, while still releasing the runner well before
64
85
  # the 6-hour default would.
65
86
  timeout-minutes: 90
87
+ outputs:
88
+ base_ref: ghcr.io/freesolo-co/flash-worker@${{ steps.image.outputs.digest }}
89
+ fp_cache: ${{ steps.fp.outputs.fp_cache }}
90
+ fp_base: ${{ steps.fp.outputs.fp_base }}
91
+ base_revision: ${{ steps.source.outputs.revision }}
66
92
  # Single source for the FlashAttention wheel: used BOTH as a build-arg and as a fingerprint input
67
93
  # (so a wheel bump moves fp_base). Keep FA2_SPEC in sync with Dockerfile.worker's ARG default.
68
94
  env:
@@ -75,6 +101,16 @@ jobs:
75
101
  FA2_SHA256: a58c95a080363606e691c342d47dd173b510f4c013a8c5fcb8744def12e36a0f
76
102
  steps:
77
103
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
104
+ with:
105
+ ref: ${{ inputs.source_ref || github.sha }}
106
+
107
+ - name: Resolve source metadata
108
+ id: source
109
+ env:
110
+ IMAGE_TAG: ${{ inputs.tag || github.event.inputs.tag || 'cu128' }}
111
+ run: |
112
+ echo "revision=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
113
+ echo "tag=$IMAGE_TAG" >> "$GITHUB_OUTPUT"
78
114
 
79
115
  # Compute the kernel-cache fingerprints (stdlib-only, no uv sync) and stamp them as labels on
80
116
  # :cu128 below, so auto-rebake.yml can read what this base was built from. Fails the build if a
@@ -103,6 +139,7 @@ jobs:
103
139
  password: ${{ secrets.GITHUB_TOKEN }}
104
140
 
105
141
  - name: Build + push worker image
142
+ id: image
106
143
  uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
107
144
  with:
108
145
  context: .
@@ -111,14 +148,14 @@ jobs:
111
148
  # pin the freesolo-co namespace: runpod, vast, and lambda training paths pull the image
112
149
  # declared in flash/providers/_lifecycle/worker.py, so a fork run must not push to its own owner
113
150
  # namespace and leave the real image stale.
114
- tags: ghcr.io/freesolo-co/flash-worker:${{ github.event.inputs.tag || 'cu128' }}
151
+ tags: ghcr.io/freesolo-co/flash-worker:${{ steps.source.outputs.tag }}
115
152
  provenance: false
116
153
  # Stamp the kernel-cache fingerprints + the source commit so auto-rebake.yml can read what
117
154
  # this base was built from (docker/kernel_fingerprint.py is the source of truth).
118
155
  labels: |
119
156
  co.freesolo.flash.kernelcache.fp_cache=${{ steps.fp.outputs.fp_cache }}
120
157
  co.freesolo.flash.kernelcache.fp_base=${{ steps.fp.outputs.fp_base }}
121
- org.opencontainers.image.revision=${{ github.sha }}
158
+ org.opencontainers.image.revision=${{ steps.source.outputs.revision }}
122
159
  # Install a PREBUILT flash-attn wheel instead of compiling from source (a multi-arch
123
160
  # source compile is huge and OOM-kills the runner). The wheel matches the base exactly
124
161
  # (cu128 / torch2.10 / cp312). The FA2 spec comes from the job-level env (single source).
@@ -21,6 +21,13 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
21
21
 
22
22
  ### Changed
23
23
 
24
+ - `[train] init_from_adapter` now works for every source/target algorithm pair. SFT was rejected as
25
+ a warm-start target, so an adapter could be continued only by GRPO or OPD; that restriction
26
+ described the retired trl SFT backend, and the verl backend that replaced it loads a warm-start
27
+ adapter exactly like the other two. All nine combinations of `sft`, `grpo`, and `opd` are
28
+ supported, including same-algorithm continuation. A warm-started SFT run also inherits its
29
+ source's base-model pin instead of resolving its own, so it stays deployable and no longer breaks
30
+ when the base model's hub tip moves.
24
31
  - Managed attempts now pin, verify, and report one immutable Flash source archive across retries and recovery.
25
32
  - Multi-turn GRPO now clones each sibling rollout from the task state that produced its prepared
26
33
  prompt. Environments that record randomized episode choices on the task during `start_episode`