freesolo-flash-dev 1.2.124__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.124 → freesolo_flash_dev-1.2.128}/CHANGELOG.md +10 -0
  2. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/PKG-INFO +1 -1
  3. freesolo_flash_dev-1.2.128/docs/hosted-inference-load-testing.md +224 -0
  4. freesolo_flash_dev-1.2.128/flash/_internal/http.py +101 -0
  5. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/imports.py +16 -3
  6. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/push.py +62 -12
  7. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/scaffold/TRAINING.md +4 -2
  8. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/ui/heartbeat.py +1 -1
  9. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/client/freesolo_api.py +3 -2
  10. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/client/http.py +4 -3
  11. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/core/spec.py +0 -12
  12. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cost/spec.py +1 -1
  13. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/entry/worker.py +11 -2
  14. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +44 -8
  15. freesolo_flash_dev-1.2.128/flash/providers/_lifecycle/bootstrapping/processes.py +110 -0
  16. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/instance.py +19 -24
  17. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/provider.py +7 -18
  18. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/net/worker.py +4 -4
  19. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/artifacts/weight_cache.py +0 -1
  20. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/core/base.py +7 -7
  21. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/execution/provider.py +3 -7
  22. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/jobs/__init__.py +9 -19
  23. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/jobs/builders.py +0 -2
  24. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/jobs/reap.py +2 -2
  25. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/job_execution.py +14 -11
  26. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/provider.py +6 -11
  27. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/resources.py +16 -3
  28. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/serverless/endpoints.py +8 -50
  29. freesolo_flash_dev-1.2.128/flash/providers/runpod/serverless/naming.py +93 -0
  30. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/vast/execution/provider.py +4 -8
  31. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/vast/jobs/__init__.py +7 -13
  32. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/vast/jobs/builders.py +0 -2
  33. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/status.py +11 -3
  34. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/attach.py +4 -8
  35. freesolo_flash_dev-1.2.124/flash/runner/supervise/seed_submission.py → freesolo_flash_dev-1.2.128/flash/runner/supervise/attempt_supervision.py +12 -18
  36. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/lifecycle.py +29 -13
  37. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/recovery.py +1 -1
  38. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runtime_capsule/profiles.py +2 -1
  39. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/app/http.py +9 -1
  40. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/app/progress.py +7 -1
  41. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/deploy.py +4 -0
  42. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/request/transport.py +15 -1
  43. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/asgi/app.py +25 -24
  44. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/billing/charges.py +2 -1
  45. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/ops/reconcile.py +2 -1
  46. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/checkpoints.py +2 -2
  47. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/environment_registry.py +2 -1
  48. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/envs.py +153 -67
  49. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/projects.py +3 -2
  50. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/platform/auth.py +7 -3
  51. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/platform/internal_client.py +5 -4
  52. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/platform/runtime.py +6 -5
  53. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/routes/serving.py +23 -21
  54. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/app/README.md +6 -0
  55. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/app/modal_app.py +38 -14
  56. freesolo_flash_dev-1.2.128/flash/serving/loadtest/__init__.py +5 -0
  57. freesolo_flash_dev-1.2.128/flash/serving/loadtest/__main__.py +5 -0
  58. freesolo_flash_dev-1.2.128/flash/serving/loadtest/artifacts.py +195 -0
  59. freesolo_flash_dev-1.2.128/flash/serving/loadtest/cli.py +100 -0
  60. freesolo_flash_dev-1.2.128/flash/serving/loadtest/metrics.py +279 -0
  61. freesolo_flash_dev-1.2.128/flash/serving/loadtest/protocol.py +321 -0
  62. freesolo_flash_dev-1.2.128/flash/serving/loadtest/runner.py +535 -0
  63. freesolo_flash_dev-1.2.128/flash/serving/loadtest/schedule.py +191 -0
  64. freesolo_flash_dev-1.2.128/flash/serving/loadtest/schema.py +459 -0
  65. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/accounting/usage_facts.py +28 -0
  66. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/accounting/usage_outbox.py +19 -0
  67. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/generation.py +56 -0
  68. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/lora_engine.py +66 -10
  69. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/responses.py +4 -0
  70. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/pyproject.toml +2 -2
  71. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/_helpers/runner.py +1 -1
  72. freesolo_flash_dev-1.2.128/tests/_helpers/wire_headers.py +24 -0
  73. freesolo_flash_dev-1.2.128/tests/serving/hosted_loadtest_fake_scenario.json +85 -0
  74. freesolo_flash_dev-1.2.128/tests/serving/test_loadtest_artifacts.py +92 -0
  75. freesolo_flash_dev-1.2.128/tests/serving/test_loadtest_metrics.py +203 -0
  76. freesolo_flash_dev-1.2.128/tests/serving/test_loadtest_protocol.py +389 -0
  77. freesolo_flash_dev-1.2.128/tests/serving/test_loadtest_runner.py +373 -0
  78. freesolo_flash_dev-1.2.128/tests/serving/test_loadtest_schedule.py +87 -0
  79. freesolo_flash_dev-1.2.128/tests/serving/test_loadtest_schema.py +158 -0
  80. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_per_model_gpu.py +16 -16
  81. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_router.py +8 -0
  82. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_serve_structured_outputs.py +82 -0
  83. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_usage_outbox.py +49 -0
  84. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_usage_reporter.py +23 -4
  85. freesolo_flash_dev-1.2.128/tests/test_authenticated_redirects.py +340 -0
  86. freesolo_flash_dev-1.2.128/tests/test_bootstrap_process_groups.py +146 -0
  87. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cancel_remote.py +66 -23
  88. freesolo_flash_dev-1.2.128/tests/test_endpoint_name.py +142 -0
  89. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_download.py +1 -1
  90. freesolo_flash_dev-1.2.128/tests/test_env_git_auth.py +319 -0
  91. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_publish.py +10 -9
  92. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_push.py +270 -5
  93. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_ref_pinning.py +2 -3
  94. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_flash_worker.py +19 -24
  95. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_freesolo_api_transport.py +4 -3
  96. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_gpus.py +1 -1
  97. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_grpo_resident_sizing.py +1 -1
  98. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_grpo_rollout_contract.py +2 -2
  99. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_idle_endpoint_reaper.py +65 -22
  100. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_instance_bootstrap_coverage.py +204 -4
  101. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_jobs.py +51 -63
  102. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_lambda_runner.py +105 -130
  103. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_multi_gpu_gate.py +4 -8
  104. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_opd_resume_safety.py +11 -12
  105. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_opd_train.py +1 -2
  106. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_orchestrator_flash.py +4 -4
  107. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_projects.py +5 -4
  108. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_provider_routing.py +68 -79
  109. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_provider_teardown_robustness.py +4 -4
  110. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_providers_symmetry.py +2 -2
  111. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_resume_on_retry.py +36 -36
  112. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_runmgmt.py +153 -53
  113. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_bootstrap_http.py +7 -0
  114. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_progress.py +1 -0
  115. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_chat_transport.py +55 -0
  116. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_server_api.py +127 -40
  117. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_server_checkpoints_coverage.py +2 -6
  118. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_server_envs_coverage.py +24 -3
  119. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_server_standalone.py +1 -1
  120. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serving_contract.py +89 -0
  121. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_staged_environment.py +6 -2
  122. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_teacher_broker.py +4 -7
  123. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_training_controls.py +11 -9
  124. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_vast_offers.py +3 -3
  125. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_vast_provider_coverage.py +1 -1
  126. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_vast_runner.py +115 -135
  127. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_warmstart_cross_repo.py +1 -1
  128. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_weight_cache.py +16 -25
  129. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_worker_hardexit.py +153 -0
  130. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_worker_stack.py +25 -0
  131. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/uv.lock +1 -1
  132. freesolo_flash_dev-1.2.124/tests/test_endpoint_name.py +0 -45
  133. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.dockerignore +0 -0
  134. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.env.example +0 -0
  135. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/CODEOWNERS +0 -0
  136. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  137. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  138. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  139. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  140. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/dependabot.yml +0 -0
  141. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/auto-rebake.yml +0 -0
  142. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/bake-kernel-cache.yml +0 -0
  143. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/ci.yml +0 -0
  144. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/deploy-modal-dev.yml +0 -0
  145. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/deploy-modal.yml +0 -0
  146. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/dev-kernel-cache.yml +0 -0
  147. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/main-source-guard.yml +0 -0
  148. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/notify-tests-repo.yml +0 -0
  149. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  150. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/publish-dev.yml +0 -0
  151. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/publish-image.yml +0 -0
  152. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/publish-serving-image.yml +0 -0
  153. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/publish.yml +0 -0
  154. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/version-parity.yml +0 -0
  155. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.github/workflows/worker-image.yml +0 -0
  156. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/.gitignore +0 -0
  157. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/CODE_OF_CONDUCT.md +0 -0
  158. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/CONTRIBUTING.md +0 -0
  159. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/Dockerfile +0 -0
  160. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/Dockerfile.serve +0 -0
  161. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/Dockerfile.worker +0 -0
  162. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/LICENSE +0 -0
  163. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/NOTICE +0 -0
  164. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/README.md +0 -0
  165. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/SECURITY.md +0 -0
  166. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/SELF_HOSTING.md +0 -0
  167. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/build/kernel_cache/.gitignore +0 -0
  168. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/build/kernel_cache/.keep +0 -0
  169. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/deploy/infisical/README.md +0 -0
  170. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/deploy/infisical/entrypoint.sh +0 -0
  171. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/docker/Dockerfile.kernelcache +0 -0
  172. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/docker/Dockerfile.kernelcache.relayer +0 -0
  173. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/docker/bake_kernel_cache.py +0 -0
  174. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/docker/bake_pod_entry.py +0 -0
  175. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/docker/extract_cudart_fix.py +0 -0
  176. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/docker/kernel_fingerprint.py +0 -0
  177. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/docker/make_rp_handler.py +0 -0
  178. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/docker/patch_vllm_moe_lora.py +0 -0
  179. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/docs/serving-contract.md +0 -0
  180. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/__init__.py +0 -0
  181. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/_internal/__init__.py +0 -0
  182. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/_internal/channel.py +0 -0
  183. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/_internal/diagnostics.py +0 -0
  184. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/_internal/fileio.py +0 -0
  185. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/_internal/logging.py +0 -0
  186. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/_internal/openai_sse.py +0 -0
  187. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/_internal/paths.py +0 -0
  188. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/_internal/version.py +0 -0
  189. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/adapters/__init__.py +0 -0
  190. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/adapters/artifacts.py +0 -0
  191. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/adapters/fused_experts.py +0 -0
  192. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/adapters/lora_rank.py +0 -0
  193. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/adapters/targets.py +0 -0
  194. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/__init__.py +0 -0
  195. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/__main__.py +0 -0
  196. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/__init__.py +0 -0
  197. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/__init__.py +0 -0
  198. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/__init__.py +0 -0
  199. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/list.py +0 -0
  200. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/retained.py +0 -0
  201. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/setup.py +0 -0
  202. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  203. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/__init__.py +0 -0
  204. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/episode.py +0 -0
  205. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/eval.py +0 -0
  206. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/eval_args.py +0 -0
  207. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/evaluations.py +0 -0
  208. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/params.py +0 -0
  209. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/test.py +0 -0
  210. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/env/testing/warnings.py +0 -0
  211. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/__init__.py +0 -0
  212. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/account.py +0 -0
  213. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/catalog.py +0 -0
  214. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/deploy.py +0 -0
  215. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/log_follow.py +0 -0
  216. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/prompt_budget.py +0 -0
  217. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/runs.py +0 -0
  218. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/traces.py +0 -0
  219. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/train.py +0 -0
  220. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/ops/worker_output.py +0 -0
  221. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/serving/__init__.py +0 -0
  222. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/serving/deploy.py +0 -0
  223. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/serving/identity.py +0 -0
  224. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/serving/status.py +0 -0
  225. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/commands/serving/undeploy.py +0 -0
  226. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/__init__.py +0 -0
  227. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/account.py +0 -0
  228. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/env.py +0 -0
  229. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/errors.py +0 -0
  230. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/main.py +0 -0
  231. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/models.py +0 -0
  232. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/serve_parser.py +0 -0
  233. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/traces.py +0 -0
  234. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/parsing/training.py +0 -0
  235. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/scaffold/__init__.py +0 -0
  236. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/ui/__init__.py +0 -0
  237. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/ui/cost.py +0 -0
  238. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/ui/env_panels.py +0 -0
  239. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/ui/render.py +0 -0
  240. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/ui/tables.py +0 -0
  241. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cli/ui/tty.py +0 -0
  242. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/client/__init__.py +0 -0
  243. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/client/config.py +0 -0
  244. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/client/runtime_secrets.py +0 -0
  245. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/client/shapes.py +0 -0
  246. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/client/specs.py +0 -0
  247. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/client/streaming.py +0 -0
  248. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/content/__init__.py +0 -0
  249. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/content/image_descriptors.py +0 -0
  250. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/content/multimodal.py +0 -0
  251. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/content/reasoning_normalization.py +0 -0
  252. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/content/structured_outputs.py +0 -0
  253. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/content/thinking.py +0 -0
  254. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/core/__init__.py +0 -0
  255. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/core/catalog.py +0 -0
  256. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/core/grpo.py +0 -0
  257. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/core/spec_persistence.py +0 -0
  258. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cost/__init__.py +0 -0
  259. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cost/analytical.py +0 -0
  260. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cost/currency.py +0 -0
  261. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cost/facts.py +0 -0
  262. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/cost/types.py +0 -0
  263. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/__init__.py +0 -0
  264. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/plan/__init__.py +0 -0
  265. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/plan/kv_sizing.py +0 -0
  266. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/plan/model_config_probe.py +0 -0
  267. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/plan/prompt_budget.py +0 -0
  268. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/plan/recipe.py +0 -0
  269. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/plan/steps.py +0 -0
  270. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/plan/vram.py +0 -0
  271. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/__init__.py +0 -0
  272. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/dataset_profile.py +0 -0
  273. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/image_tokens.py +0 -0
  274. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/reasoning_render.py +0 -0
  275. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/sft_image_rows.py +0 -0
  276. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/sft_workload.py +0 -0
  277. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/tokenizer.py +0 -0
  278. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/profiling/workload_profile.py +0 -0
  279. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/result/__init__.py +0 -0
  280. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/result/accounting.py +0 -0
  281. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/result/rollout_samples.py +0 -0
  282. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/support/__init__.py +0 -0
  283. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/support/huggingface.py +0 -0
  284. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/support/verl_checkpoint.py +0 -0
  285. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/support/verl_policy.py +0 -0
  286. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/support/worker_entrypoint.py +0 -0
  287. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/__init__.py +0 -0
  288. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/__main__.py +0 -0
  289. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/entry/__init__.py +0 -0
  290. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/entry/opd.py +0 -0
  291. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/entry/rl.py +0 -0
  292. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/entry/sft.py +0 -0
  293. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/io/__init__.py +0 -0
  294. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/io/heartbeat.py +0 -0
  295. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/io/hf.py +0 -0
  296. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/io/prefetch.py +0 -0
  297. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/io/wandb_log.py +0 -0
  298. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/__init__.py +0 -0
  299. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/adapter.py +0 -0
  300. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/chatml_mask.py +0 -0
  301. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/decoding.py +0 -0
  302. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/lora.py +0 -0
  303. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/model/packing.py +0 -0
  304. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/perf/__init__.py +0 -0
  305. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/perf/diagnostics.py +0 -0
  306. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/perf/lifecycle.py +0 -0
  307. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/perf/liger.py +0 -0
  308. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/perf/memory.py +0 -0
  309. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/runtime/__init__.py +0 -0
  310. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  311. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/runtime/rng.py +0 -0
  312. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/runtime/state.py +0 -0
  313. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/teacher/__init__.py +0 -0
  314. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/teacher/client.py +0 -0
  315. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/teacher/encoding.py +0 -0
  316. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  317. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/__init__.py +0 -0
  318. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/__init__.py +0 -0
  319. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/child/__init__.py +0 -0
  320. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/child/glue.py +0 -0
  321. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/child/runtime.py +0 -0
  322. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  323. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  324. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  325. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  326. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/__init__.py +0 -0
  327. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/backend_common.py +0 -0
  328. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/opd_train.py +0 -0
  329. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/opd_train_runner.py +0 -0
  330. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  331. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/rl_train.py +0 -0
  332. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  333. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  334. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/sft_train.py +0 -0
  335. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  336. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/__init__.py +0 -0
  337. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
  338. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
  339. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
  340. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
  341. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
  342. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
  343. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  344. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  345. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/entry.py +0 -0
  346. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
  347. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/plugin.py +0 -0
  348. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  349. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  350. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/structured.py +0 -0
  351. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/child/tensors.py +0 -0
  352. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
  353. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
  354. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
  355. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
  356. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
  357. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
  358. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
  359. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
  360. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
  361. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
  362. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
  363. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
  364. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
  365. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/__init__.py +0 -0
  366. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  367. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/child/entry.py +0 -0
  368. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  369. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/child/patches.py +0 -0
  370. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  371. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  372. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  373. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/launch/config.py +0 -0
  374. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  375. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  376. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  377. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  378. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  379. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
  380. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  381. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  382. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/__init__.py +0 -0
  383. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/child/entry.py +0 -0
  384. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/child/plugin.py +0 -0
  385. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  386. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  387. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/train/sft/setup/config.py +0 -0
  388. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/__init__.py +0 -0
  389. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/capabilities.py +0 -0
  390. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/checkpoints.py +0 -0
  391. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/child_io.py +0 -0
  392. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/diagnostics.py +0 -0
  393. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/parallelism.py +0 -0
  394. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/parent_work.py +0 -0
  395. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/engine/worker/verl/process_census.py +0 -0
  396. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/__init__.py +0 -0
  397. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/loading/__init__.py +0 -0
  398. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/loading/adapter.py +0 -0
  399. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/loading/base.py +0 -0
  400. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/loading/loader.py +0 -0
  401. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/loading/pull.py +0 -0
  402. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/loading/staged.py +0 -0
  403. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/meta/__init__.py +0 -0
  404. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/meta/cache_security.py +0 -0
  405. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/meta/dataset_selection.py +0 -0
  406. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/meta/evaluations.py +0 -0
  407. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/meta/identity.py +0 -0
  408. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/meta/namespace_listing.py +0 -0
  409. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/package/__init__.py +0 -0
  410. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/package/direct_tokens.py +0 -0
  411. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/package/limits.py +0 -0
  412. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/envs/package/unpack.py +0 -0
  413. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/__init__.py +0 -0
  414. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/__init__.py +0 -0
  415. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  416. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  417. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  418. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  419. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/host/__init__.py +0 -0
  420. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  421. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/host/failmark.py +0 -0
  422. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  423. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  424. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/poll.py +0 -0
  425. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  426. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  427. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/net/__init__.py +0 -0
  428. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/net/auth.py +0 -0
  429. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/net/deadline.py +0 -0
  430. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/_lifecycle/net/http.py +0 -0
  431. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/artifacts/__init__.py +0 -0
  432. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/artifacts/hf.py +0 -0
  433. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/artifacts/preload_runpod.py +0 -0
  434. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/core/__init__.py +0 -0
  435. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/core/allocator.py +0 -0
  436. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/core/fit_errors.py +0 -0
  437. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/core/preflight.py +0 -0
  438. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/core/realized.py +0 -0
  439. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/core/registry.py +0 -0
  440. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/core/sharding.py +0 -0
  441. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/__init__.py +0 -0
  442. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/__init__.py +0 -0
  443. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/api.py +0 -0
  444. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/auth.py +0 -0
  445. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/gpus.py +0 -0
  446. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/preflight.py +0 -0
  447. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/client/pricing.py +0 -0
  448. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/lambda_/execution/__init__.py +0 -0
  449. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/__init__.py +0 -0
  450. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/__init__.py +0 -0
  451. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/api.py +0 -0
  452. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/auth.py +0 -0
  453. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/cost.py +0 -0
  454. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/gpus.py +0 -0
  455. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/preflight.py +0 -0
  456. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/client/pricing.py +0 -0
  457. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/__init__.py +0 -0
  458. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/jobs.py +0 -0
  459. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/execution/polling.py +0 -0
  460. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/runpod/serverless/__init__.py +0 -0
  461. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/vast/__init__.py +0 -0
  462. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/vast/client/__init__.py +0 -0
  463. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/vast/client/api.py +0 -0
  464. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/vast/client/auth.py +0 -0
  465. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/vast/client/preflight.py +0 -0
  466. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/vast/client/pricing.py +0 -0
  467. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/providers/vast/execution/__init__.py +0 -0
  468. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/py.typed +0 -0
  469. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/__init__.py +0 -0
  470. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/accounting/__init__.py +0 -0
  471. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/accounting/artifacts.py +0 -0
  472. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/accounting/costs.py +0 -0
  473. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/accounting/reconciliation.py +0 -0
  474. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/accounting/weight_cache.py +0 -0
  475. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/__init__.py +0 -0
  476. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/attempts.py +0 -0
  477. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/claim_lock.py +0 -0
  478. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/deadlines.py +0 -0
  479. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/preparation.py +0 -0
  480. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/reporting.py +0 -0
  481. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/state.py +0 -0
  482. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/lifecycle/submit.py +0 -0
  483. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/results/__init__.py +0 -0
  484. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/results/checkpoints.py +0 -0
  485. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/results/verified_revisions.py +0 -0
  486. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/__init__.py +0 -0
  487. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/attach_reconcile.py +0 -0
  488. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/deploy.py +0 -0
  489. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/errors.py +0 -0
  490. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/retry_decision.py +0 -0
  491. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runner/supervise/transitions.py +0 -0
  492. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runtime_capsule/__init__.py +0 -0
  493. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runtime_capsule/build.py +0 -0
  494. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/runtime_capsule/manifest.py +0 -0
  495. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/schema/__init__.py +0 -0
  496. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/schema/fields.py +0 -0
  497. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/__init__.py +0 -0
  498. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/app/__init__.py +0 -0
  499. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/app/__main__.py +0 -0
  500. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/app/bootstrap.py +0 -0
  501. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/app/chat_stream.py +0 -0
  502. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/app/launch.py +0 -0
  503. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/app/manifest.py +0 -0
  504. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/app/materialize.py +0 -0
  505. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/app/openai.py +0 -0
  506. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/contract/__init__.py +0 -0
  507. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/contract/errors.py +0 -0
  508. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/contract/protocol.py +0 -0
  509. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/contract/provenance.py +0 -0
  510. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/contract/responses.py +0 -0
  511. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/contract/urls.py +0 -0
  512. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/control/__init__.py +0 -0
  513. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/control/_canonical.py +0 -0
  514. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/control/_serialization.py +0 -0
  515. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/control/_urls.py +0 -0
  516. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/control/credentials.py +0 -0
  517. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/control/planning.py +0 -0
  518. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/control/types.py +0 -0
  519. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/__init__.py +0 -0
  520. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/adapter_check.py +0 -0
  521. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/export.py +0 -0
  522. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/preflight.py +0 -0
  523. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/profiles.py +0 -0
  524. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/readiness.py +0 -0
  525. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/deployment/resolve.py +0 -0
  526. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/__init__.py +0 -0
  527. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/common/__init__.py +0 -0
  528. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/common/records.py +0 -0
  529. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/__init__.py +0 -0
  530. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  531. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  532. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  533. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  534. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  535. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  536. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  537. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  538. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  539. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  540. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  541. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  542. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  543. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/request/__init__.py +0 -0
  544. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/request/openai.py +0 -0
  545. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/request/runtime_support.py +0 -0
  546. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/request/streaming.py +0 -0
  547. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/request/thinking.py +0 -0
  548. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/request/validation.py +0 -0
  549. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/__init__.py +0 -0
  550. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/adapters.py +0 -0
  551. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/engine.py +0 -0
  552. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/errors.py +0 -0
  553. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/multimodal.py +0 -0
  554. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/prompt.py +0 -0
  555. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/sampling.py +0 -0
  556. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/structured_outputs.py +0 -0
  557. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serve/runtime/types.py +0 -0
  558. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/__init__.py +0 -0
  559. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/__main__.py +0 -0
  560. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/asgi/__init__.py +0 -0
  561. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/asgi/cli.py +0 -0
  562. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/billing/__init__.py +0 -0
  563. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/billing/retry.py +0 -0
  564. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/__init__.py +0 -0
  565. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/ops/__init__.py +0 -0
  566. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/ops/repo_cleanup.py +0 -0
  567. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/ops/serving_resources.py +0 -0
  568. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/__init__.py +0 -0
  569. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/registry/runs.py +0 -0
  570. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/teacher/__init__.py +0 -0
  571. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/teacher/broker.py +0 -0
  572. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/teacher/errors.py +0 -0
  573. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/domain/teacher/requests.py +0 -0
  574. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/platform/__init__.py +0 -0
  575. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/platform/db.py +0 -0
  576. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/platform/deps.py +0 -0
  577. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/platform/locks.py +0 -0
  578. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/routes/__init__.py +0 -0
  579. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/routes/envs.py +0 -0
  580. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/routes/meta.py +0 -0
  581. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/routes/runs.py +0 -0
  582. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/routes/serving_chat.py +0 -0
  583. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/routes/serving_completion.py +0 -0
  584. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/routes/serving_revisions.py +0 -0
  585. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/routes/serving_smoke.py +0 -0
  586. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/server/routes/teacher.py +0 -0
  587. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/__init__.py +0 -0
  588. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/app/__init__.py +0 -0
  589. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/__init__.py +0 -0
  590. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/accounting/__init__.py +0 -0
  591. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/accounting/usage.py +0 -0
  592. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/__init__.py +0 -0
  593. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/boot.py +0 -0
  594. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/errors.py +0 -0
  595. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/lora_entries.py +0 -0
  596. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/model_config.py +0 -0
  597. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/prequant_config.py +0 -0
  598. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/engine/support.py +0 -0
  599. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/__init__.py +0 -0
  600. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/adapter_routes.py +0 -0
  601. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/body_limit.py +0 -0
  602. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/context.py +0 -0
  603. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/headers.py +0 -0
  604. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/inference_routes.py +0 -0
  605. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/router.py +0 -0
  606. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/http/routing.py +0 -0
  607. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/__init__.py +0 -0
  608. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/multimodal.py +0 -0
  609. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/openai_request.py +0 -0
  610. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/openai_stream.py +0 -0
  611. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/provenance.py +0 -0
  612. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/requests.py +0 -0
  613. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/schemas.py +0 -0
  614. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/streaming.py +0 -0
  615. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/io/structured_outputs.py +0 -0
  616. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/__init__.py +0 -0
  617. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/access.py +0 -0
  618. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/lookup.py +0 -0
  619. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/persisted_columns.py +0 -0
  620. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/persistence.py +0 -0
  621. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/registration.py +0 -0
  622. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/registry.py +0 -0
  623. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/settings.py +0 -0
  624. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/supabase_rest.py +0 -0
  625. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/serving/src/store/undeploy.py +0 -0
  626. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/snapshot/__init__.py +0 -0
  627. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/snapshot/archive.py +0 -0
  628. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/teacher/__init__.py +0 -0
  629. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/teacher/limits.py +0 -0
  630. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/teacher/provider_status.py +0 -0
  631. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/flash/teacher/retry_contract.py +0 -0
  632. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/scripts/build_dev_dist.py +0 -0
  633. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/scripts/check_file_size.py +0 -0
  634. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/scripts/check_function_size.py +0 -0
  635. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/scripts/check_rollout_identity_actor.py +0 -0
  636. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/scripts/check_source_layout.py +0 -0
  637. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/scripts/check_verl_pin_exists.py +0 -0
  638. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/scripts/qualify_serving_profile.py +0 -0
  639. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/scripts/scrub_history.sh +0 -0
  640. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/serve_launch.py +0 -0
  641. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/__init__.py +0 -0
  642. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/_helpers/__init__.py +0 -0
  643. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/_helpers/chat_provenance.py +0 -0
  644. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/_helpers/chat_transport.py +0 -0
  645. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/_helpers/managed_chat.py +0 -0
  646. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/_helpers/profile.py +0 -0
  647. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/_helpers/server_api_plugin.py +0 -0
  648. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/_helpers/source_snapshot.py +0 -0
  649. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/_helpers/specs.py +0 -0
  650. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/_helpers/teacher.py +0 -0
  651. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/_helpers/vast.py +0 -0
  652. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/capture_image_sft_processor_oracle.py +0 -0
  653. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/capture_qwen38_27b_metadata.py +0 -0
  654. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/conftest.py +0 -0
  655. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  656. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  657. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  658. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  659. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  660. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  661. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/live/__init__.py +0 -0
  662. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/live/conftest.py +0 -0
  663. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/live/test_lambda_live.py +0 -0
  664. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/live/test_runpod_live.py +0 -0
  665. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/live/test_sft_thinking_render_live.py +0 -0
  666. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/live/test_vast_live.py +0 -0
  667. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/checkpoint_fixtures.py +0 -0
  668. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/conftest.py +0 -0
  669. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_base_model_serving.py +0 -0
  670. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_chat_auth.py +0 -0
  671. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_chat_authorizer.py +0 -0
  672. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  673. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_checkpoint_model_validation.py +0 -0
  674. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_engine_error_status.py +0 -0
  675. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_fp8_config.py +0 -0
  676. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_immutable_engine.py +0 -0
  677. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_immutable_revisions.py +0 -0
  678. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_immutable_schemas.py +0 -0
  679. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_mirror_sampling_parity.py +0 -0
  680. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_modal_deploy_identity.py +0 -0
  681. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_modal_image_paths.py +0 -0
  682. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_model_config.py +0 -0
  683. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_multimodal.py +0 -0
  684. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_openai_stream_options.py +0 -0
  685. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_persistence.py +0 -0
  686. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_pre_first_disconnect.py +0 -0
  687. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_prequant_config.py +0 -0
  688. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_registry.py +0 -0
  689. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_registry_coverage.py +0 -0
  690. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_request_body_limit.py +0 -0
  691. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_router_coverage.py +0 -0
  692. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_router_edge_coverage.py +0 -0
  693. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_schemas_coverage.py +0 -0
  694. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_serve_reasoning_split.py +0 -0
  695. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_serve_thinking.py +0 -0
  696. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_settings.py +0 -0
  697. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_structured_outputs.py +0 -0
  698. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_structured_outputs_coverage.py +0 -0
  699. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving/test_supabase_rest_coverage.py +0 -0
  700. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving_conformance/__init__.py +0 -0
  701. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving_conformance/conftest.py +0 -0
  702. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/serving_conformance/test_contract.py +0 -0
  703. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_accounting_coverage.py +0 -0
  704. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_adapter_shard_completeness.py +0 -0
  705. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_agent_flash_cli_contract.py +0 -0
  706. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_algorithms.py +0 -0
  707. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_allocator.py +0 -0
  708. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_backend_common.py +0 -0
  709. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_backend_jobspec_contract.py +0 -0
  710. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_bake_kernel_cache.py +0 -0
  711. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_base_model_provenance.py +0 -0
  712. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_billing_retry.py +0 -0
  713. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_build_context_contract.py +0 -0
  714. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_capture_qwen38_metadata.py +0 -0
  715. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_catalog_consistency.py +0 -0
  716. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_catalog_only_models.py +0 -0
  717. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_charge_pricing.py +0 -0
  718. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_chat_foundations.py +0 -0
  719. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_checkpoint_lifecycle.py +0 -0
  720. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_checkpoints.py +0 -0
  721. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_commands.py +0 -0
  722. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_commands_coverage.py +0 -0
  723. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_credential_shadowing.py +0 -0
  724. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_errors.py +0 -0
  725. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_estimate.py +0 -0
  726. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_gpus_flag.py +0 -0
  727. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_help.py +0 -0
  728. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_main_coverage.py +0 -0
  729. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_managed.py +0 -0
  730. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_render_coverage.py +0 -0
  731. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_render_theme.py +0 -0
  732. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_serve_deploy.py +0 -0
  733. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_serve_status.py +0 -0
  734. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_serve_undeploy.py +0 -0
  735. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_traces.py +0 -0
  736. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cli_wandb_warning.py +0 -0
  737. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_client.py +0 -0
  738. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_client_import_purity.py +0 -0
  739. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_client_server_integration.py +0 -0
  740. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_client_stream_reads.py +0 -0
  741. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_config_env_vars.py +0 -0
  742. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_config_overrides.py +0 -0
  743. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_console_upload.py +0 -0
  744. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_controlled_experiment_repairs.py +0 -0
  745. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cost_analytical.py +0 -0
  746. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cost_currency.py +0 -0
  747. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cost_equation.py +0 -0
  748. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cost_estimate.py +0 -0
  749. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cost_hardware.py +0 -0
  750. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_cost_models.py +0 -0
  751. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_dataset_profile.py +0 -0
  752. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_deploy_latency.py +0 -0
  753. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_dev_channel.py +0 -0
  754. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_disk_gb.py +0 -0
  755. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_cache_evict.py +0 -0
  756. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_delete.py +0 -0
  757. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_download_api.py +0 -0
  758. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_evaluations.py +0 -0
  759. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_list_api.py +0 -0
  760. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_list_cli.py +0 -0
  761. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_list_hub.py +0 -0
  762. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_no_install.py +0 -0
  763. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_pull.py +0 -0
  764. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_pull_coverage.py +0 -0
  765. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_pull_loader_coverage.py +0 -0
  766. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_pull_managed_control_plane.py +0 -0
  767. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_rate_limit_resolve.py +0 -0
  768. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_env_test.py +0 -0
  769. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_envs_coverage.py +0 -0
  770. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_export.py +0 -0
  771. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_flash_mvp.py +0 -0
  772. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_flashinfer_cache_dirs.py +0 -0
  773. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_fused_expert_warmstart.py +0 -0
  774. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_github_urlopen_retry.py +0 -0
  775. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_gpu_type_single_field.py +0 -0
  776. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_grpo_checkpoint_durability.py +0 -0
  777. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_grpo_params.py +0 -0
  778. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_grpo_process_census.py +0 -0
  779. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_grpo_reward_batching.py +0 -0
  780. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_grpo_rollout_identity.py +0 -0
  781. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_health_liveness.py +0 -0
  782. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_hf_retry.py +0 -0
  783. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_image_environment_capability.py +0 -0
  784. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_image_incremental_processor.py +0 -0
  785. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_image_sft_markers.py +0 -0
  786. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_image_sft_processor_parity.py +0 -0
  787. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_image_tokens.py +0 -0
  788. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_infisical_secrets.py +0 -0
  789. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_internal_client.py +0 -0
  790. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_kernel_cache.py +0 -0
  791. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_kernel_fingerprint.py +0 -0
  792. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_kv_util.py +0 -0
  793. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_lambda_api_coverage.py +0 -0
  794. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_logging.py +0 -0
  795. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_login_perms.py +0 -0
  796. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_lora_rank_coverage.py +0 -0
  797. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_lora_rank_nested_rung.py +0 -0
  798. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_lora_rank_preflight.py +0 -0
  799. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_lora_targeting.py +0 -0
  800. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_lora_targeting_pinned_verl.py +0 -0
  801. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_managed_config_fields.py +0 -0
  802. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_managed_hf_repo.py +0 -0
  803. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_metrics_schema_agent_contract.py +0 -0
  804. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_mig_guard.py +0 -0
  805. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_mirror_sampling_parity.py +0 -0
  806. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_multimodal_training.py +0 -0
  807. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_named_reward_metrics.py +0 -0
  808. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_oom_escalate_gpu.py +0 -0
  809. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_opd.py +0 -0
  810. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_opd_limits.py +0 -0
  811. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  812. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_opd_multiturn_failure_exit.py +0 -0
  813. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_opd_replay_guard.py +0 -0
  814. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_packing.py +0 -0
  815. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_packing_coverage.py +0 -0
  816. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_parasail_teacher.py +0 -0
  817. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_persisted_spec_envelope.py +0 -0
  818. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_poll_helpers.py +0 -0
  819. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_preflight.py +0 -0
  820. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_prompt_budget.py +0 -0
  821. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_provider_preflight_coverage.py +0 -0
  822. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_realized_cost.py +0 -0
  823. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_repo_cleanup.py +0 -0
  824. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_resolve_params_b.py +0 -0
  825. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_retry_decision.py +0 -0
  826. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_rl_train.py +0 -0
  827. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_rollout_samples.py +0 -0
  828. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_run_registry_lifecycle.py +0 -0
  829. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_runpod_api_delete.py +0 -0
  830. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_runpod_key_fingerprint.py +0 -0
  831. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_runpod_key_waterfall.py +0 -0
  832. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_runtime_capsule.py +0 -0
  833. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve.py +0 -0
  834. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_launch.py +0 -0
  835. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_manifest.py +0 -0
  836. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_materialize.py +0 -0
  837. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_app_packaging.py +0 -0
  838. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_control.py +0 -0
  839. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_docs.py +0 -0
  840. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_modal_contract_lock.py +0 -0
  841. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_modal_sdk.py +0 -0
  842. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  843. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_modal_teardown_identity.py +0 -0
  844. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_profile_qualification.py +0 -0
  845. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_profiles.py +0 -0
  846. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_provisioning_common.py +0 -0
  847. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_provisioning_modal.py +0 -0
  848. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_reasoning_content.py +0 -0
  849. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_resolve_provenance.py +0 -0
  850. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_runtime_adapters.py +0 -0
  851. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_runtime_engine.py +0 -0
  852. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_runtime_package.py +0 -0
  853. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serve_runtime_types.py +0 -0
  854. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_server_app_coverage.py +0 -0
  855. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_server_auth_singleflight.py +0 -0
  856. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_server_billing.py +0 -0
  857. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_server_db.py +0 -0
  858. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_server_locks_coverage.py +0 -0
  859. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_server_managed_chat_requests.py +0 -0
  860. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_server_serving_resources.py +0 -0
  861. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serving_conformance_gate.py +0 -0
  862. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serving_context_preflight.py +0 -0
  863. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_serving_schema_coverage.py +0 -0
  864. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_sft_chunked_nll.py +0 -0
  865. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_sft_example_selection.py +0 -0
  866. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_sft_gc_off.py +0 -0
  867. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_sft_max_context.py +0 -0
  868. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_sft_step_floor.py +0 -0
  869. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_sft_train.py +0 -0
  870. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_sft_workload.py +0 -0
  871. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_source_attestation_flow.py +0 -0
  872. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_source_layout.py +0 -0
  873. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_source_snapshot.py +0 -0
  874. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_spec_and_validation.py +0 -0
  875. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_spec_contract_bytes.py +0 -0
  876. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_step_floor.py +0 -0
  877. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_step_metrics.py +0 -0
  878. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_step_timing.py +0 -0
  879. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_structured_outputs.py +0 -0
  880. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_teacher_encoding_contract.py +0 -0
  881. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_terminal_artifacts.py +0 -0
  882. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_thinking_config.py +0 -0
  883. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_train_context_preflight.py +0 -0
  884. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_type_comment_prose.py +0 -0
  885. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_vast_api.py +0 -0
  886. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_vast_api_coverage.py +0 -0
  887. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_verified_revisions.py +0 -0
  888. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_verifiers.py +0 -0
  889. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_verl_checkpoint_export.py +0 -0
  890. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_verl_child_plugins.py +0 -0
  891. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_verl_silence_watchdog.py +0 -0
  892. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_version.py +0 -0
  893. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  894. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_vllm_moe_lora_backport.py +0 -0
  895. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_vram_architecture.py +0 -0
  896. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_wandb_link.py +0 -0
  897. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_wandb_naming.py +0 -0
  898. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_warmstart_adapter_download.py +0 -0
  899. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_warmstart_error_attribution.py +0 -0
  900. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_warmstart_image_adapters.py +0 -0
  901. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_worker_dryrun.py +0 -0
  902. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_worker_image.py +0 -0
  903. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_worker_init_heartbeat.py +0 -0
  904. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_worker_thinking.py +0 -0
  905. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_workflow_contracts.py +0 -0
  906. {freesolo_flash_dev-1.2.124 → freesolo_flash_dev-1.2.128}/tests/test_workload_profile.py +0 -0
  907. {freesolo_flash_dev-1.2.124 → 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.124
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
@@ -0,0 +1,224 @@
1
+ # Hosted inference load testing
2
+
3
+ The `flash.serving.loadtest` package is an operator-only, public-HTTP load harness for the hosted
4
+ inference front door. It is not imported by production serving and it does not create, resize, inspect,
5
+ or destroy provider resources. Operators run it explicitly with the serving extra:
6
+
7
+ ```bash
8
+ uv run --extra serving python -m flash.serving.loadtest validate scenario.json
9
+ uv run --extra serving python -m flash.serving.loadtest discover scenario.json
10
+ uv run --extra serving python -m flash.serving.loadtest run scenario.json results/fake-five-phase
11
+ uv run --extra serving python -m flash.serving.loadtest summarize results/fake-five-phase
12
+ uv run --extra serving python -m flash.serving.loadtest verify results/fake-five-phase
13
+ ```
14
+
15
+ `validate` is allocation-free and performs no HTTP request. `discover` calls only `GET /healthz`.
16
+ `run` calls only `GET /healthz` and `POST /v1/chat/completions`. The credential value is read from the
17
+ environment variable named by `credential_env`; never put a credential value in a scenario file.
18
+ There are no request retries.
19
+
20
+ ## Evidence boundary
21
+
22
+ The harness verifies exact deployment SHA and deployment id, required capabilities, required base
23
+ models, and immutable adapter response provenance. It checks health before and after every phase and
24
+ at the midpoint of each duration phase. Its evidence remains HTTP-only:
25
+
26
+ - it cannot prove that a live replica scaled out;
27
+ - it cannot prove that an engine was actually cold or at scale zero;
28
+ - it cannot distinguish a dispatch deadline from the underlying resource constraint;
29
+ - it cannot establish an availability SLA;
30
+ - fake and test runs cannot support production claims.
31
+
32
+ A `cold_burst` therefore records either `cold_scale_out_intent_http_unattested` or
33
+ `true_scale_zero_intent_http_unattested`. That is an honest statement of the authored intent, not an
34
+ attestation of provider state.
35
+
36
+ ## Strict scenario
37
+
38
+ Scenarios are strict Pydantic v2 JSON. Unknown fields and fields that belong to another phase kind are
39
+ rejected. The authored `phases` list may contain any subset of the five supported discriminated kinds
40
+ in any order, except that a present `cold_burst` must be the first inference-producing phase. A complete
41
+ five-phase scenario uses `cold_burst`, `warm`, `sustained`, `mixed`, then `overload`.
42
+
43
+ Dynamic base-model discovery reads `base_models` from `/healthz`, then applies `include`, `exclude`, and
44
+ `require`. `require` is a hard gate.
45
+
46
+ Explicit adapter targets must name the immutable model id, base model, and checkpoint. The request
47
+ carries `X-Freesolo-Expected-Checkpoint` and the response must match `X-Freesolo-Checkpoint`.
48
+
49
+ `adapter_revision` and `hf_revision` are optional, because the hosted app does not emit them on every
50
+ deployment. Omitting one verifies checkpoint identity alone rather than passing a header check the
51
+ deployment never answered. Supplying one asserts that the deployment does emit it, so a response that
52
+ omits or changes it is a provenance mismatch, never a skipped assertion. A supplied `hf_revision` must
53
+ still be a canonical 40-character hub commit SHA.
54
+
55
+ `/healthz` is read for `ok`, deployment identity, capabilities, and `base_models`. `accounting_ok` is
56
+ optional: a deployment that does not report it is not treated as an accounting failure, while an
57
+ explicit `false` stops the run. Note that `/healthz.gpus` is the configured supported-base-model engine
58
+ count, not a live container count, so it can never be read as a replica count.
59
+
60
+ This fake example covers every phase kind:
61
+
62
+ ```json
63
+ {
64
+ "schema_version": 1,
65
+ "name": "fake five-phase hosted inference",
66
+ "endpoint": "https://example.invalid",
67
+ "expected_deployment": {
68
+ "sha": "94210a3",
69
+ "deployment_id": "fake-deployment-1"
70
+ },
71
+ "credential_env": "FAKE_SERVING_TOKEN",
72
+ "required_capabilities": ["permanent_checkpoint_identity"],
73
+ "discovery": {
74
+ "enabled": true,
75
+ "include": ["model-a", "model-b", "model-c"],
76
+ "exclude": ["model-b"],
77
+ "require": ["model-a"]
78
+ },
79
+ "targets": [],
80
+ "profiles": [
81
+ {
82
+ "name": "short",
83
+ "weight": 1.0,
84
+ "messages": [{ "role": "user", "content": "Return one short sentence." }],
85
+ "max_tokens": 16,
86
+ "temperature": 0.0,
87
+ "top_p": 0.95
88
+ }
89
+ ],
90
+ "client": {
91
+ "connect_timeout_seconds": 5.0,
92
+ "read_timeout_seconds": 30.0,
93
+ "write_timeout_seconds": 10.0,
94
+ "pool_timeout_seconds": 5.0,
95
+ "max_in_flight": 8,
96
+ "max_scheduling_lag_ms": 100.0
97
+ },
98
+ "seed": 17,
99
+ "fake": true,
100
+ "phases": [
101
+ {
102
+ "name": "cold",
103
+ "kind": "cold_burst",
104
+ "requests": 4,
105
+ "burst_window_seconds": 0.2,
106
+ "cold_intent": "cold_scale_out"
107
+ },
108
+ {
109
+ "name": "warm",
110
+ "kind": "warm",
111
+ "requests": 4,
112
+ "concurrency": 2
113
+ },
114
+ {
115
+ "name": "sustained",
116
+ "kind": "sustained",
117
+ "duration_seconds": 2.0,
118
+ "rate_rps": 2.0
119
+ },
120
+ {
121
+ "name": "mixed",
122
+ "kind": "mixed",
123
+ "duration_seconds": 2.0,
124
+ "rate_rps": 3.0
125
+ },
126
+ {
127
+ "name": "overload",
128
+ "kind": "overload",
129
+ "expects_capacity_contract": false,
130
+ "stages": [
131
+ { "duration_seconds": 1.0, "rate_rps": 4.0 },
132
+ { "duration_seconds": 1.0, "rate_rps": 8.0 }
133
+ ]
134
+ }
135
+ ]
136
+ }
137
+ ```
138
+
139
+ `warm` is the only closed-loop phase. Its authored request count is completed with bounded
140
+ concurrency. Every other phase is open-loop. Its dispatch offsets are computed before the phase
141
+ starts. If the client cannot admit an offset within `max_in_flight` and `max_scheduling_lag_ms`, the
142
+ harness writes a terminal `client_admission_missed` record instead of converting that offered request
143
+ into delayed closed-loop work. Overload stages use the same rule and never retry.
144
+
145
+ ## Stream and artifact contract
146
+
147
+ Streaming requests ask for usage. Every SSE `data:` payload must be valid JSON, followed by exactly
148
+ one `[DONE]`; data after `[DONE]`, a missing terminal finish reason, or a missing `[DONE]` is a protocol
149
+ error. The first nonempty `content` or `reasoning_content` delta defines time to first generated token.
150
+ The first nonempty visible `content` delta is measured separately. Missing usage makes token throughput
151
+ unavailable for that request; the harness never estimates tokens from chunks.
152
+
153
+ Only HTTP 503 with error code `serving_capacity_unavailable` and `Retry-After: 1` is counted as exact
154
+ capacity rejection. Other 503 responses and 429 responses are separate classes.
155
+
156
+ An error body can echo the request back, so only a machine error code is read out of it. A code that
157
+ does not look like a slug is recorded as `unrecognized_code`, and a free-text `message` is never
158
+ persisted.
159
+
160
+ ### Overload cannot be demonstrated without a capacity contract
161
+
162
+ Current Flash `dev` implements no retryable capacity contract. Its engine error mapping returns 504
163
+ for an engine timeout and 502 for other upstream failures; there is no capacity 503 and no
164
+ `Retry-After: 1`. An overload phase run against such a deployment therefore cannot produce a clean
165
+ rejection signal at all.
166
+
167
+ An overload phase declares this with `expects_capacity_contract`, which defaults to `false`. The flag
168
+ never changes how a response is classified. It only records whether an absence of capacity rejections
169
+ is an accurate description of the deployment or a failed expectation:
170
+
171
+ | observed | `expects_capacity_contract` | verdict |
172
+ | ------------------------------- | --------------------------- | ----------------------------------------------------- |
173
+ | at least one exact capacity 503 | either | `capacity_rejection_observed` |
174
+ | none | `false` | `overload_not_demonstrated` |
175
+ | none | `true` | `overload_not_demonstrated_despite_declared_contract` |
176
+
177
+ **An absence of capacity rejections is never evidence of headroom.** A deployment without a capacity
178
+ contract sheds load in ways this harness cannot distinguish from ordinary failure over public HTTP.
179
+ When any overload phase declares no capacity contract, the summary carries that limitation explicitly.
180
+ No overload phase is ever summarized as a success on the strength of a quiet run.
181
+
182
+ Each run claims a new result directory and writes:
183
+
184
+ - `scenario.authored.json`, with prompt content redacted;
185
+ - `scenario.resolved.json`, with discovered targets and cold-intent labels;
186
+ - `events.jsonl`, through one event writer with one terminal row per scheduled request;
187
+ - `summary.json`, atomically;
188
+ - `complete.json`, last, with row counts, byte counts, and SHA-256 hashes.
189
+
190
+ An interrupted run closes the event stream but never writes `complete.json`. It remains inspectable and
191
+ `verify` rejects it as incomplete. Version 1 has no partial-phase resume.
192
+
193
+ Artifacts never contain credentials, authorization or request headers, generated text, raw response
194
+ bodies, or per-request prompts. Persisted response headers are limited to content type, retry-after,
195
+ and immutable provenance.
196
+
197
+ ## Metrics
198
+
199
+ `summary.json` reports overall and per-phase, per-target, and per-profile values:
200
+
201
+ - scheduled, dispatched, completed, successful, and client-admission-missed counts;
202
+ - offered, dispatch, and completion rates with explicit denominator seconds and basis;
203
+ - scheduling, header, first-generated, first-visible, and total latency p50, p90, p95, p99, and max;
204
+ - usage coverage and token totals, aggregate output token rate, and decode token rate;
205
+ - peak client in-flight, HTTP status and error counts, retry count, exact capacity ratio, and 429 count;
206
+ - authored versus achieved target and profile mix;
207
+ - explicit sustained and mixed authored, scheduling, dispatch, and completion windows.
208
+
209
+ ## B200 owner handoff
210
+
211
+ The harness does not allocate a B200 and does not attest provider state. The B200 deployment owner must
212
+ complete the provider-side handoff before an operator runs a non-fake scenario:
213
+
214
+ 1. identify the already deployed endpoint, exact release SHA, deployment id, and intended base models;
215
+ 2. confirm the B200 resource is owned, budgeted, and governed outside this harness;
216
+ 3. decide whether the cold intent is `cold_scale_out` or `true_scale_zero`, and establish that state
217
+ through the provider control plane without using the harness;
218
+ 4. provide only the name of the existing credential environment variable in the scenario;
219
+ 5. run `validate`, then `discover`, and confirm the resolved two-of-three or other intended model set;
220
+ 6. run into a new result directory, then run `verify` before interpreting `summary.json`;
221
+ 7. retain provider-side replica and hardware evidence separately if a scale-out or B200 claim is needed.
222
+
223
+ A successful HTTP load run is not provider-side proof of B200 identity, replica count, scale-to-zero,
224
+ or autoscaler behavior.
@@ -0,0 +1,101 @@
1
+ """authenticated stdlib HTTP that does not let the stdlib replay a credential across a redirect.
2
+
3
+ `urllib.request.Request` keeps two header bags. `headers` survives a redirect:
4
+ `HTTPRedirectHandler.redirect_request` builds the follow-up request by copying it, stripping only
5
+ content headers. `unredirected_hdrs` does not survive, and `AbstractHTTPHandler.do_open` sends both.
6
+ application code that writes `Request(url, headers={"Authorization": ...})` lands the credential in
7
+ the surviving bag, so the stdlib replays the token against whatever host the `Location` names.
8
+
9
+ the fix is to move the caller's credential into the bag a redirect cannot copy. it survives any
10
+ transport that forwards the request as it was handed over, so it still holds for a tracing or
11
+ compatibility wrapper that only delegates.
12
+
13
+ two things it does not cover, both because the credential ends up on an object this module never
14
+ touched:
15
+
16
+ - a transport that rebuilds the request. `Request.header_items()` merges both bags, so a wrapper
17
+ that reconstructs with `Request(url, headers=dict(req.header_items()))` puts the credential back
18
+ in the redirectable bag, and its inner call follows redirects normally.
19
+ - a credential a handler adds mid-open. `redirect_request` builds each hop as a fresh `Request`, so
20
+ anything scoped to the object we were handed is gone by the second hop; a credentialed
21
+ `ProxyHandler` re-adds `Proxy-Authorization` to that fresh request and no work on ours reaches it.
22
+
23
+ containing either is the redirect refusal's job, not this function's.
24
+
25
+ on top of that the stdlib path refuses the hop outright. no flash or freesolo endpoint answers 3xx,
26
+ so this rejects rather than deciding which hops are safe, and surfaces as an `HTTPError` that every
27
+ caller already classifies.
28
+ """
29
+
30
+ from __future__ import annotations
31
+
32
+ import urllib.request
33
+ from collections.abc import Callable
34
+ from typing import Any
35
+
36
+ _UrlOpen = Callable[..., Any]
37
+
38
+ # headers that authenticate the request and must never reach a redirect target.
39
+ _CREDENTIAL_HEADERS = ("authorization", "proxy-authorization", "cookie", "x-api-key")
40
+
41
+ # the stdlib transport as it was before any test replaced it. comparing against the live
42
+ # `urllib.request.urlopen` instead would defeat the check: a replaced attribute is trivially
43
+ # identical to itself, so every fake would be routed through the opener stack and never called.
44
+ _STDLIB_URLOPEN: _UrlOpen = urllib.request.urlopen
45
+
46
+
47
+ class _NoRedirectHandler(urllib.request.HTTPRedirectHandler):
48
+ """raise 3xx instead of following it."""
49
+
50
+ def redirect_request(self, req, fp, code, msg, headers, newurl):
51
+ return None
52
+
53
+
54
+ def _move_credentials_to_the_unredirected_bag(request: urllib.request.Request) -> None:
55
+ """move the caller's credential headers into the bag `redirect_request` does not copy.
56
+
57
+ `do_open` sends `unredirected_hdrs` and `headers` together, so the request is unchanged on the
58
+ wire. only the follow-up request a redirect would build loses them.
59
+ """
60
+
61
+ for name in list(request.headers):
62
+ if name.lower() not in _CREDENTIAL_HEADERS:
63
+ continue
64
+ # `do_open` gives `unredirected_hdrs` precedence, so an entry already there is the value
65
+ # being sent. dropping the redirectable duplicate keeps that principal on the wire;
66
+ # promoting it instead would silently authenticate as someone else.
67
+ canonical = request.unredirected_hdrs.get(name)
68
+ value = request.headers[name]
69
+ # `remove_header` pops from both bags, so it has to run before the value is re-added.
70
+ request.remove_header(name)
71
+ request.add_unredirected_header(name, value if canonical is None else canonical)
72
+
73
+
74
+ def _urlopen_no_redirect(
75
+ request: urllib.request.Request,
76
+ *,
77
+ timeout: float,
78
+ urlopen: _UrlOpen | None = None,
79
+ ):
80
+ """open one authenticated request through a transport that refuses redirects.
81
+
82
+ the transport is read at call time rather than bound at import, because many tests replace
83
+ `urllib.request.urlopen` with a fake. a replaced transport is called directly: it is not the
84
+ stdlib opener stack, so routing it through a no-redirect opener would not reach it. every
85
+ authenticated call site in flash passes either nothing or `urllib.request.urlopen` itself, so
86
+ production always takes the refusing opener below; the direct branch exists for those fakes.
87
+
88
+ that makes the refusal guarantee conditional on the transport, and the condition is the global
89
+ being the one this module imported. rebinding `urllib.request.urlopen` after import - a test
90
+ fake, an apm shim installed at runtime - routes the call to the direct branch, which does not
91
+ refuse. relocation still runs first and still holds, so the credential cannot ride a hop the
92
+ replacement forwards as handed over; what is lost is refusal, and with it containment of the
93
+ two rebuild-and-handler gaps the module docstring names. a replacement transport owns its own
94
+ redirect policy.
95
+ """
96
+
97
+ _move_credentials_to_the_unredirected_bag(request)
98
+ transport = urlopen if urlopen is not None else urllib.request.urlopen
99
+ if transport is not _STDLIB_URLOPEN:
100
+ return transport(request, timeout=timeout)
101
+ return urllib.request.build_opener(_NoRedirectHandler()).open(request, timeout=timeout)
@@ -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
@@ -9,6 +9,7 @@ import urllib.request
9
9
  from typing import Any
10
10
 
11
11
  from flash._internal.channel import CLI_NAME
12
+ from flash._internal.http import _urlopen_no_redirect
12
13
  from flash.client.http import (
13
14
  FREESOLO_AUTH_VERIFY_PATH,
14
15
  FREESOLO_EVAL_RUNS_PATH,
@@ -34,7 +35,7 @@ def verify_freesolo_key(api_key: str, base_url: str | None = None) -> None:
34
35
  headers={"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"},
35
36
  )
36
37
  try:
37
- with urllib.request.urlopen(req, timeout=30) as resp:
38
+ with _urlopen_no_redirect(req, timeout=30) as resp:
38
39
  resp.read()
39
40
  except urllib.error.HTTPError as exc:
40
41
  if exc.code in (401, 403):
@@ -77,7 +78,7 @@ def _freesolo_request(
77
78
  headers={"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"},
78
79
  )
79
80
  try:
80
- with urllib.request.urlopen(req, timeout=timeout) as resp:
81
+ with _urlopen_no_redirect(req, timeout=timeout) as resp:
81
82
  raw = resp.read()
82
83
  except urllib.error.HTTPError as exc:
83
84
  if exc.code == 401:
@@ -15,6 +15,7 @@ from collections.abc import Iterator, Mapping
15
15
  from typing import Any
16
16
 
17
17
  from flash._internal.channel import CLI_NAME
18
+ from flash._internal.http import _urlopen_no_redirect
18
19
  from flash._internal.openai_sse import (
19
20
  DeltaEvent,
20
21
  ErrorEvent,
@@ -408,7 +409,7 @@ class ApiClient:
408
409
  deadline = time.monotonic() + body_deadline if body_deadline is not None else None
409
410
  with (
410
411
  self._translate_http_errors(),
411
- urllib.request.urlopen(
412
+ _urlopen_no_redirect(
412
413
  req, timeout=_capped_timeout(timeout or self.timeout, deadline)
413
414
  ) as resp,
414
415
  ):
@@ -435,7 +436,7 @@ class ApiClient:
435
436
  )
436
437
  with (
437
438
  self._translate_http_errors(),
438
- urllib.request.urlopen(req, timeout=timeout or self.timeout) as resp,
439
+ _urlopen_no_redirect(req, timeout=timeout or self.timeout) as resp,
439
440
  ):
440
441
  if max_bytes is not None:
441
442
  return _read_capped_response(resp, max_bytes)
@@ -804,7 +805,7 @@ class ApiClient:
804
805
  decoder = codecs.getincrementaldecoder("utf-8")()
805
806
  with (
806
807
  self._translate_http_errors(),
807
- urllib.request.urlopen(req, timeout=30 * 60) as resp,
808
+ _urlopen_no_redirect(req, timeout=30 * 60) as resp,
808
809
  ):
809
810
  content_type = resp.headers.get("Content-Type", "")
810
811
  media_type = content_type.partition(";")[0].strip().lower()
@@ -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