freesolo-flash-dev 1.1.2__tar.gz → 1.1.3__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 (417) hide show
  1. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/PKG-INFO +1 -1
  2. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd_train.py +8 -2
  3. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/pyproject.toml +2 -2
  4. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_opd_train.py +122 -0
  5. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/uv.lock +1 -1
  6. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.dockerignore +0 -0
  7. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.env.example +0 -0
  8. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  9. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  10. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  11. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  12. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/dependabot.yml +0 -0
  13. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/auto-rebake.yml +0 -0
  14. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/bake-kernel-cache.yml +0 -0
  15. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/ci.yml +0 -0
  16. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/main-source-guard.yml +0 -0
  17. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/notify-tests-repo.yml +0 -0
  18. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/publish-dev.yml +0 -0
  19. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/publish-image.yml +0 -0
  20. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/publish.yml +0 -0
  21. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/version-parity.yml +0 -0
  22. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/worker-image.yml +0 -0
  23. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.gitignore +0 -0
  24. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/CODE_OF_CONDUCT.md +0 -0
  25. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/CONTRIBUTING.md +0 -0
  26. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/Dockerfile +0 -0
  27. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/Dockerfile.worker +0 -0
  28. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/LICENSE +0 -0
  29. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/NOTICE +0 -0
  30. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/README.md +0 -0
  31. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/SECURITY.md +0 -0
  32. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/SELF_HOSTING.md +0 -0
  33. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/build/kernel_cache/.gitignore +0 -0
  34. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/build/kernel_cache/.keep +0 -0
  35. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/deploy/infisical/Dockerfile +0 -0
  36. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/deploy/infisical/README.md +0 -0
  37. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/deploy/infisical/entrypoint.sh +0 -0
  38. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/Dockerfile.kernelcache +0 -0
  39. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/Dockerfile.kernelcache.relayer +0 -0
  40. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/bake_kernel_cache.py +0 -0
  41. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/bake_pod_entry.py +0 -0
  42. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/kernel_fingerprint.py +0 -0
  43. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/make_rp_handler.py +0 -0
  44. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/__init__.py +0 -0
  45. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/_channel.py +0 -0
  46. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/_fileio.py +0 -0
  47. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/_logging.py +0 -0
  48. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/_paths.py +0 -0
  49. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/adapter_artifacts.py +0 -0
  50. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/catalog.py +0 -0
  51. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/TRAINING.md +0 -0
  52. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/__init__.py +0 -0
  53. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/__main__.py +0 -0
  54. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/_tty.py +0 -0
  55. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/commands.py +0 -0
  56. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/env_eval.py +0 -0
  57. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/env_setup.py +0 -0
  58. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/env_test.py +0 -0
  59. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/envpush.py +0 -0
  60. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/render.py +0 -0
  61. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/traces.py +0 -0
  62. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/training_doc.py +0 -0
  63. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/client/__init__.py +0 -0
  64. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/client/config.py +0 -0
  65. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/client/http.py +0 -0
  66. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/client/runtime_secrets.py +0 -0
  67. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/client/specs.py +0 -0
  68. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cost/__init__.py +0 -0
  69. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cost/analytical.py +0 -0
  70. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cost/facts.py +0 -0
  71. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cost/spec.py +0 -0
  72. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cost/types.py +0 -0
  73. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/diagnostics.py +0 -0
  74. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/__init__.py +0 -0
  75. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/accounting.py +0 -0
  76. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/multiturn_reward_scoring.py +0 -0
  77. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/recipe.py +0 -0
  78. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/reward_profile.py +0 -0
  79. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/rollout_profile.py +0 -0
  80. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/sft_workload.py +0 -0
  81. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/steps.py +0 -0
  82. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/structured_outputs.py +0 -0
  83. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/vram.py +0 -0
  84. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/__init__.py +0 -0
  85. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/__main__.py +0 -0
  86. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/_pkg.py +0 -0
  87. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/adapter.py +0 -0
  88. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/backend_common.py +0 -0
  89. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/decoding.py +0 -0
  90. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/finalize.py +0 -0
  91. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/grpo.py +0 -0
  92. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/grpo_multiturn.py +0 -0
  93. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/grpo_plugin.py +0 -0
  94. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/heartbeat.py +0 -0
  95. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/hf.py +0 -0
  96. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/kernel_warmup.py +0 -0
  97. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/lora.py +0 -0
  98. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/multiturn_glue.py +0 -0
  99. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd.py +0 -0
  100. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd_gkd.py +0 -0
  101. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd_multiturn.py +0 -0
  102. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd_plugin.py +0 -0
  103. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd_structured.py +0 -0
  104. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/packing.py +0 -0
  105. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/__init__.py +0 -0
  106. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/attn.py +0 -0
  107. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/diagnostics.py +0 -0
  108. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/lifecycle.py +0 -0
  109. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/liger.py +0 -0
  110. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/loraplus.py +0 -0
  111. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/memory.py +0 -0
  112. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/rl.py +0 -0
  113. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/rl_train.py +0 -0
  114. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/rng.py +0 -0
  115. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/rollout_samples.py +0 -0
  116. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/sft.py +0 -0
  117. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/sft_profile.py +0 -0
  118. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/sft_train.py +0 -0
  119. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/teacher.py +0 -0
  120. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/teacher_encoding.py +0 -0
  121. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/tokenizer_align.py +0 -0
  122. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/wandb_log.py +0 -0
  123. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker_entrypoint.py +0 -0
  124. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/__init__.py +0 -0
  125. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/adapter.py +0 -0
  126. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/archive.py +0 -0
  127. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/archive_policy.py +0 -0
  128. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/base.py +0 -0
  129. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/evaluations.py +0 -0
  130. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/loader.py +0 -0
  131. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/pull.py +0 -0
  132. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/registry.py +0 -0
  133. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/lora_rank.py +0 -0
  134. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/multimodal.py +0 -0
  135. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/opd_limits.py +0 -0
  136. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/opd_retry_contract.py +0 -0
  137. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/opd_validation.py +0 -0
  138. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/__init__.py +0 -0
  139. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_auth.py +0 -0
  140. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_deadline.py +0 -0
  141. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_hf_artifacts.py +0 -0
  142. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_hf_retry.py +0 -0
  143. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_http.py +0 -0
  144. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_instance.py +0 -0
  145. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_instance_bootstrap.py +0 -0
  146. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_instance_poll.py +0 -0
  147. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_instance_provider.py +0 -0
  148. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_poll.py +0 -0
  149. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_worker.py +0 -0
  150. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/allocator.py +0 -0
  151. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/base.py +0 -0
  152. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/__init__.py +0 -0
  153. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/api.py +0 -0
  154. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/auth.py +0 -0
  155. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/gpus.py +0 -0
  156. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/jobs/__init__.py +0 -0
  157. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/jobs/builders.py +0 -0
  158. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/preflight.py +0 -0
  159. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/pricing.py +0 -0
  160. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/preflight.py +0 -0
  161. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/realized.py +0 -0
  162. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/__init__.py +0 -0
  163. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/api.py +0 -0
  164. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/auth.py +0 -0
  165. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/cost.py +0 -0
  166. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/gpus.py +0 -0
  167. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/jobs.py +0 -0
  168. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/keys.py +0 -0
  169. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/preflight.py +0 -0
  170. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/pricing.py +0 -0
  171. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/slots.py +0 -0
  172. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/train/__init__.py +0 -0
  173. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/train/endpoints.py +0 -0
  174. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/__init__.py +0 -0
  175. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/api.py +0 -0
  176. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/auth.py +0 -0
  177. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/jobs/__init__.py +0 -0
  178. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/jobs/builders.py +0 -0
  179. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/preflight.py +0 -0
  180. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/pricing.py +0 -0
  181. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/weight_cache_preload.py +0 -0
  182. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/py.typed +0 -0
  183. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/runner/__init__.py +0 -0
  184. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/runner/checkpoints.py +0 -0
  185. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/runner/deploy.py +0 -0
  186. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/runner/lifecycle.py +0 -0
  187. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/runner/verified_revisions.py +0 -0
  188. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/schema/__init__.py +0 -0
  189. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/schema/fields.py +0 -0
  190. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/__init__.py +0 -0
  191. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/deploy.py +0 -0
  192. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/export.py +0 -0
  193. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/preflight.py +0 -0
  194. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/pricing.py +0 -0
  195. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/urls.py +0 -0
  196. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/__init__.py +0 -0
  197. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/__main__.py +0 -0
  198. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/_deps.py +0 -0
  199. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/_internal_client.py +0 -0
  200. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/_locks.py +0 -0
  201. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/_runtime.py +0 -0
  202. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/app.py +0 -0
  203. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/auth.py +0 -0
  204. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/billing.py +0 -0
  205. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/billing_retry.py +0 -0
  206. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/checkpoints.py +0 -0
  207. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/db.py +0 -0
  208. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/environment_registry.py +0 -0
  209. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/envs.py +0 -0
  210. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/projects.py +0 -0
  211. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/reconcile.py +0 -0
  212. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/repo_cleanup.py +0 -0
  213. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/__init__.py +0 -0
  214. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/envs.py +0 -0
  215. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/meta.py +0 -0
  216. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/runs.py +0 -0
  217. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/serving.py +0 -0
  218. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/teacher.py +0 -0
  219. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/run_registry.py +0 -0
  220. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/teacher_broker.py +0 -0
  221. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/spec.py +0 -0
  222. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/thinking.py +0 -0
  223. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/workload_profile.py +0 -0
  224. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/scripts/build_dev_dist.py +0 -0
  225. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/scripts/scrub_history.sh +0 -0
  226. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/__init__.py +0 -0
  227. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/_helpers/__init__.py +0 -0
  228. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/_helpers/profile.py +0 -0
  229. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/_helpers/runner.py +0 -0
  230. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/_helpers/specs.py +0 -0
  231. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/_helpers/vast.py +0 -0
  232. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/conftest.py +0 -0
  233. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/fixtures/math_eval.jsonl +0 -0
  234. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/fixtures/math_train.jsonl +0 -0
  235. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/live/__init__.py +0 -0
  236. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/live/conftest.py +0 -0
  237. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/live/test_lambda_live.py +0 -0
  238. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/live/test_runpod_live.py +0 -0
  239. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/live/test_vast_live.py +0 -0
  240. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_accounting_coverage.py +0 -0
  241. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_agent_flash_cli_contract.py +0 -0
  242. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_algorithms.py +0 -0
  243. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_allocator.py +0 -0
  244. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_async_uploads.py +0 -0
  245. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_backend_common.py +0 -0
  246. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_backend_jobspec_contract.py +0 -0
  247. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_base_model_provenance.py +0 -0
  248. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_billing_retry.py +0 -0
  249. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cancel_remote.py +0 -0
  250. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_catalog_consistency.py +0 -0
  251. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_charge_pricing.py +0 -0
  252. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_checkpoints.py +0 -0
  253. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_commands.py +0 -0
  254. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_commands_coverage.py +0 -0
  255. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_credential_shadowing.py +0 -0
  256. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_errors.py +0 -0
  257. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_estimate.py +0 -0
  258. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_gpus_flag.py +0 -0
  259. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_help.py +0 -0
  260. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_main_coverage.py +0 -0
  261. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_managed.py +0 -0
  262. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_render_coverage.py +0 -0
  263. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_render_theme.py +0 -0
  264. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_traces.py +0 -0
  265. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_wandb_warning.py +0 -0
  266. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_client.py +0 -0
  267. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_client_server_integration.py +0 -0
  268. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_client_stream_reads.py +0 -0
  269. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_config_env_vars.py +0 -0
  270. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_config_overrides.py +0 -0
  271. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_controlled_experiment_repairs.py +0 -0
  272. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_analytical.py +0 -0
  273. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_equation.py +0 -0
  274. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_estimate.py +0 -0
  275. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_hardware.py +0 -0
  276. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_models.py +0 -0
  277. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_rewards.py +0 -0
  278. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_deploy_latency.py +0 -0
  279. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_dev_channel.py +0 -0
  280. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_disk_gb.py +0 -0
  281. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_endpoint_name.py +0 -0
  282. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_cache_evict.py +0 -0
  283. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_delete.py +0 -0
  284. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_download.py +0 -0
  285. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_download_api.py +0 -0
  286. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_evaluations.py +0 -0
  287. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_no_install.py +0 -0
  288. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_publish.py +0 -0
  289. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_pull.py +0 -0
  290. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_pull_coverage.py +0 -0
  291. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_pull_loader_coverage.py +0 -0
  292. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_pull_managed_control_plane.py +0 -0
  293. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_push.py +0 -0
  294. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_rate_limit_resolve.py +0 -0
  295. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_ref_pinning.py +0 -0
  296. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_test.py +0 -0
  297. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_envs_coverage.py +0 -0
  298. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_export.py +0 -0
  299. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_flash_mvp.py +0 -0
  300. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_flash_worker.py +0 -0
  301. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_flashinfer_cache_dirs.py +0 -0
  302. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_github_urlopen_retry.py +0 -0
  303. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_gpu_type_single_field.py +0 -0
  304. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_gpus.py +0 -0
  305. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_grpo_params.py +0 -0
  306. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_grpo_resident_sizing.py +0 -0
  307. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_grpo_reward_batching.py +0 -0
  308. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_health_liveness.py +0 -0
  309. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_hf_retry.py +0 -0
  310. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_idle_endpoint_reaper.py +0 -0
  311. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_infisical_overlay.py +0 -0
  312. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_instance_bootstrap_coverage.py +0 -0
  313. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_internal_client.py +0 -0
  314. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_jobs.py +0 -0
  315. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_kernel_cache.py +0 -0
  316. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_kernel_fingerprint.py +0 -0
  317. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_kv_util.py +0 -0
  318. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_lambda_api_coverage.py +0 -0
  319. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_lambda_runner.py +0 -0
  320. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_logging.py +0 -0
  321. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_login_perms.py +0 -0
  322. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_lora_rank_coverage.py +0 -0
  323. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_lora_rank_preflight.py +0 -0
  324. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_managed_config_fields.py +0 -0
  325. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_managed_hf_repo.py +0 -0
  326. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_metrics_schema_agent_contract.py +0 -0
  327. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_mig_guard.py +0 -0
  328. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_multi_gpu_gate.py +0 -0
  329. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_multimodal_input_grads.py +0 -0
  330. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_multimodal_training.py +0 -0
  331. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_named_reward_metrics.py +0 -0
  332. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_oom_escalate_gpu.py +0 -0
  333. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_opd.py +0 -0
  334. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_opd_limits.py +0 -0
  335. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_opd_resume_safety.py +0 -0
  336. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_open_model_policy.py +0 -0
  337. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_orchestrator_flash.py +0 -0
  338. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_packing.py +0 -0
  339. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_packing_coverage.py +0 -0
  340. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_parasail_teacher.py +0 -0
  341. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_poll_helpers.py +0 -0
  342. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_preflight.py +0 -0
  343. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_projects.py +0 -0
  344. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_provider_preflight_coverage.py +0 -0
  345. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_provider_routing.py +0 -0
  346. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_provider_teardown_robustness.py +0 -0
  347. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_providers_symmetry.py +0 -0
  348. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_realized_cost.py +0 -0
  349. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_repo_cleanup.py +0 -0
  350. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_resolve_params_b.py +0 -0
  351. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_resume_on_retry.py +0 -0
  352. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_reward_profile.py +0 -0
  353. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_rl_train.py +0 -0
  354. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_rollout_profile_quote.py +0 -0
  355. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_rollout_profile_sampling.py +0 -0
  356. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_rollout_samples.py +0 -0
  357. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_rollout_workload_profile.py +0 -0
  358. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_runmgmt.py +0 -0
  359. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_runpod_api_delete.py +0 -0
  360. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_runpod_key_fingerprint.py +0 -0
  361. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_runpod_key_waterfall.py +0 -0
  362. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_runpod_slots.py +0 -0
  363. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serve.py +0 -0
  364. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serve_reasoning_content.py +0 -0
  365. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_api.py +0 -0
  366. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_app_coverage.py +0 -0
  367. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_auth_singleflight.py +0 -0
  368. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_billing.py +0 -0
  369. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_checkpoints_coverage.py +0 -0
  370. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_db.py +0 -0
  371. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_envs_coverage.py +0 -0
  372. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_locks_coverage.py +0 -0
  373. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_standalone.py +0 -0
  374. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serving_context_preflight.py +0 -0
  375. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serving_contract.py +0 -0
  376. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serving_pricing_coverage.py +0 -0
  377. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serving_schema_coverage.py +0 -0
  378. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_chunked_nll.py +0 -0
  379. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_example_selection.py +0 -0
  380. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_gc_off.py +0 -0
  381. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_max_context.py +0 -0
  382. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_profile_worker.py +0 -0
  383. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_train.py +0 -0
  384. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_workload.py +0 -0
  385. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_spec_and_validation.py +0 -0
  386. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_step_floor.py +0 -0
  387. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_step_metrics.py +0 -0
  388. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_structured_outputs.py +0 -0
  389. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_teacher_broker.py +0 -0
  390. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_thinking_config.py +0 -0
  391. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_train_context_preflight.py +0 -0
  392. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_training_controls.py +0 -0
  393. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vast_api.py +0 -0
  394. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vast_api_coverage.py +0 -0
  395. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vast_offers.py +0 -0
  396. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vast_provider_coverage.py +0 -0
  397. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vast_runner.py +0 -0
  398. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_verified_revisions.py +0 -0
  399. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_verifiers.py +0 -0
  400. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_version.py +0 -0
  401. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  402. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vram_architecture.py +0 -0
  403. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_wandb_link.py +0 -0
  404. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_wandb_log_coverage.py +0 -0
  405. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_wandb_naming.py +0 -0
  406. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_warmstart_adapter_download.py +0 -0
  407. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_warmstart_cross_repo.py +0 -0
  408. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_warmstart_error_attribution.py +0 -0
  409. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_weight_cache.py +0 -0
  410. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_dryrun.py +0 -0
  411. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_hardexit.py +0 -0
  412. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_image.py +0 -0
  413. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_init_heartbeat.py +0 -0
  414. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_stack.py +0 -0
  415. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_thinking.py +0 -0
  416. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_workload_profile.py +0 -0
  417. {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_workload_profile_lifecycle.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: freesolo-flash-dev
3
- Version: 1.1.2
3
+ Version: 1.1.3
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
@@ -1057,9 +1057,15 @@ class _TeacherAlignmentBridge:
1057
1057
  )
1058
1058
  context_messages = [dict(message) for message in session["messages"]]
1059
1059
  state = session["state"]
1060
- self.active_env.record_model_turn(state, completion_text)
1061
- session["messages"].append({"role": "assistant", "content": completion_text})
1062
1060
  terminal = bool(payload.get("truncated")) or bool(skip_reason)
1061
+ # an unusable turn is excluded from teacher scoring below (see the `scorable` filter),
1062
+ # so showing it to the environment buys nothing and can cost the whole run: an env that
1063
+ # parses or validates each action may raise on a truncated or empty action, turning a
1064
+ # routine no-signal rollout into a permanent paid failure. the grpo bridge already
1065
+ # returns before its own `record_model_turn` on exactly this predicate.
1066
+ if not terminal:
1067
+ self.active_env.record_model_turn(state, completion_text)
1068
+ session["messages"].append({"role": "assistant", "content": completion_text})
1063
1069
  messages: list[dict] = []
1064
1070
  next_prefix = [*accepted_prefix, *response_ids]
1065
1071
  if not terminal:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "freesolo-flash-dev"
3
- version = "1.1.2"
3
+ version = "1.1.3"
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).
@@ -121,7 +121,7 @@ artifacts = ["flash/py.typed"]
121
121
  # auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
122
122
  # PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
123
123
  # dev-channel release = bump this (and [project].version) and merge to `dev`.
124
- version = "1.1.2"
124
+ version = "1.1.3"
125
125
 
126
126
  [tool.pytest.ini_options]
127
127
  pythonpath = ["."]
@@ -2415,6 +2415,128 @@ def test_stop_trimming_slices_response_ids_and_forced_mask_identically():
2415
2415
  assert kept_forced == [True, False]
2416
2416
 
2417
2417
 
2418
+ class _RecordingEnv:
2419
+ """Environment that records every turn it is shown, and rejects an empty action.
2420
+
2421
+ the rejection is the point: a real environment that parses each action is entitled to raise on
2422
+ a truncated or empty one, and that is what turns a no-signal rollout into a paid run failure.
2423
+ """
2424
+
2425
+ def __init__(self):
2426
+ self.recorded: list[str] = []
2427
+
2428
+ def new_rollout_state(self, _example):
2429
+ return {"messages": [{"role": "user", "content": "q"}], "prompt": None}
2430
+
2431
+ def record_model_turn(self, state, content):
2432
+ if not content.strip():
2433
+ raise ValueError("environment rejects an empty action")
2434
+ self.recorded.append(content)
2435
+ return state
2436
+
2437
+ def env_reply(self, _messages, _state):
2438
+ return [{"role": "user", "content": "next"}]
2439
+
2440
+ def rollout_done(self, _state, _turn_limit):
2441
+ return False
2442
+
2443
+
2444
+ class _MultiTurnBridgeTokenizer(_BridgeTokenizer):
2445
+ """``_BridgeTokenizer`` plus the chat-template surface the env-glue tokenizer needs."""
2446
+
2447
+ def apply_chat_template(self, messages, **_kwargs):
2448
+ return "".join(str(message.get("content", "")) for message in messages)
2449
+
2450
+ def __call__(self, text, **_kwargs):
2451
+ return {"input_ids": [ord(char) % 64 for char in text]}
2452
+
2453
+
2454
+ def _multiturn_bridge(env, *, max_turns=4):
2455
+ return _TeacherAlignmentBridge(
2456
+ prompts=[
2457
+ _BridgePrompt(
2458
+ student_messages=[{"role": "user", "content": "q"}],
2459
+ teacher_messages=[{"role": "user", "content": "q"}],
2460
+ prompt_ids=(10, 11),
2461
+ image_descriptors=(),
2462
+ package_root=None,
2463
+ example=object(),
2464
+ )
2465
+ ],
2466
+ tokenizer=_MultiTurnBridgeTokenizer(),
2467
+ teacher=object(),
2468
+ thinking_prefill="",
2469
+ eos_token_ids=frozenset({99}),
2470
+ stop_sequences=(),
2471
+ mutation_callback=lambda: None,
2472
+ active_env=env,
2473
+ multi_turn=True,
2474
+ max_turns=max_turns,
2475
+ )
2476
+
2477
+
2478
+ def test_an_unusable_opd_turn_is_never_shown_to_the_environment():
2479
+ """A truncated or skipped turn must not reach ``record_model_turn``.
2480
+
2481
+ such a turn is already excluded from teacher scoring, so showing it to the environment buys no
2482
+ signal and can cost the whole paid run: an env that validates each action may raise on it. the
2483
+ grpo bridge returns before its own ``record_model_turn`` on exactly this predicate.
2484
+ """
2485
+ env = _RecordingEnv()
2486
+ bridge = _multiturn_bridge(env)
2487
+ bridge.start_multiturn(
2488
+ index=0, session_id="s1", prompt_ids=[10, 11], raw_prompt=[{"role": "user", "content": "q"}]
2489
+ )
2490
+
2491
+ response = bridge.step_multiturn(
2492
+ {
2493
+ "session_id": "s1",
2494
+ "turn_ordinal": 0,
2495
+ "accepted_prefix": [10, 11],
2496
+ "raw_response_ids": [],
2497
+ "response_ids": [],
2498
+ "completion_text": "",
2499
+ "termination": "truncated",
2500
+ "stop_reason": "length",
2501
+ "truncated": True,
2502
+ "skip_reason": "truncated_rollout",
2503
+ }
2504
+ )
2505
+
2506
+ assert env.recorded == [], "an unusable turn was pushed into environment state"
2507
+ assert response["terminal"] is True
2508
+ # the turn is still accounted for -- it is skipped, not erased
2509
+ assert bridge.truncated_rollouts == 1
2510
+ assert bridge.skip_counts == {"truncated_rollout": 1}
2511
+
2512
+
2513
+ def test_a_usable_opd_turn_still_reaches_the_environment():
2514
+ """The guard must key on the unusable predicate, not disable multi-turn recording."""
2515
+ env = _RecordingEnv()
2516
+ bridge = _multiturn_bridge(env)
2517
+ bridge.start_multiturn(
2518
+ index=0, session_id="s1", prompt_ids=[10, 11], raw_prompt=[{"role": "user", "content": "q"}]
2519
+ )
2520
+
2521
+ response = bridge.step_multiturn(
2522
+ {
2523
+ "session_id": "s1",
2524
+ "turn_ordinal": 0,
2525
+ "accepted_prefix": [10, 11],
2526
+ "raw_response_ids": [65],
2527
+ "response_ids": [65],
2528
+ "completion_text": "A",
2529
+ "termination": "stop",
2530
+ "stop_reason": "stop",
2531
+ "truncated": False,
2532
+ "skip_reason": "",
2533
+ }
2534
+ )
2535
+
2536
+ assert env.recorded == ["A"]
2537
+ assert response["terminal"] is False
2538
+
2539
+
2418
2540
  def test_multimodal_bridge_rejects_managed_teacher_scoring():
2419
2541
  bridge = _TeacherAlignmentBridge(
2420
2542
  prompts=[
@@ -1025,7 +1025,7 @@ wheels = [
1025
1025
 
1026
1026
  [[package]]
1027
1027
  name = "freesolo-flash"
1028
- version = "1.1.2"
1028
+ version = "1.1.3"
1029
1029
  source = { editable = "." }
1030
1030
 
1031
1031
  [package.optional-dependencies]