freesolo-flash-dev 1.2.127__tar.gz → 1.2.128__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 (907) hide show
  1. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/CHANGELOG.md +10 -0
  2. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/PKG-INFO +1 -1
  3. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/imports.py +16 -3
  4. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/push.py +62 -12
  5. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/scaffold/TRAINING.md +4 -2
  6. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/ui/heartbeat.py +1 -1
  7. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/core/spec.py +0 -12
  8. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cost/spec.py +1 -1
  9. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/entry/worker.py +11 -2
  10. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +44 -8
  11. freesolo_flash_dev-1.2.128/flash/providers/_lifecycle/bootstrapping/processes.py +110 -0
  12. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/instance.py +19 -24
  13. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/provider.py +7 -18
  14. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/net/worker.py +4 -4
  15. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/artifacts/weight_cache.py +0 -1
  16. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/core/base.py +7 -7
  17. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/execution/provider.py +3 -7
  18. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/jobs/__init__.py +9 -19
  19. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/jobs/builders.py +0 -2
  20. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/jobs/reap.py +2 -2
  21. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/job_execution.py +14 -11
  22. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/provider.py +6 -11
  23. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/resources.py +16 -3
  24. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/serverless/endpoints.py +8 -50
  25. freesolo_flash_dev-1.2.128/flash/providers/runpod/serverless/naming.py +93 -0
  26. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/vast/execution/provider.py +4 -8
  27. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/vast/jobs/__init__.py +7 -13
  28. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/vast/jobs/builders.py +0 -2
  29. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/status.py +11 -3
  30. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/attach.py +4 -8
  31. freesolo_flash_dev-1.2.127/flash/runner/supervise/seed_submission.py → freesolo_flash_dev-1.2.128/flash/runner/supervise/attempt_supervision.py +12 -18
  32. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/lifecycle.py +29 -13
  33. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/recovery.py +1 -1
  34. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runtime_capsule/profiles.py +2 -1
  35. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/app/http.py +9 -1
  36. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/app/progress.py +7 -1
  37. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/deploy.py +4 -0
  38. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/asgi/app.py +25 -24
  39. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/envs.py +153 -67
  40. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/platform/runtime.py +6 -5
  41. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/routes/serving.py +23 -21
  42. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/app/modal_app.py +38 -14
  43. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/accounting/usage_facts.py +28 -0
  44. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/accounting/usage_outbox.py +19 -0
  45. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/generation.py +56 -0
  46. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/lora_engine.py +66 -10
  47. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/responses.py +4 -0
  48. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/pyproject.toml +2 -2
  49. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/runner.py +1 -1
  50. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_per_model_gpu.py +16 -16
  51. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_router.py +8 -0
  52. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_serve_structured_outputs.py +82 -0
  53. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_usage_outbox.py +49 -0
  54. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_usage_reporter.py +23 -4
  55. freesolo_flash_dev-1.2.128/tests/test_bootstrap_process_groups.py +146 -0
  56. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cancel_remote.py +66 -23
  57. freesolo_flash_dev-1.2.128/tests/test_endpoint_name.py +142 -0
  58. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_download.py +1 -1
  59. freesolo_flash_dev-1.2.128/tests/test_env_git_auth.py +319 -0
  60. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_publish.py +7 -7
  61. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_push.py +270 -5
  62. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_ref_pinning.py +2 -3
  63. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_flash_worker.py +19 -24
  64. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_gpus.py +1 -1
  65. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_grpo_resident_sizing.py +1 -1
  66. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_grpo_rollout_contract.py +2 -2
  67. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_idle_endpoint_reaper.py +65 -22
  68. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_instance_bootstrap_coverage.py +204 -4
  69. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_jobs.py +51 -63
  70. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_lambda_runner.py +105 -130
  71. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_multi_gpu_gate.py +4 -8
  72. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_opd_resume_safety.py +11 -12
  73. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_opd_train.py +1 -2
  74. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_orchestrator_flash.py +4 -4
  75. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_provider_routing.py +68 -79
  76. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_provider_teardown_robustness.py +4 -4
  77. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_providers_symmetry.py +2 -2
  78. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_resume_on_retry.py +36 -36
  79. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_runmgmt.py +153 -53
  80. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_bootstrap_http.py +7 -0
  81. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_progress.py +1 -0
  82. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_server_api.py +127 -40
  83. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_server_envs_coverage.py +3 -3
  84. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_server_standalone.py +1 -1
  85. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serving_contract.py +89 -0
  86. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_staged_environment.py +6 -2
  87. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_teacher_broker.py +4 -7
  88. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_training_controls.py +11 -9
  89. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_vast_offers.py +3 -3
  90. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_vast_provider_coverage.py +1 -1
  91. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_vast_runner.py +115 -135
  92. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_warmstart_cross_repo.py +1 -1
  93. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_weight_cache.py +16 -25
  94. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_worker_hardexit.py +153 -0
  95. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_worker_stack.py +25 -0
  96. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/uv.lock +1 -1
  97. freesolo_flash_dev-1.2.127/tests/test_endpoint_name.py +0 -45
  98. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.dockerignore +0 -0
  99. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.env.example +0 -0
  100. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/CODEOWNERS +0 -0
  101. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  102. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  103. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  104. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  105. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/dependabot.yml +0 -0
  106. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/auto-rebake.yml +0 -0
  107. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/bake-kernel-cache.yml +0 -0
  108. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/ci.yml +0 -0
  109. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/deploy-modal-dev.yml +0 -0
  110. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/deploy-modal.yml +0 -0
  111. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/dev-kernel-cache.yml +0 -0
  112. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/main-source-guard.yml +0 -0
  113. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/notify-tests-repo.yml +0 -0
  114. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  115. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/publish-dev.yml +0 -0
  116. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/publish-image.yml +0 -0
  117. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/publish-serving-image.yml +0 -0
  118. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/publish.yml +0 -0
  119. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/version-parity.yml +0 -0
  120. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.github/workflows/worker-image.yml +0 -0
  121. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/.gitignore +0 -0
  122. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/CODE_OF_CONDUCT.md +0 -0
  123. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/CONTRIBUTING.md +0 -0
  124. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/Dockerfile +0 -0
  125. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/Dockerfile.serve +0 -0
  126. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/Dockerfile.worker +0 -0
  127. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/LICENSE +0 -0
  128. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/NOTICE +0 -0
  129. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/README.md +0 -0
  130. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/SECURITY.md +0 -0
  131. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/SELF_HOSTING.md +0 -0
  132. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/build/kernel_cache/.gitignore +0 -0
  133. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/build/kernel_cache/.keep +0 -0
  134. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/deploy/infisical/README.md +0 -0
  135. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/deploy/infisical/entrypoint.sh +0 -0
  136. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/docker/Dockerfile.kernelcache +0 -0
  137. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/docker/Dockerfile.kernelcache.relayer +0 -0
  138. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/docker/bake_kernel_cache.py +0 -0
  139. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/docker/bake_pod_entry.py +0 -0
  140. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/docker/extract_cudart_fix.py +0 -0
  141. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/docker/kernel_fingerprint.py +0 -0
  142. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/docker/make_rp_handler.py +0 -0
  143. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/docker/patch_vllm_moe_lora.py +0 -0
  144. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/docs/hosted-inference-load-testing.md +0 -0
  145. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/docs/serving-contract.md +0 -0
  146. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/__init__.py +0 -0
  147. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/_internal/__init__.py +0 -0
  148. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/_internal/channel.py +0 -0
  149. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/_internal/diagnostics.py +0 -0
  150. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/_internal/fileio.py +0 -0
  151. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/_internal/http.py +0 -0
  152. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/_internal/logging.py +0 -0
  153. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/_internal/openai_sse.py +0 -0
  154. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/_internal/paths.py +0 -0
  155. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/_internal/version.py +0 -0
  156. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/adapters/__init__.py +0 -0
  157. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/adapters/artifacts.py +0 -0
  158. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/adapters/fused_experts.py +0 -0
  159. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/adapters/lora_rank.py +0 -0
  160. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/adapters/targets.py +0 -0
  161. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/__init__.py +0 -0
  162. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/__main__.py +0 -0
  163. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/__init__.py +0 -0
  164. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/__init__.py +0 -0
  165. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/__init__.py +0 -0
  166. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/list.py +0 -0
  167. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/retained.py +0 -0
  168. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/setup.py +0 -0
  169. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  170. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/__init__.py +0 -0
  171. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/episode.py +0 -0
  172. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/eval.py +0 -0
  173. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/eval_args.py +0 -0
  174. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/evaluations.py +0 -0
  175. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/params.py +0 -0
  176. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/test.py +0 -0
  177. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/warnings.py +0 -0
  178. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/__init__.py +0 -0
  179. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/account.py +0 -0
  180. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/catalog.py +0 -0
  181. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/deploy.py +0 -0
  182. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/log_follow.py +0 -0
  183. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/prompt_budget.py +0 -0
  184. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/runs.py +0 -0
  185. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/traces.py +0 -0
  186. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/train.py +0 -0
  187. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/worker_output.py +0 -0
  188. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/serving/__init__.py +0 -0
  189. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/serving/deploy.py +0 -0
  190. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/serving/identity.py +0 -0
  191. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/serving/status.py +0 -0
  192. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/commands/serving/undeploy.py +0 -0
  193. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/__init__.py +0 -0
  194. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/account.py +0 -0
  195. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/env.py +0 -0
  196. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/errors.py +0 -0
  197. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/main.py +0 -0
  198. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/models.py +0 -0
  199. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/serve_parser.py +0 -0
  200. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/traces.py +0 -0
  201. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/training.py +0 -0
  202. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/scaffold/__init__.py +0 -0
  203. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/ui/__init__.py +0 -0
  204. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/ui/cost.py +0 -0
  205. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/ui/env_panels.py +0 -0
  206. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/ui/render.py +0 -0
  207. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/ui/tables.py +0 -0
  208. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cli/ui/tty.py +0 -0
  209. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/client/__init__.py +0 -0
  210. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/client/config.py +0 -0
  211. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/client/freesolo_api.py +0 -0
  212. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/client/http.py +0 -0
  213. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/client/runtime_secrets.py +0 -0
  214. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/client/shapes.py +0 -0
  215. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/client/specs.py +0 -0
  216. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/client/streaming.py +0 -0
  217. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/content/__init__.py +0 -0
  218. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/content/image_descriptors.py +0 -0
  219. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/content/multimodal.py +0 -0
  220. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/content/reasoning_normalization.py +0 -0
  221. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/content/structured_outputs.py +0 -0
  222. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/content/thinking.py +0 -0
  223. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/core/__init__.py +0 -0
  224. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/core/catalog.py +0 -0
  225. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/core/grpo.py +0 -0
  226. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/core/spec_persistence.py +0 -0
  227. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cost/__init__.py +0 -0
  228. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cost/analytical.py +0 -0
  229. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cost/currency.py +0 -0
  230. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cost/facts.py +0 -0
  231. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/cost/types.py +0 -0
  232. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/__init__.py +0 -0
  233. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/plan/__init__.py +0 -0
  234. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/plan/kv_sizing.py +0 -0
  235. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/plan/model_config_probe.py +0 -0
  236. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/plan/prompt_budget.py +0 -0
  237. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/plan/recipe.py +0 -0
  238. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/plan/steps.py +0 -0
  239. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/plan/vram.py +0 -0
  240. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/__init__.py +0 -0
  241. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/dataset_profile.py +0 -0
  242. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/image_tokens.py +0 -0
  243. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/reasoning_render.py +0 -0
  244. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/sft_image_rows.py +0 -0
  245. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/sft_workload.py +0 -0
  246. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/tokenizer.py +0 -0
  247. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/workload_profile.py +0 -0
  248. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/result/__init__.py +0 -0
  249. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/result/accounting.py +0 -0
  250. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/result/rollout_samples.py +0 -0
  251. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/support/__init__.py +0 -0
  252. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/support/huggingface.py +0 -0
  253. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/support/verl_checkpoint.py +0 -0
  254. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/support/verl_policy.py +0 -0
  255. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/support/worker_entrypoint.py +0 -0
  256. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/__init__.py +0 -0
  257. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/__main__.py +0 -0
  258. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/entry/__init__.py +0 -0
  259. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/entry/opd.py +0 -0
  260. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/entry/rl.py +0 -0
  261. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/entry/sft.py +0 -0
  262. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/io/__init__.py +0 -0
  263. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/io/heartbeat.py +0 -0
  264. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/io/hf.py +0 -0
  265. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/io/prefetch.py +0 -0
  266. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/io/wandb_log.py +0 -0
  267. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/__init__.py +0 -0
  268. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/adapter.py +0 -0
  269. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/chatml_mask.py +0 -0
  270. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/decoding.py +0 -0
  271. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/lora.py +0 -0
  272. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/packing.py +0 -0
  273. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/perf/__init__.py +0 -0
  274. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/perf/diagnostics.py +0 -0
  275. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/perf/lifecycle.py +0 -0
  276. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/perf/liger.py +0 -0
  277. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/perf/memory.py +0 -0
  278. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/runtime/__init__.py +0 -0
  279. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  280. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/runtime/rng.py +0 -0
  281. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/runtime/state.py +0 -0
  282. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/teacher/__init__.py +0 -0
  283. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/teacher/client.py +0 -0
  284. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/teacher/encoding.py +0 -0
  285. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  286. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/__init__.py +0 -0
  287. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/__init__.py +0 -0
  288. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/child/__init__.py +0 -0
  289. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/child/glue.py +0 -0
  290. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/child/runtime.py +0 -0
  291. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  292. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  293. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  294. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  295. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/__init__.py +0 -0
  296. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/backend_common.py +0 -0
  297. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/opd_train.py +0 -0
  298. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/opd_train_runner.py +0 -0
  299. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  300. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/rl_train.py +0 -0
  301. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  302. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  303. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/sft_train.py +0 -0
  304. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  305. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/__init__.py +0 -0
  306. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
  307. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
  308. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
  309. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
  310. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
  311. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
  312. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  313. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  314. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/entry.py +0 -0
  315. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
  316. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/plugin.py +0 -0
  317. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  318. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  319. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/structured.py +0 -0
  320. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/tensors.py +0 -0
  321. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
  322. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
  323. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
  324. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
  325. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
  326. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
  327. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
  328. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
  329. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
  330. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
  331. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
  332. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
  333. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
  334. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/__init__.py +0 -0
  335. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  336. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/child/entry.py +0 -0
  337. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  338. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/child/patches.py +0 -0
  339. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  340. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  341. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  342. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/launch/config.py +0 -0
  343. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  344. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  345. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  346. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  347. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  348. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
  349. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  350. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  351. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/__init__.py +0 -0
  352. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/child/entry.py +0 -0
  353. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/child/plugin.py +0 -0
  354. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  355. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  356. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/setup/config.py +0 -0
  357. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/__init__.py +0 -0
  358. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/capabilities.py +0 -0
  359. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/checkpoints.py +0 -0
  360. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/child_io.py +0 -0
  361. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/diagnostics.py +0 -0
  362. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/parallelism.py +0 -0
  363. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/parent_work.py +0 -0
  364. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/process_census.py +0 -0
  365. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/__init__.py +0 -0
  366. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/loading/__init__.py +0 -0
  367. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/loading/adapter.py +0 -0
  368. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/loading/base.py +0 -0
  369. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/loading/loader.py +0 -0
  370. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/loading/pull.py +0 -0
  371. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/loading/staged.py +0 -0
  372. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/meta/__init__.py +0 -0
  373. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/meta/cache_security.py +0 -0
  374. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/meta/dataset_selection.py +0 -0
  375. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/meta/evaluations.py +0 -0
  376. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/meta/identity.py +0 -0
  377. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/meta/namespace_listing.py +0 -0
  378. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/package/__init__.py +0 -0
  379. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/package/direct_tokens.py +0 -0
  380. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/package/limits.py +0 -0
  381. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/envs/package/unpack.py +0 -0
  382. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/__init__.py +0 -0
  383. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/__init__.py +0 -0
  384. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  385. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  386. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  387. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  388. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/host/__init__.py +0 -0
  389. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  390. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/host/failmark.py +0 -0
  391. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  392. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  393. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/poll.py +0 -0
  394. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  395. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  396. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/net/__init__.py +0 -0
  397. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/net/auth.py +0 -0
  398. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/net/deadline.py +0 -0
  399. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/net/http.py +0 -0
  400. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/artifacts/__init__.py +0 -0
  401. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/artifacts/hf.py +0 -0
  402. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/artifacts/preload_runpod.py +0 -0
  403. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/core/__init__.py +0 -0
  404. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/core/allocator.py +0 -0
  405. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/core/fit_errors.py +0 -0
  406. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/core/preflight.py +0 -0
  407. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/core/realized.py +0 -0
  408. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/core/registry.py +0 -0
  409. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/core/sharding.py +0 -0
  410. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/__init__.py +0 -0
  411. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/__init__.py +0 -0
  412. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/api.py +0 -0
  413. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/auth.py +0 -0
  414. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/gpus.py +0 -0
  415. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/preflight.py +0 -0
  416. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/pricing.py +0 -0
  417. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/execution/__init__.py +0 -0
  418. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/__init__.py +0 -0
  419. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/__init__.py +0 -0
  420. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/api.py +0 -0
  421. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/auth.py +0 -0
  422. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/cost.py +0 -0
  423. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/gpus.py +0 -0
  424. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/preflight.py +0 -0
  425. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/pricing.py +0 -0
  426. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/__init__.py +0 -0
  427. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/jobs.py +0 -0
  428. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/polling.py +0 -0
  429. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/serverless/__init__.py +0 -0
  430. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/vast/__init__.py +0 -0
  431. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/vast/client/__init__.py +0 -0
  432. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/vast/client/api.py +0 -0
  433. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/vast/client/auth.py +0 -0
  434. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/vast/client/preflight.py +0 -0
  435. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/vast/client/pricing.py +0 -0
  436. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/providers/vast/execution/__init__.py +0 -0
  437. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/py.typed +0 -0
  438. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/__init__.py +0 -0
  439. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/accounting/__init__.py +0 -0
  440. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/accounting/artifacts.py +0 -0
  441. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/accounting/costs.py +0 -0
  442. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/accounting/reconciliation.py +0 -0
  443. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/accounting/weight_cache.py +0 -0
  444. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/__init__.py +0 -0
  445. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/attempts.py +0 -0
  446. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/claim_lock.py +0 -0
  447. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/deadlines.py +0 -0
  448. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/preparation.py +0 -0
  449. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/reporting.py +0 -0
  450. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/state.py +0 -0
  451. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/submit.py +0 -0
  452. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/results/__init__.py +0 -0
  453. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/results/checkpoints.py +0 -0
  454. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/results/verified_revisions.py +0 -0
  455. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/__init__.py +0 -0
  456. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/attach_reconcile.py +0 -0
  457. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/deploy.py +0 -0
  458. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/errors.py +0 -0
  459. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/retry_decision.py +0 -0
  460. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/transitions.py +0 -0
  461. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runtime_capsule/__init__.py +0 -0
  462. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runtime_capsule/build.py +0 -0
  463. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/runtime_capsule/manifest.py +0 -0
  464. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/schema/__init__.py +0 -0
  465. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/schema/fields.py +0 -0
  466. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/__init__.py +0 -0
  467. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/app/__init__.py +0 -0
  468. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/app/__main__.py +0 -0
  469. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/app/bootstrap.py +0 -0
  470. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/app/chat_stream.py +0 -0
  471. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/app/launch.py +0 -0
  472. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/app/manifest.py +0 -0
  473. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/app/materialize.py +0 -0
  474. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/app/openai.py +0 -0
  475. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/contract/__init__.py +0 -0
  476. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/contract/errors.py +0 -0
  477. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/contract/protocol.py +0 -0
  478. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/contract/provenance.py +0 -0
  479. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/contract/responses.py +0 -0
  480. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/contract/urls.py +0 -0
  481. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/control/__init__.py +0 -0
  482. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/control/_canonical.py +0 -0
  483. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/control/_serialization.py +0 -0
  484. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/control/_urls.py +0 -0
  485. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/control/credentials.py +0 -0
  486. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/control/planning.py +0 -0
  487. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/control/types.py +0 -0
  488. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/__init__.py +0 -0
  489. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/adapter_check.py +0 -0
  490. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/export.py +0 -0
  491. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/preflight.py +0 -0
  492. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/profiles.py +0 -0
  493. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/readiness.py +0 -0
  494. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/resolve.py +0 -0
  495. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/__init__.py +0 -0
  496. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/common/__init__.py +0 -0
  497. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/common/records.py +0 -0
  498. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/__init__.py +0 -0
  499. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  500. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  501. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  502. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  503. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  504. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  505. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  506. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  507. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  508. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  509. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  510. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  511. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  512. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/request/__init__.py +0 -0
  513. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/request/openai.py +0 -0
  514. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/request/runtime_support.py +0 -0
  515. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/request/streaming.py +0 -0
  516. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/request/thinking.py +0 -0
  517. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/request/transport.py +0 -0
  518. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/request/validation.py +0 -0
  519. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/__init__.py +0 -0
  520. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/adapters.py +0 -0
  521. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/engine.py +0 -0
  522. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/errors.py +0 -0
  523. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/multimodal.py +0 -0
  524. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/prompt.py +0 -0
  525. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/sampling.py +0 -0
  526. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/structured_outputs.py +0 -0
  527. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/types.py +0 -0
  528. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/__init__.py +0 -0
  529. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/__main__.py +0 -0
  530. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/asgi/__init__.py +0 -0
  531. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/asgi/cli.py +0 -0
  532. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/billing/__init__.py +0 -0
  533. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/billing/charges.py +0 -0
  534. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/billing/retry.py +0 -0
  535. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/__init__.py +0 -0
  536. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/ops/__init__.py +0 -0
  537. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/ops/reconcile.py +0 -0
  538. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/ops/repo_cleanup.py +0 -0
  539. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/ops/serving_resources.py +0 -0
  540. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/__init__.py +0 -0
  541. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/checkpoints.py +0 -0
  542. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/environment_registry.py +0 -0
  543. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/projects.py +0 -0
  544. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/runs.py +0 -0
  545. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/teacher/__init__.py +0 -0
  546. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/teacher/broker.py +0 -0
  547. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/teacher/errors.py +0 -0
  548. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/domain/teacher/requests.py +0 -0
  549. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/platform/__init__.py +0 -0
  550. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/platform/auth.py +0 -0
  551. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/platform/db.py +0 -0
  552. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/platform/deps.py +0 -0
  553. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/platform/internal_client.py +0 -0
  554. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/platform/locks.py +0 -0
  555. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/routes/__init__.py +0 -0
  556. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/routes/envs.py +0 -0
  557. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/routes/meta.py +0 -0
  558. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/routes/runs.py +0 -0
  559. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/routes/serving_chat.py +0 -0
  560. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/routes/serving_completion.py +0 -0
  561. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/routes/serving_revisions.py +0 -0
  562. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/routes/serving_smoke.py +0 -0
  563. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/server/routes/teacher.py +0 -0
  564. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/__init__.py +0 -0
  565. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/app/README.md +0 -0
  566. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/app/__init__.py +0 -0
  567. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/loadtest/__init__.py +0 -0
  568. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/loadtest/__main__.py +0 -0
  569. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/loadtest/artifacts.py +0 -0
  570. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/loadtest/cli.py +0 -0
  571. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/loadtest/metrics.py +0 -0
  572. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/loadtest/protocol.py +0 -0
  573. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/loadtest/runner.py +0 -0
  574. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/loadtest/schedule.py +0 -0
  575. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/loadtest/schema.py +0 -0
  576. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/__init__.py +0 -0
  577. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/accounting/__init__.py +0 -0
  578. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/accounting/usage.py +0 -0
  579. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/__init__.py +0 -0
  580. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/boot.py +0 -0
  581. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/errors.py +0 -0
  582. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/lora_entries.py +0 -0
  583. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/model_config.py +0 -0
  584. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/prequant_config.py +0 -0
  585. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/support.py +0 -0
  586. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/__init__.py +0 -0
  587. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/adapter_routes.py +0 -0
  588. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/body_limit.py +0 -0
  589. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/context.py +0 -0
  590. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/headers.py +0 -0
  591. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/inference_routes.py +0 -0
  592. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/router.py +0 -0
  593. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/routing.py +0 -0
  594. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/__init__.py +0 -0
  595. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/multimodal.py +0 -0
  596. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/openai_request.py +0 -0
  597. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/openai_stream.py +0 -0
  598. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/provenance.py +0 -0
  599. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/requests.py +0 -0
  600. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/schemas.py +0 -0
  601. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/streaming.py +0 -0
  602. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/structured_outputs.py +0 -0
  603. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/__init__.py +0 -0
  604. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/access.py +0 -0
  605. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/lookup.py +0 -0
  606. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/persisted_columns.py +0 -0
  607. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/persistence.py +0 -0
  608. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/registration.py +0 -0
  609. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/registry.py +0 -0
  610. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/settings.py +0 -0
  611. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/supabase_rest.py +0 -0
  612. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/undeploy.py +0 -0
  613. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/snapshot/__init__.py +0 -0
  614. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/snapshot/archive.py +0 -0
  615. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/teacher/__init__.py +0 -0
  616. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/teacher/limits.py +0 -0
  617. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/teacher/provider_status.py +0 -0
  618. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/flash/teacher/retry_contract.py +0 -0
  619. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/scripts/build_dev_dist.py +0 -0
  620. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/scripts/check_file_size.py +0 -0
  621. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/scripts/check_function_size.py +0 -0
  622. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/scripts/check_rollout_identity_actor.py +0 -0
  623. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/scripts/check_source_layout.py +0 -0
  624. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/scripts/check_verl_pin_exists.py +0 -0
  625. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/scripts/qualify_serving_profile.py +0 -0
  626. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/scripts/scrub_history.sh +0 -0
  627. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/serve_launch.py +0 -0
  628. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/__init__.py +0 -0
  629. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/__init__.py +0 -0
  630. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/chat_provenance.py +0 -0
  631. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/chat_transport.py +0 -0
  632. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/managed_chat.py +0 -0
  633. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/profile.py +0 -0
  634. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/server_api_plugin.py +0 -0
  635. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/source_snapshot.py +0 -0
  636. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/specs.py +0 -0
  637. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/teacher.py +0 -0
  638. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/vast.py +0 -0
  639. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/_helpers/wire_headers.py +0 -0
  640. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/capture_image_sft_processor_oracle.py +0 -0
  641. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/capture_qwen38_27b_metadata.py +0 -0
  642. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/conftest.py +0 -0
  643. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  644. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  645. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  646. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  647. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  648. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  649. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/live/__init__.py +0 -0
  650. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/live/conftest.py +0 -0
  651. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/live/test_lambda_live.py +0 -0
  652. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/live/test_runpod_live.py +0 -0
  653. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/live/test_sft_thinking_render_live.py +0 -0
  654. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/live/test_vast_live.py +0 -0
  655. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/checkpoint_fixtures.py +0 -0
  656. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/conftest.py +0 -0
  657. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/hosted_loadtest_fake_scenario.json +0 -0
  658. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_base_model_serving.py +0 -0
  659. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_chat_auth.py +0 -0
  660. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_chat_authorizer.py +0 -0
  661. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  662. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_checkpoint_model_validation.py +0 -0
  663. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_engine_error_status.py +0 -0
  664. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_fp8_config.py +0 -0
  665. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_immutable_engine.py +0 -0
  666. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_immutable_revisions.py +0 -0
  667. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_immutable_schemas.py +0 -0
  668. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_loadtest_artifacts.py +0 -0
  669. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_loadtest_metrics.py +0 -0
  670. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_loadtest_protocol.py +0 -0
  671. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_loadtest_runner.py +0 -0
  672. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_loadtest_schedule.py +0 -0
  673. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_loadtest_schema.py +0 -0
  674. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_mirror_sampling_parity.py +0 -0
  675. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_modal_deploy_identity.py +0 -0
  676. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_modal_image_paths.py +0 -0
  677. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_model_config.py +0 -0
  678. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_multimodal.py +0 -0
  679. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_openai_stream_options.py +0 -0
  680. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_persistence.py +0 -0
  681. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_pre_first_disconnect.py +0 -0
  682. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_prequant_config.py +0 -0
  683. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_registry.py +0 -0
  684. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_registry_coverage.py +0 -0
  685. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_request_body_limit.py +0 -0
  686. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_router_coverage.py +0 -0
  687. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_router_edge_coverage.py +0 -0
  688. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_schemas_coverage.py +0 -0
  689. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_serve_reasoning_split.py +0 -0
  690. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_serve_thinking.py +0 -0
  691. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_settings.py +0 -0
  692. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_structured_outputs.py +0 -0
  693. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_structured_outputs_coverage.py +0 -0
  694. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving/test_supabase_rest_coverage.py +0 -0
  695. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving_conformance/__init__.py +0 -0
  696. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving_conformance/conftest.py +0 -0
  697. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/serving_conformance/test_contract.py +0 -0
  698. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_accounting_coverage.py +0 -0
  699. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_adapter_shard_completeness.py +0 -0
  700. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_agent_flash_cli_contract.py +0 -0
  701. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_algorithms.py +0 -0
  702. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_allocator.py +0 -0
  703. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_authenticated_redirects.py +0 -0
  704. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_backend_common.py +0 -0
  705. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_backend_jobspec_contract.py +0 -0
  706. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_bake_kernel_cache.py +0 -0
  707. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_base_model_provenance.py +0 -0
  708. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_billing_retry.py +0 -0
  709. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_build_context_contract.py +0 -0
  710. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_capture_qwen38_metadata.py +0 -0
  711. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_catalog_consistency.py +0 -0
  712. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_catalog_only_models.py +0 -0
  713. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_charge_pricing.py +0 -0
  714. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_chat_foundations.py +0 -0
  715. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_checkpoint_lifecycle.py +0 -0
  716. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_checkpoints.py +0 -0
  717. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_commands.py +0 -0
  718. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_commands_coverage.py +0 -0
  719. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_credential_shadowing.py +0 -0
  720. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_errors.py +0 -0
  721. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_estimate.py +0 -0
  722. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_gpus_flag.py +0 -0
  723. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_help.py +0 -0
  724. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_main_coverage.py +0 -0
  725. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_managed.py +0 -0
  726. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_render_coverage.py +0 -0
  727. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_render_theme.py +0 -0
  728. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_serve_deploy.py +0 -0
  729. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_serve_status.py +0 -0
  730. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_serve_undeploy.py +0 -0
  731. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_traces.py +0 -0
  732. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cli_wandb_warning.py +0 -0
  733. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_client.py +0 -0
  734. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_client_import_purity.py +0 -0
  735. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_client_server_integration.py +0 -0
  736. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_client_stream_reads.py +0 -0
  737. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_config_env_vars.py +0 -0
  738. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_config_overrides.py +0 -0
  739. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_console_upload.py +0 -0
  740. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_controlled_experiment_repairs.py +0 -0
  741. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cost_analytical.py +0 -0
  742. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cost_currency.py +0 -0
  743. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cost_equation.py +0 -0
  744. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cost_estimate.py +0 -0
  745. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cost_hardware.py +0 -0
  746. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_cost_models.py +0 -0
  747. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_dataset_profile.py +0 -0
  748. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_deploy_latency.py +0 -0
  749. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_dev_channel.py +0 -0
  750. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_disk_gb.py +0 -0
  751. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_cache_evict.py +0 -0
  752. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_delete.py +0 -0
  753. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_download_api.py +0 -0
  754. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_evaluations.py +0 -0
  755. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_list_api.py +0 -0
  756. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_list_cli.py +0 -0
  757. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_list_hub.py +0 -0
  758. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_no_install.py +0 -0
  759. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_pull.py +0 -0
  760. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_pull_coverage.py +0 -0
  761. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_pull_loader_coverage.py +0 -0
  762. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_pull_managed_control_plane.py +0 -0
  763. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_rate_limit_resolve.py +0 -0
  764. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_env_test.py +0 -0
  765. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_envs_coverage.py +0 -0
  766. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_export.py +0 -0
  767. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_flash_mvp.py +0 -0
  768. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_flashinfer_cache_dirs.py +0 -0
  769. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_freesolo_api_transport.py +0 -0
  770. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_fused_expert_warmstart.py +0 -0
  771. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_github_urlopen_retry.py +0 -0
  772. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_gpu_type_single_field.py +0 -0
  773. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_grpo_checkpoint_durability.py +0 -0
  774. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_grpo_params.py +0 -0
  775. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_grpo_process_census.py +0 -0
  776. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_grpo_reward_batching.py +0 -0
  777. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_grpo_rollout_identity.py +0 -0
  778. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_health_liveness.py +0 -0
  779. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_hf_retry.py +0 -0
  780. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_image_environment_capability.py +0 -0
  781. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_image_incremental_processor.py +0 -0
  782. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_image_sft_markers.py +0 -0
  783. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_image_sft_processor_parity.py +0 -0
  784. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_image_tokens.py +0 -0
  785. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_infisical_secrets.py +0 -0
  786. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_internal_client.py +0 -0
  787. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_kernel_cache.py +0 -0
  788. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_kernel_fingerprint.py +0 -0
  789. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_kv_util.py +0 -0
  790. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_lambda_api_coverage.py +0 -0
  791. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_logging.py +0 -0
  792. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_login_perms.py +0 -0
  793. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_lora_rank_coverage.py +0 -0
  794. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_lora_rank_nested_rung.py +0 -0
  795. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_lora_rank_preflight.py +0 -0
  796. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_lora_targeting.py +0 -0
  797. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_lora_targeting_pinned_verl.py +0 -0
  798. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_managed_config_fields.py +0 -0
  799. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_managed_hf_repo.py +0 -0
  800. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_metrics_schema_agent_contract.py +0 -0
  801. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_mig_guard.py +0 -0
  802. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_mirror_sampling_parity.py +0 -0
  803. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_multimodal_training.py +0 -0
  804. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_named_reward_metrics.py +0 -0
  805. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_oom_escalate_gpu.py +0 -0
  806. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_opd.py +0 -0
  807. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_opd_limits.py +0 -0
  808. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  809. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_opd_multiturn_failure_exit.py +0 -0
  810. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_opd_replay_guard.py +0 -0
  811. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_packing.py +0 -0
  812. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_packing_coverage.py +0 -0
  813. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_parasail_teacher.py +0 -0
  814. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_persisted_spec_envelope.py +0 -0
  815. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_poll_helpers.py +0 -0
  816. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_preflight.py +0 -0
  817. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_projects.py +0 -0
  818. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_prompt_budget.py +0 -0
  819. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_provider_preflight_coverage.py +0 -0
  820. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_realized_cost.py +0 -0
  821. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_repo_cleanup.py +0 -0
  822. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_resolve_params_b.py +0 -0
  823. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_retry_decision.py +0 -0
  824. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_rl_train.py +0 -0
  825. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_rollout_samples.py +0 -0
  826. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_run_registry_lifecycle.py +0 -0
  827. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_runpod_api_delete.py +0 -0
  828. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_runpod_key_fingerprint.py +0 -0
  829. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_runpod_key_waterfall.py +0 -0
  830. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_runtime_capsule.py +0 -0
  831. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve.py +0 -0
  832. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_launch.py +0 -0
  833. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_manifest.py +0 -0
  834. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_materialize.py +0 -0
  835. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_packaging.py +0 -0
  836. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_chat_transport.py +0 -0
  837. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_control.py +0 -0
  838. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_docs.py +0 -0
  839. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_modal_contract_lock.py +0 -0
  840. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_modal_sdk.py +0 -0
  841. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  842. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_modal_teardown_identity.py +0 -0
  843. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_profile_qualification.py +0 -0
  844. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_profiles.py +0 -0
  845. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_provisioning_common.py +0 -0
  846. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_provisioning_modal.py +0 -0
  847. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_reasoning_content.py +0 -0
  848. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_resolve_provenance.py +0 -0
  849. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_runtime_adapters.py +0 -0
  850. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_runtime_engine.py +0 -0
  851. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_runtime_package.py +0 -0
  852. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serve_runtime_types.py +0 -0
  853. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_server_app_coverage.py +0 -0
  854. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_server_auth_singleflight.py +0 -0
  855. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_server_billing.py +0 -0
  856. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_server_checkpoints_coverage.py +0 -0
  857. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_server_db.py +0 -0
  858. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_server_locks_coverage.py +0 -0
  859. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_server_managed_chat_requests.py +0 -0
  860. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_server_serving_resources.py +0 -0
  861. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serving_conformance_gate.py +0 -0
  862. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serving_context_preflight.py +0 -0
  863. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_serving_schema_coverage.py +0 -0
  864. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_sft_chunked_nll.py +0 -0
  865. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_sft_example_selection.py +0 -0
  866. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_sft_gc_off.py +0 -0
  867. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_sft_max_context.py +0 -0
  868. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_sft_step_floor.py +0 -0
  869. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_sft_train.py +0 -0
  870. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_sft_workload.py +0 -0
  871. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_source_attestation_flow.py +0 -0
  872. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_source_layout.py +0 -0
  873. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_source_snapshot.py +0 -0
  874. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_spec_and_validation.py +0 -0
  875. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_spec_contract_bytes.py +0 -0
  876. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_step_floor.py +0 -0
  877. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_step_metrics.py +0 -0
  878. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_step_timing.py +0 -0
  879. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_structured_outputs.py +0 -0
  880. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_teacher_encoding_contract.py +0 -0
  881. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_terminal_artifacts.py +0 -0
  882. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_thinking_config.py +0 -0
  883. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_train_context_preflight.py +0 -0
  884. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_type_comment_prose.py +0 -0
  885. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_vast_api.py +0 -0
  886. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_vast_api_coverage.py +0 -0
  887. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_verified_revisions.py +0 -0
  888. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_verifiers.py +0 -0
  889. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_verl_checkpoint_export.py +0 -0
  890. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_verl_child_plugins.py +0 -0
  891. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_verl_silence_watchdog.py +0 -0
  892. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_version.py +0 -0
  893. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  894. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_vllm_moe_lora_backport.py +0 -0
  895. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_vram_architecture.py +0 -0
  896. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_wandb_link.py +0 -0
  897. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_wandb_naming.py +0 -0
  898. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_warmstart_adapter_download.py +0 -0
  899. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_warmstart_error_attribution.py +0 -0
  900. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_warmstart_image_adapters.py +0 -0
  901. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_worker_dryrun.py +0 -0
  902. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_worker_image.py +0 -0
  903. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_worker_init_heartbeat.py +0 -0
  904. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_worker_thinking.py +0 -0
  905. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_workflow_contracts.py +0 -0
  906. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_workload_profile.py +0 -0
  907. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.128}/tests/test_zero2_sharding_gate.py +0 -0
@@ -25,6 +25,16 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
25
25
 
26
26
  ### Changed
27
27
 
28
+ - A Flash run is one seed and may execute several attempts. The provider seed argument threaded
29
+ beside `spec.seed` is gone, so the spec is the only seed channel and no caller can supply a
30
+ second one to disagree with it; `Provider.submit_run`/`poll` are now `submit_attempt`/
31
+ `poll_attempt`; and `runner/supervise/seed_submission.py` is `attempt_supervision.py`. Instance
32
+ labels drop the redundant seed field (`<run>-s<seed>-a<n>` becomes `<run>-a<n>`), and every
33
+ RunPod endpoint carries an explicit `-a<n>` ordinal including attempt zero, replacing the `r<n>`
34
+ retry suffix that made a retry ordinal an identity and left the base name ambiguous between a run
35
+ and its first attempt. Names that exceed the provider budget now raise rather than truncate,
36
+ since a clipped ordinal is one two attempts of a run can collide on.
37
+
28
38
  - Run-backed adapters now use only explicit permanent checkpoint identities, `<run_id>/final` and
29
39
  `<run_id>/step-N`. Bare run aliases, composite source-revision identities, activation, implicit
30
40
  checkpoint fallback, and public artifact provenance have been removed across hosted, managed, and
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.2.127
3
+ Version: 1.2.128
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
@@ -17,6 +17,7 @@ from pathlib import Path
17
17
 
18
18
  from flash.cli.commands.env.ops.push import (
19
19
  _ENV_EVALUATIONS_SIDECAR,
20
+ _decode_env_entrypoint_source,
20
21
  _ignore_env_push_path,
21
22
  _raise_walk_error,
22
23
  )
@@ -149,6 +150,18 @@ def _imported_module_names(tree, *, relative_names_are_siblings: bool = True) ->
149
150
  return names
150
151
 
151
152
 
153
+ def _read_env_module_source(path: Path) -> str:
154
+ """Read one packaged Python file under the interpreter's own encoding contract.
155
+
156
+ the publish path decodes the entrypoint with `tokenize.detect_encoding`, so a file carrying a
157
+ non-utf-8 encoding cookie is publishable. reading it as utf-8 here raises instead, and every
158
+ caller below treats that as "no imports" -- so the sibling helpers never enter the archive and
159
+ `env push` exits 0 with an environment that only fails once a gpu has been rented. one decoder
160
+ for both paths is what keeps "publishable" and "walked for imports" the same set of files.
161
+ """
162
+ return _decode_env_entrypoint_source(path.read_bytes())[0]
163
+
164
+
152
165
  def _helper_imports(helper: Path, *, env_root: Path) -> set[str]:
153
166
  """Return imports needed by a packaged helper.
154
167
 
@@ -160,7 +173,7 @@ def _helper_imports(helper: Path, *, env_root: Path) -> set[str]:
160
173
  return set()
161
174
  try:
162
175
  return _imported_module_names(
163
- ast.parse(helper.read_text(encoding="utf-8"), filename=str(helper)),
176
+ ast.parse(_read_env_module_source(helper), filename=str(helper)),
164
177
  relative_names_are_siblings=helper.parent == env_root,
165
178
  )
166
179
  except (OSError, SyntaxError, UnicodeDecodeError):
@@ -295,7 +308,7 @@ def _iter_env_sidecar_files(
295
308
  # GPU has been rented and the worker imports the module. parsed with the same reader as
296
309
  # every other module here, so a lazily imported helper (inside load_environment) counts.
297
310
  try:
298
- entry_tree = ast.parse(entrypoint.read_text(encoding="utf-8"), filename=str(entrypoint))
311
+ entry_tree = ast.parse(_read_env_module_source(entrypoint), filename=str(entrypoint))
299
312
  except (OSError, SyntaxError, UnicodeDecodeError):
300
313
  # the entrypoint is validated for syntax on its own path, and a push that cannot read
301
314
  # it fails there with a better message. an unreadable file here just means no closure.
@@ -325,7 +338,7 @@ def _iter_env_sidecar_files(
325
338
  yielded.add(sidecar)
326
339
  yield sidecar, sidecar.relative_to(env_root)
327
340
  try:
328
- tree = ast.parse(sidecar.read_text(encoding="utf-8"), filename=str(sidecar))
341
+ tree = ast.parse(_read_env_module_source(sidecar), filename=str(sidecar))
329
342
  except SyntaxError as exc:
330
343
  raise ValueError(
331
344
  f"{sidecar}: invalid evaluation sidecar syntax: {exc.msg}"
@@ -382,15 +382,40 @@ def _env_name_error(raw: str) -> str:
382
382
  return f"env name invalid: {text!r} has no usable characters"
383
383
 
384
384
 
385
+ def _validate_env_entrypoint_source(source: bytes) -> None:
386
+ """Reject exact Python bytes that cannot execute as an environment module."""
387
+ compile(source, _ENV_ENTRYPOINT, "exec")
388
+
389
+
390
+ def _decode_env_entrypoint_source(source: bytes) -> tuple[str, str]:
391
+ """Decode Python bytes with the interpreter's encoding-cookie and BOM contract."""
392
+ import io
393
+ import tokenize
394
+
395
+ encoding, _ = tokenize.detect_encoding(io.BytesIO(source).readline)
396
+ return source.decode(encoding), encoding
397
+
398
+
399
+ def _python_preamble_lines(lines: list[str]) -> int:
400
+ """Return the shebang and encoding-cookie lines that must remain first."""
401
+ if not lines:
402
+ return 0
403
+ encoding_cookie = re.compile(r"^[ \t\f]*#.*?coding[:=][ \t]*[-\w.]+", re.ASCII)
404
+ blank_or_comment = re.compile(r"^[ \t\f]*(?:#|[\r\n]|$)", re.ASCII)
405
+ if encoding_cookie.match(lines[0]):
406
+ return 1
407
+ if len(lines) > 1 and blank_or_comment.match(lines[0]) and encoding_cookie.match(lines[1]):
408
+ return 2
409
+ return 1 if lines[0].startswith("#!") else 0
410
+
411
+
385
412
  def _with_syspath_bootstrap(env_source: str) -> str:
386
- """Prepend a sys.path bootstrap so a published env can resolve shipped sibling helpers."""
413
+ """Insert the sys.path bootstrap after the Python module preamble."""
387
414
  import ast
388
415
 
389
- try:
390
- tree = ast.parse(env_source)
391
- except SyntaxError:
392
- return _ENV_SYSPATH_BOOTSTRAP + env_source
393
- insert_after = 0
416
+ tree = ast.parse(env_source, filename=_ENV_ENTRYPOINT)
417
+ lines = env_source.splitlines(keepends=True)
418
+ insert_after = _python_preamble_lines(lines)
394
419
  body = tree.body
395
420
  i = 0
396
421
  if (
@@ -399,13 +424,27 @@ def _with_syspath_bootstrap(env_source: str) -> str:
399
424
  and isinstance(getattr(body[0], "value", None), ast.Constant)
400
425
  and isinstance(body[0].value.value, str)
401
426
  ):
402
- insert_after = body[0].end_lineno or 0
427
+ insert_after = max(insert_after, body[0].end_lineno or 0)
403
428
  i = 1
404
429
  while i < len(body) and isinstance(body[i], ast.ImportFrom) and body[i].module == "__future__":
405
- insert_after = body[i].end_lineno or insert_after
430
+ insert_after = max(insert_after, body[i].end_lineno or 0)
406
431
  i += 1
407
- lines = env_source.splitlines(keepends=True)
408
- return "".join(lines[:insert_after]) + _ENV_SYSPATH_BOOTSTRAP + "".join(lines[insert_after:])
432
+ prefix = "".join(lines[:insert_after])
433
+ if prefix and not prefix.endswith(("\n", "\r")):
434
+ prefix += "\n"
435
+ published_source = prefix + _ENV_SYSPATH_BOOTSTRAP + "".join(lines[insert_after:])
436
+ if not env_source.endswith(("\n", "\r")):
437
+ published_source = published_source.removesuffix("\n")
438
+ return published_source
439
+
440
+
441
+ def _prepare_env_entrypoint_source(env_source: bytes) -> bytes:
442
+ """Validate the authored bytes and return the exact validated archive bytes."""
443
+ _validate_env_entrypoint_source(env_source)
444
+ decoded_source, encoding = _decode_env_entrypoint_source(env_source)
445
+ published_source = _with_syspath_bootstrap(decoded_source).encode(encoding)
446
+ _validate_env_entrypoint_source(published_source)
447
+ return published_source
409
448
 
410
449
 
411
450
  def _raise_walk_error(error: OSError) -> None:
@@ -674,6 +713,18 @@ def cmd_env_push(args) -> int:
674
713
  except ValueError as exc:
675
714
  return _err(str(exc))
676
715
 
716
+ try:
717
+ published_source = _prepare_env_entrypoint_source(entrypoint.read_bytes())
718
+ except (SyntaxError, UnicodeError, ValueError) as exc:
719
+ location = (
720
+ f"line {exc.lineno}" if getattr(exc, "lineno", None) is not None else "unknown line"
721
+ )
722
+ return _err(
723
+ f"cannot publish {src}: environment entrypoint has invalid Python syntax ({location})"
724
+ )
725
+ except OSError:
726
+ return _err(f"cannot publish {src}: environment entrypoint could not be read")
727
+
677
728
  try:
678
729
  _check_env_push_limits(
679
730
  env_root,
@@ -686,8 +737,7 @@ def cmd_env_push(args) -> int:
686
737
 
687
738
  with tempfile.TemporaryDirectory(prefix="flash-env-push-") as tmp:
688
739
  pkg = Path(tmp)
689
- module_source = entrypoint.read_text()
690
- (pkg / _ENV_ENTRYPOINT).write_text(_with_syspath_bootstrap(module_source))
740
+ (pkg / _ENV_ENTRYPOINT).write_bytes(published_source)
691
741
  _write_entrypoint_alias(pkg, entrypoint=entrypoint)
692
742
  _copy_env_sidecars(
693
743
  env_root,
@@ -255,7 +255,7 @@ model = "Qwen/Qwen3.5-9B" # see `flash models list`
255
255
  project = "PROJECT_UUID" # required UUID from `flash projects create`
256
256
  algorithm = "sft" # "sft" (supervised), "grpo" (RL), or "opd" (on-policy distillation)
257
257
  # thinking = true # opt-in reasoning mode, for models that support it
258
- # seed = 42 # reproducible per-run seed; omitted defaults to 42
258
+ # seed = 42 # the run's one seed; omitted defaults to 42
259
259
 
260
260
  [environment]
261
261
  id = "your-org/your-project/my-env" # the id printed by `flash env push`
@@ -364,7 +364,9 @@ remove that failover, and cannot be combined with `providers`. An unknown name i
364
364
  time and the error lists the names your plane accepts. `[gpu] type` pins one exact active
365
365
  validated GPU class. Run artifacts are stored in a
366
366
  private environment-scoped repo with content-addressed Flash code snapshots. Set `seed` only at the
367
- top level. Compose or tweak configs without editing files: `--config extra.toml` (deep-merge) and
367
+ top level: a run has exactly one seed, and if a host fails Flash executes another attempt of that
368
+ same run rather than a new one, so every attempt trains on the seed you set here.
369
+ Compose or tweak configs without editing files: `--config extra.toml` (deep-merge) and
368
370
  `--set key=value` (e.g. `--set train.epochs=3`). `--gpus N` is
369
371
  shorthand for `--set gpu.count=N`; both land in one override list, so repeats resolve left to
370
372
  right.
@@ -69,7 +69,7 @@ def live_attempt(obj: dict) -> int | None:
69
69
  def heartbeat_is_current_attempt(obj: dict, heartbeat: dict) -> bool:
70
70
  """False only when the heartbeat provably belongs to a superseded retry attempt.
71
71
 
72
- Retries reuse the seed's heartbeat path, so a recovered run flips back to ``running`` for the
72
+ Every attempt of a run shares one heartbeat path, so a recovered run flips back to ``running`` for the
73
73
  replacement worker while ``last_heartbeat`` can still be the previous attempt's setup ping until
74
74
  the new worker publishes one. ``remote.attempt`` is the live attempt; ``last_heartbeat.attempt``
75
75
  is the one that produced the ping. When the live attempt is known, keep the reassurance only for a
@@ -268,18 +268,6 @@ CONTROL_PLANE_OWNED_ENV_KEYS = frozenset(
268
268
  TRAINER_BACKEND = "verl"
269
269
 
270
270
 
271
- def require_matching_seed(spec: JobSpec, seed: Any) -> int:
272
- """Require the retained provider seed argument to match the authoritative JobSpec seed."""
273
- provided = parse_seed(seed)
274
- canonical = parse_seed(spec.seed)
275
- if provided != canonical:
276
- raise ValueError(
277
- f"provider seed {provided} does not match JobSpec.seed {canonical}; "
278
- "use spec.seed as the provider seed"
279
- )
280
- return canonical
281
-
282
-
283
271
  def _model_revision(value: Any) -> str:
284
272
  """parse an optional exact model-repository revision."""
285
273
  if not isinstance(value, str):
@@ -134,7 +134,7 @@ def _rollout_batch_for_quote(spec) -> int:
134
134
 
135
135
 
136
136
  def spec_steps(spec) -> int:
137
- """Per-seed optimizer steps implied by a train spec (mirrors the worker).
137
+ """Per-run optimizer steps implied by a train spec (mirrors the worker).
138
138
 
139
139
  sft reads the horizon its workload profile measured: the profile already resolved epochs,
140
140
  retained rows, realized batch, and ``max_steps`` against the exact tokenized dataset, so
@@ -17,6 +17,7 @@ import flash.engine.worker.runtime.kernel_warmup as kernel_warmup
17
17
  import flash.engine.worker.train.entry.backend_common as backend_common
18
18
  from flash._internal.diagnostics import sanitize_diagnostic
19
19
  from flash.core.spec import gpu_count_of
20
+ from flash.engine.support.huggingface import hub_error_transience
20
21
  from flash.engine.worker.runtime import state
21
22
  from flash.envs.loading.staged import (
22
23
  StagedEnvironmentTransientError,
@@ -67,6 +68,7 @@ def _run_worker_mode() -> None:
67
68
  # Idempotency: check DONE before any env-mutating pip install (fla fast path).
68
69
  if state.HF_REPO:
69
70
  from huggingface_hub import hf_hub_download
71
+ from huggingface_hub.errors import RemoteEntryNotFoundError
70
72
 
71
73
  try:
72
74
  hf_hub_download(
@@ -76,8 +78,15 @@ def _run_worker_mode() -> None:
76
78
  token=os.environ.get("HF_TOKEN"),
77
79
  )
78
80
  done = True
79
- except Exception:
80
- done = False
81
+ except Exception as exc:
82
+ if type(exc) is RemoteEntryNotFoundError:
83
+ done = False
84
+ elif hub_error_transience(exc) is True:
85
+ raise worker_perf.RetriableInfraError(
86
+ f"DONE marker read failed transiently ({type(exc).__name__})"
87
+ ) from exc
88
+ else:
89
+ raise
81
90
  remaining = state._remaining_worker_wall_seconds()
82
91
  if remaining is not None and remaining <= 0:
83
92
  raise RuntimeError("worker run wall deadline exceeded")
@@ -22,6 +22,7 @@ from email.utils import parsedate_to_datetime
22
22
  if __package__:
23
23
  from flash.providers._lifecycle.bootstrapping import console as _bootstrap_console
24
24
  from flash.providers._lifecycle.bootstrapping import pip as bootstrap_pip
25
+ from flash.providers._lifecycle.bootstrapping import processes as _bootstrap_processes
25
26
  from flash.providers._lifecycle.bootstrapping.secrets import (
26
27
  _payload_secrets,
27
28
  _read_console_tail,
@@ -34,6 +35,7 @@ else:
34
35
  import archive as _source_snapshot # type: ignore[no-redef]
35
36
  import bootstrap_console as _bootstrap_console # type: ignore[no-redef]
36
37
  import bootstrap_pip # type: ignore[no-redef]
38
+ import bootstrap_processes as _bootstrap_processes # type: ignore[no-redef]
37
39
  from bootstrap_secrets import ( # type: ignore[no-redef]
38
40
  _payload_secrets,
39
41
  _read_console_tail,
@@ -297,9 +299,26 @@ def _upload_cleanup_deadlines(deadline_at: float) -> tuple[float, float]:
297
299
 
298
300
 
299
301
  def _worker_execution_deadline(upload_deadline_at: float) -> float:
302
+ """When the worker must be done, leaving the console upload window intact behind it."""
300
303
  return upload_deadline_at - _CONSOLE_UPLOAD_STOP_TIMEOUT_S - _CONSOLE_UPLOAD_FINAL_TIMEOUT_S
301
304
 
302
305
 
306
+ def _group_teardown_deadline(upload_deadline_at: float) -> float:
307
+ """How long killing the worker's process group may take once the wall-clock cap has fired.
308
+
309
+ Teardown begins at the worker deadline, so it cannot be bounded by that same instant: a group
310
+ supervised against its own start time gets a zero wait, SIGKILL is never given time to be
311
+ reaped, and an ordinary capped run is reported as a surviving group holding the gpu.
312
+
313
+ What it must not eat into is the final console tail, since that tail carries the survivor line
314
+ to the user -- hence stopping one full ``_CONSOLE_UPLOAD_FINAL_TIMEOUT_S`` short of the upload
315
+ deadline. The uploader stop that runs in between is capped by its own constant against the same
316
+ absolute deadline, so it is not squeezed by a teardown that runs long. And running long is only
317
+ ever the stuck case: a group that dies on SIGKILL is reaped in milliseconds.
318
+ """
319
+ return upload_deadline_at - _CONSOLE_UPLOAD_FINAL_TIMEOUT_S
320
+
321
+
303
322
  def _join_upload_process_before(process, deadline_at: float, max_wait_s: float) -> None:
304
323
  remaining = max(
305
324
  0.0,
@@ -604,6 +623,7 @@ def run_mode(payload: dict, env: dict, mode: str, deadline_ts: float) -> int:
604
623
  console = f"/tmp/console_{mode}.txt"
605
624
  upload_deadline_at, reaping_deadline_at = _upload_cleanup_deadlines(deadline_ts)
606
625
  worker_deadline_at = _worker_execution_deadline(upload_deadline_at)
626
+ teardown_deadline_at = _group_teardown_deadline(upload_deadline_at)
607
627
  # cap work from its actual start: the absolute deadline includes boot grace, whose unused
608
628
  # portion must not extend the declared wall-time budget.
609
629
  budget = payload.get("run_max_wall_seconds")
@@ -615,12 +635,15 @@ def run_mode(payload: dict, env: dict, mode: str, deadline_ts: float) -> int:
615
635
  _finite_positive_number(time.time(), "current clock") + budget,
616
636
  )
617
637
  timed_out = False
638
+ survived_teardown = ""
618
639
 
619
640
  with open(console, "w", buffering=1) as cf:
620
641
  code_dir = _code_dir(payload)
621
642
  if worker_deadline_at - _finite_positive_number(time.time(), "current clock") <= 0:
622
643
  raise TimeoutError(f"worker mode '{mode}' exceeded the wall-clock cap")
623
- proc = subprocess.Popen(
644
+ # own group: the worker fans out into torchrun/vllm children that hold cuda contexts, and
645
+ # signalling only the leader leaves them holding the gpu after the cap kills the run.
646
+ proc, worker_process_group_id = _bootstrap_processes.start_process_group(
624
647
  [sys.executable, "-m", "flash.engine.support.worker_entrypoint"],
625
648
  cwd=code_dir,
626
649
  env={
@@ -679,13 +702,18 @@ def run_mode(payload: dict, env: dict, mode: str, deadline_ts: float) -> int:
679
702
  proc.wait(timeout=remaining)
680
703
  except subprocess.TimeoutExpired:
681
704
  timed_out = True
682
- proc.kill()
683
- remaining = max(
684
- 0.0,
685
- worker_deadline_at - _finite_positive_number(time.time(), "current clock"),
686
- )
687
- with contextlib.suppress(subprocess.TimeoutExpired):
688
- proc.wait(timeout=remaining)
705
+ # the whole group, not just the leader: a surviving child keeps the gpu busy for
706
+ # every later run on this box. a survivor is recorded rather than raised here, so
707
+ # the console tail below still uploads and explains why the run was killed.
708
+ try:
709
+ _bootstrap_processes.terminate_process_group(
710
+ proc,
711
+ process_group_id=worker_process_group_id,
712
+ deadline_at=teardown_deadline_at,
713
+ )
714
+ except RuntimeError as exc:
715
+ survived_teardown = str(exc)
716
+ print(survived_teardown, flush=True)
689
717
 
690
718
  drain_timeout = max(
691
719
  0.0,
@@ -711,6 +739,8 @@ def run_mode(payload: dict, env: dict, mode: str, deadline_ts: float) -> int:
711
739
  extra = ""
712
740
  if timed_out:
713
741
  extra = f"\n--- bootstrap: mode '{mode}' hit the wall-clock cap; killed ---\n"
742
+ if survived_teardown:
743
+ extra += f"--- bootstrap: {survived_teardown} ---\n"
714
744
  if upload_deadline_at <= _finite_positive_number(time.time(), "current clock"):
715
745
  print("final console upload skipped; uploader reaping reserve reached", flush=True)
716
746
  elif not _upload_console_tail_bounded(
@@ -728,6 +758,12 @@ def run_mode(payload: dict, env: dict, mode: str, deadline_ts: float) -> int:
728
758
  flush=True,
729
759
  )
730
760
  if timed_out:
761
+ if survived_teardown:
762
+ # the box is still occupied, so this is not a clean capped run: say so loudly enough
763
+ # that the failure is not filed as an ordinary timeout.
764
+ raise TimeoutError(
765
+ f"worker mode '{mode}' exceeded the wall-clock cap and {survived_teardown}"
766
+ )
731
767
  raise TimeoutError(f"worker mode '{mode}' exceeded the wall-clock cap")
732
768
  return proc.returncode
733
769
 
@@ -0,0 +1,110 @@
1
+ """Process-group teardown for the worker the bootstrap launches.
2
+
3
+ Stdlib only -- this ships inside the instance capsule alongside ``bootstrap.py`` and runs on the
4
+ rented host, where the ``flash`` package is not importable. The worker's own
5
+ ``flash.engine.worker.train.entry.backend_common.kill_process_group`` solves the same problem one
6
+ layer down, but the bootstrap cannot import it, so the group teardown it needs lives here.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import contextlib
12
+ import os
13
+ import signal
14
+ import subprocess
15
+ import time
16
+
17
+ _TERM_GRACE_S = 10.0
18
+ _KILL_GRACE_S = 5.0
19
+ _POLL_S = 0.1
20
+
21
+
22
+ def _bounded_graces(
23
+ term_grace_s: float, kill_grace_s: float, deadline_at: float | None
24
+ ) -> tuple[float, float]:
25
+ """Split the time actually left before ``deadline_at`` across the term and kill waits.
26
+
27
+ The term wait yields first because the kill is the escalation that actually frees the gpu: with
28
+ a tight budget it is better to signal SIGKILL early and spend what remains waiting for it than
29
+ to burn the whole window on a SIGTERM the group is ignoring.
30
+ """
31
+ if deadline_at is None:
32
+ return max(0.0, term_grace_s), max(0.0, kill_grace_s)
33
+ remaining = max(0.0, deadline_at - time.time())
34
+ kill_wait = min(max(0.0, kill_grace_s), remaining)
35
+ term_wait = min(max(0.0, term_grace_s), remaining - kill_wait)
36
+ return term_wait, kill_wait
37
+
38
+
39
+ def _group_exists(process_group_id: int) -> bool:
40
+ """Report whether any process still belongs to the group."""
41
+ try:
42
+ os.killpg(process_group_id, 0)
43
+ except ProcessLookupError:
44
+ return False
45
+ except PermissionError:
46
+ # visible but not ours to signal, so treat it as alive rather than silently done.
47
+ return True
48
+ return True
49
+
50
+
51
+ def _group_exists_after_reaping(process: subprocess.Popen, process_group_id: int) -> bool:
52
+ """Reap the leader before probing, so a zombie leader does not read as a live group."""
53
+ process.poll()
54
+ return _group_exists(process_group_id)
55
+
56
+
57
+ def _wait_for_group_exit(
58
+ process: subprocess.Popen, process_group_id: int, timeout_s: float
59
+ ) -> bool:
60
+ deadline = time.monotonic() + max(0.0, timeout_s)
61
+ while time.monotonic() < deadline:
62
+ if not _group_exists_after_reaping(process, process_group_id):
63
+ return True
64
+ time.sleep(_POLL_S)
65
+ return not _group_exists_after_reaping(process, process_group_id)
66
+
67
+
68
+ def terminate_process_group(
69
+ process: subprocess.Popen,
70
+ *,
71
+ process_group_id: int,
72
+ term_grace_s: float = _TERM_GRACE_S,
73
+ kill_grace_s: float = _KILL_GRACE_S,
74
+ deadline_at: float | None = None,
75
+ ) -> None:
76
+ """SIGTERM the group, wait, escalate to SIGKILL, and verify the group is gone.
77
+
78
+ Signalling the group rather than the leader pid is the point: a training worker fans out into
79
+ torchrun and vllm children that hold cuda contexts, and one survivor strands a paid gpu for
80
+ every later run on that box.
81
+
82
+ ``deadline_at`` caps the whole supervision against the wall clock. Without it a group that
83
+ ignores SIGTERM costs the full term-then-kill grace, which is time the caller has already
84
+ budgeted for what comes after teardown -- the final console upload that carries the survivor
85
+ line. The kill still goes out when the term grace is spent, so the escalation is never skipped,
86
+ only the waiting is bounded.
87
+ """
88
+ term_wait, kill_wait = _bounded_graces(term_grace_s, kill_grace_s, deadline_at)
89
+ with contextlib.suppress(ProcessLookupError, PermissionError):
90
+ os.killpg(process_group_id, signal.SIGTERM)
91
+ if not _wait_for_group_exit(process, process_group_id, term_wait):
92
+ with contextlib.suppress(ProcessLookupError, PermissionError):
93
+ os.killpg(process_group_id, signal.SIGKILL)
94
+ _wait_for_group_exit(process, process_group_id, kill_wait)
95
+ with contextlib.suppress(subprocess.TimeoutExpired):
96
+ process.wait(timeout=0)
97
+ if _group_exists(process_group_id):
98
+ raise RuntimeError(f"process group {process_group_id} survived term and kill supervision")
99
+
100
+
101
+ def start_process_group(args, **kwargs) -> tuple[subprocess.Popen, int]:
102
+ """Start one process as its own group leader and return it with its group id.
103
+
104
+ The group id is captured at launch because ``os.getpgid`` stops working once the leader is
105
+ reaped, which is exactly when the surviving descendants still need addressing.
106
+ """
107
+ if "start_new_session" in kwargs:
108
+ raise ValueError("start_new_session is owned by process-group supervision")
109
+ process = subprocess.Popen(args, start_new_session=True, **kwargs)
110
+ return process, process.pid
@@ -55,29 +55,28 @@ def run_label_prefix(run_id: str) -> str:
55
55
 
56
56
 
57
57
  def label_matches_run(label: str, prefix: str) -> bool:
58
- """True iff ``label`` belongs to the run whose prefix is ``prefix`` — an EXACT match, or the prefix
59
- followed by the ``-s`` seed boundary. Boundary-anchored so ``flash-100`` never matches
60
- ``flash-1000-...`` (or vice versa). The single label-ownership test every instance provider's sweep
61
- and run-scoped teardown shares."""
62
- return label == prefix or label.startswith(prefix + "-s")
63
-
64
-
65
- def instance_label(run_id: str, seed: int, attempt: int) -> str:
66
- """Instance name: run-derived so ``sweep_orphans`` can tell ours from anything else on the
67
- account, and bounded (via ``run_label_prefix``) so the provider never truncates it."""
68
- try:
69
- seed_i = int(seed)
70
- except (TypeError, ValueError):
71
- seed_i = 0
58
+ """True iff ``label`` belongs to the run whose prefix is ``prefix`` -- an EXACT match, or the
59
+ prefix followed by the ``-a`` attempt boundary. Boundary-anchored so ``flash-100`` never matches
60
+ ``flash-1000-...`` (or vice versa). The single label-ownership test every instance provider's
61
+ sweep and run-scoped teardown shares."""
62
+ return label == prefix or label.startswith(prefix + "-a")
63
+
64
+
65
+ def instance_label(run_id: str, attempt: int) -> str:
66
+ """Instance name: run plus the attempt executing on this host.
67
+
68
+ Run-derived so ``sweep_orphans`` can tell ours from anything else on the account, and bounded
69
+ (via ``run_label_prefix``) so the provider never truncates it. The seed is not part of the name:
70
+ a run has exactly one, so it distinguished nothing here while competing with the attempt for the
71
+ digit budget, and a truncated attempt is one two attempts of a run can collide on.
72
+ """
72
73
  attempt_i = _attempt_int(attempt)
73
74
  if attempt_i is None:
74
75
  raise ValueError("instance attempt identity is invalid")
75
- seed_s, attempt_s = str(seed_i), str(attempt_i)
76
- # Bound the whole suffix to _SUFFIX_BUDGET: split the digit budget between attempt and seed.
77
- digit_budget = _SUFFIX_BUDGET - len("-s-a")
78
- attempt_s = attempt_s[: max(1, min(len(attempt_s), max(1, digit_budget - 1)))]
79
- seed_s = seed_s[: max(0, digit_budget - len(attempt_s))]
80
- return f"{run_label_prefix(run_id)}-s{seed_s}-a{attempt_s}"
76
+ attempt_s = str(attempt_i)
77
+ if len(attempt_s) > _SUFFIX_BUDGET - len("-a"):
78
+ raise ValueError("instance attempt identity exceeds the provider name budget")
79
+ return f"{run_label_prefix(run_id)}-a{attempt_s}"
81
80
 
82
81
 
83
82
  @dataclass
@@ -183,7 +182,6 @@ fi
183
182
 
184
183
  def build_payload(
185
184
  spec,
186
- seed: int,
187
185
  attempt: int,
188
186
  *,
189
187
  arm: str,
@@ -197,7 +195,6 @@ def build_payload(
197
195
  """The bootstrap's input — field-compatible with the RunPod ``_train_body`` payload, plus the
198
196
  bits the instance can't infer (HF prefix for markers, wall cap, attempt, and the substrate
199
197
  ``arm`` that the bootstrap stamps as FLASH_ARM + the marker name)."""
200
- from flash.core.spec import require_matching_seed
201
198
  from flash.envs.loading.base import worker_pip_with_extras
202
199
  from flash.providers._lifecycle.net.worker import (
203
200
  build_worker_env,
@@ -205,12 +202,10 @@ def build_payload(
205
202
  )
206
203
  from flash.snapshot.archive import parse_descriptor
207
204
 
208
- canonical_seed = require_matching_seed(spec, seed)
209
205
  # strip the runpod-only volume redirect; point base-model prefetch at this provider's cache unless the user overrode it.
210
206
  env = strip_runpod_volume_env(
211
207
  build_worker_env(
212
208
  spec,
213
- canonical_seed,
214
209
  runtime_secrets=runtime_secrets,
215
210
  )
216
211
  )