freesolo-flash-dev 1.2.7__tar.gz → 1.2.13__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 (530) hide show
  1. freesolo_flash_dev-1.2.13/CHANGELOG.md +200 -0
  2. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/PKG-INFO +1 -1
  3. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/adapters/lora_rank.py +113 -2
  4. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/__init__.py +1 -0
  5. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/episode.py +1 -1
  6. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/eval.py +2 -1
  7. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/setup.py +4 -1
  8. freesolo_flash_dev-1.2.13/flash/cli/commands/env/test.py +823 -0
  9. freesolo_flash_dev-1.2.13/flash/cli/commands/env/test_evaluations.py +141 -0
  10. freesolo_flash_dev-1.2.13/flash/cli/commands/env/test_params.py +256 -0
  11. freesolo_flash_dev-1.2.13/flash/cli/commands/env/test_warnings.py +393 -0
  12. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/scaffold/TRAINING.md +335 -34
  13. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/core/catalog.py +13 -0
  14. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/opd_train.py +18 -6
  15. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/opd_train_runner.py +6 -1
  16. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/child/multiturn.py +8 -5
  17. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/child/multiturn.py +18 -5
  18. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/multi_turn.py +103 -16
  19. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/shims.py +15 -0
  20. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/poll.py +1 -0
  21. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/__init__.py +1 -0
  22. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/artifacts.py +25 -7
  23. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/preparation.py +8 -2
  24. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/export.py +75 -0
  25. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/preflight.py +37 -10
  26. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/serving_smoke.py +9 -3
  27. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/pyproject.toml +2 -2
  28. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/profile.py +5 -0
  29. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_commands.py +4 -2
  30. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_test.py +1279 -2
  31. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_export.py +358 -0
  32. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_opd_resume_safety.py +9 -0
  33. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_opd_train.py +29 -13
  34. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_poll_helpers.py +12 -0
  35. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_provider_routing.py +98 -0
  36. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_rl_train.py +199 -1
  37. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_envs_coverage.py +84 -13
  38. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/uv.lock +1 -1
  39. freesolo_flash_dev-1.2.7/CHANGELOG.md +0 -82
  40. freesolo_flash_dev-1.2.7/flash/cli/commands/env/test.py +0 -863
  41. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.dockerignore +0 -0
  42. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.env.example +0 -0
  43. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/CODEOWNERS +0 -0
  44. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  45. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  46. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  47. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  48. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/dependabot.yml +0 -0
  49. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/auto-rebake.yml +0 -0
  50. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/bake-kernel-cache.yml +0 -0
  51. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/ci.yml +0 -0
  52. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/main-source-guard.yml +0 -0
  53. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/notify-tests-repo.yml +0 -0
  54. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/publish-dev.yml +0 -0
  55. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/publish-image.yml +0 -0
  56. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/publish.yml +0 -0
  57. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/version-parity.yml +0 -0
  58. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/worker-image.yml +0 -0
  59. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.gitignore +0 -0
  60. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/CODE_OF_CONDUCT.md +0 -0
  61. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/CONTRIBUTING.md +0 -0
  62. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/Dockerfile +0 -0
  63. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/Dockerfile.worker +0 -0
  64. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/LICENSE +0 -0
  65. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/NOTICE +0 -0
  66. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/README.md +0 -0
  67. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/SECURITY.md +0 -0
  68. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/SELF_HOSTING.md +0 -0
  69. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/build/kernel_cache/.gitignore +0 -0
  70. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/build/kernel_cache/.keep +0 -0
  71. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/deploy/infisical/README.md +0 -0
  72. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/deploy/infisical/entrypoint.sh +0 -0
  73. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/Dockerfile.kernelcache +0 -0
  74. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/Dockerfile.kernelcache.relayer +0 -0
  75. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/bake_kernel_cache.py +0 -0
  76. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/bake_pod_entry.py +0 -0
  77. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/extract_cudart_fix.py +0 -0
  78. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/kernel_fingerprint.py +0 -0
  79. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/make_rp_handler.py +0 -0
  80. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/__init__.py +0 -0
  81. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/__init__.py +0 -0
  82. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/channel.py +0 -0
  83. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/diagnostics.py +0 -0
  84. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/fileio.py +0 -0
  85. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/logging.py +0 -0
  86. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/paths.py +0 -0
  87. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/adapters/__init__.py +0 -0
  88. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/adapters/artifacts.py +0 -0
  89. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/__init__.py +0 -0
  90. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/__main__.py +0 -0
  91. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/deploy.py +0 -0
  92. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/__init__.py +0 -0
  93. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/eval_args.py +0 -0
  94. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/imports.py +0 -0
  95. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/list.py +0 -0
  96. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/push.py +0 -0
  97. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/retained.py +0 -0
  98. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/traces.py +0 -0
  99. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/train_cost.py +0 -0
  100. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/scaffold/__init__.py +0 -0
  101. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/__init__.py +0 -0
  102. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/cost.py +0 -0
  103. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/env_panels.py +0 -0
  104. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/heartbeat.py +0 -0
  105. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/render.py +0 -0
  106. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/tables.py +0 -0
  107. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/tty.py +0 -0
  108. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/__init__.py +0 -0
  109. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/config.py +0 -0
  110. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/freesolo_api.py +0 -0
  111. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/http.py +0 -0
  112. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/runtime_secrets.py +0 -0
  113. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/shapes.py +0 -0
  114. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/specs.py +0 -0
  115. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/streaming.py +0 -0
  116. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/content/__init__.py +0 -0
  117. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/content/multimodal.py +0 -0
  118. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/content/structured_outputs.py +0 -0
  119. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/content/thinking.py +0 -0
  120. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/core/__init__.py +0 -0
  121. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/core/spec.py +0 -0
  122. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cost/__init__.py +0 -0
  123. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cost/analytical.py +0 -0
  124. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cost/facts.py +0 -0
  125. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cost/spec.py +0 -0
  126. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cost/types.py +0 -0
  127. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/__init__.py +0 -0
  128. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/__init__.py +0 -0
  129. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/kv_sizing.py +0 -0
  130. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/model_config_probe.py +0 -0
  131. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/recipe.py +0 -0
  132. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/steps.py +0 -0
  133. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/vram.py +0 -0
  134. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/profiling/__init__.py +0 -0
  135. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/profiling/dataset_profile.py +0 -0
  136. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/profiling/sft_workload.py +0 -0
  137. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/profiling/tokenizer.py +0 -0
  138. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/profiling/workload_profile.py +0 -0
  139. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/result/__init__.py +0 -0
  140. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/result/accounting.py +0 -0
  141. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/result/rollout_samples.py +0 -0
  142. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/__init__.py +0 -0
  143. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/__main__.py +0 -0
  144. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/backend_common.py +0 -0
  145. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/entry/__init__.py +0 -0
  146. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/entry/opd.py +0 -0
  147. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/entry/rl.py +0 -0
  148. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/entry/sft.py +0 -0
  149. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/io/__init__.py +0 -0
  150. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/io/heartbeat.py +0 -0
  151. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/io/hf.py +0 -0
  152. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/io/prefetch.py +0 -0
  153. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/io/wandb_log.py +0 -0
  154. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/model/__init__.py +0 -0
  155. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/model/adapter.py +0 -0
  156. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/model/decoding.py +0 -0
  157. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/model/lora.py +0 -0
  158. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/model/packing.py +0 -0
  159. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/perf/__init__.py +0 -0
  160. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/perf/diagnostics.py +0 -0
  161. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/perf/lifecycle.py +0 -0
  162. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/perf/liger.py +0 -0
  163. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/perf/memory.py +0 -0
  164. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/rl_train.py +0 -0
  165. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/rl_train_runner.py +0 -0
  166. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/runtime/__init__.py +0 -0
  167. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  168. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/runtime/pkg_proxy.py +0 -0
  169. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/runtime/rng.py +0 -0
  170. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/score_batcher.py +0 -0
  171. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/sft_train.py +0 -0
  172. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/sft_train_runner.py +0 -0
  173. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/teacher/__init__.py +0 -0
  174. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/teacher/client.py +0 -0
  175. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/teacher/encoding.py +0 -0
  176. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  177. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/__init__.py +0 -0
  178. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/core/__init__.py +0 -0
  179. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/core/child/__init__.py +0 -0
  180. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/core/child/glue.py +0 -0
  181. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/finalize.py +0 -0
  182. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/__init__.py +0 -0
  183. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/batching.py +0 -0
  184. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/bridge.py +0 -0
  185. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  186. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  187. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/child/plugin.py +0 -0
  188. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/child/structured.py +0 -0
  189. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/failures.py +0 -0
  190. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/gkd.py +0 -0
  191. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/multiturn_validation.py +0 -0
  192. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/overrides.py +0 -0
  193. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/prompts.py +0 -0
  194. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/scoring.py +0 -0
  195. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/validation.py +0 -0
  196. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/__init__.py +0 -0
  197. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/checkpoints.py +0 -0
  198. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  199. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  200. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/config.py +0 -0
  201. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/inputs.py +0 -0
  202. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/scoring.py +0 -0
  203. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/single_turn.py +0 -0
  204. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/verl_config.py +0 -0
  205. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/sft/__init__.py +0 -0
  206. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/sft/checkpoints.py +0 -0
  207. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/sft/config.py +0 -0
  208. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/__init__.py +0 -0
  209. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/capabilities.py +0 -0
  210. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/checkpoints.py +0 -0
  211. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/child_io.py +0 -0
  212. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/diagnostics.py +0 -0
  213. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/parallelism.py +0 -0
  214. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker_entrypoint.py +0 -0
  215. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/__init__.py +0 -0
  216. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/adapter.py +0 -0
  217. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/base.py +0 -0
  218. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/cache_security.py +0 -0
  219. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/dataset_selection.py +0 -0
  220. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/evaluations.py +0 -0
  221. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/identity.py +0 -0
  222. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/loader.py +0 -0
  223. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/namespace_listing.py +0 -0
  224. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/package/__init__.py +0 -0
  225. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/package/limits.py +0 -0
  226. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/package/unpack.py +0 -0
  227. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/pull.py +0 -0
  228. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/__init__.py +0 -0
  229. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/__init__.py +0 -0
  230. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/auth.py +0 -0
  231. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/bootstrap.py +0 -0
  232. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/bootstrap_pip.py +0 -0
  233. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/bootstrap_secrets.py +0 -0
  234. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/deadline.py +0 -0
  235. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/http.py +0 -0
  236. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/instance.py +0 -0
  237. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/poll_instance.py +0 -0
  238. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/provider.py +0 -0
  239. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/worker.py +0 -0
  240. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/allocator.py +0 -0
  241. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/artifacts/__init__.py +0 -0
  242. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/artifacts/hf.py +0 -0
  243. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/artifacts/preload_runpod.py +0 -0
  244. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/artifacts/weight_cache.py +0 -0
  245. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/base.py +0 -0
  246. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/fit_errors.py +0 -0
  247. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/__init__.py +0 -0
  248. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/api.py +0 -0
  249. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/auth.py +0 -0
  250. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/gpus.py +0 -0
  251. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/jobs/__init__.py +0 -0
  252. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/jobs/builders.py +0 -0
  253. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/jobs/reap.py +0 -0
  254. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/preflight.py +0 -0
  255. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/pricing.py +0 -0
  256. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/preflight.py +0 -0
  257. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/realized.py +0 -0
  258. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/__init__.py +0 -0
  259. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/api.py +0 -0
  260. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/auth.py +0 -0
  261. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/cost.py +0 -0
  262. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/gpus.py +0 -0
  263. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/job_execution.py +0 -0
  264. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/jobs.py +0 -0
  265. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/preflight.py +0 -0
  266. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/pricing.py +0 -0
  267. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/resources.py +0 -0
  268. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/serverless/__init__.py +0 -0
  269. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/serverless/endpoints.py +0 -0
  270. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/sharding.py +0 -0
  271. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/__init__.py +0 -0
  272. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/api.py +0 -0
  273. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/auth.py +0 -0
  274. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/jobs/__init__.py +0 -0
  275. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/jobs/builders.py +0 -0
  276. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/preflight.py +0 -0
  277. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/pricing.py +0 -0
  278. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/py.typed +0 -0
  279. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/attempts.py +0 -0
  280. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/costs.py +0 -0
  281. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/deadlines.py +0 -0
  282. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/reconciliation.py +0 -0
  283. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/results/__init__.py +0 -0
  284. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/results/checkpoints.py +0 -0
  285. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/results/verified_revisions.py +0 -0
  286. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/status.py +0 -0
  287. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/submit.py +0 -0
  288. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/__init__.py +0 -0
  289. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/attach.py +0 -0
  290. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/deploy.py +0 -0
  291. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/lifecycle.py +0 -0
  292. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/recovery.py +0 -0
  293. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/seed_submission.py +0 -0
  294. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/transitions.py +0 -0
  295. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/weight_cache.py +0 -0
  296. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/schema/__init__.py +0 -0
  297. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/schema/fields.py +0 -0
  298. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/__init__.py +0 -0
  299. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/adapter_check.py +0 -0
  300. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/deploy.py +0 -0
  301. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/errors.py +0 -0
  302. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/streaming.py +0 -0
  303. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/thinking.py +0 -0
  304. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/urls.py +0 -0
  305. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/__init__.py +0 -0
  306. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/__main__.py +0 -0
  307. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/app.py +0 -0
  308. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/billing/__init__.py +0 -0
  309. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/billing/charges.py +0 -0
  310. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/billing/retry.py +0 -0
  311. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/__init__.py +0 -0
  312. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/checkpoints.py +0 -0
  313. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/environment_registry.py +0 -0
  314. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/envs.py +0 -0
  315. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/projects.py +0 -0
  316. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/reconcile.py +0 -0
  317. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/repo_cleanup.py +0 -0
  318. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/run_registry.py +0 -0
  319. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/teacher_broker.py +0 -0
  320. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/teacher_errors.py +0 -0
  321. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/teacher_requests.py +0 -0
  322. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/__init__.py +0 -0
  323. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/auth.py +0 -0
  324. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/db.py +0 -0
  325. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/deps.py +0 -0
  326. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/internal_client.py +0 -0
  327. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/locks.py +0 -0
  328. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/runtime.py +0 -0
  329. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/__init__.py +0 -0
  330. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/envs.py +0 -0
  331. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/meta.py +0 -0
  332. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/runs.py +0 -0
  333. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/serving.py +0 -0
  334. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/serving_completion.py +0 -0
  335. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/serving_revisions.py +0 -0
  336. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/teacher.py +0 -0
  337. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/teacher/__init__.py +0 -0
  338. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/teacher/limits.py +0 -0
  339. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/teacher/retry_contract.py +0 -0
  340. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/scripts/build_dev_dist.py +0 -0
  341. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/scripts/check_file_size.py +0 -0
  342. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/scripts/check_function_size.py +0 -0
  343. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/scripts/check_verl_pin_exists.py +0 -0
  344. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/scripts/scrub_history.sh +0 -0
  345. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/__init__.py +0 -0
  346. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/__init__.py +0 -0
  347. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/runner.py +0 -0
  348. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/specs.py +0 -0
  349. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/teacher.py +0 -0
  350. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/vast.py +0 -0
  351. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/conftest.py +0 -0
  352. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/fixtures/math_eval.jsonl +0 -0
  353. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/fixtures/math_train.jsonl +0 -0
  354. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/live/__init__.py +0 -0
  355. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/live/conftest.py +0 -0
  356. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/live/test_lambda_live.py +0 -0
  357. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/live/test_runpod_live.py +0 -0
  358. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/live/test_vast_live.py +0 -0
  359. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_accounting_coverage.py +0 -0
  360. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_adapter_shard_completeness.py +0 -0
  361. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_agent_flash_cli_contract.py +0 -0
  362. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_algorithms.py +0 -0
  363. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_allocator.py +0 -0
  364. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_backend_common.py +0 -0
  365. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_backend_jobspec_contract.py +0 -0
  366. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_bake_kernel_cache.py +0 -0
  367. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_base_model_provenance.py +0 -0
  368. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_billing_retry.py +0 -0
  369. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_build_context_contract.py +0 -0
  370. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cancel_remote.py +0 -0
  371. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_catalog_consistency.py +0 -0
  372. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_catalog_only_models.py +0 -0
  373. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_charge_pricing.py +0 -0
  374. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_checkpoints.py +0 -0
  375. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_commands_coverage.py +0 -0
  376. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_credential_shadowing.py +0 -0
  377. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_errors.py +0 -0
  378. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_estimate.py +0 -0
  379. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_gpus_flag.py +0 -0
  380. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_help.py +0 -0
  381. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_main_coverage.py +0 -0
  382. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_managed.py +0 -0
  383. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_render_coverage.py +0 -0
  384. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_render_theme.py +0 -0
  385. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_traces.py +0 -0
  386. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_wandb_warning.py +0 -0
  387. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_client.py +0 -0
  388. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_client_import_purity.py +0 -0
  389. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_client_server_integration.py +0 -0
  390. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_client_stream_reads.py +0 -0
  391. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_config_env_vars.py +0 -0
  392. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_config_overrides.py +0 -0
  393. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_controlled_experiment_repairs.py +0 -0
  394. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cost_analytical.py +0 -0
  395. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cost_equation.py +0 -0
  396. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cost_estimate.py +0 -0
  397. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cost_hardware.py +0 -0
  398. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cost_models.py +0 -0
  399. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_dataset_profile.py +0 -0
  400. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_deploy_latency.py +0 -0
  401. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_dev_channel.py +0 -0
  402. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_disk_gb.py +0 -0
  403. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_endpoint_name.py +0 -0
  404. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_cache_evict.py +0 -0
  405. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_delete.py +0 -0
  406. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_download.py +0 -0
  407. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_download_api.py +0 -0
  408. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_evaluations.py +0 -0
  409. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_list_api.py +0 -0
  410. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_list_cli.py +0 -0
  411. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_list_hub.py +0 -0
  412. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_no_install.py +0 -0
  413. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_publish.py +0 -0
  414. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_pull.py +0 -0
  415. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_pull_coverage.py +0 -0
  416. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_pull_loader_coverage.py +0 -0
  417. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_pull_managed_control_plane.py +0 -0
  418. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_push.py +0 -0
  419. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_rate_limit_resolve.py +0 -0
  420. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_ref_pinning.py +0 -0
  421. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_envs_coverage.py +0 -0
  422. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_flash_mvp.py +0 -0
  423. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_flash_worker.py +0 -0
  424. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_flashinfer_cache_dirs.py +0 -0
  425. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_freesolo_api_transport.py +0 -0
  426. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_github_urlopen_retry.py +0 -0
  427. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_gpu_type_single_field.py +0 -0
  428. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_gpus.py +0 -0
  429. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_grpo_params.py +0 -0
  430. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_grpo_resident_sizing.py +0 -0
  431. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_grpo_reward_batching.py +0 -0
  432. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_health_liveness.py +0 -0
  433. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_hf_retry.py +0 -0
  434. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_idle_endpoint_reaper.py +0 -0
  435. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_infisical_secrets.py +0 -0
  436. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_instance_bootstrap_coverage.py +0 -0
  437. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_internal_client.py +0 -0
  438. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_jobs.py +0 -0
  439. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_kernel_cache.py +0 -0
  440. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_kernel_fingerprint.py +0 -0
  441. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_kv_util.py +0 -0
  442. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_lambda_api_coverage.py +0 -0
  443. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_lambda_runner.py +0 -0
  444. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_logging.py +0 -0
  445. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_login_perms.py +0 -0
  446. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_lora_rank_coverage.py +0 -0
  447. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_lora_rank_preflight.py +0 -0
  448. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_managed_config_fields.py +0 -0
  449. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_managed_hf_repo.py +0 -0
  450. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_metrics_schema_agent_contract.py +0 -0
  451. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_mig_guard.py +0 -0
  452. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_multi_gpu_gate.py +0 -0
  453. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_multimodal_training.py +0 -0
  454. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_named_reward_metrics.py +0 -0
  455. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_oom_escalate_gpu.py +0 -0
  456. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_opd.py +0 -0
  457. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_opd_limits.py +0 -0
  458. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  459. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_orchestrator_flash.py +0 -0
  460. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_packing.py +0 -0
  461. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_packing_coverage.py +0 -0
  462. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_parasail_teacher.py +0 -0
  463. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_preflight.py +0 -0
  464. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_projects.py +0 -0
  465. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_provider_preflight_coverage.py +0 -0
  466. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_provider_teardown_robustness.py +0 -0
  467. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_providers_symmetry.py +0 -0
  468. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_realized_cost.py +0 -0
  469. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_repo_cleanup.py +0 -0
  470. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_resolve_params_b.py +0 -0
  471. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_resume_on_retry.py +0 -0
  472. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_rollout_samples.py +0 -0
  473. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_runmgmt.py +0 -0
  474. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_runpod_api_delete.py +0 -0
  475. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_runpod_key_fingerprint.py +0 -0
  476. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_runpod_key_waterfall.py +0 -0
  477. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_serve.py +0 -0
  478. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_serve_reasoning_content.py +0 -0
  479. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_api.py +0 -0
  480. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_app_coverage.py +0 -0
  481. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_auth_singleflight.py +0 -0
  482. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_billing.py +0 -0
  483. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_checkpoints_coverage.py +0 -0
  484. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_db.py +0 -0
  485. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_locks_coverage.py +0 -0
  486. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_standalone.py +0 -0
  487. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_serving_context_preflight.py +0 -0
  488. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_serving_contract.py +0 -0
  489. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_serving_schema_coverage.py +0 -0
  490. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_chunked_nll.py +0 -0
  491. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_example_selection.py +0 -0
  492. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_gc_off.py +0 -0
  493. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_max_context.py +0 -0
  494. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_train.py +0 -0
  495. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_workload.py +0 -0
  496. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_spec_and_validation.py +0 -0
  497. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_step_floor.py +0 -0
  498. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_step_metrics.py +0 -0
  499. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_structured_outputs.py +0 -0
  500. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_teacher_broker.py +0 -0
  501. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_teacher_encoding_contract.py +0 -0
  502. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_thinking_config.py +0 -0
  503. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_train_context_preflight.py +0 -0
  504. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_training_controls.py +0 -0
  505. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_type_comment_prose.py +0 -0
  506. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vast_api.py +0 -0
  507. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vast_api_coverage.py +0 -0
  508. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vast_offers.py +0 -0
  509. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vast_provider_coverage.py +0 -0
  510. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vast_runner.py +0 -0
  511. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_verified_revisions.py +0 -0
  512. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_verifiers.py +0 -0
  513. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_version.py +0 -0
  514. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  515. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vram_architecture.py +0 -0
  516. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_wandb_link.py +0 -0
  517. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_wandb_naming.py +0 -0
  518. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_warmstart_adapter_download.py +0 -0
  519. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_warmstart_cross_repo.py +0 -0
  520. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_warmstart_error_attribution.py +0 -0
  521. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_weight_cache.py +0 -0
  522. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_dryrun.py +0 -0
  523. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_hardexit.py +0 -0
  524. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_image.py +0 -0
  525. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_init_heartbeat.py +0 -0
  526. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_stack.py +0 -0
  527. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_thinking.py +0 -0
  528. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_workflow_contracts.py +0 -0
  529. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_workload_profile.py +0 -0
  530. {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_zero2_sharding_gate.py +0 -0
@@ -0,0 +1,200 @@
1
+ # Changelog
2
+
3
+ Notable changes to `freesolo-flash`. The dev-channel package `freesolo-flash-dev` ships in
4
+ lockstep at the same version.
5
+
6
+ Releases happen by merging a version bump from `dev` into `main`, which publishes to PyPI
7
+ (`.github/workflows/publish.yml`). Versions are `MAJOR.MINOR.PATCH`.
8
+
9
+ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
10
+ `git log` for anything before that.
11
+
12
+ ## Unreleased
13
+
14
+ ### Added
15
+
16
+ - A `flash-cli` console script, the same entry point as `flash` under a name nothing else
17
+ claims. The `server` and `dev` extras install `runpod-flash`, which declares its own `flash`
18
+ script; whichever distribution is installed last wins, so on a control-plane host
19
+ `pip install 'freesolo-flash[server]'` could leave `flash` running RunPod's CLI, which exits 0
20
+ and does nothing. `flash` is unchanged and remains correct on a base (client-only) install.
21
+
22
+ ### Changed
23
+
24
+ - CI runs the offline test suite on both supported interpreters (3.11 and 3.12) rather than
25
+ 3.11 alone, and sets `HF_HUB_OFFLINE` / `TRANSFORMERS_OFFLINE` so a test that reaches the
26
+ network fails deterministically instead of depending on runner connectivity.
27
+ - Every GitHub Action is pinned to a commit SHA rather than a mutable tag.
28
+ - `mypy` runs in CI as an advisory (non-blocking) job.
29
+
30
+ ### Fixed
31
+
32
+ - `flash env test` reported `overall: PASS` on environments that could not have trained anything,
33
+ because a well-formed hook return was the only thing it checked. Three silent-pass classes now
34
+ speak up. It still exits 0 for all three - they are warnings, not new blocking gates - but a run
35
+ no longer passes without a word about what it found:
36
+
37
+ - **Every episode scored 0.0.** The existing blocking gate is GRPO-only and abstains for a
38
+ non-GRPO algorithm and for a junk probe that raised, so an all-zero run routinely printed `PASS`
39
+ and nothing else. The warning is independent of those abstentions - but not of the two that are
40
+ about this command's own fidelity rather than the environment's health. A reference written in
41
+ reasoning markup is replayed verbatim here (there is no run config, so `thinking` defaults off)
42
+ and scores zero against a correct strict grader that would have seen the span stripped; a replay
43
+ that ran out mid-episode is graded part reference and part junk. Neither zero is evidence about
44
+ the environment, so both are excluded from the warning exactly as they are from the gate.
45
+ Counting them said "this run measured nothing" about a working reasoning environment - the very
46
+ conclusion the gate deliberately withholds. A constant reward that IS interpretable is never a
47
+ measurement, and for GRPO it carries the risk of being actively silent: rewards are mean-centred
48
+ within each group, so if sampled rollouts score alike the advantage and gradient are zero -
49
+ training completes, the loss curve looks unremarkable, W&B looks healthy, and the adapter comes
50
+ out identical to its warm start. That is stated as a risk rather than a prediction: this command
51
+ scores at most three offline gold replays, never a group of policy samples, so it cannot know
52
+ what a real rollout group would pay.
53
+ The end-of-run advantage-spread guard catches that only after the GPUs are paid for. An
54
+ For a non-GRPO run the warning says what is actually true of it: SFT and OPD never read
55
+ `env.reward`, so an all-zero scorer costs that run nothing and a placeholder `reward()` on an
56
+ SFT-only environment is a legitimate choice. It reports that the run is no evidence the grader
57
+ works - so the PASS is not clearance to train GRPO on the same environment later - instead of
58
+ sending the author to debug a function this algorithm never calls.
59
+ An all-`echo` run is reported differently and more weakly, because zero is the _correct_ score for
60
+ the deliberate junk echo replays - what is wrong there is that no gold text was ever scored,
61
+ which includes a real gold completion whose payload sits outside `content`: a native tool call
62
+ keeps its arguments in `tool_calls` and leaves `content` null. That row is a correct SFT target,
63
+ so it gets the opposite remedy - the warning says explicitly not to add assistant text to
64
+ satisfy the check, and to exercise the reward function against a sampled rollout instead, rather
65
+ than sending the author to corrupt a working target. It stays silent when the grader was proven
66
+ to separate - a centered scale paying gold 0.0 and junk -1.0, or a per-turn vector that
67
+ separates while the scalar is only a placeholder - since both have a real gradient and calling
68
+ them unmeasured would be false. A per-turn vector only counts as separation when the paid
69
+ worker would actually train from it: `_validated_reward` discards a vector holding a non-number,
70
+ a non-finite value, or a count that disagrees with the assistant turns the episode emitted, and
71
+ falls back to the flat episode reward. Reading such a vector as separation here was therefore
72
+ backwards - it suppressed both the warning and the blocking gate on precisely the runs that do
73
+ train on all-zero rewards, so two rewards for a three-turn episode bought a silent `PASS`. The
74
+ same three checks now apply before a vector is believed. Neither probe behind that judgement is free: the junk probe
75
+ drives a whole extra episode through user code, and the per-turn probe runs the environment's
76
+ own `score_episodes`, which may be the same paid judge the episodes just used. Both are spent
77
+ only where their answer can change what the command prints _and_ the algorithm trains from the
78
+ reward, since for SFT and OPD the answer could only soften a warning about a number that is
79
+ never read. Billing is therefore unchanged from the previous release in every case measured
80
+ against a counting grader: a healthy environment costs one call under both SFT and GRPO, and an
81
+ all-zero environment costs one under SFT and OPD and three under GRPO, exactly as before.
82
+ - **A gold replay that never terminates.** An environment applying every move twice can solve no
83
+ board, yet gold scored 0.60-0.65, beat a junk answer, and burned the full turn cap - clearing
84
+ every existing check. What exposed it in the field was reading `turns=12` on a board with a
85
+ five-move solution, a comparison the verdict never made. An episode stopped by the hard turn cap
86
+ rather than the environment's own done signal now says so. The verdict is drawn after the
87
+ deferred final `env_reply`, so an environment that solves its task on the last allowed turn is
88
+ not misreported. A gold answer shorter than the episode is judged at the moment it ran out
89
+ rather than at the end: the junk the driver pads with cannot advance the environment, so the
90
+ final state says nothing about the reference either way. Both halves stay reportable - a
91
+ five-move solution against a twelve-turn cap on an unsolvable board (the field case, since real
92
+ datasets carry minimal solutions) is still reported, and so is a short gold answer on a working
93
+ environment, because at that sampling point the two are indistinguishable: both are not-done,
94
+ one because it never can be and one because a real rollout would simply have continued. Rather
95
+ than resolve that ambiguity silently in either direction, the warning states it - a reference
96
+ that ran out before the cap names both explanations and puts the cheaper one first, since
97
+ extending a dataset row costs less than auditing termination logic that works. Only a reference
98
+ that covered every turn and still never finished leaves the environment as the sole
99
+ explanation. A gold trajectory _longer_ than the cap is separated out before either reading,
100
+ since its cause is fully determined rather than guessed: only a prefix could be replayed, so
101
+ the remaining gold turns were never scored, and the report names both numbers and the exact
102
+ remedy (raise the cap, or shorten the row) instead of sending the author to audit it. That
103
+ mismatch is reported independently of whether the episode finished, because the two are not the
104
+ same question: an environment that sets `done` while applying the capped prefix ends the episode
105
+ tidily, so the not-done signal never fires, and the dropped gold turns went unmentioned on an
106
+ otherwise clean `overall: PASS`. The count it reports is the turns actually replayed, not the
107
+ cap - an environment that terminates before reaching the cap sends fewer, and quoting the cap
108
+ claimed a turn had been replayed that never was, contradicting the episode line just below it.
109
+ Otherwise
110
+ the wording stops short of a verdict, because `rollout_done`
111
+ returns True at `turn >= cap` regardless of `state["done"]`, so a fixed-length episode that ends
112
+ purely by using its whole budget is a supported shape that never sets `done` and is
113
+ indistinguishable from a dead one here. Both are reported, the reward that separates them in
114
+ practice is quoted on the line, and the reader is told which reading applies to which. The
115
+ ceiling compared against is the
116
+ _effective_ one: a row setting `max_episode_turns` below the dataset-wide `max_turns` is stopped
117
+ by its own budget, which `rollout_done` gives precedence, so measuring exhaustion against
118
+ `max_turns` alone silenced this warning for exactly the rows whose budget is tightest.
119
+
120
+ Measuring against the effective cap also made an existing hole reachable: for an episode
121
+ stopped at the ceiling, the final `env_reply` is issued by a deferred call after the loop, and
122
+ that call never checked its envelope. An environment whose last reply is malformed - scalar
123
+ `content`, which breaks the chat template on the paid run - therefore reached `overall: PASS`.
124
+ It is now validated exactly like the in-loop replies, with an empty reply still allowed, since
125
+ an environment with nothing further to observe legitimately returns none.
126
+
127
+ - **A gold completion whose rendered role sequence collapses.** SFT does not replay a completion
128
+ turn by turn; it renders one training string from `prompt_messages + sft_completion`, and
129
+ nothing validated that concatenation. On a single-turn environment a gold answer returned as
130
+ assistant turns alone rendered as one user question followed by every answer back to back,
131
+ training the model to dump the whole episode into a single reply - the opposite of the
132
+ behaviour being taught. Because this gate scored each turn separately, it passed either way.
133
+ The rendered role sequence is now checked for consecutive same-role turns and printed.
134
+
135
+ The check is scoped to where the defect is real. It is skipped entirely for multi-turn
136
+ environments, where consecutive assistant turns are the contract rather than a fault - the
137
+ intervening user turns come from `env_reply` at rollout time and are deliberately absent from
138
+ the dataset. `tool` is exempt, since parallel tool calls are answered by one `tool` message per
139
+ call and chat templates render each as its own block; `user` and `system` are not, because a
140
+ doubled user turn is how an off-by-one trajectory capture shows up and it duplicates that text
141
+ in the trained string just as a doubled assistant turn does. Only repeats the completion owns
142
+ are reported, with `sft_completion`'s own indices: a repeat wholly inside `prompt_messages` is
143
+ an ordinary prompt shape (a retrieved document in its own user message, a task and its
144
+ reply-format instruction as separate turns) that no edit to the completion could change, and an
145
+ `assistant` turn at the prompt/completion seam is a prefill the completion continues, the one
146
+ adjacency meant to merge. A doubled `user` or `system` turn at that same seam has no such
147
+ innocent form and is still reported, since it is the completion restating a turn the prompt
148
+ already contains.
149
+
150
+ - Commands printed for the operator to run (the resume/cancel hand-off after `flash train`,
151
+ usage strings, `next:` hints) now name the executable actually invoked rather than always
152
+ `flash`. On a host where `runpod-flash` owns the `flash` script, the printed
153
+ `flash runs cancel <run-id>` exited 0 without cancelling, leaving a run billing while the
154
+ operator believed they had stopped it. Reached through the `python -m flash.cli` escape hatch,
155
+ the printed command now names the interpreter that is actually running, rather than a bare
156
+ `python` that is absent on a python3-only host and may resolve to a different environment
157
+ inside a virtualenv.
158
+
159
+ - `flash env setup` scaffolded hosted-only environment instructions on every plane. A
160
+ self-hosted plane cannot publish to Freesolo's managed environment hub, so the generated
161
+ configs left `[environment] id` empty (which fails validation) beside a `flash env push`
162
+ command that could not work. Against a self-hosted plane the scaffold now emits the
163
+ `github:owner/repo@ref:path` id form, which such a plane resolves directly. Output against
164
+ the managed plane is unchanged.
165
+
166
+ - `flash-server` reported missing operator configuration as an unhandled ASGI startup
167
+ exception, so the actionable message arrived under ~20 frames of starlette/contextlib. The
168
+ refusing half of the preflight now runs before uvicorn starts, and `flash-server` prints
169
+ `error: ...` and exits 3 (uvicorn's `STARTUP_FAILURE`, which this path already used, so
170
+ supervision keying on it is unaffected). The advisory warnings still come from the lifespan
171
+ alone, so a booted plane logs them once.
172
+ - `flash env test` blamed the reward function for a gold answer that scored zero, when the
173
+ gold completion is equally likely to be at fault: with no `sft_completion` hook the replayed
174
+ answer is the dataset row's raw `output`, so a dataset whose `output` is a bare value fails a
175
+ grader that (correctly) requires a wrapper. The warning now names both candidates and prints
176
+ the exact text it scored, verbatim rather than through the whitespace-collapsing, 200-character
177
+ preview that hid the formatting faults it exists to reveal. The scaffolded `environment.py`
178
+ documents that `output` is also the gold assistant turn SFT trains on, and that per-row scorer
179
+ state belongs in `metadata`.
180
+ - `flash env test` labelled the replayed dataset turns as the text that scored zero, but a
181
+ multi-turn environment whose `step_episode` returns a `final_response_text` has that override
182
+ replace the episode's response before scoring, so the diagnostic named text the grader never
183
+ saw. It now reports what the scorer actually received, captured at the scoring call.
184
+ - An environment that overrode its answer to the empty string had `flash env test` report the
185
+ replayed turns instead: the captured text was tested for truth, so a graded `""` was
186
+ indistinguishable from an episode that never reached the scorer. The override propagates on
187
+ `is not None`, so `""` really is what the grader saw -- and an empty answer explains a zero
188
+ reward on its own, making it the reading a reader most needs named rather than hidden.
189
+ - A crashed scorer went unreported on an `echo` episode -- a row with no gold answer to replay,
190
+ which is also the case that leaves the GRPO gate with nothing to count. `flash env test` could
191
+ exit `overall: PASS` with every reward coming from a scorer that never ran. The scorer's error is
192
+ now surfaced for any policy.
193
+ - A scorer that crashed behind the SDK's guard reached `flash env test` as a bare `0.000000`,
194
+ indistinguishable from a judged-wrong answer, because the adapter kept only
195
+ `RewardResult.score`. The new `FreesoloEnvironment.reward_with_error` returns the reward and the
196
+ discarded error from a single scoring call, so a missing runtime dependency names itself without
197
+ re-scoring the episode -- which would bill a paid judge twice and, for a non-deterministic
198
+ scorer, could report an error that did not produce the printed reward.
199
+ - Two tests resolved Hugging Face model metadata over the network and passed only on a
200
+ connected runner. They now stub the resolver like their siblings already did.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.2.7
3
+ Version: 1.2.13
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
@@ -7,11 +7,11 @@ import json
7
7
  import math
8
8
  import re
9
9
  from collections.abc import Callable, Mapping
10
- from dataclasses import dataclass
10
+ from dataclasses import dataclass, field
11
11
  from decimal import Decimal, InvalidOperation
12
12
  from typing import TYPE_CHECKING, Any
13
13
 
14
- from flash.core.catalog import serving_context_cap, serving_lora_rank_cap
14
+ from flash.core.catalog import lora_expert_count, serving_context_cap, serving_lora_rank_cap
15
15
 
16
16
 
17
17
  class ServingPreflightError(ValueError):
@@ -279,6 +279,117 @@ def rank_from_adapter_config(config: Mapping[str, Any], *, source: str) -> int:
279
279
  )
280
280
 
281
281
 
282
+ _LORA_A_INFIX = ".lora_A."
283
+ _LORA_B_INFIX = ".lora_B."
284
+
285
+
286
+ @dataclass(frozen=True)
287
+ class DeclaredLoraRanks:
288
+ """The default rank, per-module overrides, and parameter-target module paths in a config."""
289
+
290
+ default: int | None = None
291
+ by_module: Mapping[str, int] = field(default_factory=dict)
292
+ stacked_rank_modules: tuple[str, ...] = ()
293
+ stacked_rank_multiplier: int | None = None
294
+
295
+ def __bool__(self) -> bool:
296
+ return self.default is not None or bool(self.by_module)
297
+
298
+
299
+ def declared_lora_ranks(config: Mapping[str, Any]) -> DeclaredLoraRanks:
300
+ """Read the per-module LoRA rank structure out of ``adapter_config.json``."""
301
+ if not isinstance(config, Mapping):
302
+ return DeclaredLoraRanks()
303
+ try:
304
+ default = _positive_int(config["r"], source="adapter_config.json", field="r")
305
+ except (KeyError, ValueError):
306
+ default = None
307
+
308
+ by_module: dict[str, int] = {}
309
+ pattern = config.get("rank_pattern")
310
+ if isinstance(pattern, Mapping):
311
+ for module, value in pattern.items():
312
+ try:
313
+ by_module[str(module)] = _positive_int(
314
+ value, source="adapter_config.json", field="rank_pattern"
315
+ )
316
+ except ValueError:
317
+ continue
318
+
319
+ stacked_rank_modules: list[str] = []
320
+ targets = config.get("target_parameters")
321
+ if isinstance(targets, list):
322
+ for target in targets:
323
+ if not isinstance(target, str):
324
+ continue
325
+ module, separator, _ = target.rpartition(".")
326
+ if separator and module:
327
+ stacked_rank_modules.append(module)
328
+
329
+ base_model = str(config.get("base_model_name_or_path") or "").strip()
330
+ return DeclaredLoraRanks(
331
+ default=default,
332
+ by_module=by_module,
333
+ stacked_rank_modules=tuple(stacked_rank_modules),
334
+ stacked_rank_multiplier=lora_expert_count(base_model),
335
+ )
336
+
337
+
338
+ def _rank_for_module(module_path: str, declared: DeclaredLoraRanks) -> int | None:
339
+ """Resolve a module's rank with PEFT's ordered, anchored ``rank_pattern`` matching."""
340
+ for module, rank in declared.by_module.items():
341
+ if not module:
342
+ continue
343
+ try:
344
+ # entries are regexes in PEFT, deliberately not escaped here either
345
+ if re.match(rf"(.*\.)?({module})$", module_path):
346
+ return rank
347
+ except re.error:
348
+ continue
349
+ return declared.default
350
+
351
+
352
+ def _module_uses_target_parameters(module_path: str, declared: DeclaredLoraRanks) -> bool:
353
+ """Whether this serialized module came from one of PEFT's targeted parameters."""
354
+ return any(
355
+ module_path == module or module_path.endswith(f".{module}")
356
+ for module in declared.stacked_rank_modules
357
+ )
358
+
359
+
360
+ def lora_tensor_rank_disagrees(key: str, shape: Any, declared: DeclaredLoraRanks) -> bool:
361
+ """Return whether a 2-D LoRA weight provably contradicts its configured rank.
362
+
363
+ Ordinary module weights carry exactly ``r`` on the LoRA axis. A 3-D parameter targeted through
364
+ PEFT's ``target_parameters`` serializes under its parent module and stacks every model expert on
365
+ that axis, so only that module may carry exactly ``r * num_experts``. The distinction must be per
366
+ module because one config may contain ordinary ``target_modules`` and fused parameters together.
367
+ """
368
+ if not declared:
369
+ return False
370
+ is_a = _LORA_A_INFIX in key
371
+ is_b = _LORA_B_INFIX in key
372
+ if is_a == is_b: # neither, or a key somehow claiming both
373
+ return False
374
+ if not isinstance(shape, (list, tuple)) or len(shape) != 2:
375
+ return False
376
+ dims = [d for d in shape if isinstance(d, int) and not isinstance(d, bool) and d > 0]
377
+ if len(dims) != 2:
378
+ return False
379
+
380
+ infix = _LORA_A_INFIX if is_a else _LORA_B_INFIX
381
+ module_path = key.partition(infix)[0]
382
+ rank = _rank_for_module(module_path, declared)
383
+ if rank is None:
384
+ return False
385
+ axis = dims[0] if is_a else dims[1]
386
+ if _module_uses_target_parameters(module_path, declared):
387
+ multiplier = declared.stacked_rank_multiplier
388
+ expected = rank * multiplier if multiplier is not None else rank
389
+ return axis != expected
390
+ return axis != rank
391
+
392
+
282
393
  def alpha_from_adapter_config(config: Mapping[str, Any], *, source: str) -> int:
283
394
  """Return the maximum LoRA alpha across default and per-module metadata."""
284
395
  return _max_adapter_value(
@@ -560,6 +560,7 @@ _FOLLOW_METRIC_FIELDS = (
560
560
  ("frac_reward_zero_std", "frac_zero_std"),
561
561
  ("mean_completion_tokens", "comp_len"),
562
562
  ("truncation_rate", "trunc"),
563
+ ("discarded_rollouts", "discarded"),
563
564
  ("max_completion_tokens", "max_comp_tokens"),
564
565
  )
565
566
 
@@ -14,7 +14,7 @@ from __future__ import annotations
14
14
  import contextlib
15
15
  import inspect
16
16
 
17
- from flash.cli.commands.env.test import _evaluation_example
17
+ from flash.cli.commands.env.test_evaluations import _evaluation_example
18
18
  from flash.envs.evaluations import EvalCase, EvalResult
19
19
 
20
20
 
@@ -17,7 +17,8 @@ from flash.cli.commands.env.eval_args import (
17
17
  positive_int,
18
18
  )
19
19
  from flash.cli.commands.env.push import _err
20
- from flash.cli.commands.env.test import _env_params, _evaluation_example
20
+ from flash.cli.commands.env.test import _env_params
21
+ from flash.cli.commands.env.test_evaluations import _evaluation_example
21
22
  from flash.cli.ui import render
22
23
  from flash.envs.evaluations import (
23
24
  EvalCase,
@@ -288,6 +288,9 @@ class StarterMultiTurnEnv(EnvironmentMultiTurn):
288
288
  ) -> EnvironmentStepResult:
289
289
  # Advance the world after one assistant action. Return done=True to end the
290
290
  # episode, or append an observation message and keep going.
291
+ # `messages` already ends with this action: messages[-1]["content"] is
292
+ # `assistant_response`. If you rebuild state by replaying the transcript, replay
293
+ # `messages[:-1]` and apply `assistant_response` once, or you apply it twice.
291
294
  try:
292
295
  guess = int(assistant_response.strip().split()[0])
293
296
  except (ValueError, IndexError):
@@ -889,7 +892,7 @@ def cmd_env_setup(args) -> int:
889
892
  # the non-reasoning scaffold.
890
893
  thinking_line = "thinking = true\n" if reasoning else ""
891
894
  rl_reasoning_train = (
892
- "max_completion_tokens = 2048 # reasoning shares this budget with the answer; raised so it isn't truncated\n"
895
+ "max_completion_tokens = 2048 # per model turn; reasoning shares it with the answer\n"
893
896
  if reasoning
894
897
  else ""
895
898
  )