freesolo-flash-dev 1.2.130__tar.gz → 1.2.131__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 (928) hide show
  1. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/PKG-INFO +1 -1
  2. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/core/spec.py +21 -0
  3. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/plan/recipe.py +1 -0
  4. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/entry/sft_train.py +2 -2
  5. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/entry/sft_train_runner.py +14 -6
  6. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/schema/__init__.py +8 -0
  7. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/schema/fields.py +4 -1
  8. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/pyproject.toml +2 -2
  9. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_lora_targeting.py +2 -2
  10. freesolo_flash_dev-1.2.131/tests/test_loraplus_config.py +97 -0
  11. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_server_api.py +19 -0
  12. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_sft_train.py +114 -10
  13. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_spec_and_validation.py +2 -0
  14. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/uv.lock +1 -1
  15. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.dockerignore +0 -0
  16. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.env.example +0 -0
  17. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/CODEOWNERS +0 -0
  18. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  19. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  21. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  22. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/dependabot.yml +0 -0
  23. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/auto-rebake.yml +0 -0
  24. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/bake-kernel-cache.yml +0 -0
  25. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/ci.yml +0 -0
  26. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/deploy-modal-dev.yml +0 -0
  27. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/deploy-modal.yml +0 -0
  28. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/dev-kernel-cache.yml +0 -0
  29. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/main-source-guard.yml +0 -0
  30. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/notify-tests-repo.yml +0 -0
  31. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  32. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/publish-dev.yml +0 -0
  33. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/publish-image.yml +0 -0
  34. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/publish-serving-image.yml +0 -0
  35. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/publish.yml +0 -0
  36. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/version-parity.yml +0 -0
  37. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.github/workflows/worker-image.yml +0 -0
  38. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/.gitignore +0 -0
  39. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/CHANGELOG.md +0 -0
  40. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/CODE_OF_CONDUCT.md +0 -0
  41. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/CONTRIBUTING.md +0 -0
  42. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/Dockerfile +0 -0
  43. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/Dockerfile.serve +0 -0
  44. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/Dockerfile.worker +0 -0
  45. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/LICENSE +0 -0
  46. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/NOTICE +0 -0
  47. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/README.md +0 -0
  48. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/SECURITY.md +0 -0
  49. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/SELF_HOSTING.md +0 -0
  50. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/build/kernel_cache/.gitignore +0 -0
  51. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/build/kernel_cache/.keep +0 -0
  52. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/deploy/infisical/README.md +0 -0
  53. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/deploy/infisical/entrypoint.sh +0 -0
  54. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/docker/Dockerfile.kernelcache +0 -0
  55. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/docker/Dockerfile.kernelcache.relayer +0 -0
  56. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/docker/bake_kernel_cache.py +0 -0
  57. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/docker/bake_pod_entry.py +0 -0
  58. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/docker/extract_cudart_fix.py +0 -0
  59. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/docker/kernel_fingerprint.py +0 -0
  60. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/docker/make_rp_handler.py +0 -0
  61. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/docker/patch_vllm_moe_lora.py +0 -0
  62. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/docs/hosted-inference-load-testing.md +0 -0
  63. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/docs/serving-contract.md +0 -0
  64. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/__init__.py +0 -0
  65. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/_internal/__init__.py +0 -0
  66. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/_internal/channel.py +0 -0
  67. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/_internal/diagnostics.py +0 -0
  68. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/_internal/fileio.py +0 -0
  69. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/_internal/http.py +0 -0
  70. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/_internal/logging.py +0 -0
  71. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/_internal/openai_sse.py +0 -0
  72. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/_internal/paths.py +0 -0
  73. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/_internal/version.py +0 -0
  74. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/adapters/__init__.py +0 -0
  75. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/adapters/artifacts.py +0 -0
  76. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/adapters/fused_experts.py +0 -0
  77. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/adapters/lora_rank.py +0 -0
  78. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/adapters/targets.py +0 -0
  79. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/__init__.py +0 -0
  80. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/__main__.py +0 -0
  81. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/__init__.py +0 -0
  82. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/__init__.py +0 -0
  83. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/ops/__init__.py +0 -0
  84. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/ops/imports.py +0 -0
  85. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/ops/list.py +0 -0
  86. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/ops/push.py +0 -0
  87. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/ops/retained.py +0 -0
  88. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/ops/setup.py +0 -0
  89. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  90. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/testing/__init__.py +0 -0
  91. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/testing/episode.py +0 -0
  92. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/testing/eval.py +0 -0
  93. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/testing/eval_args.py +0 -0
  94. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/testing/evaluations.py +0 -0
  95. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/testing/params.py +0 -0
  96. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/testing/test.py +0 -0
  97. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/env/testing/warnings.py +0 -0
  98. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/ops/__init__.py +0 -0
  99. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/ops/account.py +0 -0
  100. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/ops/catalog.py +0 -0
  101. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/ops/deploy.py +0 -0
  102. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/ops/log_follow.py +0 -0
  103. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/ops/prompt_budget.py +0 -0
  104. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/ops/runs.py +0 -0
  105. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/ops/traces.py +0 -0
  106. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/ops/train.py +0 -0
  107. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/ops/worker_output.py +0 -0
  108. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/serving/__init__.py +0 -0
  109. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/serving/deploy.py +0 -0
  110. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/serving/identity.py +0 -0
  111. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/serving/status.py +0 -0
  112. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/commands/serving/undeploy.py +0 -0
  113. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/parsing/__init__.py +0 -0
  114. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/parsing/account.py +0 -0
  115. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/parsing/env.py +0 -0
  116. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/parsing/errors.py +0 -0
  117. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/parsing/main.py +0 -0
  118. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/parsing/models.py +0 -0
  119. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/parsing/serve_parser.py +0 -0
  120. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/parsing/traces.py +0 -0
  121. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/parsing/training.py +0 -0
  122. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/scaffold/TRAINING.md +0 -0
  123. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/scaffold/__init__.py +0 -0
  124. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/ui/__init__.py +0 -0
  125. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/ui/cost.py +0 -0
  126. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/ui/env_panels.py +0 -0
  127. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/ui/heartbeat.py +0 -0
  128. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/ui/render.py +0 -0
  129. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/ui/tables.py +0 -0
  130. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cli/ui/tty.py +0 -0
  131. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/client/__init__.py +0 -0
  132. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/client/config.py +0 -0
  133. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/client/freesolo_api.py +0 -0
  134. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/client/http.py +0 -0
  135. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/client/runtime_secrets.py +0 -0
  136. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/client/shapes.py +0 -0
  137. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/client/specs.py +0 -0
  138. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/client/streaming.py +0 -0
  139. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/content/__init__.py +0 -0
  140. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/content/image_descriptors.py +0 -0
  141. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/content/multimodal.py +0 -0
  142. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/content/reasoning_normalization.py +0 -0
  143. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/content/structured_outputs.py +0 -0
  144. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/content/thinking.py +0 -0
  145. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/core/__init__.py +0 -0
  146. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/core/catalog.py +0 -0
  147. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/core/grpo.py +0 -0
  148. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/core/spec_persistence.py +0 -0
  149. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cost/__init__.py +0 -0
  150. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cost/analytical.py +0 -0
  151. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cost/currency.py +0 -0
  152. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cost/facts.py +0 -0
  153. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cost/spec.py +0 -0
  154. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/cost/types.py +0 -0
  155. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/__init__.py +0 -0
  156. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/plan/__init__.py +0 -0
  157. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/plan/kv_sizing.py +0 -0
  158. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/plan/model_config_probe.py +0 -0
  159. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/plan/prompt_budget.py +0 -0
  160. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/plan/steps.py +0 -0
  161. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/plan/vram.py +0 -0
  162. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/profiling/__init__.py +0 -0
  163. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/profiling/dataset_profile.py +0 -0
  164. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/profiling/image_tokens.py +0 -0
  165. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/profiling/reasoning_render.py +0 -0
  166. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/profiling/sft_image_rows.py +0 -0
  167. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/profiling/sft_workload.py +0 -0
  168. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/profiling/tokenizer.py +0 -0
  169. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/profiling/workload_profile.py +0 -0
  170. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/result/__init__.py +0 -0
  171. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/result/accounting.py +0 -0
  172. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/result/rollout_samples.py +0 -0
  173. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/support/__init__.py +0 -0
  174. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/support/huggingface.py +0 -0
  175. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/support/verl_checkpoint.py +0 -0
  176. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/support/verl_policy.py +0 -0
  177. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/support/worker_entrypoint.py +0 -0
  178. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/__init__.py +0 -0
  179. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/__main__.py +0 -0
  180. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/entry/__init__.py +0 -0
  181. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/entry/opd.py +0 -0
  182. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/entry/rl.py +0 -0
  183. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/entry/sft.py +0 -0
  184. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/entry/worker.py +0 -0
  185. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/io/__init__.py +0 -0
  186. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/io/heartbeat.py +0 -0
  187. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/io/hf.py +0 -0
  188. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/io/prefetch.py +0 -0
  189. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/io/wandb_log.py +0 -0
  190. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/model/__init__.py +0 -0
  191. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/model/adapter.py +0 -0
  192. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/model/chatml_mask.py +0 -0
  193. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/model/decoding.py +0 -0
  194. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/model/lora.py +0 -0
  195. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/model/packing.py +0 -0
  196. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/perf/__init__.py +0 -0
  197. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/perf/diagnostics.py +0 -0
  198. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/perf/lifecycle.py +0 -0
  199. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/perf/liger.py +0 -0
  200. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/perf/memory.py +0 -0
  201. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/runtime/__init__.py +0 -0
  202. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  203. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/runtime/rng.py +0 -0
  204. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/runtime/state.py +0 -0
  205. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/teacher/__init__.py +0 -0
  206. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/teacher/client.py +0 -0
  207. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/teacher/encoding.py +0 -0
  208. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  209. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/__init__.py +0 -0
  210. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/core/__init__.py +0 -0
  211. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/core/child/__init__.py +0 -0
  212. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/core/child/glue.py +0 -0
  213. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/core/child/runtime.py +0 -0
  214. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  215. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  216. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  217. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  218. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/entry/__init__.py +0 -0
  219. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/entry/backend_common.py +0 -0
  220. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/entry/opd_train.py +0 -0
  221. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/entry/opd_train_runner.py +0 -0
  222. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  223. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/entry/rl_train.py +0 -0
  224. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  225. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  226. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/__init__.py +0 -0
  227. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
  228. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
  229. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
  230. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
  231. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
  232. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
  233. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  234. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  235. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/child/entry.py +0 -0
  236. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
  237. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/child/plugin.py +0 -0
  238. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  239. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  240. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/child/structured.py +0 -0
  241. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/child/tensors.py +0 -0
  242. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
  243. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
  244. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
  245. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
  246. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
  247. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
  248. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
  249. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
  250. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
  251. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
  252. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
  253. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
  254. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
  255. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/__init__.py +0 -0
  256. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  257. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/child/entry.py +0 -0
  258. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  259. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/child/patches.py +0 -0
  260. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  261. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  262. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  263. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/launch/config.py +0 -0
  264. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  265. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  266. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  267. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  268. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  269. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
  270. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  271. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  272. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/sft/__init__.py +0 -0
  273. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/sft/child/entry.py +0 -0
  274. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/sft/child/plugin.py +0 -0
  275. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  276. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  277. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/train/sft/setup/config.py +0 -0
  278. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/verl/__init__.py +0 -0
  279. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/verl/capabilities.py +0 -0
  280. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/verl/checkpoints.py +0 -0
  281. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/verl/child_io.py +0 -0
  282. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/verl/diagnostics.py +0 -0
  283. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/verl/parallelism.py +0 -0
  284. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/verl/parent_work.py +0 -0
  285. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/engine/worker/verl/process_census.py +0 -0
  286. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/__init__.py +0 -0
  287. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/loading/__init__.py +0 -0
  288. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/loading/adapter.py +0 -0
  289. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/loading/base.py +0 -0
  290. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/loading/loader.py +0 -0
  291. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/loading/pull.py +0 -0
  292. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/loading/staged.py +0 -0
  293. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/meta/__init__.py +0 -0
  294. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/meta/cache_security.py +0 -0
  295. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/meta/dataset_selection.py +0 -0
  296. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/meta/evaluations.py +0 -0
  297. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/meta/identity.py +0 -0
  298. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/meta/namespace_listing.py +0 -0
  299. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/package/__init__.py +0 -0
  300. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/package/direct_tokens.py +0 -0
  301. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/package/limits.py +0 -0
  302. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/envs/package/unpack.py +0 -0
  303. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/__init__.py +0 -0
  304. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/__init__.py +0 -0
  305. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  306. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
  307. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  308. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  309. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/bootstrapping/processes.py +0 -0
  310. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  311. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/host/__init__.py +0 -0
  312. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  313. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/host/failmark.py +0 -0
  314. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  315. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  316. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/instances/instance.py +0 -0
  317. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/instances/poll.py +0 -0
  318. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  319. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/instances/provider.py +0 -0
  320. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  321. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/net/__init__.py +0 -0
  322. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/net/auth.py +0 -0
  323. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/net/deadline.py +0 -0
  324. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/net/http.py +0 -0
  325. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/_lifecycle/net/worker.py +0 -0
  326. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/artifacts/__init__.py +0 -0
  327. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/artifacts/hf.py +0 -0
  328. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/artifacts/preload_runpod.py +0 -0
  329. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/artifacts/weight_cache.py +0 -0
  330. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/core/__init__.py +0 -0
  331. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/core/allocator.py +0 -0
  332. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/core/base.py +0 -0
  333. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/core/fit_errors.py +0 -0
  334. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/core/preflight.py +0 -0
  335. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/core/realized.py +0 -0
  336. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/core/registry.py +0 -0
  337. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/core/sharding.py +0 -0
  338. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/__init__.py +0 -0
  339. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/client/__init__.py +0 -0
  340. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/client/api.py +0 -0
  341. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/client/auth.py +0 -0
  342. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/client/gpus.py +0 -0
  343. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/client/preflight.py +0 -0
  344. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/client/pricing.py +0 -0
  345. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/execution/__init__.py +0 -0
  346. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/execution/provider.py +0 -0
  347. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/jobs/__init__.py +0 -0
  348. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/jobs/builders.py +0 -0
  349. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/lambda_/jobs/reap.py +0 -0
  350. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/__init__.py +0 -0
  351. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/client/__init__.py +0 -0
  352. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/client/api.py +0 -0
  353. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/client/auth.py +0 -0
  354. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/client/cost.py +0 -0
  355. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/client/gpus.py +0 -0
  356. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/client/preflight.py +0 -0
  357. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/client/pricing.py +0 -0
  358. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/execution/__init__.py +0 -0
  359. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/execution/job_execution.py +0 -0
  360. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/execution/jobs.py +0 -0
  361. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/execution/polling.py +0 -0
  362. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/execution/provider.py +0 -0
  363. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/execution/resources.py +0 -0
  364. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/serverless/__init__.py +0 -0
  365. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/serverless/endpoints.py +0 -0
  366. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/runpod/serverless/naming.py +0 -0
  367. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/vast/__init__.py +0 -0
  368. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/vast/client/__init__.py +0 -0
  369. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/vast/client/api.py +0 -0
  370. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/vast/client/auth.py +0 -0
  371. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/vast/client/preflight.py +0 -0
  372. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/vast/client/pricing.py +0 -0
  373. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/vast/client/result.py +0 -0
  374. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/vast/execution/__init__.py +0 -0
  375. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/vast/execution/provider.py +0 -0
  376. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/vast/jobs/__init__.py +0 -0
  377. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/providers/vast/jobs/builders.py +0 -0
  378. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/py.typed +0 -0
  379. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/__init__.py +0 -0
  380. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/accounting/__init__.py +0 -0
  381. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/accounting/artifacts.py +0 -0
  382. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/accounting/costs.py +0 -0
  383. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/accounting/reconciliation.py +0 -0
  384. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/accounting/weight_cache.py +0 -0
  385. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/lifecycle/__init__.py +0 -0
  386. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/lifecycle/attempts.py +0 -0
  387. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/lifecycle/claim_lock.py +0 -0
  388. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/lifecycle/deadlines.py +0 -0
  389. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/lifecycle/preparation.py +0 -0
  390. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/lifecycle/reporting.py +0 -0
  391. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/lifecycle/state.py +0 -0
  392. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/lifecycle/status.py +0 -0
  393. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/lifecycle/submit.py +0 -0
  394. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/results/__init__.py +0 -0
  395. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/results/checkpoints.py +0 -0
  396. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/results/verified_revisions.py +0 -0
  397. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/supervise/__init__.py +0 -0
  398. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/supervise/attach.py +0 -0
  399. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/supervise/attach_reconcile.py +0 -0
  400. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/supervise/attempt_supervision.py +0 -0
  401. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/supervise/deploy.py +0 -0
  402. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/supervise/errors.py +0 -0
  403. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/supervise/lifecycle.py +0 -0
  404. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/supervise/recovery.py +0 -0
  405. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/supervise/retry_decision.py +0 -0
  406. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runner/supervise/transitions.py +0 -0
  407. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runtime_capsule/__init__.py +0 -0
  408. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runtime_capsule/build.py +0 -0
  409. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runtime_capsule/manifest.py +0 -0
  410. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/runtime_capsule/profiles.py +0 -0
  411. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/__init__.py +0 -0
  412. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/app/__init__.py +0 -0
  413. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/app/__main__.py +0 -0
  414. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/app/bootstrap.py +0 -0
  415. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/app/chat_stream.py +0 -0
  416. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/app/http.py +0 -0
  417. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/app/launch.py +0 -0
  418. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/app/manifest.py +0 -0
  419. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/app/materialize.py +0 -0
  420. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/app/openai.py +0 -0
  421. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/app/progress.py +0 -0
  422. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/contract/__init__.py +0 -0
  423. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/contract/errors.py +0 -0
  424. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/contract/protocol.py +0 -0
  425. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/contract/provenance.py +0 -0
  426. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/contract/responses.py +0 -0
  427. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/contract/urls.py +0 -0
  428. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/control/__init__.py +0 -0
  429. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/control/_canonical.py +0 -0
  430. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/control/_serialization.py +0 -0
  431. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/control/_urls.py +0 -0
  432. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/control/credentials.py +0 -0
  433. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/control/planning.py +0 -0
  434. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/control/types.py +0 -0
  435. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/deployment/__init__.py +0 -0
  436. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/deployment/adapter_check.py +0 -0
  437. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/deployment/deploy.py +0 -0
  438. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/deployment/export.py +0 -0
  439. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/deployment/preflight.py +0 -0
  440. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/deployment/profiles.py +0 -0
  441. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/deployment/readiness.py +0 -0
  442. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/deployment/resolve.py +0 -0
  443. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/__init__.py +0 -0
  444. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/common/__init__.py +0 -0
  445. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/common/records.py +0 -0
  446. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/__init__.py +0 -0
  447. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  448. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  449. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  450. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  451. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  452. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  453. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  454. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  455. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  456. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  457. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  458. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  459. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  460. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/request/__init__.py +0 -0
  461. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/request/openai.py +0 -0
  462. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/request/runtime_support.py +0 -0
  463. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/request/streaming.py +0 -0
  464. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/request/text_scan.py +0 -0
  465. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/request/thinking.py +0 -0
  466. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/request/tool_calls.py +0 -0
  467. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/request/tool_template.py +0 -0
  468. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/request/transport.py +0 -0
  469. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/request/validation.py +0 -0
  470. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/runtime/__init__.py +0 -0
  471. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/runtime/adapters.py +0 -0
  472. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/runtime/engine.py +0 -0
  473. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/runtime/errors.py +0 -0
  474. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/runtime/multimodal.py +0 -0
  475. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/runtime/prompt.py +0 -0
  476. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/runtime/sampling.py +0 -0
  477. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/runtime/structured_outputs.py +0 -0
  478. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/runtime/tool_calls.py +0 -0
  479. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serve/runtime/types.py +0 -0
  480. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/__init__.py +0 -0
  481. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/__main__.py +0 -0
  482. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/asgi/__init__.py +0 -0
  483. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/asgi/app.py +0 -0
  484. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/asgi/cli.py +0 -0
  485. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/billing/__init__.py +0 -0
  486. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/billing/charges.py +0 -0
  487. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/billing/retry.py +0 -0
  488. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/__init__.py +0 -0
  489. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/ops/__init__.py +0 -0
  490. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/ops/reconcile.py +0 -0
  491. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/ops/repo_cleanup.py +0 -0
  492. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/ops/serving_resources.py +0 -0
  493. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/registry/__init__.py +0 -0
  494. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/registry/checkpoints.py +0 -0
  495. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/registry/environment_registry.py +0 -0
  496. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/registry/envs.py +0 -0
  497. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/registry/projects.py +0 -0
  498. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/registry/runs.py +0 -0
  499. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/teacher/__init__.py +0 -0
  500. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/teacher/broker.py +0 -0
  501. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/teacher/errors.py +0 -0
  502. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/domain/teacher/requests.py +0 -0
  503. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/platform/__init__.py +0 -0
  504. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/platform/auth.py +0 -0
  505. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/platform/db.py +0 -0
  506. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/platform/deps.py +0 -0
  507. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/platform/internal_client.py +0 -0
  508. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/platform/locks.py +0 -0
  509. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/platform/runtime.py +0 -0
  510. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/routes/__init__.py +0 -0
  511. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/routes/envs.py +0 -0
  512. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/routes/meta.py +0 -0
  513. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/routes/runs.py +0 -0
  514. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/routes/serving.py +0 -0
  515. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/routes/serving_chat.py +0 -0
  516. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/routes/serving_completion.py +0 -0
  517. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/routes/serving_revisions.py +0 -0
  518. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/routes/serving_smoke.py +0 -0
  519. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/server/routes/teacher.py +0 -0
  520. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/__init__.py +0 -0
  521. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/app/README.md +0 -0
  522. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/app/__init__.py +0 -0
  523. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/app/modal_app.py +0 -0
  524. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/loadtest/__init__.py +0 -0
  525. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/loadtest/__main__.py +0 -0
  526. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/loadtest/artifacts.py +0 -0
  527. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/loadtest/cli.py +0 -0
  528. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/loadtest/metrics.py +0 -0
  529. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/loadtest/protocol.py +0 -0
  530. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/loadtest/runner.py +0 -0
  531. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/loadtest/schedule.py +0 -0
  532. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/loadtest/schema.py +0 -0
  533. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/promotion/__init__.py +0 -0
  534. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/promotion/canary.py +0 -0
  535. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/promotion/evidence.py +0 -0
  536. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/promotion/gate.py +0 -0
  537. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/__init__.py +0 -0
  538. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/accounting/__init__.py +0 -0
  539. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/accounting/usage.py +0 -0
  540. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/accounting/usage_facts.py +0 -0
  541. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/accounting/usage_outbox.py +0 -0
  542. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/accounting/usage_retry.py +0 -0
  543. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/engine/__init__.py +0 -0
  544. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/engine/boot.py +0 -0
  545. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/engine/errors.py +0 -0
  546. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/engine/generation.py +0 -0
  547. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/engine/lora_engine.py +0 -0
  548. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/engine/lora_entries.py +0 -0
  549. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/engine/model_config.py +0 -0
  550. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/engine/prequant_config.py +0 -0
  551. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/engine/support.py +0 -0
  552. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/http/__init__.py +0 -0
  553. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/http/adapter_routes.py +0 -0
  554. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/http/body_limit.py +0 -0
  555. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/http/context.py +0 -0
  556. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/http/headers.py +0 -0
  557. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/http/inference_routes.py +0 -0
  558. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/http/router.py +0 -0
  559. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/http/routing.py +0 -0
  560. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/io/__init__.py +0 -0
  561. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/io/multimodal.py +0 -0
  562. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/io/openai_request.py +0 -0
  563. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/io/openai_stream.py +0 -0
  564. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/io/provenance.py +0 -0
  565. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/io/requests.py +0 -0
  566. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/io/responses.py +0 -0
  567. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/io/schemas.py +0 -0
  568. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/io/streaming.py +0 -0
  569. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/io/structured_outputs.py +0 -0
  570. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/store/__init__.py +0 -0
  571. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/store/access.py +0 -0
  572. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/store/lookup.py +0 -0
  573. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/store/persisted_columns.py +0 -0
  574. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/store/persistence.py +0 -0
  575. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/store/registration.py +0 -0
  576. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/store/registry.py +0 -0
  577. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/store/settings.py +0 -0
  578. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/store/supabase_rest.py +0 -0
  579. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/store/undeploy.py +0 -0
  580. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/stream_channel/__init__.py +0 -0
  581. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/stream_channel/_tasks.py +0 -0
  582. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/stream_channel/client.py +0 -0
  583. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/stream_channel/engine.py +0 -0
  584. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/serving/src/stream_channel/protocol.py +0 -0
  585. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/snapshot/__init__.py +0 -0
  586. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/snapshot/archive.py +0 -0
  587. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/teacher/__init__.py +0 -0
  588. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/teacher/limits.py +0 -0
  589. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/teacher/provider_status.py +0 -0
  590. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/flash/teacher/retry_contract.py +0 -0
  591. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/scripts/build_dev_dist.py +0 -0
  592. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/scripts/check_file_size.py +0 -0
  593. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/scripts/check_function_size.py +0 -0
  594. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/scripts/check_rollout_identity_actor.py +0 -0
  595. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/scripts/check_source_layout.py +0 -0
  596. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/scripts/check_verl_pin_exists.py +0 -0
  597. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/scripts/qualify_serving_profile.py +0 -0
  598. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/scripts/scrub_history.sh +0 -0
  599. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/serve_launch.py +0 -0
  600. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/__init__.py +0 -0
  601. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/__init__.py +0 -0
  602. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/chat_provenance.py +0 -0
  603. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/chat_transport.py +0 -0
  604. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/managed_chat.py +0 -0
  605. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/profile.py +0 -0
  606. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/runner.py +0 -0
  607. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/server_api_plugin.py +0 -0
  608. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/source_snapshot.py +0 -0
  609. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/specs.py +0 -0
  610. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/teacher.py +0 -0
  611. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/vast.py +0 -0
  612. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/_helpers/wire_headers.py +0 -0
  613. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/capture_image_sft_processor_oracle.py +0 -0
  614. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/capture_qwen38_27b_metadata.py +0 -0
  615. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/conftest.py +0 -0
  616. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  617. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  618. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  619. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  620. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  621. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  622. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/live/__init__.py +0 -0
  623. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/live/conftest.py +0 -0
  624. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/live/test_lambda_live.py +0 -0
  625. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/live/test_runpod_live.py +0 -0
  626. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/live/test_sft_thinking_render_live.py +0 -0
  627. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/live/test_vast_live.py +0 -0
  628. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/checkpoint_fixtures.py +0 -0
  629. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/conftest.py +0 -0
  630. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/hosted_loadtest_fake_scenario.json +0 -0
  631. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_base_model_serving.py +0 -0
  632. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_chat_auth.py +0 -0
  633. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_chat_authorizer.py +0 -0
  634. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  635. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_checkpoint_model_validation.py +0 -0
  636. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_engine_error_status.py +0 -0
  637. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_fp8_config.py +0 -0
  638. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_immutable_engine.py +0 -0
  639. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_immutable_revisions.py +0 -0
  640. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_immutable_schemas.py +0 -0
  641. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_loadtest_artifacts.py +0 -0
  642. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_loadtest_metrics.py +0 -0
  643. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_loadtest_protocol.py +0 -0
  644. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_loadtest_runner.py +0 -0
  645. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_loadtest_schedule.py +0 -0
  646. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_loadtest_schema.py +0 -0
  647. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_mirror_sampling_parity.py +0 -0
  648. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_modal_deploy_identity.py +0 -0
  649. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_modal_image_paths.py +0 -0
  650. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_model_config.py +0 -0
  651. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_multimodal.py +0 -0
  652. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_openai_stream_options.py +0 -0
  653. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_per_model_gpu.py +0 -0
  654. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_persistence.py +0 -0
  655. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_pre_first_disconnect.py +0 -0
  656. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_prequant_config.py +0 -0
  657. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_promotion_canary.py +0 -0
  658. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_promotion_evidence.py +0 -0
  659. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_promotion_gate.py +0 -0
  660. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_registry.py +0 -0
  661. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_registry_coverage.py +0 -0
  662. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_request_body_limit.py +0 -0
  663. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_router.py +0 -0
  664. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_router_coverage.py +0 -0
  665. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_router_edge_coverage.py +0 -0
  666. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_schemas_coverage.py +0 -0
  667. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_serve_reasoning_split.py +0 -0
  668. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_serve_structured_outputs.py +0 -0
  669. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_serve_thinking.py +0 -0
  670. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_settings.py +0 -0
  671. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_stream_channel.py +0 -0
  672. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_structured_outputs.py +0 -0
  673. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_structured_outputs_coverage.py +0 -0
  674. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_supabase_rest_coverage.py +0 -0
  675. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_usage_outbox.py +0 -0
  676. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving/test_usage_reporter.py +0 -0
  677. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving_conformance/__init__.py +0 -0
  678. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving_conformance/conftest.py +0 -0
  679. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/serving_conformance/test_contract.py +0 -0
  680. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_accounting_coverage.py +0 -0
  681. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_adapter_shard_completeness.py +0 -0
  682. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_agent_flash_cli_contract.py +0 -0
  683. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_algorithms.py +0 -0
  684. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_allocator.py +0 -0
  685. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_authenticated_redirects.py +0 -0
  686. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_backend_common.py +0 -0
  687. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_backend_jobspec_contract.py +0 -0
  688. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_bake_kernel_cache.py +0 -0
  689. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_base_model_provenance.py +0 -0
  690. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_billing_retry.py +0 -0
  691. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_bootstrap_process_groups.py +0 -0
  692. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_build_context_contract.py +0 -0
  693. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cancel_remote.py +0 -0
  694. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_capture_qwen38_metadata.py +0 -0
  695. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_catalog_consistency.py +0 -0
  696. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_catalog_only_models.py +0 -0
  697. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_charge_pricing.py +0 -0
  698. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_chat_foundations.py +0 -0
  699. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_checkpoint_lifecycle.py +0 -0
  700. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_checkpoints.py +0 -0
  701. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_commands.py +0 -0
  702. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_commands_coverage.py +0 -0
  703. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_credential_shadowing.py +0 -0
  704. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_errors.py +0 -0
  705. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_estimate.py +0 -0
  706. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_gpus_flag.py +0 -0
  707. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_help.py +0 -0
  708. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_main_coverage.py +0 -0
  709. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_managed.py +0 -0
  710. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_render_coverage.py +0 -0
  711. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_render_theme.py +0 -0
  712. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_serve_deploy.py +0 -0
  713. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_serve_status.py +0 -0
  714. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_serve_undeploy.py +0 -0
  715. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_traces.py +0 -0
  716. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cli_wandb_warning.py +0 -0
  717. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_client.py +0 -0
  718. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_client_import_purity.py +0 -0
  719. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_client_server_integration.py +0 -0
  720. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_client_stream_reads.py +0 -0
  721. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_config_env_vars.py +0 -0
  722. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_config_overrides.py +0 -0
  723. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_console_upload.py +0 -0
  724. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_controlled_experiment_repairs.py +0 -0
  725. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cost_analytical.py +0 -0
  726. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cost_currency.py +0 -0
  727. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cost_equation.py +0 -0
  728. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cost_estimate.py +0 -0
  729. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cost_hardware.py +0 -0
  730. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_cost_models.py +0 -0
  731. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_dataset_profile.py +0 -0
  732. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_deploy_latency.py +0 -0
  733. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_dev_channel.py +0 -0
  734. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_disk_gb.py +0 -0
  735. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_endpoint_name.py +0 -0
  736. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_cache_evict.py +0 -0
  737. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_delete.py +0 -0
  738. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_download.py +0 -0
  739. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_download_api.py +0 -0
  740. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_evaluations.py +0 -0
  741. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_git_auth.py +0 -0
  742. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_list_api.py +0 -0
  743. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_list_cli.py +0 -0
  744. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_list_hub.py +0 -0
  745. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_no_install.py +0 -0
  746. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_publish.py +0 -0
  747. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_pull.py +0 -0
  748. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_pull_coverage.py +0 -0
  749. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_pull_loader_coverage.py +0 -0
  750. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_pull_managed_control_plane.py +0 -0
  751. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_push.py +0 -0
  752. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_rate_limit_resolve.py +0 -0
  753. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_ref_pinning.py +0 -0
  754. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_env_test.py +0 -0
  755. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_envs_coverage.py +0 -0
  756. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_export.py +0 -0
  757. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_flash_mvp.py +0 -0
  758. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_flash_worker.py +0 -0
  759. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_flashinfer_cache_dirs.py +0 -0
  760. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_freesolo_api_transport.py +0 -0
  761. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_fused_expert_warmstart.py +0 -0
  762. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_github_urlopen_retry.py +0 -0
  763. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_gpu_type_single_field.py +0 -0
  764. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_gpus.py +0 -0
  765. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_grpo_checkpoint_durability.py +0 -0
  766. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_grpo_params.py +0 -0
  767. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_grpo_process_census.py +0 -0
  768. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_grpo_resident_sizing.py +0 -0
  769. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_grpo_reward_batching.py +0 -0
  770. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_grpo_rollout_contract.py +0 -0
  771. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_grpo_rollout_identity.py +0 -0
  772. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_health_liveness.py +0 -0
  773. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_hf_retry.py +0 -0
  774. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_idle_endpoint_reaper.py +0 -0
  775. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_image_environment_capability.py +0 -0
  776. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_image_incremental_processor.py +0 -0
  777. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_image_sft_markers.py +0 -0
  778. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_image_sft_processor_parity.py +0 -0
  779. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_image_tokens.py +0 -0
  780. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_infisical_secrets.py +0 -0
  781. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_instance_bootstrap_coverage.py +0 -0
  782. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_internal_client.py +0 -0
  783. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_jobs.py +0 -0
  784. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_kernel_cache.py +0 -0
  785. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_kernel_fingerprint.py +0 -0
  786. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_kv_util.py +0 -0
  787. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_lambda_api_coverage.py +0 -0
  788. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_lambda_runner.py +0 -0
  789. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_logging.py +0 -0
  790. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_login_perms.py +0 -0
  791. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_lora_rank_coverage.py +0 -0
  792. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_lora_rank_nested_rung.py +0 -0
  793. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_lora_rank_preflight.py +0 -0
  794. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_lora_targeting_pinned_verl.py +0 -0
  795. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_managed_config_fields.py +0 -0
  796. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_managed_hf_repo.py +0 -0
  797. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_metrics_schema_agent_contract.py +0 -0
  798. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_mig_guard.py +0 -0
  799. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_mirror_sampling_parity.py +0 -0
  800. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_multi_gpu_gate.py +0 -0
  801. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_multimodal_training.py +0 -0
  802. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_named_reward_metrics.py +0 -0
  803. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_oom_escalate_gpu.py +0 -0
  804. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_opd.py +0 -0
  805. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_opd_limits.py +0 -0
  806. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  807. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_opd_multiturn_failure_exit.py +0 -0
  808. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_opd_replay_guard.py +0 -0
  809. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_opd_resume_safety.py +0 -0
  810. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_opd_train.py +0 -0
  811. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_orchestrator_flash.py +0 -0
  812. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_packing.py +0 -0
  813. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_packing_coverage.py +0 -0
  814. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_parasail_teacher.py +0 -0
  815. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_persisted_spec_envelope.py +0 -0
  816. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_poll_helpers.py +0 -0
  817. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_preflight.py +0 -0
  818. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_projects.py +0 -0
  819. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_prompt_budget.py +0 -0
  820. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_provider_preflight_coverage.py +0 -0
  821. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_provider_routing.py +0 -0
  822. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_provider_teardown_robustness.py +0 -0
  823. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_providers_symmetry.py +0 -0
  824. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_realized_cost.py +0 -0
  825. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_repo_cleanup.py +0 -0
  826. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_resolve_params_b.py +0 -0
  827. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_resume_on_retry.py +0 -0
  828. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_retry_decision.py +0 -0
  829. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_rl_train.py +0 -0
  830. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_rollout_samples.py +0 -0
  831. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_run_registry_lifecycle.py +0 -0
  832. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_runmgmt.py +0 -0
  833. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_runpod_api_delete.py +0 -0
  834. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_runpod_key_fingerprint.py +0 -0
  835. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_runpod_key_waterfall.py +0 -0
  836. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_runtime_capsule.py +0 -0
  837. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve.py +0 -0
  838. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_app_bootstrap_http.py +0 -0
  839. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_app_launch.py +0 -0
  840. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_app_manifest.py +0 -0
  841. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_app_materialize.py +0 -0
  842. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_app_packaging.py +0 -0
  843. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_app_progress.py +0 -0
  844. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_chat_transport.py +0 -0
  845. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_control.py +0 -0
  846. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_docs.py +0 -0
  847. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_modal_contract_lock.py +0 -0
  848. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_modal_sdk.py +0 -0
  849. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  850. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_modal_teardown_identity.py +0 -0
  851. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_profile_qualification.py +0 -0
  852. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_profiles.py +0 -0
  853. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_provisioning_common.py +0 -0
  854. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_provisioning_modal.py +0 -0
  855. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_reasoning_content.py +0 -0
  856. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_resolve_provenance.py +0 -0
  857. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_runtime_adapters.py +0 -0
  858. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_runtime_engine.py +0 -0
  859. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_runtime_package.py +0 -0
  860. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serve_runtime_types.py +0 -0
  861. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_server_app_coverage.py +0 -0
  862. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_server_auth_singleflight.py +0 -0
  863. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_server_billing.py +0 -0
  864. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_server_checkpoints_coverage.py +0 -0
  865. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_server_db.py +0 -0
  866. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_server_envs_coverage.py +0 -0
  867. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_server_locks_coverage.py +0 -0
  868. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_server_managed_chat_requests.py +0 -0
  869. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_server_serving_resources.py +0 -0
  870. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_server_standalone.py +0 -0
  871. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serving_conformance_gate.py +0 -0
  872. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serving_context_preflight.py +0 -0
  873. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serving_contract.py +0 -0
  874. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_serving_schema_coverage.py +0 -0
  875. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_sft_chunked_nll.py +0 -0
  876. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_sft_example_selection.py +0 -0
  877. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_sft_gc_off.py +0 -0
  878. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_sft_max_context.py +0 -0
  879. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_sft_step_floor.py +0 -0
  880. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_sft_workload.py +0 -0
  881. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_source_attestation_flow.py +0 -0
  882. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_source_layout.py +0 -0
  883. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_source_snapshot.py +0 -0
  884. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_spec_contract_bytes.py +0 -0
  885. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_staged_environment.py +0 -0
  886. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_step_floor.py +0 -0
  887. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_step_metrics.py +0 -0
  888. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_step_timing.py +0 -0
  889. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_structured_outputs.py +0 -0
  890. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_teacher_broker.py +0 -0
  891. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_teacher_encoding_contract.py +0 -0
  892. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_terminal_artifacts.py +0 -0
  893. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_thinking_config.py +0 -0
  894. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_tool_call_exact_parsing.py +0 -0
  895. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_train_context_preflight.py +0 -0
  896. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_training_controls.py +0 -0
  897. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_type_comment_prose.py +0 -0
  898. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_vast_api.py +0 -0
  899. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_vast_api_coverage.py +0 -0
  900. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_vast_offers.py +0 -0
  901. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_vast_provider_coverage.py +0 -0
  902. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_vast_result.py +0 -0
  903. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_vast_runner.py +0 -0
  904. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_verified_revisions.py +0 -0
  905. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_verifiers.py +0 -0
  906. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_verl_checkpoint_export.py +0 -0
  907. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_verl_child_plugins.py +0 -0
  908. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_verl_silence_watchdog.py +0 -0
  909. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_version.py +0 -0
  910. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  911. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_vllm_moe_lora_backport.py +0 -0
  912. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_vram_architecture.py +0 -0
  913. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_wandb_link.py +0 -0
  914. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_wandb_naming.py +0 -0
  915. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_warmstart_adapter_download.py +0 -0
  916. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_warmstart_cross_repo.py +0 -0
  917. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_warmstart_error_attribution.py +0 -0
  918. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_warmstart_image_adapters.py +0 -0
  919. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_weight_cache.py +0 -0
  920. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_worker_dryrun.py +0 -0
  921. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_worker_hardexit.py +0 -0
  922. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_worker_image.py +0 -0
  923. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_worker_init_heartbeat.py +0 -0
  924. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_worker_stack.py +0 -0
  925. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_worker_thinking.py +0 -0
  926. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_workflow_contracts.py +0 -0
  927. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_workload_profile.py +0 -0
  928. {freesolo_flash_dev-1.2.130 → freesolo_flash_dev-1.2.131}/tests/test_zero2_sharding_gate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.2.130
3
+ Version: 1.2.131
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
@@ -20,6 +20,7 @@ detail. See their docstrings before changing either.
20
20
  from __future__ import annotations
21
21
 
22
22
  import json
23
+ import math
23
24
  import os
24
25
  from dataclasses import asdict, dataclass, field, fields
25
26
  from typing import Any, Literal
@@ -365,6 +366,9 @@ class TrainSpec:
365
366
  hf_repo: str = ""
366
367
  # None -> worker's tuned recipe default.
367
368
  learning_rate: float | None = field(default=None, metadata={"introduced_in": "0.2.0"})
369
+ # sft only: none preserves a legacy persisted run's 16x optimizer. new configs freeze the
370
+ # recipe default at parse time; 1 uses equal adapter learning rates.
371
+ loraplus_ratio: float | None = field(default=None, metadata={"introduced_in": "1.2.131"})
368
372
  # sft only. the packaged-dataset estimate resolves this against the selected row count into
369
373
  # examples_per_update (packed) or pins the optimizer batch to 1 (unpacked). grpo/opd have no
370
374
  # profile, so they take prompts_per_step instead and reject this key: the two are not the same
@@ -399,6 +403,17 @@ class TrainSpec:
399
403
  )
400
404
 
401
405
  def __post_init__(self) -> None:
406
+ if self.loraplus_ratio is not None:
407
+ ratio = self.loraplus_ratio
408
+ if isinstance(ratio, bool) or not isinstance(ratio, (int, float)):
409
+ raise TypeError("train.loraplus_ratio must be a number")
410
+ try:
411
+ ratio = float(ratio)
412
+ except OverflowError as exc:
413
+ raise ValueError("train.loraplus_ratio must be a finite number >= 1") from exc
414
+ if not math.isfinite(ratio) or ratio < 1:
415
+ raise ValueError("train.loraplus_ratio must be a finite number >= 1")
416
+ object.__setattr__(self, "loraplus_ratio", ratio)
402
417
  if not self.lora_alpha:
403
418
  object.__setattr__(self, "lora_alpha", 2 * self.lora_rank)
404
419
  max_steps = parse_max_steps(self.max_steps)
@@ -566,6 +581,8 @@ class JobSpec:
566
581
  project: str = ""
567
582
 
568
583
  def __post_init__(self) -> None:
584
+ if self.train.loraplus_ratio is not None and self.algorithm != "sft":
585
+ raise ValueError("train.loraplus_ratio only applies to sft")
569
586
  object.__setattr__(self, "seed", parse_seed(self.seed))
570
587
  object.__setattr__(self, "model_revision", _model_revision(self.model_revision))
571
588
  for field_name in ("model_revision_auto", "model_revision_force_pin"):
@@ -681,6 +698,9 @@ class JobSpec:
681
698
  differently, so removing either pop would break existing digests.
682
699
  """
683
700
  data = asdict(self)
701
+ # preserve historical preparation digests when the new option was not authored.
702
+ if data["train"]["loraplus_ratio"] is None:
703
+ data["train"].pop("loraplus_ratio")
684
704
  # missing and unset are the same internal state. omitting the empty value preserves that state
685
705
  # without serializing it into an explicit empty preference, which every parser rejects.
686
706
  if not data["gpu"].get("providers"):
@@ -786,6 +806,7 @@ class JobSpec:
786
806
  init_from_adapter_revision=str(train.get("init_from_adapter_revision") or ""),
787
807
  hf_repo=str(train.get("hf_repo") or ""),
788
808
  learning_rate=opt_float(train.get("learning_rate")),
809
+ loraplus_ratio=train.get("loraplus_ratio"),
789
810
  batch_size=opt_int(train.get("batch_size")),
790
811
  prompts_per_step=opt_int(train.get("prompts_per_step")),
791
812
  max_context_tokens=opt_int(train.get("max_context_tokens")),
@@ -170,6 +170,7 @@ class SFTConfig:
170
170
  max_seq_len: int = 1024
171
171
  max_seq_len_thinking: int = 2048
172
172
  learning_rate: float = 1e-4
173
+ loraplus_ratio: float = 1.0
173
174
  warmup_frac: float = 0.03
174
175
  effective_batch: int = 32
175
176
  num_epochs: int = 2
@@ -28,7 +28,6 @@ from flash.engine.worker.verl.checkpoints import restore_verl_resume
28
28
  from flash.engine.worker.verl.parallelism import ULYSSES_SEQUENCE_PARALLEL_SIZE
29
29
 
30
30
  # todo: run the two-gpu sft smoke on the exact runpod image and command assembled below.
31
- _SFT_LORAPLUS_RATIO = 16.0
32
31
  # consecutive zero-grad-norm steps tolerated before the run is failed as untrainable (GRAD-001).
33
32
  # any nonzero grad norm is proof the backward graph is intact and resets the count. 2 is enough to
34
33
  # separate a one-off fully-masked batch from a severed graph, and keeps the wasted spend to a couple
@@ -488,6 +487,7 @@ def _write_sft_result(options, data, model, child, progress, verified, outputs)
488
487
  "device_peak_gpu_gb": device_peak_gpu_gb,
489
488
  "loraplus_optim": _VERL_OPTIMIZER_NAME,
490
489
  "loraplus_applied": progress.loraplus_applied,
490
+ "loraplus_ratio": options.loraplus_ratio,
491
491
  "verl_backend": "fsdp2",
492
492
  # sft shards by DATA -- see ULYSSES_SEQUENCE_PARALLEL_SIZE for why. fsdp splits the batch
493
493
  # across the ranks actually LAUNCHED, which is the allocated card count only when the
@@ -585,7 +585,7 @@ def run_sft_train(spec=None) -> None:
585
585
  child = _prepare_sft_child(
586
586
  options, data, model, capabilities, use_remove_padding, gdn_reset_arch
587
587
  )
588
- child_progress = _prepare_sft_progress(data, model, child)
588
+ child_progress = _prepare_sft_progress(options, data, model, child)
589
589
  progress = child_progress.values
590
590
 
591
591
  def on_line(line: str) -> None:
@@ -33,7 +33,6 @@ from flash.providers.core.base import rentable_gpu_counts
33
33
 
34
34
  RECIPE = _sft_train.RECIPE
35
35
  _MAX_ZERO_GRAD_STEPS = _sft_train._MAX_ZERO_GRAD_STEPS
36
- _SFT_LORAPLUS_RATIO = _sft_train._SFT_LORAPLUS_RATIO
37
36
  _LORAPLUS_READY_MARKER = _sft_train._LORAPLUS_READY_MARKER
38
37
  _VERL_OPTIMIZER_IMPL = _sft_train._VERL_OPTIMIZER_IMPL
39
38
  _VERL_OPTIMIZER_NAME = _sft_train._VERL_OPTIMIZER_NAME
@@ -70,6 +69,7 @@ class _SftOptions:
70
69
  model_revision: str
71
70
  epochs: int
72
71
  learning_rate: float
72
+ loraplus_ratio: float
73
73
  effective_batch: int
74
74
  max_steps: int
75
75
  save_at_steps: tuple[int, ...]
@@ -147,6 +147,7 @@ class _SftProgress:
147
147
  loss_curve: list[float]
148
148
  train_tokens: int
149
149
  loraplus_applied: bool
150
+ loraplus_ratio: float
150
151
  wandb_link: dict[str, str | None]
151
152
  # what the child plugin must prove applied; verified at the first optimizer step and again at
152
153
  # child exit.
@@ -187,6 +188,9 @@ def _resolve_sft_options(spec) -> _SftOptions:
187
188
  model_id = spec.model if spec else RECIPE.hf_model_id
188
189
  model_revision = getattr(spec, "model_revision", "") if spec else ""
189
190
  train_spec = spec.train if spec else None
191
+ # new authored sft specs persist their ratio. an unset stored value predates the option and
192
+ # must retain the 16x optimizer groups used by its checkpoint, including across further retries.
193
+ default_loraplus_ratio = 16.0 if train_spec is not None else RECIPE.sft.loraplus_ratio
190
194
 
191
195
  def train_opt(name, default):
192
196
  value = getattr(train_spec, name, None) if train_spec else None
@@ -215,6 +219,7 @@ def _resolve_sft_options(spec) -> _SftOptions:
215
219
  model_revision=model_revision,
216
220
  epochs=int(train_opt("epochs", RECIPE.sft.num_epochs)),
217
221
  learning_rate=float(train_opt("learning_rate", RECIPE.sft.learning_rate)),
222
+ loraplus_ratio=float(train_opt("loraplus_ratio", default_loraplus_ratio)),
218
223
  effective_batch=int(train_opt("batch_size", RECIPE.sft.effective_batch)),
219
224
  max_steps=int(train_opt("max_steps", 0) or 0),
220
225
  save_at_steps=tuple(getattr(train_spec, "save_at_steps", ()) or ()),
@@ -588,7 +593,7 @@ def _write_sft_child_shims(
588
593
  {
589
594
  "marker_file": shim_markers,
590
595
  "seed": int(seed),
591
- "loraplus_ratio": float(_SFT_LORAPLUS_RATIO),
596
+ "loraplus_ratio": options.loraplus_ratio,
592
597
  "loraplus_ready_marker": _LORAPLUS_READY_MARKER,
593
598
  "save_at_steps": list(options.save_at_steps),
594
599
  "total_steps": int(model.update_horizon),
@@ -758,7 +763,9 @@ def _prepare_sft_child(
758
763
  )
759
764
 
760
765
 
761
- def _prepare_sft_progress(data: _SftData, model: _SftModelSetup, child: _SftChild) -> _SftProgress:
766
+ def _prepare_sft_progress(
767
+ options: _SftOptions, data: _SftData, model: _SftModelSetup, child: _SftChild
768
+ ) -> _SftProgress:
762
769
  resume_step = child.resume_step
763
770
  progress = {"step": resume_step, "loss": None, "grad_norm": None, "lr": None}
764
771
  # consecutive steps seen with grad_norm == 0.0 at a nonzero lr. one step can legitimately be
@@ -785,7 +792,8 @@ def _prepare_sft_progress(data: _SftData, model: _SftModelSetup, child: _SftChil
785
792
  observed_grad_norms=observed_grad_norms,
786
793
  loss_curve=[],
787
794
  train_tokens=train_tokens,
788
- loraplus_applied=resume_step >= model.update_horizon,
795
+ loraplus_applied=options.loraplus_ratio > 1 and resume_step >= model.update_horizon,
796
+ loraplus_ratio=options.loraplus_ratio,
789
797
  wandb_link={},
790
798
  shim_markers=child.shim_markers,
791
799
  expected_shims=child.expected_shims,
@@ -846,7 +854,7 @@ def _consume_sft_marker_line(progress: _SftProgress, line: str) -> bool:
846
854
  if progress.expected_shims and not progress.shims_verified:
847
855
  verify_applied_shim_markers(progress.shim_markers, progress.expected_shims)
848
856
  progress.shims_verified = True
849
- if _SFT_LORAPLUS_RATIO > 1 and not progress.loraplus_applied:
857
+ if progress.loraplus_ratio > 1 and not progress.loraplus_applied:
850
858
  raise RuntimeError(
851
859
  "verl reached an optimizer step before the required lora+ shim succeeded"
852
860
  )
@@ -914,7 +922,7 @@ def _finish_sft_child(
914
922
  if progress.expected_shims and not progress.shims_verified:
915
923
  verify_applied_shim_markers(progress.shim_markers, progress.expected_shims)
916
924
  progress.shims_verified = True
917
- if _SFT_LORAPLUS_RATIO > 1 and not progress.loraplus_applied:
925
+ if progress.loraplus_ratio > 1 and not progress.loraplus_applied:
918
926
  raise RuntimeError("required lora+ shim did not emit its success marker")
919
927
  return train_wall, device_peak_gpu_gb
920
928
 
@@ -25,6 +25,7 @@ from flash.core.spec import (
25
25
  parse_seed,
26
26
  require_project_id,
27
27
  )
28
+ from flash.engine.plan.recipe import RECIPE
28
29
  from flash.providers.core.base import (
29
30
  UnsupportedGpuError,
30
31
  authored_gpu_ceiling,
@@ -297,6 +298,8 @@ def validate_train_keys_for_algorithm(train_raw: Mapping[str, Any], algorithm: s
297
298
  every spec fail to reparse its own output and break resubmit, warm-start and server reparse.
298
299
  A null is the absence of an authored value, which is exactly what the user is being asked for.
299
300
  """
301
+ if train_raw.get("loraplus_ratio") is not None and algorithm != "sft":
302
+ raise ConfigError("train.loraplus_ratio only applies to sft")
300
303
  for key, allowed in _ALGORITHM_ONLY_TRAIN_KEYS.items():
301
304
  if train_raw.get(key) is None or algorithm in allowed:
302
305
  continue
@@ -678,6 +681,10 @@ def spec_from_dict(
678
681
  )
679
682
  wandb_spec = _validate_wandb_section(raw)
680
683
 
684
+ loraplus_ratio = _train_float(train_raw, "loraplus_ratio", minimum=1.0)
685
+ if algorithm == "sft" and loraplus_ratio is None:
686
+ # freeze the new default; an absent persisted value identifies the legacy 16x optimizer.
687
+ loraplus_ratio = RECIPE.sft.loraplus_ratio
681
688
  try:
682
689
  train_spec = TrainSpec(
683
690
  epochs=_train_int(train_raw, "epochs", minimum=1),
@@ -686,6 +693,7 @@ def spec_from_dict(
686
693
  init_from_adapter=init_from_adapter,
687
694
  hf_repo="", # assigned server-side; see submit_job._assign_managed_hf_repo
688
695
  learning_rate=_train_float(train_raw, "learning_rate", minimum=0.0, exclusive=True),
696
+ loraplus_ratio=loraplus_ratio,
689
697
  batch_size=_train_int(train_raw, "batch_size", minimum=1),
690
698
  prompts_per_step=_train_int(train_raw, "prompts_per_step", minimum=1),
691
699
  max_context_tokens=_train_int(train_raw, "max_context_tokens", minimum=1),
@@ -65,7 +65,10 @@ def _train_float(
65
65
  return None
66
66
  if isinstance(v, bool) or not isinstance(v, (int, float)):
67
67
  raise ConfigError(f"train.{key} must be a number")
68
- v = float(v)
68
+ try:
69
+ v = float(v)
70
+ except OverflowError as exc:
71
+ raise ConfigError(f"train.{key} must be a finite number") from exc
69
72
  # nan/inf slip past range checks (nan compares false, inf passes any minimum).
70
73
  if not math.isfinite(v):
71
74
  raise ConfigError(f"train.{key} must be a finite number")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "freesolo-flash-dev"
3
- version = "1.2.130"
3
+ version = "1.2.131"
4
4
  description ="Flash — managed LoRA post-training (SFT/GRPO/OPD) for Freesolo environments, driven by the `flash` CLI"
5
5
  readme = "README.md"
6
6
  # RunPod Flash supports Python 3.11-3.12 (not 3.13 yet).
@@ -196,7 +196,7 @@ artifacts = ["flash/py.typed"]
196
196
  # auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
197
197
  # PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
198
198
  # dev-channel release = bump this (and [project].version) and merge to `dev`.
199
- version = "1.2.130"
199
+ version = "1.2.131"
200
200
 
201
201
  [tool.pytest.ini_options]
202
202
  pythonpath = ["."]
@@ -456,7 +456,7 @@ def test_sft_grpo_and_opd_plugins_install_text_targeting_only_for_text_jobs(tmp_
456
456
  shim_dir = tmp_path / "sft-text-shim"
457
457
  shim_dir.mkdir()
458
458
  _marker, expected, raw_sft = sft_train_runner._write_sft_child_shims(
459
- SimpleNamespace(model_id="Qwen/Qwen3.5-9B", save_at_steps=()),
459
+ SimpleNamespace(model_id="Qwen/Qwen3.5-9B", save_at_steps=(), loraplus_ratio=16.0),
460
460
  SimpleNamespace(
461
461
  update_horizon=1,
462
462
  reentrant_gradient_checkpointing=False,
@@ -474,7 +474,7 @@ def test_sft_grpo_and_opd_plugins_install_text_targeting_only_for_text_jobs(tmp_
474
474
  multimodal_dir = tmp_path / "sft-multimodal-shim"
475
475
  multimodal_dir.mkdir()
476
476
  _marker, expected, raw_sft = sft_train_runner._write_sft_child_shims(
477
- SimpleNamespace(model_id="Qwen/Qwen3.5-9B", save_at_steps=()),
477
+ SimpleNamespace(model_id="Qwen/Qwen3.5-9B", save_at_steps=(), loraplus_ratio=16.0),
478
478
  SimpleNamespace(
479
479
  update_horizon=1,
480
480
  reentrant_gradient_checkpointing=False,
@@ -0,0 +1,97 @@
1
+ """user-authored lora+ ratios survive cli and worker spec boundaries."""
2
+
3
+ import pytest
4
+
5
+ from flash.core.spec import JobSpec, TrainSpec
6
+ from flash.schema import ConfigError, spec_and_train_keys_from_file, spec_from_dict
7
+
8
+
9
+ def _raw(train, algorithm="sft"):
10
+ return {
11
+ "model": "Qwen/Qwen3.5-9B",
12
+ "algorithm": algorithm,
13
+ "project": "11111111-1111-4111-8111-111111111111",
14
+ "environment": {"id": "owner/project/env"},
15
+ "train": train,
16
+ }
17
+
18
+
19
+ @pytest.mark.parametrize("ratio", [1, 3.5, 16, 32])
20
+ def test_loraplus_ratio_survives_public_and_worker_round_trips(ratio):
21
+ spec = spec_from_dict(_raw({"loraplus_ratio": ratio, "learning_rate": 1e-5}))
22
+ public = spec_from_dict(spec.to_dict())
23
+ worker = JobSpec.from_json(spec.to_json())
24
+ for result in (spec, public, worker):
25
+ assert result.train.loraplus_ratio == ratio
26
+ assert result.train.learning_rate == 1e-5
27
+
28
+
29
+ @pytest.mark.parametrize("train", [{}, {"loraplus_ratio": None}])
30
+ def test_new_unset_ratio_is_frozen_for_future_retries(train):
31
+ spec = spec_from_dict(_raw(train))
32
+ assert spec.train.loraplus_ratio == 1.0
33
+ assert spec.to_dict()["train"]["loraplus_ratio"] == 1.0
34
+ assert JobSpec.from_json(spec.to_json()).train.loraplus_ratio == 1.0
35
+
36
+
37
+ def test_legacy_unset_ratio_preserves_historical_payload_shape():
38
+ spec = JobSpec.from_dict(_raw({}))
39
+ assert spec.train.loraplus_ratio is None
40
+ assert "loraplus_ratio" not in spec.to_dict()["train"]
41
+ assert "loraplus_ratio" not in spec.to_internal_dict()["train"]
42
+ assert JobSpec.from_json(spec.to_json()).train.loraplus_ratio is None
43
+
44
+
45
+ @pytest.mark.parametrize(
46
+ "ratio",
47
+ [
48
+ True,
49
+ False,
50
+ "16",
51
+ [],
52
+ 0,
53
+ -1,
54
+ 0.5,
55
+ float("nan"),
56
+ float("inf"),
57
+ -float("inf"),
58
+ 10**400,
59
+ -(10**400),
60
+ ],
61
+ )
62
+ def test_invalid_ratio_is_rejected_at_public_and_internal_boundaries(ratio):
63
+ with pytest.raises(ConfigError, match="loraplus_ratio"):
64
+ spec_from_dict(_raw({"loraplus_ratio": ratio}))
65
+ with pytest.raises((TypeError, ValueError), match="loraplus_ratio"):
66
+ JobSpec.from_dict(_raw({"loraplus_ratio": ratio}))
67
+ with pytest.raises((TypeError, ValueError), match="loraplus_ratio"):
68
+ TrainSpec(loraplus_ratio=ratio)
69
+
70
+
71
+ @pytest.mark.parametrize("algorithm", ["grpo", "opd"])
72
+ def test_ratio_is_rejected_for_algorithms_without_loraplus(algorithm):
73
+ raw = _raw({"loraplus_ratio": 4}, algorithm)
74
+ with pytest.raises(ConfigError, match="only applies to sft"):
75
+ spec_from_dict(raw)
76
+ with pytest.raises(ValueError, match="only applies to sft"):
77
+ JobSpec.from_dict(raw)
78
+
79
+
80
+ def test_toml_ratio_and_cli_override_are_user_authored_keys(tmp_path):
81
+ config = tmp_path / "flash.toml"
82
+ config.write_text(
83
+ 'model = "Qwen/Qwen3.5-9B"\n'
84
+ 'algorithm = "sft"\n'
85
+ 'project = "11111111-1111-4111-8111-111111111111"\n'
86
+ '[environment]\nid = "owner/project/env"\n'
87
+ "[train]\nloraplus_ratio = 4.0\nlearning_rate = 0.00001\n"
88
+ )
89
+ spec, keys = spec_and_train_keys_from_file(str(config), run_id="test")
90
+ assert spec.train.loraplus_ratio == 4.0
91
+ assert "loraplus_ratio" in keys
92
+ spec, keys = spec_and_train_keys_from_file(
93
+ str(config), run_id="test", overrides=["train.loraplus_ratio=1.0"]
94
+ )
95
+ assert spec.train.loraplus_ratio == 1.0
96
+ assert spec.train.learning_rate == 1e-5
97
+ assert "loraplus_ratio" in keys
@@ -809,6 +809,25 @@ def test_dry_run_rejects_invalid_structured_serving_constraints(
809
809
  assert message in response.json()["detail"]
810
810
 
811
811
 
812
+ @pytest.mark.parametrize("ratio", [10**400, -(10**400)])
813
+ def test_dry_run_rejects_overflowing_loraplus_ratio(api, monkeypatch, ratio) -> None:
814
+ import flash.server.routes.runs as runs_route
815
+
816
+ monkeypatch.setattr(
817
+ runs_route._app,
818
+ "prepare_job",
819
+ lambda *_a, **_k: pytest.fail("invalid ratio must fail before preparation"),
820
+ )
821
+ spec = {**SPEC, "algorithm": "sft", "train": {"loraplus_ratio": ratio}}
822
+ response = api.post(
823
+ "/v1/runs",
824
+ headers=_bearer(_login()),
825
+ json={"spec": spec, "dry_run": True},
826
+ )
827
+ assert response.status_code == 400, response.text
828
+ assert "train.loraplus_ratio must be a finite number" in response.json()["detail"]
829
+
830
+
812
831
  def test_warmstart_dry_run_preserves_serving_preflight_error(api) -> None:
813
832
  spec = {
814
833
  **SPEC,
@@ -1750,8 +1750,9 @@ def test_seeded_dataloader_handles_missing_and_present_validation_sampler(
1750
1750
  assert exc_info.value is original_error
1751
1751
 
1752
1752
 
1753
+ @pytest.mark.parametrize("ratio", [1.0, 3.5, 16.0])
1753
1754
  def test_generated_sitecustomize_installs_linear_scheduler_and_required_loraplus(
1754
- monkeypatch, capsys
1755
+ monkeypatch, capsys, ratio
1755
1756
  ):
1756
1757
  class FakeLoader:
1757
1758
  def __init__(self, *args, **kwargs):
@@ -1837,7 +1838,8 @@ def test_generated_sitecustomize_installs_linear_scheduler_and_required_loraplus
1837
1838
 
1838
1839
  sft_plugin._install_seeded_dataloader(43)
1839
1840
  sft_plugin._install_linear_scheduler()
1840
- sft_plugin._install_loraplus(16, "CUSTOM_LORAPLUS_READY")
1841
+ original_builder = FakeEngine._build_optimizer
1842
+ sft_plugin._install_loraplus(ratio, "CUSTOM_LORAPLUS_READY")
1841
1843
 
1842
1844
  engine = FakeEngine()
1843
1845
  engine.optimizer_config = SimpleNamespace(
@@ -1851,11 +1853,17 @@ def test_generated_sitecustomize_installs_linear_scheduler_and_required_loraplus
1851
1853
  lr_warmup_steps_ratio=0.1,
1852
1854
  total_training_steps=20,
1853
1855
  )
1854
- assert engine._build_optimizer(SimpleNamespace()) == "lora+"
1856
+ assert engine._build_optimizer(SimpleNamespace()) == ("lora+" if ratio > 1 else "plain")
1855
1857
  output = capsys.readouterr().out
1856
- assert "CUSTOM_LORAPLUS_READY ratio=16 optimizer=AdamW" in output
1857
1858
  assert _LORAPLUS_READY_MARKER not in output
1858
- assert optimizer_calls[0]["optimizer_kwargs"]["eps"] == 1e-8
1859
+ if ratio > 1:
1860
+ assert f"CUSTOM_LORAPLUS_READY ratio={ratio:g} optimizer=AdamW" in output
1861
+ assert optimizer_calls[0]["optimizer_kwargs"]["eps"] == 1e-8
1862
+ assert optimizer_calls[0]["loraplus_lr_ratio"] == ratio
1863
+ else:
1864
+ assert FakeEngine._build_optimizer is original_builder
1865
+ assert optimizer_calls == []
1866
+ assert "CUSTOM_LORAPLUS_READY" not in output
1859
1867
  assert engine._build_lr_scheduler("optimizer") == "linear"
1860
1868
  assert scheduler_calls == [("optimizer", {"num_warmup_steps": 2, "num_training_steps": 20})]
1861
1869
 
@@ -1866,7 +1874,7 @@ def test_sft_plugin_config_carries_the_canonical_loraplus_marker(tmp_path):
1866
1874
  shim_dir = tmp_path / "shim"
1867
1875
  shim_dir.mkdir()
1868
1876
  _, _, raw_config = sft_train_runner._write_sft_child_shims(
1869
- SimpleNamespace(save_at_steps=(3,)),
1877
+ SimpleNamespace(save_at_steps=(3,), loraplus_ratio=16.0),
1870
1878
  SimpleNamespace(update_horizon=7, reentrant_gradient_checkpointing=False),
1871
1879
  shim_dir=str(shim_dir),
1872
1880
  custom_dataset_path=str(shim_dir / "dataset.py"),
@@ -1879,6 +1887,34 @@ def test_sft_plugin_config_carries_the_canonical_loraplus_marker(tmp_path):
1879
1887
  assert json.loads(raw_config)["loraplus_ready_marker"] == _LORAPLUS_READY_MARKER
1880
1888
 
1881
1889
 
1890
+ @pytest.mark.parametrize("ratio", [1.0, 3.5, 16.0])
1891
+ @pytest.mark.parametrize("gate", ["step", "exit"])
1892
+ def test_loraplus_marker_is_required_only_for_the_runs_selected_ratio(ratio, gate):
1893
+ from flash.engine.worker.train.entry import sft_train_runner
1894
+
1895
+ progress = sft_train_runner._prepare_sft_progress(
1896
+ SimpleNamespace(loraplus_ratio=ratio),
1897
+ SimpleNamespace(rows=[]),
1898
+ SimpleNamespace(update_horizon=1),
1899
+ SimpleNamespace(resume_step=0, shim_markers="", expected_shims=()),
1900
+ )
1901
+
1902
+ def check():
1903
+ if gate == "step":
1904
+ return sft_train_runner._consume_sft_marker_line(progress, "step:1 - train/loss:1.0")
1905
+ return sft_train_runner._finish_sft_child(
1906
+ SimpleNamespace(stop_gb=lambda: 0.0), 0.0, 0, progress
1907
+ )
1908
+
1909
+ if ratio > 1:
1910
+ with pytest.raises(RuntimeError, match="required lora\\+ shim"):
1911
+ check()
1912
+ sft_train_runner._consume_sft_marker_line(
1913
+ progress, f"{_LORAPLUS_READY_MARKER} ratio={ratio:g} optimizer=AdamW"
1914
+ )
1915
+ check()
1916
+
1917
+
1882
1918
  def _exec_dataloader_shim(monkeypatch):
1883
1919
  """Execute the real rendered dataloader shim against fake torch classes, and return them.
1884
1920
 
@@ -3036,18 +3072,80 @@ def test_sft_collapse_warning_stays_quiet_for_structured_singleturn_targets(monk
3036
3072
  assert "bare assistant target coerced" not in output
3037
3073
 
3038
3074
 
3039
- def test_run_sft_train_orchestrates_exact_dataset_and_resume_accounting(monkeypatch):
3075
+ @pytest.mark.parametrize("legacy", [True, False])
3076
+ def test_sft_retries_preserve_the_prepared_optimizer_ratio(monkeypatch, legacy):
3077
+ from flash.core.spec import JobSpec
3078
+ from flash.engine.worker.train.entry import sft_train_runner
3079
+ from flash.runner.lifecycle.state import RunStatus
3080
+ from flash.runner.lifecycle.status import reallocation_spec_from_status
3081
+ from flash.runner.lifecycle.submit import _effective_preparation_snapshot
3082
+ from flash.schema import spec_from_dict
3083
+
3084
+ _stub_sft_run(monkeypatch)
3085
+ raw = {
3086
+ "model": "Qwen/Qwen3.5-9B",
3087
+ "algorithm": "sft",
3088
+ "project": "11111111-1111-4111-8111-111111111111",
3089
+ "environment": {"id": "owner/project/env"},
3090
+ "train": {"epochs": 1, "learning_rate": 1e-5},
3091
+ "gpu": {"type": "H100", "count": 1},
3092
+ }
3093
+ spec = JobSpec.from_dict(raw) if legacy else spec_from_dict(raw)
3094
+ spec = replace(spec, run_id="legacy-sft", model_revision="a" * 40, model_revision_auto=True)
3095
+ snapshot = _effective_preparation_snapshot(spec, spec, None)
3096
+ if legacy:
3097
+ # frozen before the recovery fix: old snapshots must still pass integrity validation.
3098
+ assert snapshot["preparation_digest"] == (
3099
+ "d190288e79077c89f6b79353947a393e2a0463c141757d844bd889511f91022b"
3100
+ )
3101
+ assert "loraplus_ratio" not in snapshot["worker_spec"]["train"]
3102
+ original_digest = snapshot["preparation_digest"]
3103
+ status = RunStatus(
3104
+ state="running",
3105
+ run_id=spec.run_id,
3106
+ spec=spec.to_dict(),
3107
+ effective_preparation=json.loads(json.dumps(snapshot)),
3108
+ )
3109
+ for _attempt in range(2):
3110
+ recovered = reallocation_spec_from_status(status)
3111
+ worker = JobSpec.from_json(recovered.to_json())
3112
+ options = sft_train_runner._resolve_sft_options(worker)
3113
+ assert options.loraplus_ratio == (16.0 if legacy else 1.0)
3114
+ status.effective_preparation = _effective_preparation_snapshot(
3115
+ JobSpec.from_dict(status.spec), worker, None, stored_public=status.spec
3116
+ )
3117
+ assert status.effective_preparation["preparation_digest"] == original_digest
3118
+
3119
+
3120
+ @pytest.mark.parametrize("ratio", [None, 1.0, 3.5, 16.0])
3121
+ def test_run_sft_train_orchestrates_exact_dataset_and_resume_accounting(monkeypatch, ratio):
3040
3122
  from flash._internal.diagnostics import SECRET_ENV_KEYS_ENV
3123
+ from flash.core.spec import JobSpec
3041
3124
  from flash.engine.worker.train.entry import sft_train
3125
+ from flash.schema import spec_from_dict
3042
3126
 
3043
3127
  monkeypatch.setenv("PYTHONPATH", "synthetic-sft-parent-path")
3044
3128
  monkeypatch.setenv(SECRET_ENV_KEYS_ENV, "PYTHONPATH")
3045
3129
  spec, captured = _stub_sft_run(monkeypatch)
3130
+ authored = spec_from_dict(
3131
+ {
3132
+ "model": spec.model,
3133
+ "algorithm": "sft",
3134
+ "project": "11111111-1111-4111-8111-111111111111",
3135
+ "environment": {"id": "owner/project/env"},
3136
+ "train": {} if ratio is None else {"loraplus_ratio": ratio},
3137
+ }
3138
+ )
3139
+ spec.train.loraplus_ratio = JobSpec.from_json(authored.to_json()).train.loraplus_ratio
3140
+ effective_ratio = 1.0 if ratio is None else ratio
3046
3141
 
3047
3142
  def fake_training(command, *, env, on_step, on_line, heartbeat):
3048
3143
  captured["command"] = command
3049
3144
  captured["child_env"] = env
3050
- on_line(f"{_LORAPLUS_READY_MARKER} ratio=16 optimizer=AdamW\n")
3145
+ config = json.loads(env["FLASH_SFT_PLUGIN_CONFIG"])
3146
+ assert config["loraplus_ratio"] == effective_ratio
3147
+ if effective_ratio > 1:
3148
+ on_line(f"{_LORAPLUS_READY_MARKER} ratio={effective_ratio:g} optimizer=AdamW\n")
3051
3149
  on_line("step:2 - train/loss:1.0 - train/global_tokens:8\n")
3052
3150
  on_step(2)
3053
3151
  heartbeat()
@@ -3080,7 +3178,8 @@ def test_run_sft_train_orchestrates_exact_dataset_and_resume_accounting(monkeypa
3080
3178
  assert captured["meta"]["step"] == 2
3081
3179
  assert captured["meta"]["train_tokens"] > 0
3082
3180
  assert captured["meta"]["notes"]["loss_curve"] == [1.0]
3083
- assert captured["meta"]["notes"]["loraplus_applied"] is True
3181
+ assert captured["meta"]["notes"]["loraplus_applied"] is (effective_ratio > 1)
3182
+ assert captured["meta"]["notes"]["loraplus_ratio"] == effective_ratio
3084
3183
  notes = captured["meta"]["notes"]
3085
3184
  realized_max_length = notes["realized_max_length"]
3086
3185
  assert 0 < realized_max_length < notes["configured_max_length"]
@@ -3287,7 +3386,8 @@ def test_the_sft_runner_seeds_the_watcher_with_the_step_it_resumed_from(monkeypa
3287
3386
  assert captured["published"][0][1] == 2
3288
3387
 
3289
3388
 
3290
- def test_a_resume_at_the_horizon_still_publishes_the_final_deployable(monkeypatch):
3389
+ @pytest.mark.parametrize("ratio", [1.0, 3.5, 16.0])
3390
+ def test_a_resume_at_the_horizon_still_publishes_the_final_deployable(monkeypatch, ratio):
3291
3391
  """the seeded resume step must not suppress the final publish.
3292
3392
 
3293
3393
  the previous attempt's per-step deployable publish is best-effort (``required=False``) while
@@ -3296,6 +3396,7 @@ def test_a_resume_at_the_horizon_still_publishes_the_final_deployable(monkeypatc
3296
3396
  from flash.engine.worker.train.entry import sft_train
3297
3397
 
3298
3398
  spec, captured = _stub_sft_run(monkeypatch)
3399
+ spec.train.loraplus_ratio = ratio
3299
3400
  # max_steps is 2, so resuming at 2 means the watcher never runs and finalization is the only
3300
3401
  # path left that can publish the step.
3301
3402
  monkeypatch.setattr(
@@ -3312,6 +3413,8 @@ def test_a_resume_at_the_horizon_still_publishes_the_final_deployable(monkeypatc
3312
3413
  sft_train.run_sft_train(spec)
3313
3414
 
3314
3415
  assert [step for _adapter, step in captured["published"]] == [2]
3416
+ assert captured["meta"]["notes"]["loraplus_ratio"] == ratio
3417
+ assert captured["meta"]["notes"]["loraplus_applied"] is (ratio > 1)
3315
3418
 
3316
3419
 
3317
3420
  def _sft_model_save_freq(monkeypatch, *, save_at_steps, save_every, horizon):
@@ -3332,6 +3435,7 @@ def _sft_model_save_freq(monkeypatch, *, save_at_steps, save_every, horizon):
3332
3435
  model_revision="revision",
3333
3436
  epochs=1,
3334
3437
  learning_rate=5e-5,
3438
+ loraplus_ratio=16.0,
3335
3439
  effective_batch=64,
3336
3440
  max_steps=0,
3337
3441
  save_at_steps=save_at_steps,
@@ -193,6 +193,7 @@ def test_train_key_registry_is_derived_from_trainspec_metadata() -> None:
193
193
  "credit_assignment",
194
194
  "entropy_quantile",
195
195
  "lora_alpha",
196
+ "loraplus_ratio",
196
197
  "prompts_per_step",
197
198
  }
198
199
  } == {"0.2.0"}
@@ -340,6 +341,7 @@ def test_historical_train_schema_shapes_are_immutable_source_snapshots() -> None
340
341
  "save_at_steps",
341
342
  "entropy_quantile",
342
343
  "prompts_per_step",
344
+ "loraplus_ratio",
343
345
  }
344
346
  assert "opd_eos_loss_coef" not in TRAIN_SCHEMA_KEYS
345
347
  assert "advantage_clip" not in TRAIN_SCHEMA_KEYS
@@ -1480,7 +1480,7 @@ wheels = [
1480
1480
 
1481
1481
  [[package]]
1482
1482
  name = "freesolo-flash"
1483
- version = "1.2.130"
1483
+ version = "1.2.131"
1484
1484
  source = { editable = "." }
1485
1485
 
1486
1486
  [package.optional-dependencies]