freesolo-flash-dev 1.0.75__tar.gz → 1.0.76__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 (394) hide show
  1. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/PKG-INFO +1 -1
  2. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/TRAINING.md +2 -2
  3. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/env_setup.py +1 -1
  4. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/recipe.py +2 -8
  5. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/heartbeat.py +8 -5
  6. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/pyproject.toml +2 -2
  7. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_multimodal_training.py +1 -1
  8. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_opd.py +32 -28
  9. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/uv.lock +1 -1
  10. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.dockerignore +0 -0
  11. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.env.example +0 -0
  12. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  13. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  14. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  15. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  16. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/dependabot.yml +0 -0
  17. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/workflows/auto-rebake.yml +0 -0
  18. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/workflows/bake-kernel-cache.yml +0 -0
  19. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/workflows/ci.yml +0 -0
  20. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/workflows/main-source-guard.yml +0 -0
  21. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/workflows/notify-tests-repo.yml +0 -0
  22. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/workflows/publish-dev.yml +0 -0
  23. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/workflows/publish-image.yml +0 -0
  24. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/workflows/publish.yml +0 -0
  25. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/workflows/version-parity.yml +0 -0
  26. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.github/workflows/worker-image.yml +0 -0
  27. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/.gitignore +0 -0
  28. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/CODE_OF_CONDUCT.md +0 -0
  29. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/CONTRIBUTING.md +0 -0
  30. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/Dockerfile +0 -0
  31. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/Dockerfile.worker +0 -0
  32. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/LICENSE +0 -0
  33. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/NOTICE +0 -0
  34. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/README.md +0 -0
  35. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/SECURITY.md +0 -0
  36. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/SELF_HOSTING.md +0 -0
  37. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/build/kernel_cache/.gitignore +0 -0
  38. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/build/kernel_cache/.keep +0 -0
  39. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/docker/Dockerfile.kernelcache +0 -0
  40. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/docker/Dockerfile.kernelcache.relayer +0 -0
  41. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/docker/bake_kernel_cache.py +0 -0
  42. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/docker/bake_pod_entry.py +0 -0
  43. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/docker/kernel_fingerprint.py +0 -0
  44. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/docker/make_rp_handler.py +0 -0
  45. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/__init__.py +0 -0
  46. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/_channel.py +0 -0
  47. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/_fileio.py +0 -0
  48. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/_logging.py +0 -0
  49. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/_update_check.py +0 -0
  50. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/adapter_artifacts.py +0 -0
  51. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/catalog.py +0 -0
  52. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/__init__.py +0 -0
  53. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/__main__.py +0 -0
  54. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/_tty.py +0 -0
  55. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/commands.py +0 -0
  56. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/env_eval.py +0 -0
  57. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/env_test.py +0 -0
  58. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/envpush.py +0 -0
  59. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/render.py +0 -0
  60. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/traces.py +0 -0
  61. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cli/training_doc.py +0 -0
  62. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/client/__init__.py +0 -0
  63. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/client/config.py +0 -0
  64. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/client/http.py +0 -0
  65. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/client/runtime_secrets.py +0 -0
  66. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/client/specs.py +0 -0
  67. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cost/__init__.py +0 -0
  68. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cost/analytical.py +0 -0
  69. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cost/facts.py +0 -0
  70. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cost/spec.py +0 -0
  71. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/cost/types.py +0 -0
  72. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/diagnostics.py +0 -0
  73. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/__init__.py +0 -0
  74. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/accounting.py +0 -0
  75. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/multiturn_reward_scoring.py +0 -0
  76. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/reward_profile.py +0 -0
  77. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/steps.py +0 -0
  78. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/structured_outputs.py +0 -0
  79. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/vram.py +0 -0
  80. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/__init__.py +0 -0
  81. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/__main__.py +0 -0
  82. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/_pkg.py +0 -0
  83. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/adapter.py +0 -0
  84. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/backend_common.py +0 -0
  85. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/decoding.py +0 -0
  86. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/finalize.py +0 -0
  87. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/grpo.py +0 -0
  88. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/grpo_multiturn.py +0 -0
  89. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/grpo_plugin.py +0 -0
  90. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/hf.py +0 -0
  91. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/kernel_warmup.py +0 -0
  92. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/lora.py +0 -0
  93. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/multiturn_glue.py +0 -0
  94. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/opd.py +0 -0
  95. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/opd_gkd.py +0 -0
  96. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/opd_multiturn.py +0 -0
  97. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/opd_plugin.py +0 -0
  98. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/opd_structured.py +0 -0
  99. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/opd_train.py +0 -0
  100. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/packing.py +0 -0
  101. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/perf/__init__.py +0 -0
  102. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/perf/attn.py +0 -0
  103. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/perf/diagnostics.py +0 -0
  104. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/perf/lifecycle.py +0 -0
  105. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/perf/liger.py +0 -0
  106. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/perf/loraplus.py +0 -0
  107. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/perf/memory.py +0 -0
  108. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/rl.py +0 -0
  109. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/rl_train.py +0 -0
  110. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/rng.py +0 -0
  111. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/rollout_samples.py +0 -0
  112. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/sft.py +0 -0
  113. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/sft_train.py +0 -0
  114. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/teacher.py +0 -0
  115. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/tokenizer_align.py +0 -0
  116. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker/wandb_log.py +0 -0
  117. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/engine/worker_entrypoint.py +0 -0
  118. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/envs/__init__.py +0 -0
  119. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/envs/adapter.py +0 -0
  120. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/envs/archive.py +0 -0
  121. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/envs/archive_policy.py +0 -0
  122. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/envs/base.py +0 -0
  123. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/envs/evaluations.py +0 -0
  124. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/envs/loader.py +0 -0
  125. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/envs/pull.py +0 -0
  126. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/envs/registry.py +0 -0
  127. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/lora_rank.py +0 -0
  128. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/multimodal.py +0 -0
  129. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/opd_retry_contract.py +0 -0
  130. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/opd_validation.py +0 -0
  131. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/__init__.py +0 -0
  132. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/_auth.py +0 -0
  133. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/_deadline.py +0 -0
  134. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/_hf_artifacts.py +0 -0
  135. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/_hf_retry.py +0 -0
  136. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/_http.py +0 -0
  137. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/_instance.py +0 -0
  138. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/_instance_bootstrap.py +0 -0
  139. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/_instance_poll.py +0 -0
  140. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/_instance_provider.py +0 -0
  141. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/_poll.py +0 -0
  142. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/_worker.py +0 -0
  143. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/allocator.py +0 -0
  144. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/base.py +0 -0
  145. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/lambdalabs/__init__.py +0 -0
  146. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/lambdalabs/api.py +0 -0
  147. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/lambdalabs/auth.py +0 -0
  148. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/lambdalabs/gpus.py +0 -0
  149. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/lambdalabs/jobs/__init__.py +0 -0
  150. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/lambdalabs/jobs/builders.py +0 -0
  151. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/lambdalabs/preflight.py +0 -0
  152. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/lambdalabs/pricing.py +0 -0
  153. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/preflight.py +0 -0
  154. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/realized.py +0 -0
  155. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/__init__.py +0 -0
  156. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/api.py +0 -0
  157. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/auth.py +0 -0
  158. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/cost.py +0 -0
  159. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/gpus.py +0 -0
  160. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/jobs.py +0 -0
  161. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/keys.py +0 -0
  162. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/preflight.py +0 -0
  163. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/pricing.py +0 -0
  164. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/slots.py +0 -0
  165. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/train/__init__.py +0 -0
  166. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/runpod/train/endpoints.py +0 -0
  167. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/vast/__init__.py +0 -0
  168. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/vast/api.py +0 -0
  169. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/vast/auth.py +0 -0
  170. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/vast/jobs/__init__.py +0 -0
  171. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/vast/jobs/builders.py +0 -0
  172. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/vast/preflight.py +0 -0
  173. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/vast/pricing.py +0 -0
  174. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/providers/weight_cache_preload.py +0 -0
  175. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/py.typed +0 -0
  176. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/runner/__init__.py +0 -0
  177. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/runner/checkpoints.py +0 -0
  178. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/runner/deploy.py +0 -0
  179. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/runner/lifecycle.py +0 -0
  180. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/runner/verified_revisions.py +0 -0
  181. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/schema/__init__.py +0 -0
  182. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/schema/fields.py +0 -0
  183. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/serve/__init__.py +0 -0
  184. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/serve/deploy.py +0 -0
  185. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/serve/export.py +0 -0
  186. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/serve/preflight.py +0 -0
  187. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/serve/pricing.py +0 -0
  188. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/serve/urls.py +0 -0
  189. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/__init__.py +0 -0
  190. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/__main__.py +0 -0
  191. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/_deps.py +0 -0
  192. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/_internal_client.py +0 -0
  193. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/_locks.py +0 -0
  194. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/_runtime.py +0 -0
  195. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/app.py +0 -0
  196. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/auth.py +0 -0
  197. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/billing.py +0 -0
  198. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/billing_retry.py +0 -0
  199. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/checkpoints.py +0 -0
  200. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/db.py +0 -0
  201. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/environment_registry.py +0 -0
  202. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/envs.py +0 -0
  203. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/projects.py +0 -0
  204. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/reconcile.py +0 -0
  205. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/repo_cleanup.py +0 -0
  206. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/routes/__init__.py +0 -0
  207. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/routes/envs.py +0 -0
  208. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/routes/meta.py +0 -0
  209. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/routes/runs.py +0 -0
  210. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/routes/serving.py +0 -0
  211. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/server/run_registry.py +0 -0
  212. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/spec.py +0 -0
  213. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/flash/thinking.py +0 -0
  214. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/infisical-entrypoint.sh +0 -0
  215. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/scripts/build_dev_dist.py +0 -0
  216. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/scripts/scrub_history.sh +0 -0
  217. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/__init__.py +0 -0
  218. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/_helpers/__init__.py +0 -0
  219. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/_helpers/runner.py +0 -0
  220. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/_helpers/specs.py +0 -0
  221. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/_helpers/vast.py +0 -0
  222. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/conftest.py +0 -0
  223. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/fixtures/math_eval.jsonl +0 -0
  224. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/fixtures/math_train.jsonl +0 -0
  225. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/live/__init__.py +0 -0
  226. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/live/conftest.py +0 -0
  227. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/live/test_lambda_live.py +0 -0
  228. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/live/test_runpod_live.py +0 -0
  229. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/live/test_vast_live.py +0 -0
  230. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_accounting_coverage.py +0 -0
  231. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_agent_flash_cli_contract.py +0 -0
  232. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_algorithms.py +0 -0
  233. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_allocator.py +0 -0
  234. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_async_uploads.py +0 -0
  235. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_backend_common.py +0 -0
  236. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_backend_jobspec_contract.py +0 -0
  237. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_base_model_provenance.py +0 -0
  238. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_billing_retry.py +0 -0
  239. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cancel_remote.py +0 -0
  240. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_catalog_consistency.py +0 -0
  241. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_charge_pricing.py +0 -0
  242. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_checkpoints.py +0 -0
  243. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_commands.py +0 -0
  244. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_commands_coverage.py +0 -0
  245. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_credential_shadowing.py +0 -0
  246. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_errors.py +0 -0
  247. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_estimate.py +0 -0
  248. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_gpus_flag.py +0 -0
  249. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_help.py +0 -0
  250. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_main_coverage.py +0 -0
  251. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_managed.py +0 -0
  252. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_render_coverage.py +0 -0
  253. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_render_theme.py +0 -0
  254. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_traces.py +0 -0
  255. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cli_wandb_warning.py +0 -0
  256. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_client.py +0 -0
  257. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_client_server_integration.py +0 -0
  258. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_client_stream_reads.py +0 -0
  259. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_config_overrides.py +0 -0
  260. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_controlled_experiment_repairs.py +0 -0
  261. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cost_analytical.py +0 -0
  262. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cost_equation.py +0 -0
  263. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cost_estimate.py +0 -0
  264. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cost_hardware.py +0 -0
  265. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cost_models.py +0 -0
  266. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_cost_rewards.py +0 -0
  267. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_deploy_latency.py +0 -0
  268. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_dev_channel.py +0 -0
  269. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_disk_gb.py +0 -0
  270. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_endpoint_name.py +0 -0
  271. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_cache_evict.py +0 -0
  272. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_delete.py +0 -0
  273. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_download.py +0 -0
  274. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_download_api.py +0 -0
  275. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_evaluations.py +0 -0
  276. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_no_install.py +0 -0
  277. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_publish.py +0 -0
  278. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_pull.py +0 -0
  279. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_pull_coverage.py +0 -0
  280. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_pull_loader_coverage.py +0 -0
  281. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_pull_managed_control_plane.py +0 -0
  282. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_push.py +0 -0
  283. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_rate_limit_resolve.py +0 -0
  284. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_ref_pinning.py +0 -0
  285. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_env_test.py +0 -0
  286. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_envs_coverage.py +0 -0
  287. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_export.py +0 -0
  288. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_flash_mvp.py +0 -0
  289. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_flash_worker.py +0 -0
  290. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_flashinfer_cache_dirs.py +0 -0
  291. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_github_urlopen_retry.py +0 -0
  292. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_gpu_type_single_field.py +0 -0
  293. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_gpus.py +0 -0
  294. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_grpo_mask_aware.py +0 -0
  295. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_grpo_params.py +0 -0
  296. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_grpo_resident_sizing.py +0 -0
  297. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_health_liveness.py +0 -0
  298. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_hf_retry.py +0 -0
  299. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_idle_endpoint_reaper.py +0 -0
  300. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_instance_bootstrap_coverage.py +0 -0
  301. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_internal_client.py +0 -0
  302. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_jobs.py +0 -0
  303. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_kernel_cache.py +0 -0
  304. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_kernel_fingerprint.py +0 -0
  305. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_kv_util.py +0 -0
  306. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_lambda_api_coverage.py +0 -0
  307. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_lambda_runner.py +0 -0
  308. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_logging.py +0 -0
  309. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_login_perms.py +0 -0
  310. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_lora_rank_coverage.py +0 -0
  311. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_lora_rank_preflight.py +0 -0
  312. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_managed_config_fields.py +0 -0
  313. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_managed_hf_repo.py +0 -0
  314. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_metrics_schema_agent_contract.py +0 -0
  315. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_mig_guard.py +0 -0
  316. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_multi_gpu_gate.py +0 -0
  317. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_multimodal_input_grads.py +0 -0
  318. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_named_reward_metrics.py +0 -0
  319. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_oom_escalate_gpu.py +0 -0
  320. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_opd_resume_safety.py +0 -0
  321. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_opd_train.py +0 -0
  322. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_open_model_policy.py +0 -0
  323. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_orchestrator_flash.py +0 -0
  324. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_packing.py +0 -0
  325. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_packing_coverage.py +0 -0
  326. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_poll_helpers.py +0 -0
  327. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_preflight.py +0 -0
  328. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_projects.py +0 -0
  329. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_provider_preflight_coverage.py +0 -0
  330. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_provider_routing.py +0 -0
  331. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_provider_teardown_robustness.py +0 -0
  332. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_providers_symmetry.py +0 -0
  333. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_realized_cost.py +0 -0
  334. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_repo_cleanup.py +0 -0
  335. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_resolve_params_b.py +0 -0
  336. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_resume_on_retry.py +0 -0
  337. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_reward_profile.py +0 -0
  338. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_rl_train.py +0 -0
  339. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_rollout_samples.py +0 -0
  340. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_runmgmt.py +0 -0
  341. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_runpod_api_delete.py +0 -0
  342. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_runpod_key_fingerprint.py +0 -0
  343. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_runpod_key_waterfall.py +0 -0
  344. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_runpod_slots.py +0 -0
  345. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_serve.py +0 -0
  346. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_serve_reasoning_content.py +0 -0
  347. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_server_api.py +0 -0
  348. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_server_app_coverage.py +0 -0
  349. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_server_auth_singleflight.py +0 -0
  350. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_server_billing.py +0 -0
  351. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_server_checkpoints_coverage.py +0 -0
  352. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_server_db.py +0 -0
  353. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_server_envs_coverage.py +0 -0
  354. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_server_locks_coverage.py +0 -0
  355. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_server_standalone.py +0 -0
  356. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_serving_context_preflight.py +0 -0
  357. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_serving_contract.py +0 -0
  358. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_serving_pricing_coverage.py +0 -0
  359. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_serving_schema_coverage.py +0 -0
  360. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_sft_chunked_nll.py +0 -0
  361. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_sft_example_selection.py +0 -0
  362. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_sft_gc_off.py +0 -0
  363. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_sft_max_context.py +0 -0
  364. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_sft_train.py +0 -0
  365. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_spec_and_validation.py +0 -0
  366. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_step_metrics.py +0 -0
  367. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_structured_outputs.py +0 -0
  368. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_thinking_config.py +0 -0
  369. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_train_context_preflight.py +0 -0
  370. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_training_controls.py +0 -0
  371. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_update_check.py +0 -0
  372. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_vast_api.py +0 -0
  373. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_vast_api_coverage.py +0 -0
  374. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_vast_offers.py +0 -0
  375. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_vast_provider_coverage.py +0 -0
  376. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_vast_runner.py +0 -0
  377. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_verified_revisions.py +0 -0
  378. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_verifiers.py +0 -0
  379. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_version.py +0 -0
  380. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  381. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_vram_architecture.py +0 -0
  382. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_wandb_link.py +0 -0
  383. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_wandb_log_coverage.py +0 -0
  384. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_wandb_naming.py +0 -0
  385. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_warmstart_adapter_download.py +0 -0
  386. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_warmstart_cross_repo.py +0 -0
  387. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_warmstart_error_attribution.py +0 -0
  388. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_weight_cache.py +0 -0
  389. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_worker_dryrun.py +0 -0
  390. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_worker_hardexit.py +0 -0
  391. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_worker_image.py +0 -0
  392. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_worker_init_heartbeat.py +0 -0
  393. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_worker_stack.py +0 -0
  394. {freesolo_flash_dev-1.0.75 → freesolo_flash_dev-1.0.76}/tests/test_worker_thinking.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: freesolo-flash-dev
3
- Version: 1.0.75
3
+ Version: 1.0.76
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
@@ -848,7 +848,7 @@ with no reward to design. It supports `epochs` like SFT/GRPO and produces a LoRA
848
848
 
849
849
  - **Pick the teacher with `[train] teacher_model`; the key stays managed.** The teacher defaults to
850
850
  the managed **GLM 5.2** and is selectable from a fixed, managed allow-list:
851
- `glm-5.2` (default), `deepseek-v4-pro`, `kimi-k2.6`. Every option is
851
+ `glm-5.2` (default) or `kimi-k2.6`. Every option is
852
852
  a Fireworks-hosted model reached with the platform's own key, so there is nothing to export or
853
853
  declare — an opd run submits like any other, and a `FIREWORKS_API_KEY` in your shell is ignored.
854
854
  Arbitrary bring-your-own teacher models or keys are not supported (the allow-list is curated to
@@ -883,7 +883,7 @@ epochs = 1
883
883
  max_examples = 2
884
884
  lora_rank = 32
885
885
  # teacher_model = "glm-5.2" # managed teacher to distil from; one of
886
- # # glm-5.2 (default) | deepseek-v4-pro | kimi-k2.6
886
+ # # glm-5.2 (default) | kimi-k2.6
887
887
  # # (key stays managed)
888
888
  # kl_penalty_coef = 1.0 # reverse-KL scale
889
889
  ```
@@ -667,7 +667,7 @@ def cmd_env_setup(args) -> int:
667
667
  f"{max_examples_line}"
668
668
  "lora_rank = 32\n"
669
669
  '# teacher_model = "glm-5.2" # teacher to distil from: glm-5.2 (default) |\n'
670
- "# # deepseek-v4-pro | kimi-k2.6 (key stays managed)\n"
670
+ "# # kimi-k2.6 (key stays managed)\n"
671
671
  "# GPU and HF artifacts are managed automatically by the platform: the GPU is\n"
672
672
  "# the cheapest fitting managed class, and artifacts live in a private environment-scoped repo.\n"
673
673
  )
@@ -26,8 +26,8 @@ class TeacherModel:
26
26
  display_name: str
27
27
  # Fireworks serverless list price, $/1M tokens as (input, output). OPD echo-scores completions
28
28
  # (max_tokens=0) so only the INPUT column is billed / feeds the estimate, but both are kept so a
29
- # mispriced row is obvious. NOTE: the non-GLM entries are best-effort estimates for these next-gen
30
- # serverless models — confirm against the live fireworks.ai pricing before relying on the
29
+ # mispriced row is obvious. note: the non-glm entry is a best-effort estimate for this next-gen
30
+ # serverless model — confirm against the live fireworks.ai pricing before relying on the
31
31
  # `flash train` cost quote.
32
32
  usd_per_1m: tuple[float, float]
33
33
  supports_images: bool = False
@@ -49,12 +49,6 @@ TEACHER_MODELS: dict[str, TeacherModel] = {
49
49
  display_name="GLM 5.2",
50
50
  usd_per_1m=(1.40, 4.40),
51
51
  ),
52
- "deepseek-v4-pro": TeacherModel(
53
- alias="deepseek-v4-pro",
54
- model_id="accounts/fireworks/models/deepseek-v4-pro",
55
- display_name="DeepSeek V4 Pro",
56
- usd_per_1m=(1.74, 3.48),
57
- ),
58
52
  "kimi-k2.6": TeacherModel(
59
53
  alias="kimi-k2.6",
60
54
  model_id="accounts/fireworks/models/kimi-k2p6",
@@ -37,11 +37,14 @@ _HB_SETUP_LIVENESS_STAGES = frozenset(
37
37
  "sft_configuring",
38
38
  "opd_configuring",
39
39
  "opd_filtering_prompts",
40
+ "opd_prompt_scan",
41
+ "opd_image_prep",
40
42
  "sft_initializing",
41
43
  "rl_initializing",
42
44
  "opd_initializing",
43
45
  "sft_finalizing",
44
46
  "rl_finalizing",
47
+ "opd_finalizing",
45
48
  }
46
49
  )
47
50
  # Mid-training the per-step checkpoint upload runs SYNCHRONOUSLY on the trainer thread (dev #445),
@@ -57,11 +60,11 @@ _HB_TIGHT_LIVENESS_STAGES = _HB_SETUP_LIVENESS_STAGES | _HB_UPLOAD_LIVENESS_STAG
57
60
  # latest per-step GRPO backlog, exposed so a top-level error heartbeat can preserve it
58
61
  # for `flash runs log -f` when a short run raises before the throttled rl_step ping committed
59
62
  LATEST_GRPO_METRICS_LAST: list = []
60
- # Throttled to avoid blowing the 128/hr HF commit cap; terminal transitions are never throttled. Every
61
- # tight-liveness stage is throttled (⊂) PLUS the per-step training stages: opd_filtering_prompts alone
62
- # emits a REAL (non-liveness) heartbeat every scan tick — ~120/hr on a large split before model load —
63
- # so unthrottled the setup stages blow the cap; throttle them exactly like their sft_pretokenizing
64
- # analogue (codex[bot]). checkpoint_uploading keepalive re-emits every 30s too, so it MUST be throttled.
63
+ # throttle these stages to protect the hf repository commit budget; terminal transitions are never throttled.
64
+ # opd_filtering_prompts emits a real heartbeat on each scan tick, while opd_prompt_scan and
65
+ # opd_image_prep emit one when progress advances. opd_finalizing emits one on every keepalive tick.
66
+ # without throttling, these opd stages can make roughly 120 commit attempts per hour. tight-liveness,
67
+ # per-step training, and checkpoint_uploading keepalive stages share the same throttle.
65
68
  _HB_THROTTLED_STAGES = _HB_TIGHT_LIVENESS_STAGES | frozenset({"rl_step", "sft_step", "opd_step"})
66
69
  _HB_TERMINAL_STAGES = frozenset({"done", "already_done"})
67
70
  # 600s -> ~6 commits/hr; keeps stall detector alive without hitting the HF commit cap.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "freesolo-flash-dev"
3
- version = "1.0.75"
3
+ version = "1.0.76"
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).
@@ -123,7 +123,7 @@ artifacts = ["flash/py.typed"]
123
123
  # auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
124
124
  # PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
125
125
  # dev-channel release = bump this (and [project].version) and merge to `dev`.
126
- version = "1.0.75"
126
+ version = "1.0.76"
127
127
 
128
128
  [tool.pytest.ini_options]
129
129
  pythonpath = ["."]
@@ -618,7 +618,7 @@ def test_image_opd_preflight_validates_packaged_dataset_before_allocation(tmp_pa
618
618
  mm.preflight_validate_image_opd(unsupported)
619
619
 
620
620
 
621
- @pytest.mark.parametrize("teacher_model", ["", "glm-5.2", "deepseek-v4-pro"])
621
+ @pytest.mark.parametrize("teacher_model", ["", "glm-5.2", "accounts/fireworks/models/glm-5p2"])
622
622
  def test_image_opd_preflight_requires_kimi_vision_teacher(tmp_path, teacher_model):
623
623
  root, _image = _package(tmp_path)
624
624
  env_file = root / "environment.py"
@@ -467,11 +467,8 @@ def test_opd_selects_managed_teacher_and_rejects_unknown():
467
467
  run_id="x",
468
468
  )
469
469
 
470
- # Supported aliases parse and are stored as the canonical Fireworks model id.
470
+ # supported aliases parse and are stored as the canonical fireworks model id.
471
471
  assert _spec("kimi-k2.6").train.teacher_model == "accounts/fireworks/models/kimi-k2p6"
472
- assert (
473
- _spec("deepseek-v4-pro").train.teacher_model == "accounts/fireworks/models/deepseek-v4-pro"
474
- )
475
472
  # A spaced / mixed-case form normalizes to the same model id.
476
473
  assert _spec("GLM 5.2").train.teacher_model == "accounts/fireworks/models/glm-5p2"
477
474
  # The raw Fireworks model id is also accepted (identity), including with stray surrounding
@@ -487,11 +484,15 @@ def test_opd_selects_managed_teacher_and_rejects_unknown():
487
484
  # Omitting/blank leaves it unset ("" => the worker uses the default GLM 5.2 teacher).
488
485
  assert _spec("").train.teacher_model == ""
489
486
 
490
- # An unsupported teacher is rejected at parse time with a teacher-specific ConfigError.
487
+ # an unsupported teacher is rejected at parse time with a teacher-specific configerror.
491
488
  with pytest.raises(ConfigError, match="teacher_model"):
492
489
  _spec("gpt-5.5")
490
+ with pytest.raises(ConfigError, match="teacher_model"):
491
+ _spec("deepseek-v4-pro")
492
+ with pytest.raises(ConfigError, match="teacher_model"):
493
+ _spec("accounts/fireworks/models/deepseek-v4-pro")
493
494
  # qwen-3.7-max (on-demand only) and minimax-m3 (serverless chat, but its /completions echo
494
- # endpoint OPD needs does not respond) are NOT allow-listed teachers, so both are rejected.
495
+ # endpoint opd needs does not respond) are not allow-listed teachers, so both are rejected.
495
496
  with pytest.raises(ConfigError, match="teacher_model"):
496
497
  _spec("qwen-3.7-max")
497
498
  with pytest.raises(ConfigError, match="teacher_model"):
@@ -652,17 +653,17 @@ def test_opd_filtering_stage_is_setup_not_training():
652
653
  ) # progress count doesn't flip it
653
654
 
654
655
 
655
- def test_opd_filtering_prompts_is_throttled_like_sft_pretokenizing():
656
- """Regression (codex[bot], heartbeat.py): opd_filtering_prompts emits a REAL progress heartbeat
657
- per liveness tick while it renders+tokenizes the whole split. Unthrottled that is one HF commit
658
- per tick -- ~120/hr on a large split before model load, blowing the 128/hr commit cap. It must be
659
- registered in BOTH heartbeat sets its SFT analogue sft_pretokenizing lives in: the throttle set
660
- (bounds commit rate) and the setup-liveness set (keeps the tighter cold-start upload cadence)."""
656
+ def test_opd_liveness_stages_are_throttled_at_setup_cadence():
657
+ """opd liveness threads must use the throttled setup-liveness cadence."""
661
658
  from flash.engine.worker.heartbeat import _HB_SETUP_LIVENESS_STAGES, _HB_THROTTLED_STAGES
662
659
 
660
+ opd_liveness_stages = {"opd_prompt_scan", "opd_image_prep", "opd_finalizing"}
661
+ assert opd_liveness_stages <= _HB_SETUP_LIVENESS_STAGES
662
+ assert opd_liveness_stages <= _HB_THROTTLED_STAGES
663
+
663
664
  assert "opd_filtering_prompts" in _HB_THROTTLED_STAGES
664
665
  assert "opd_filtering_prompts" in _HB_SETUP_LIVENESS_STAGES
665
- # parity with the SFT pre-tokenize stage this mirrors (same dual membership).
666
+ # parity with the sft pre-tokenize stage this mirrors (same dual membership).
666
667
  assert "sft_pretokenizing" in _HB_THROTTLED_STAGES
667
668
  assert "sft_pretokenizing" in _HB_SETUP_LIVENESS_STAGES
668
669
 
@@ -1268,8 +1269,8 @@ def test_opd_teacher_rate_matches_fireworks_glm5p2_input_price():
1268
1269
 
1269
1270
  def test_opd_teacher_price_table_covers_every_allowlisted_teacher():
1270
1271
  """Every allow-listed teacher is priced by its exact row (pricing routes through resolve_teacher
1271
- over recipe.TEACHER_MODELS, so there is no unpriced teacher), the new teachers carry their own
1272
- input prices (not silently GLM-priced), and an unknown teacher falls back to the default rate."""
1272
+ over recipe.TEACHER_MODELS, so there is no unpriced teacher), Kimi carries its own input price
1273
+ (not silently GLM-priced), and an unknown teacher falls back to the default rate."""
1273
1274
  from flash.cost.facts import teacher_price_per_1m
1274
1275
  from flash.engine.recipe import TEACHER_MODELS
1275
1276
 
@@ -1277,11 +1278,10 @@ def test_opd_teacher_price_table_covers_every_allowlisted_teacher():
1277
1278
  for info in TEACHER_MODELS.values():
1278
1279
  assert teacher_price_per_1m(info.model_id) == info.usd_per_1m
1279
1280
 
1280
- # The two added teachers carry their own input prices (distinct from GLM's $1.40/M).
1281
- assert teacher_price_per_1m("accounts/fireworks/models/deepseek-v4-pro")[0] == 1.74
1281
+ # kimi carries its own input price (distinct from glm's $1.40/m).
1282
1282
  assert teacher_price_per_1m("accounts/fireworks/models/kimi-k2p6")[0] == 0.95
1283
- # Removed teachers (qwen-3.7-max on-demand only; minimax-m3 no echo support) are unknown ids
1284
- # now -> priced defensively at the default (GLM) rate.
1283
+ # removed teachers are unknown ids and price defensively at the default glm rate.
1284
+ assert teacher_price_per_1m("accounts/fireworks/models/deepseek-v4-pro")[0] == 1.40
1285
1285
  assert teacher_price_per_1m("accounts/fireworks/models/qwen3p7-max")[0] == 1.40
1286
1286
  assert teacher_price_per_1m("accounts/fireworks/models/minimax-m3")[0] == 1.40
1287
1287
 
@@ -2212,17 +2212,21 @@ def test_resolve_opd_knobs_resolves_teacher_from_train(monkeypatch):
2212
2212
  )
2213
2213
  return opd_mod._resolve_opd_knobs()
2214
2214
 
2215
- # A friendly alias resolves to the provider model id.
2215
+ # a friendly alias resolves to the provider model id.
2216
2216
  assert _knobs("kimi-k2.6").teacher_model == "accounts/fireworks/models/kimi-k2p6"
2217
- assert _knobs("deepseek-v4-pro").teacher_model == "accounts/fireworks/models/deepseek-v4-pro"
2218
- # Unset / blank / None -> the default GLM 5.2 teacher (historical behavior preserved).
2217
+ # unset / blank / none -> the default glm 5.2 teacher (historical behavior preserved).
2219
2218
  assert _knobs("").teacher_model == "accounts/fireworks/models/glm-5p2"
2220
2219
  assert _knobs(None).teacher_model == "accounts/fireworks/models/glm-5p2"
2221
- # base_url is shared across every allow-listed teacher (one Fireworks endpoint + one managed key).
2222
- assert _knobs("deepseek-v4-pro").teacher_base_url == opd_mod.RECIPE.opd.teacher_base_url
2223
- # An unsupported teacher fails loudly on the worker (defensive guard, mirrors the kl_coef check).
2224
- with pytest.raises(RuntimeError, match="teacher_model"):
2225
- _knobs("gpt-5.5")
2220
+ # base_url is shared across every allow-listed teacher (one fireworks endpoint + one managed key).
2221
+ assert _knobs("kimi-k2.6").teacher_base_url == opd_mod.RECIPE.opd.teacher_base_url
2222
+ # unsupported teachers fail loudly on the worker (defensive guard, mirrors the kl_coef check).
2223
+ for teacher in (
2224
+ "gpt-5.5",
2225
+ "deepseek-v4-pro",
2226
+ "accounts/fireworks/models/deepseek-v4-pro",
2227
+ ):
2228
+ with pytest.raises(RuntimeError, match="teacher_model"):
2229
+ _knobs(teacher)
2226
2230
 
2227
2231
 
2228
2232
  def test_groupwise_alignment_emits_no_empty_student_group():
@@ -2371,8 +2375,8 @@ class _TinyLM:
2371
2375
  "teacher_model",
2372
2376
  [
2373
2377
  "",
2378
+ "glm-5.2",
2374
2379
  "accounts/fireworks/models/glm-5p2",
2375
- "accounts/fireworks/models/deepseek-v4-pro",
2376
2380
  ],
2377
2381
  )
2378
2382
  def test_opd_worker_rejects_nonvision_teacher_before_gpu_or_teacher_use(monkeypatch, teacher_model):
@@ -1025,7 +1025,7 @@ wheels = [
1025
1025
 
1026
1026
  [[package]]
1027
1027
  name = "freesolo-flash"
1028
- version = "1.0.75"
1028
+ version = "1.0.76"
1029
1029
  source = { editable = "." }
1030
1030
 
1031
1031
  [package.optional-dependencies]