freesolo-flash-dev 1.2.63__tar.gz → 1.2.65__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 (587) hide show
  1. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/CHANGELOG.md +4 -0
  2. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/PKG-INFO +1 -1
  3. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/setup.py +40 -20
  4. freesolo_flash_dev-1.2.65/flash/cli/commands/env/setup_wandb.py +30 -0
  5. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/traces.py +2 -2
  6. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/scaffold/TRAINING.md +4 -2
  7. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/__init__.py +14 -4
  8. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/__init__.py +11 -17
  9. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/opd_train_runner.py +35 -17
  10. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/perf/__init__.py +2 -2
  11. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/perf/lifecycle.py +48 -85
  12. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/child/glue.py +158 -0
  13. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/child/runtime.py +15 -0
  14. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/bridge.py +90 -117
  15. freesolo_flash_dev-1.2.65/flash/engine/worker/train/opd/bridge_failures.py +117 -0
  16. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/multiturn.py +30 -9
  17. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/plugin.py +3 -21
  18. freesolo_flash_dev-1.2.65/flash/engine/worker/train/opd/scoring.py +86 -0
  19. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/child/multiturn.py +3 -58
  20. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/sft/child/plugin.py +3 -2
  21. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/projects.py +34 -55
  22. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/pyproject.toml +2 -2
  23. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_commands.py +242 -11
  24. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_dev_channel.py +5 -1
  25. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_envs_coverage.py +8 -2
  26. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_oom_escalate_gpu.py +125 -32
  27. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_multiturn_failure_exit.py +10 -1
  28. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_train.py +689 -4
  29. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_projects.py +232 -49
  30. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_api.py +62 -0
  31. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_train.py +59 -0
  32. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_wandb_link.py +163 -6
  33. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/uv.lock +1 -1
  34. freesolo_flash_dev-1.2.63/flash/engine/worker/train/opd/scoring.py +0 -73
  35. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.dockerignore +0 -0
  36. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.env.example +0 -0
  37. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/CODEOWNERS +0 -0
  38. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  39. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  40. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  41. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  42. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/dependabot.yml +0 -0
  43. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/auto-rebake.yml +0 -0
  44. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/bake-kernel-cache.yml +0 -0
  45. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/ci.yml +0 -0
  46. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/main-source-guard.yml +0 -0
  47. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/notify-tests-repo.yml +0 -0
  48. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/publish-dev.yml +0 -0
  49. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/publish-image.yml +0 -0
  50. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/publish.yml +0 -0
  51. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/version-parity.yml +0 -0
  52. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/worker-image.yml +0 -0
  53. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.gitignore +0 -0
  54. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/CODE_OF_CONDUCT.md +0 -0
  55. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/CONTRIBUTING.md +0 -0
  56. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/Dockerfile +0 -0
  57. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/Dockerfile.worker +0 -0
  58. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/LICENSE +0 -0
  59. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/NOTICE +0 -0
  60. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/README.md +0 -0
  61. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/SECURITY.md +0 -0
  62. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/SELF_HOSTING.md +0 -0
  63. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/build/kernel_cache/.gitignore +0 -0
  64. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/build/kernel_cache/.keep +0 -0
  65. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/deploy/infisical/README.md +0 -0
  66. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/deploy/infisical/entrypoint.sh +0 -0
  67. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/Dockerfile.kernelcache +0 -0
  68. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/Dockerfile.kernelcache.relayer +0 -0
  69. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/bake_kernel_cache.py +0 -0
  70. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/bake_pod_entry.py +0 -0
  71. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/extract_cudart_fix.py +0 -0
  72. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/kernel_fingerprint.py +0 -0
  73. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/make_rp_handler.py +0 -0
  74. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/__init__.py +0 -0
  75. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/__init__.py +0 -0
  76. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/channel.py +0 -0
  77. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/diagnostics.py +0 -0
  78. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/fileio.py +0 -0
  79. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/logging.py +0 -0
  80. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/paths.py +0 -0
  81. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/adapters/__init__.py +0 -0
  82. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/adapters/artifacts.py +0 -0
  83. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/adapters/fused_experts.py +0 -0
  84. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/adapters/lora_rank.py +0 -0
  85. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/__init__.py +0 -0
  86. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/__main__.py +0 -0
  87. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/__init__.py +0 -0
  88. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/deploy.py +0 -0
  89. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/__init__.py +0 -0
  90. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/episode.py +0 -0
  91. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/eval.py +0 -0
  92. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/eval_args.py +0 -0
  93. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/imports.py +0 -0
  94. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/list.py +0 -0
  95. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/push.py +0 -0
  96. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/retained.py +0 -0
  97. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/test.py +0 -0
  98. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/test_evaluations.py +0 -0
  99. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/test_params.py +0 -0
  100. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/test_warnings.py +0 -0
  101. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/prompt_budget.py +0 -0
  102. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/train_cost.py +0 -0
  103. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/scaffold/__init__.py +0 -0
  104. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/__init__.py +0 -0
  105. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/cost.py +0 -0
  106. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/env_panels.py +0 -0
  107. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/heartbeat.py +0 -0
  108. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/render.py +0 -0
  109. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/tables.py +0 -0
  110. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/tty.py +0 -0
  111. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/config.py +0 -0
  112. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/freesolo_api.py +0 -0
  113. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/http.py +0 -0
  114. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/runtime_secrets.py +0 -0
  115. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/shapes.py +0 -0
  116. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/specs.py +0 -0
  117. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/streaming.py +0 -0
  118. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/content/__init__.py +0 -0
  119. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/content/multimodal.py +0 -0
  120. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/content/structured_outputs.py +0 -0
  121. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/content/thinking.py +0 -0
  122. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/core/__init__.py +0 -0
  123. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/core/catalog.py +0 -0
  124. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/core/spec.py +0 -0
  125. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/core/spec_persistence.py +0 -0
  126. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cost/__init__.py +0 -0
  127. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cost/analytical.py +0 -0
  128. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cost/facts.py +0 -0
  129. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cost/spec.py +0 -0
  130. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cost/types.py +0 -0
  131. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/__init__.py +0 -0
  132. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/huggingface.py +0 -0
  133. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/__init__.py +0 -0
  134. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/kv_sizing.py +0 -0
  135. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/model_config_probe.py +0 -0
  136. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/prompt_budget.py +0 -0
  137. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/recipe.py +0 -0
  138. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/steps.py +0 -0
  139. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/vram.py +0 -0
  140. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/__init__.py +0 -0
  141. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/dataset_profile.py +0 -0
  142. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/image_tokens.py +0 -0
  143. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/reasoning_render.py +0 -0
  144. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/sft_image_rows.py +0 -0
  145. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/sft_workload.py +0 -0
  146. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/tokenizer.py +0 -0
  147. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/workload_profile.py +0 -0
  148. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/result/__init__.py +0 -0
  149. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/result/accounting.py +0 -0
  150. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/result/rollout_samples.py +0 -0
  151. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/__main__.py +0 -0
  152. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/backend_common.py +0 -0
  153. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/entry/__init__.py +0 -0
  154. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/entry/opd.py +0 -0
  155. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/entry/rl.py +0 -0
  156. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/entry/sft.py +0 -0
  157. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/io/__init__.py +0 -0
  158. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/io/heartbeat.py +0 -0
  159. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/io/hf.py +0 -0
  160. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/io/prefetch.py +0 -0
  161. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/io/wandb_log.py +0 -0
  162. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/__init__.py +0 -0
  163. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/adapter.py +0 -0
  164. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/chatml_mask.py +0 -0
  165. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/decoding.py +0 -0
  166. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/lora.py +0 -0
  167. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/packing.py +0 -0
  168. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/opd_train.py +0 -0
  169. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/perf/diagnostics.py +0 -0
  170. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/perf/liger.py +0 -0
  171. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/perf/memory.py +0 -0
  172. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/rl_train.py +0 -0
  173. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/rl_train_runner.py +0 -0
  174. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/runtime/__init__.py +0 -0
  175. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  176. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/runtime/pkg_proxy.py +0 -0
  177. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/runtime/rng.py +0 -0
  178. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/score_batcher.py +0 -0
  179. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/sft_train.py +0 -0
  180. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/sft_train_runner.py +0 -0
  181. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/teacher/__init__.py +0 -0
  182. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/teacher/client.py +0 -0
  183. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/teacher/encoding.py +0 -0
  184. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  185. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/__init__.py +0 -0
  186. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/__init__.py +0 -0
  187. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/checkpoint_lifecycle.py +0 -0
  188. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/child/__init__.py +0 -0
  189. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/step_timing.py +0 -0
  190. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/finalize.py +0 -0
  191. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/__init__.py +0 -0
  192. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/batching.py +0 -0
  193. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  194. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  195. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/entry.py +0 -0
  196. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  197. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  198. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/structured.py +0 -0
  199. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/failures.py +0 -0
  200. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/gkd.py +0 -0
  201. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/multiturn_validation.py +0 -0
  202. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/overrides.py +0 -0
  203. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/prompts.py +0 -0
  204. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/reporting.py +0 -0
  205. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/state.py +0 -0
  206. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/validation.py +0 -0
  207. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/__init__.py +0 -0
  208. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/checkpoints.py +0 -0
  209. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  210. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/child/entry.py +0 -0
  211. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/child/patches.py +0 -0
  212. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  213. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/config.py +0 -0
  214. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/inputs.py +0 -0
  215. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/multi_turn.py +0 -0
  216. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/reward_module.py +0 -0
  217. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/scoring.py +0 -0
  218. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/single_turn.py +0 -0
  219. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/verl_config.py +0 -0
  220. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/sft/__init__.py +0 -0
  221. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/sft/checkpoints.py +0 -0
  222. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/sft/child/entry.py +0 -0
  223. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/sft/config.py +0 -0
  224. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/__init__.py +0 -0
  225. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/capabilities.py +0 -0
  226. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/checkpoints.py +0 -0
  227. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/child_io.py +0 -0
  228. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/diagnostics.py +0 -0
  229. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/parallelism.py +0 -0
  230. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/parent_work.py +0 -0
  231. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker_entrypoint.py +0 -0
  232. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/__init__.py +0 -0
  233. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/adapter.py +0 -0
  234. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/base.py +0 -0
  235. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/cache_security.py +0 -0
  236. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/dataset_selection.py +0 -0
  237. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/evaluations.py +0 -0
  238. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/identity.py +0 -0
  239. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/loader.py +0 -0
  240. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/namespace_listing.py +0 -0
  241. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/package/__init__.py +0 -0
  242. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/package/limits.py +0 -0
  243. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/package/unpack.py +0 -0
  244. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/pull.py +0 -0
  245. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/__init__.py +0 -0
  246. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/__init__.py +0 -0
  247. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/auth.py +0 -0
  248. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/bootstrap.py +0 -0
  249. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/bootstrap_console.py +0 -0
  250. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/bootstrap_pip.py +0 -0
  251. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/bootstrap_secrets.py +0 -0
  252. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/deadline.py +0 -0
  253. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/host/__init__.py +0 -0
  254. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  255. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/host/failmark.py +0 -0
  256. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  257. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/http.py +0 -0
  258. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/instance.py +0 -0
  259. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/poll.py +0 -0
  260. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/poll_instance.py +0 -0
  261. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/provider.py +0 -0
  262. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/terminal_artifacts.py +0 -0
  263. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/worker.py +0 -0
  264. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/allocator.py +0 -0
  265. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/artifacts/__init__.py +0 -0
  266. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/artifacts/hf.py +0 -0
  267. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/artifacts/preload_runpod.py +0 -0
  268. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/artifacts/weight_cache.py +0 -0
  269. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/base.py +0 -0
  270. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/fit_errors.py +0 -0
  271. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/__init__.py +0 -0
  272. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/api.py +0 -0
  273. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/auth.py +0 -0
  274. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/gpus.py +0 -0
  275. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/jobs/__init__.py +0 -0
  276. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/jobs/builders.py +0 -0
  277. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/jobs/reap.py +0 -0
  278. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/preflight.py +0 -0
  279. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/pricing.py +0 -0
  280. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/preflight.py +0 -0
  281. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/realized.py +0 -0
  282. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/__init__.py +0 -0
  283. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/api.py +0 -0
  284. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/auth.py +0 -0
  285. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/cost.py +0 -0
  286. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/gpus.py +0 -0
  287. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/job_execution.py +0 -0
  288. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/jobs.py +0 -0
  289. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/preflight.py +0 -0
  290. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/pricing.py +0 -0
  291. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/resources.py +0 -0
  292. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/serverless/__init__.py +0 -0
  293. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/serverless/endpoints.py +0 -0
  294. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/sharding.py +0 -0
  295. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/__init__.py +0 -0
  296. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/api.py +0 -0
  297. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/auth.py +0 -0
  298. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/jobs/__init__.py +0 -0
  299. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/jobs/builders.py +0 -0
  300. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/preflight.py +0 -0
  301. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/pricing.py +0 -0
  302. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/py.typed +0 -0
  303. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/__init__.py +0 -0
  304. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/artifacts.py +0 -0
  305. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/attempts.py +0 -0
  306. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/costs.py +0 -0
  307. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/deadlines.py +0 -0
  308. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/preparation.py +0 -0
  309. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/reconciliation.py +0 -0
  310. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/results/__init__.py +0 -0
  311. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/results/checkpoints.py +0 -0
  312. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/results/verified_revisions.py +0 -0
  313. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/status.py +0 -0
  314. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/submit.py +0 -0
  315. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/__init__.py +0 -0
  316. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/attach.py +0 -0
  317. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/deploy.py +0 -0
  318. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/lifecycle.py +0 -0
  319. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/recovery.py +0 -0
  320. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/retry_decision.py +0 -0
  321. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/seed_submission.py +0 -0
  322. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/transitions.py +0 -0
  323. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/weight_cache.py +0 -0
  324. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runtime_capsule/__init__.py +0 -0
  325. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runtime_capsule/build.py +0 -0
  326. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runtime_capsule/manifest.py +0 -0
  327. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runtime_capsule/profiles.py +0 -0
  328. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/schema/__init__.py +0 -0
  329. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/schema/fields.py +0 -0
  330. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/__init__.py +0 -0
  331. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/adapter_check.py +0 -0
  332. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/deploy.py +0 -0
  333. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/errors.py +0 -0
  334. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/export.py +0 -0
  335. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/preflight.py +0 -0
  336. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/responses.py +0 -0
  337. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/streaming.py +0 -0
  338. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/thinking.py +0 -0
  339. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/urls.py +0 -0
  340. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/__init__.py +0 -0
  341. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/__main__.py +0 -0
  342. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/app.py +0 -0
  343. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/billing/__init__.py +0 -0
  344. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/billing/charges.py +0 -0
  345. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/billing/retry.py +0 -0
  346. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/__init__.py +0 -0
  347. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/checkpoints.py +0 -0
  348. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/environment_registry.py +0 -0
  349. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/envs.py +0 -0
  350. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/reconcile.py +0 -0
  351. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/repo_cleanup.py +0 -0
  352. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/run_registry.py +0 -0
  353. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/teacher_broker.py +0 -0
  354. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/teacher_errors.py +0 -0
  355. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/teacher_requests.py +0 -0
  356. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/__init__.py +0 -0
  357. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/auth.py +0 -0
  358. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/db.py +0 -0
  359. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/deps.py +0 -0
  360. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/internal_client.py +0 -0
  361. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/locks.py +0 -0
  362. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/runtime.py +0 -0
  363. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/__init__.py +0 -0
  364. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/envs.py +0 -0
  365. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/meta.py +0 -0
  366. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/runs.py +0 -0
  367. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/serving.py +0 -0
  368. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/serving_completion.py +0 -0
  369. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/serving_revisions.py +0 -0
  370. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/serving_smoke.py +0 -0
  371. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/teacher.py +0 -0
  372. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/teacher/__init__.py +0 -0
  373. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/teacher/limits.py +0 -0
  374. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/teacher/retry_contract.py +0 -0
  375. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/scripts/build_dev_dist.py +0 -0
  376. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/scripts/check_file_size.py +0 -0
  377. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/scripts/check_function_size.py +0 -0
  378. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/scripts/check_verl_pin_exists.py +0 -0
  379. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/scripts/scrub_history.sh +0 -0
  380. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/__init__.py +0 -0
  381. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/__init__.py +0 -0
  382. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/profile.py +0 -0
  383. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/runner.py +0 -0
  384. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/specs.py +0 -0
  385. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/teacher.py +0 -0
  386. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/vast.py +0 -0
  387. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/capture_image_sft_processor_oracle.py +0 -0
  388. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/conftest.py +0 -0
  389. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  390. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/fixtures/math_eval.jsonl +0 -0
  391. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/fixtures/math_train.jsonl +0 -0
  392. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/__init__.py +0 -0
  393. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/conftest.py +0 -0
  394. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/test_lambda_live.py +0 -0
  395. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/test_runpod_live.py +0 -0
  396. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/test_sft_thinking_render_live.py +0 -0
  397. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/test_vast_live.py +0 -0
  398. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_accounting_coverage.py +0 -0
  399. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_adapter_shard_completeness.py +0 -0
  400. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_agent_flash_cli_contract.py +0 -0
  401. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_algorithms.py +0 -0
  402. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_allocator.py +0 -0
  403. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_backend_common.py +0 -0
  404. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_backend_jobspec_contract.py +0 -0
  405. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_bake_kernel_cache.py +0 -0
  406. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_base_model_provenance.py +0 -0
  407. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_billing_retry.py +0 -0
  408. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_build_context_contract.py +0 -0
  409. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cancel_remote.py +0 -0
  410. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_catalog_consistency.py +0 -0
  411. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_catalog_only_models.py +0 -0
  412. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_charge_pricing.py +0 -0
  413. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_checkpoint_lifecycle.py +0 -0
  414. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_checkpoints.py +0 -0
  415. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_commands_coverage.py +0 -0
  416. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_credential_shadowing.py +0 -0
  417. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_errors.py +0 -0
  418. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_estimate.py +0 -0
  419. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_gpus_flag.py +0 -0
  420. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_help.py +0 -0
  421. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_main_coverage.py +0 -0
  422. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_managed.py +0 -0
  423. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_render_coverage.py +0 -0
  424. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_render_theme.py +0 -0
  425. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_traces.py +0 -0
  426. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_wandb_warning.py +0 -0
  427. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_client.py +0 -0
  428. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_client_import_purity.py +0 -0
  429. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_client_server_integration.py +0 -0
  430. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_client_stream_reads.py +0 -0
  431. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_config_env_vars.py +0 -0
  432. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_config_overrides.py +0 -0
  433. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_console_upload.py +0 -0
  434. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_controlled_experiment_repairs.py +0 -0
  435. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cost_analytical.py +0 -0
  436. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cost_equation.py +0 -0
  437. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cost_estimate.py +0 -0
  438. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cost_hardware.py +0 -0
  439. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cost_models.py +0 -0
  440. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_dataset_profile.py +0 -0
  441. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_deploy_alias_move_warning.py +0 -0
  442. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_deploy_latency.py +0 -0
  443. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_disk_gb.py +0 -0
  444. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_endpoint_name.py +0 -0
  445. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_cache_evict.py +0 -0
  446. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_delete.py +0 -0
  447. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_download.py +0 -0
  448. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_download_api.py +0 -0
  449. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_evaluations.py +0 -0
  450. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_list_api.py +0 -0
  451. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_list_cli.py +0 -0
  452. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_list_hub.py +0 -0
  453. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_no_install.py +0 -0
  454. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_publish.py +0 -0
  455. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_pull.py +0 -0
  456. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_pull_coverage.py +0 -0
  457. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_pull_loader_coverage.py +0 -0
  458. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_pull_managed_control_plane.py +0 -0
  459. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_push.py +0 -0
  460. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_rate_limit_resolve.py +0 -0
  461. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_ref_pinning.py +0 -0
  462. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_test.py +0 -0
  463. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_export.py +0 -0
  464. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_flash_mvp.py +0 -0
  465. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_flash_worker.py +0 -0
  466. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_flashinfer_cache_dirs.py +0 -0
  467. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_freesolo_api_transport.py +0 -0
  468. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_fused_expert_warmstart.py +0 -0
  469. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_github_urlopen_retry.py +0 -0
  470. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_gpu_type_single_field.py +0 -0
  471. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_gpus.py +0 -0
  472. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_grpo_params.py +0 -0
  473. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_grpo_resident_sizing.py +0 -0
  474. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_grpo_reward_batching.py +0 -0
  475. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_health_liveness.py +0 -0
  476. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_hf_retry.py +0 -0
  477. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_idle_endpoint_reaper.py +0 -0
  478. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_image_sft_markers.py +0 -0
  479. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_image_sft_processor_parity.py +0 -0
  480. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_image_tokens.py +0 -0
  481. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_infisical_secrets.py +0 -0
  482. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_instance_bootstrap_coverage.py +0 -0
  483. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_internal_client.py +0 -0
  484. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_jobs.py +0 -0
  485. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_kernel_cache.py +0 -0
  486. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_kernel_fingerprint.py +0 -0
  487. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_kv_util.py +0 -0
  488. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_lambda_api_coverage.py +0 -0
  489. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_lambda_runner.py +0 -0
  490. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_logging.py +0 -0
  491. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_login_perms.py +0 -0
  492. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_lora_rank_coverage.py +0 -0
  493. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_lora_rank_preflight.py +0 -0
  494. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_managed_config_fields.py +0 -0
  495. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_managed_hf_repo.py +0 -0
  496. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_metrics_schema_agent_contract.py +0 -0
  497. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_mig_guard.py +0 -0
  498. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_multi_gpu_gate.py +0 -0
  499. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_multimodal_training.py +0 -0
  500. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_named_reward_metrics.py +0 -0
  501. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd.py +0 -0
  502. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_limits.py +0 -0
  503. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  504. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_replay_guard.py +0 -0
  505. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_resume_safety.py +0 -0
  506. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_orchestrator_flash.py +0 -0
  507. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_packing.py +0 -0
  508. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_packing_coverage.py +0 -0
  509. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_parasail_teacher.py +0 -0
  510. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_persisted_spec_envelope.py +0 -0
  511. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_poll_helpers.py +0 -0
  512. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_preflight.py +0 -0
  513. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_prompt_budget.py +0 -0
  514. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_provider_preflight_coverage.py +0 -0
  515. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_provider_routing.py +0 -0
  516. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_provider_teardown_robustness.py +0 -0
  517. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_providers_symmetry.py +0 -0
  518. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_realized_cost.py +0 -0
  519. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_repo_cleanup.py +0 -0
  520. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_resolve_params_b.py +0 -0
  521. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_resume_on_retry.py +0 -0
  522. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_rl_train.py +0 -0
  523. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_rollout_samples.py +0 -0
  524. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_runmgmt.py +0 -0
  525. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_runpod_api_delete.py +0 -0
  526. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_runpod_key_fingerprint.py +0 -0
  527. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_runpod_key_waterfall.py +0 -0
  528. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_runtime_capsule.py +0 -0
  529. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_serve.py +0 -0
  530. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_serve_reasoning_content.py +0 -0
  531. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_app_coverage.py +0 -0
  532. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_auth_singleflight.py +0 -0
  533. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_billing.py +0 -0
  534. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_checkpoints_coverage.py +0 -0
  535. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_db.py +0 -0
  536. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_envs_coverage.py +0 -0
  537. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_locks_coverage.py +0 -0
  538. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_standalone.py +0 -0
  539. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_serving_context_preflight.py +0 -0
  540. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_serving_contract.py +0 -0
  541. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_serving_schema_coverage.py +0 -0
  542. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_chunked_nll.py +0 -0
  543. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_example_selection.py +0 -0
  544. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_gc_off.py +0 -0
  545. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_max_context.py +0 -0
  546. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_startup_block.py +0 -0
  547. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_workload.py +0 -0
  548. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_spec_and_validation.py +0 -0
  549. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_spec_contract_bytes.py +0 -0
  550. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_step_floor.py +0 -0
  551. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_step_metrics.py +0 -0
  552. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_step_timing.py +0 -0
  553. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_structured_outputs.py +0 -0
  554. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_teacher_broker.py +0 -0
  555. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_teacher_encoding_contract.py +0 -0
  556. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_terminal_artifacts.py +0 -0
  557. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_thinking_config.py +0 -0
  558. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_train_context_preflight.py +0 -0
  559. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_training_controls.py +0 -0
  560. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_type_comment_prose.py +0 -0
  561. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vast_api.py +0 -0
  562. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vast_api_coverage.py +0 -0
  563. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vast_offers.py +0 -0
  564. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vast_provider_coverage.py +0 -0
  565. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vast_runner.py +0 -0
  566. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_verified_revisions.py +0 -0
  567. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_verifiers.py +0 -0
  568. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_verl_checkpoint_export.py +0 -0
  569. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_verl_child_plugins.py +0 -0
  570. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_verl_silence_watchdog.py +0 -0
  571. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_version.py +0 -0
  572. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  573. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vram_architecture.py +0 -0
  574. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_wandb_naming.py +0 -0
  575. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_warmstart_adapter_download.py +0 -0
  576. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_warmstart_cross_repo.py +0 -0
  577. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_warmstart_error_attribution.py +0 -0
  578. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_weight_cache.py +0 -0
  579. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_dryrun.py +0 -0
  580. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_hardexit.py +0 -0
  581. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_image.py +0 -0
  582. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_init_heartbeat.py +0 -0
  583. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_stack.py +0 -0
  584. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_thinking.py +0 -0
  585. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_workflow_contracts.py +0 -0
  586. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_workload_profile.py +0 -0
  587. {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_zero2_sharding_gate.py +0 -0
@@ -54,6 +54,10 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
54
54
 
55
55
  ### Fixed
56
56
 
57
+ - Completed verl children now finish each captured W&B run before the W&B service shuts down,
58
+ avoiding teardown tracebacks, and `flash env setup` now gives every starter config explicit W&B
59
+ project and folder-derived run metadata.
60
+
57
61
  - An ordered `[gpu] type` list is now priced over every class it declares acceptable, not just the
58
62
  first. Allocation cost-ranks the whole set, so quoting the head alone priced a shape the run may
59
63
  never be given — an authored `["B200", "H100"]` quoted roughly 3x the H100 the allocator would
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.2.63
3
+ Version: 1.2.65
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
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  import json
6
6
  import sys
7
7
  import tomllib
8
+ from collections.abc import Mapping
8
9
  from pathlib import Path
9
10
 
10
11
  from flash._internal.channel import CLI_NAME
@@ -13,6 +14,7 @@ from flash.cli.commands.env.retained import (
13
14
  _warn_if_environment_form_disagrees,
14
15
  _warn_if_retained_starter_files_describe_another_plane,
15
16
  )
17
+ from flash.cli.commands.env.setup_wandb import _wandb_block, _wandb_project
16
18
  from flash.cli.scaffold import TRAINING_MD
17
19
  from flash.cli.ui import render
18
20
  from flash.envs.evaluations import _DEFAULT_EVALUATIONS_PATH
@@ -358,22 +360,14 @@ _REASONING_OPTIONS = [
358
360
  _SKIP_TRACES = "" # sentinel option value: scaffold the starter rows instead of importing
359
361
 
360
362
 
361
- def _require_setup_project(args) -> str:
363
+ def _require_setup_project(args, *, api_url: str | None, api_key: str) -> Mapping[str, object]:
362
364
  """Resolve and validate the one explicit project used by the whole scaffold."""
363
- from flash.client import ClientError, list_projects, resolve_project_id
364
- from flash.client.config import load_credentials
365
+ from flash.client import ClientError, list_projects, resolve_project
365
366
  from flash.client.http import has_freesolo_backend
366
367
 
367
- api_url, api_key = load_credentials()
368
- if not api_key:
369
- raise ClientError(
370
- f"not logged in. Run `{CLI_NAME} login` before `{CLI_NAME} env setup` "
371
- "so the project can be validated"
372
- )
373
-
374
368
  supplied = str(getattr(args, "project", "") or "").strip()
375
369
  if supplied:
376
- return resolve_project_id(supplied, api_key, api_url)
370
+ return resolve_project(supplied, api_key, api_url)
377
371
  if not _setup_interactive(args):
378
372
  raise ClientError(
379
373
  "--project PROJECT_UUID is required in noninteractive mode, with redirected stdin, or with --yes"
@@ -395,7 +389,7 @@ def _require_setup_project(args) -> str:
395
389
  f"`{CLI_NAME} projects create NAME`"
396
390
  )
397
391
  selected = render.select_required("Choose the Freesolo project for this environment", options)
398
- return resolve_project_id(selected, api_key, api_url)
392
+ return resolve_project(selected, api_key, api_url)
399
393
 
400
394
 
401
395
  # Guidance the starter .py docstrings carry, per plane kind. The templates hold placeholders
@@ -450,7 +444,7 @@ def _render_starter(template: str, project_id: str, *, can_publish: bool) -> str
450
444
  return template.replace("PROJECT_UUID", project_id)
451
445
 
452
446
 
453
- def _plane_can_publish_environments() -> bool:
447
+ def _plane_can_publish_environments(api_url: str | None) -> bool:
454
448
  """Whether `flash env push` can actually publish for the logged-in plane.
455
449
 
456
450
  Publishing uploads to the plane, which commits into the managed environment hub
@@ -462,10 +456,8 @@ def _plane_can_publish_environments() -> bool:
462
456
  operator-run Freesolo-compatible backend has a project directory (which is what that helper
463
457
  answers) but still cannot publish to the hub.
464
458
  """
465
- from flash.client.config import load_credentials
466
459
  from flash.serve.urls import is_freesolo_hosted_url
467
460
 
468
- api_url, _ = load_credentials()
469
461
  # Unset means the built-in default, which is the managed plane.
470
462
  return api_url is None or is_freesolo_hosted_url(api_url)
471
463
 
@@ -553,7 +545,7 @@ def _existing_reasoning(configs: tuple[Path, ...]) -> bool | None:
553
545
  return next(iter(found.values()), None)
554
546
 
555
547
 
556
- def _traces_dataset(args, project_id: str) -> str | None:
548
+ def _traces_dataset(args, project_id: str, api_key: str) -> str | None:
557
549
  """Optionally export traces from the already-selected project."""
558
550
  if not _setup_interactive(args):
559
551
  return None
@@ -568,7 +560,7 @@ def _traces_dataset(args, project_id: str) -> str | None:
568
560
  if use_traces == _SKIP_TRACES:
569
561
  return None
570
562
  try:
571
- exported = traces.fetch_records(project_id)
563
+ exported = traces.fetch_records(project_id, api_key)
572
564
  except Exception as exc: # trace import is optional after project validation succeeds
573
565
  _warn(f"could not export traces from {project_id} ({exc}); using the starter dataset")
574
566
  return None
@@ -692,6 +684,7 @@ def _write_rl_config(
692
684
  rl: Path,
693
685
  project_line: str,
694
686
  thinking_line: str,
687
+ wandb_block: str,
695
688
  env_comment: str,
696
689
  max_examples_line: str,
697
690
  rl_reasoning_train: str,
@@ -704,6 +697,7 @@ def _write_rl_config(
704
697
  'algorithm = "grpo"\n'
705
698
  f"{thinking_line}"
706
699
  "\n"
700
+ f"{wandb_block}"
707
701
  f"{env_comment}"
708
702
  "[train]\n"
709
703
  "epochs = 1\n"
@@ -722,6 +716,7 @@ def _write_sft_config(
722
716
  sft: Path,
723
717
  project_line: str,
724
718
  thinking_line: str,
719
+ wandb_block: str,
725
720
  env_comment: str,
726
721
  max_examples_line: str,
727
722
  sft_reasoning_note: str,
@@ -734,6 +729,7 @@ def _write_sft_config(
734
729
  'algorithm = "sft"\n'
735
730
  f"{thinking_line}"
736
731
  "\n"
732
+ f"{wandb_block}"
737
733
  f"{env_comment}"
738
734
  "[train]\n"
739
735
  "epochs = 1\n"
@@ -766,6 +762,7 @@ def _write_opd_config(
766
762
  project_line: str,
767
763
  project_id: str,
768
764
  thinking_line: str,
765
+ wandb_block: str,
769
766
  max_examples_line: str,
770
767
  *,
771
768
  can_publish: bool = True,
@@ -788,6 +785,7 @@ def _write_opd_config(
788
785
  'algorithm = "opd" # on-policy distillation from a managed parasail teacher (default glm 5.2)\n'
789
786
  f"{thinking_line}"
790
787
  "\n"
788
+ f"{wandb_block}"
791
789
  + _environment_comment(
792
790
  project_id,
793
791
  can_publish=can_publish,
@@ -816,15 +814,34 @@ def _write_training_guide(training: Path, project_id: str) -> None:
816
814
  )
817
815
 
818
816
 
817
+ def _resolve_setup_identity(args) -> tuple[str, str, str, str, str]:
818
+ """Resolve the credential, project, and folder identity used by every setup phase."""
819
+ from flash.client import ClientError
820
+ from flash.client.config import load_credentials
821
+
822
+ api_url, api_key = load_credentials()
823
+ if not api_key:
824
+ raise ClientError(
825
+ f"not logged in. Run `{CLI_NAME} login` before `{CLI_NAME} env setup` "
826
+ "so the project can be validated"
827
+ )
828
+ project = _require_setup_project(args, api_url=api_url, api_key=api_key)
829
+ project_id = str(project["id"])
830
+ folder_name = Path.cwd().name
831
+ if not folder_name.strip():
832
+ raise ClientError("the current environment folder name must be nonblank")
833
+ return api_url, api_key, project_id, _wandb_project(project), folder_name
834
+
835
+
819
836
  def cmd_env_setup(args) -> int:
820
- project_id = _require_setup_project(args)
837
+ api_url, api_key, project_id, project_name, folder_name = _resolve_setup_identity(args)
821
838
  _validate_existing_config_projects(project_id)
822
839
  starter_env = Path("environment.py")
823
840
  starter_evaluations = Path(_DEFAULT_EVALUATIONS_PATH)
824
841
  dataset = Path("dataset/train.jsonl")
825
842
  # trace import is optional and can only read the selected project. an existing dataset is never
826
843
  # overwritten, so importing into it would be a silently discarded download.
827
- traces_jsonl = None if dataset.exists() else _traces_dataset(args, project_id)
844
+ traces_jsonl = None if dataset.exists() else _traces_dataset(args, project_id, api_key)
828
845
  multi_turn, starter_env_exists = _resolve_turn_mode(args, starter_env, dataset)
829
846
 
830
847
  rl = Path("configs/rl.toml")
@@ -837,7 +854,7 @@ def cmd_env_setup(args) -> int:
837
854
  reasoning_configs = (rl, opd, sft)
838
855
  reasoning = _resolve_reasoning_mode(args, reasoning_configs)
839
856
 
840
- can_publish = _plane_can_publish_environments()
857
+ can_publish = _plane_can_publish_environments(api_url)
841
858
  _warn_if_environment_form_disagrees(reasoning_configs, can_publish=can_publish, warn=_warn)
842
859
  env_py = _render_starter(
843
860
  _STARTER_ENV_MULTITURN_PY if multi_turn else _STARTER_ENV_PY,
@@ -908,6 +925,7 @@ def cmd_env_setup(args) -> int:
908
925
  rl,
909
926
  project_line,
910
927
  thinking_line,
928
+ _wandb_block(project_name, f"{folder_name}-grpo"),
911
929
  env_comment,
912
930
  max_examples_line,
913
931
  rl_reasoning_train,
@@ -916,6 +934,7 @@ def cmd_env_setup(args) -> int:
916
934
  sft,
917
935
  project_line,
918
936
  thinking_line,
937
+ _wandb_block(project_name, f"{folder_name}-sft"),
919
938
  env_comment,
920
939
  max_examples_line,
921
940
  sft_reasoning_note,
@@ -927,6 +946,7 @@ def cmd_env_setup(args) -> int:
927
946
  project_line,
928
947
  project_id,
929
948
  thinking_line,
949
+ _wandb_block(project_name, f"{folder_name}-opd"),
930
950
  max_examples_line,
931
951
  can_publish=can_publish,
932
952
  )
@@ -0,0 +1,30 @@
1
+ """W&B metadata helpers for environment scaffolds."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from collections.abc import Mapping
7
+
8
+ _WANDB_PROJECT_MAX_LENGTH = 128
9
+ _WANDB_PROJECT_FORBIDDEN = frozenset("/\\#?%:")
10
+
11
+
12
+ def _wandb_project(project: Mapping[str, object]) -> str:
13
+ """Adapt a resolved canonical project to a W&B-safe project name."""
14
+ project_id = str(project["id"])
15
+ name = project.get("name")
16
+ if not isinstance(name, str) or not name.strip():
17
+ return project_id
18
+ if len(name) > _WANDB_PROJECT_MAX_LENGTH or any(
19
+ character in _WANDB_PROJECT_FORBIDDEN for character in name
20
+ ):
21
+ return project_id
22
+ return name
23
+
24
+
25
+ def _wandb_block(project_name: str, run_name: str) -> str:
26
+ return (
27
+ "[wandb]\n"
28
+ f"project = {json.dumps(project_name, ensure_ascii=False)}\n"
29
+ f"run_name = {json.dumps(run_name, ensure_ascii=False)}\n\n"
30
+ )
@@ -77,8 +77,8 @@ def fetch_records(
77
77
  ) -> dict:
78
78
  """A project's traces in the requested shape, converted server-side.
79
79
 
80
- Omitting `api_key` reads the stored credential, which is right for `env_setup`'s call: it holds
81
- no snapshot this key has to agree with.
80
+ Omitting `api_key` reads the stored credential. Callers that already resolved configuration
81
+ should pass the key from that snapshot so a concurrent login cannot change the request identity.
82
82
  """
83
83
  key = _require_api_key(api_key or load_credentials()[1])
84
84
  return export_trace_records(project_id, key, export_format=export_format)
@@ -272,8 +272,10 @@ lora_rank = 32 # lora_alpha defaults to 2 x lora_rank; set it to ov
272
272
  # All knobs live under [train]. Do not add [sft], [grpo], or [opd] tables.
273
273
 
274
274
  [wandb]
275
- # project = "my-project" # the table allows exactly `project` and `run_name`;
276
- # run_name = "sft-run-1" # `name` is rejected
275
+ # new scaffolds set `project` from the selected Freesolo project and `run_name` from the folder
276
+ # plus algorithm. edit either value as needed; only `project` and `run_name` are allowed.
277
+ # project = "my-project"
278
+ # run_name = "sft-run-1"
277
279
  ```
278
280
 
279
281
  **Knobs are scoped by algorithm.** `[train]` is one flat table shared by all three algorithms,
@@ -1,5 +1,7 @@
1
1
  """HTTP client for the managed Flash control plane (used by the CLI)."""
2
2
 
3
+ from collections.abc import Mapping
4
+
3
5
  from flash._internal.channel import CLI_NAME
4
6
  from flash.client.config import load_credentials, save_credentials
5
7
  from flash.client.http import (
@@ -20,8 +22,10 @@ from flash.client.http import (
20
22
  from flash.core.spec import require_project_id
21
23
 
22
24
 
23
- def resolve_project_id(project_id: str, api_key: str, api_url: str | None = None) -> str:
24
- """Resolve one project id, turning "not yours / not there" into the actionable CLI refusal.
25
+ def resolve_project(
26
+ project_id: str, api_key: str, api_url: str | None = None
27
+ ) -> Mapping[str, object]:
28
+ """Resolve one project, turning "not yours / not there" into the actionable CLI refusal.
25
29
 
26
30
  403 and 404 are the same answer to a CLI user -- this project is not one you can record against
27
31
  -- and neither is distinguishable from a typo, so they collapse into one message naming the way
@@ -48,9 +52,9 @@ def resolve_project_id(project_id: str, api_key: str, api_url: str | None = None
48
52
  at call time, which is the binding the CLI tests patch.
49
53
  """
50
54
  if api_url is not None and not has_freesolo_backend(api_url):
51
- return require_project_id(project_id)
55
+ return {"id": require_project_id(project_id)}
52
56
  try:
53
- return str(get_project(project_id, api_key)["id"])
57
+ return get_project(project_id, api_key)
54
58
  except ApiError as exc:
55
59
  if exc.status not in {403, 404}:
56
60
  raise
@@ -60,6 +64,11 @@ def resolve_project_id(project_id: str, api_key: str, api_url: str | None = None
60
64
  ) from exc
61
65
 
62
66
 
67
+ def resolve_project_id(project_id: str, api_key: str, api_url: str | None = None) -> str:
68
+ """Resolve and return one canonical project id."""
69
+ return str(resolve_project(project_id, api_key, api_url)["id"])
70
+
71
+
63
72
  __all__ = [
64
73
  "ApiClient",
65
74
  "ApiError",
@@ -72,6 +81,7 @@ __all__ = [
72
81
  "list_projects",
73
82
  "list_trace_projects",
74
83
  "load_credentials",
84
+ "resolve_project",
75
85
  "resolve_project_id",
76
86
  "save_credentials",
77
87
  "upload_eval_run",
@@ -18,7 +18,7 @@ import traceback
18
18
 
19
19
  from flash._internal.diagnostics import sanitize_diagnostic
20
20
  from flash.adapters.fused_experts import lora_target_parameters
21
- from flash.core.spec import FIXED_SEED, load_job_spec_from_env
21
+ from flash.core.spec import FIXED_SEED, gpu_count_of, load_job_spec_from_env
22
22
  from flash.engine.result.accounting import RunMetrics
23
23
  from flash.engine.worker.backend_common import collect_ray_failure_logs
24
24
  from flash.engine.worker.entry.opd import run_opd
@@ -80,7 +80,7 @@ from flash.engine.worker.perf import (
80
80
  grad_checkpointing_on,
81
81
  grpo_use_reentrant,
82
82
  is_cuda_oom,
83
- preflight_free_vram,
83
+ preflight_gpu_occupancy,
84
84
  wait_for_gpu,
85
85
  )
86
86
  from flash.engine.worker.runtime.kernel_warmup import _current_cuda_sm, load_mega_cache
@@ -221,22 +221,16 @@ def _worker_failure_flags(exc: BaseException) -> dict[str, bool]:
221
221
  return {"retriable": retriable, "oom": (not retriable and is_cuda_oom(exc))}
222
222
 
223
223
 
224
- def _preflight_free_vram_for_spec() -> None:
225
- """Reject a card that arrived already occupied by another tenant.
224
+ def _preflight_gpu_occupancy_for_spec() -> None:
225
+ """Screen every GPU in the allocator-resolved worker allocation for substantial occupancy.
226
226
 
227
- Nothing about the spec is read. An earlier draft re-derived the run's requirement here and
228
- compared free bytes against it, which is a second sizing model competing with the allocator's
229
- and wrong in both directions -- see ``preflight_free_vram``. Occupancy needs no requirement, so
230
- it runs on any shape without reimplementing ``combined_vram_gb``'s non-linear multi-card fit.
227
+ The allocator stamps the chosen count onto ``JOB_SPEC`` before provider launch, so this passes
228
+ only the cards rented for this worker. It does not re-derive required VRAM or claim exact fit.
231
229
 
232
- It samples device 0 only. On a multi-card node that leaves a tenant sitting on device 3 alone
233
- undetected, which is a gap and not a false alarm -- device 0 occupancy is still evidence of a
234
- shared host.
235
-
236
- Must stay the first CUDA-adjacent call in boot: the reading is only trustworthy while this
230
+ This must stay the first CUDA-adjacent call in boot. The reading is trustworthy only while this
237
231
  process has no context of its own, and ``_force_fla_triton_gdn_on_sm100`` below creates one.
238
232
  """
239
- preflight_free_vram()
233
+ preflight_gpu_occupancy(gpu_count_of(JOB_SPEC))
240
234
 
241
235
 
242
236
  THINKING = JOB_SPEC.thinking if JOB_SPEC else False
@@ -347,14 +341,14 @@ def _run_worker_mode() -> None:
347
341
  # FIRST, and specifically before `_force_fla_triton_gdn_on_sm100`: that reads
348
342
  # `get_device_capability`, which initializes CUDA in this process, and from that moment the
349
343
  # driver's "used" includes our own context with no sound way to subtract it -- the occupancy
350
- # check declines to run rather than guess (see `preflight_free_vram`), so calling it later means
351
- # never calling it at all. This is also before `_ensure_fla_fastpath_on_hopper`, whose repair
344
+ # check declines to run rather than guess (see `preflight_gpu_occupancy`), so calling it later
345
+ # means never calling it at all. this is also before `_ensure_fla_fastpath_on_hopper`, whose repair
352
346
  # path runs pip installs with 600s timeouts: a card handed over with a co-tenant's ~18GB still
353
347
  # resident fails the run either way, and the only question is whether that happens now or after
354
348
  # dependency repair, the model download and FSDP init have spent paid GPU on the same
355
349
  # conclusion. NVML answers without a context, so nothing here dirties the reading for the code
356
350
  # below.
357
- _preflight_free_vram_for_spec()
351
+ _preflight_gpu_occupancy_for_spec()
358
352
  # run before model imports: sm100 tilelang GDN computes wrong gradients, so use Triton.
359
353
  _force_fla_triton_gdn_on_sm100()
360
354
  _ensure_fla_fastpath_on_hopper()
@@ -124,6 +124,31 @@ def _validate_teacher_transport() -> tuple[str, str]:
124
124
  return capability, control_panel_url
125
125
 
126
126
 
127
+ def _prepare_prompt_messages(
128
+ example: dict,
129
+ messages: list[dict],
130
+ *,
131
+ multi_turn: bool,
132
+ package_root: str | None,
133
+ ) -> tuple[list[dict], tuple[str, ...]]:
134
+ from flash.content.multimodal import normalize_prompt_images, record_has_images
135
+
136
+ if record_has_images(example, messages):
137
+ normalized = normalize_prompt_images(example, messages, package_root)
138
+ if multi_turn:
139
+ _opd_train.validate_transcript_messages(
140
+ normalized.messages,
141
+ source="environment initial prompt",
142
+ allow_content_blocks=True,
143
+ )
144
+ return normalized.messages, tuple(normalized.descriptors)
145
+ if multi_turn:
146
+ messages = _opd_train.validate_transcript_messages(
147
+ messages, source="environment initial prompt"
148
+ )
149
+ return messages, ()
150
+
151
+
127
152
  def _prepare_prompts(
128
153
  request: _OpdRequest,
129
154
  prompt_rows: list[tuple[Any, Any]],
@@ -131,11 +156,7 @@ def _prepare_prompts(
131
156
  capability: str,
132
157
  control_panel_url: str,
133
158
  ) -> _PromptState:
134
- from flash.content.multimodal import (
135
- image_teacher_prompt_messages,
136
- normalize_prompt_images,
137
- record_has_images,
138
- )
159
+ from flash.content.multimodal import image_teacher_prompt_messages
139
160
  from flash.engine.worker.teacher.client import TeacherClient
140
161
 
141
162
  teacher = TeacherClient(capability, control_panel_url, request.knobs.teacher_model)
@@ -187,15 +208,14 @@ def _prepare_prompts(
187
208
  with _opd_train.liveness_heartbeat("opd_image_prep", progress=lambda: prepped[0]):
188
209
  for example, messages in prompt_rows:
189
210
  prepped[0] += 1
190
- if request.multi_turn:
191
- messages = _opd_train.validate_transcript_messages(
192
- messages, source="environment initial prompt"
193
- )
194
- if record_has_images(example, messages):
211
+ student_messages, image_descriptors = _prepare_prompt_messages(
212
+ example,
213
+ messages,
214
+ multi_turn=request.multi_turn,
215
+ package_root=package_root,
216
+ )
217
+ if image_descriptors:
195
218
  assert processor is not None
196
- normalized = normalize_prompt_images(example, messages, package_root)
197
- student_messages = normalized.messages
198
- image_descriptors = tuple(normalized.descriptors)
199
219
  teacher_messages = image_teacher_prompt_messages(
200
220
  student_messages, len(image_descriptors)
201
221
  )
@@ -207,9 +227,7 @@ def _prepare_prompts(
207
227
  enable_thinking=bool(_opd_train._w.THINKING),
208
228
  )
209
229
  else:
210
- student_messages = messages
211
- teacher_messages = messages
212
- image_descriptors = ()
230
+ teacher_messages = student_messages
213
231
  if processor is not None:
214
232
  # mixed job: the verl child tokenizes EVERY row through the multimodal dataset
215
233
  # path (the processor), so text-only rows must freeze via the same path or the
@@ -224,7 +242,7 @@ def _prepare_prompts(
224
242
  else:
225
243
  prompt_ids = _opd_train._normalize_prompt_ids(
226
244
  tokenizer.apply_chat_template(
227
- messages,
245
+ student_messages,
228
246
  tokenize=True,
229
247
  add_generation_prompt=True,
230
248
  enable_thinking=_opd_train._w.THINKING,
@@ -28,7 +28,7 @@ from flash.engine.worker.perf.lifecycle import (
28
28
  RetriableInfraError,
29
29
  free_vram_gb,
30
30
  is_cuda_oom,
31
- preflight_free_vram,
31
+ preflight_gpu_occupancy,
32
32
  total_vram_gb,
33
33
  wait_for_gpu,
34
34
  )
@@ -403,7 +403,7 @@ __all__ = [
403
403
  "grad_checkpointing_on",
404
404
  "grpo_use_reentrant",
405
405
  "is_cuda_oom",
406
- "preflight_free_vram",
406
+ "preflight_gpu_occupancy",
407
407
  "total_vram_gb",
408
408
  "wait_for_gpu",
409
409
  ]