freesolo-flash-dev 1.2.123__tar.gz → 1.2.127__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 (906) hide show
  1. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/PKG-INFO +1 -1
  2. freesolo_flash_dev-1.2.127/docs/hosted-inference-load-testing.md +224 -0
  3. freesolo_flash_dev-1.2.127/flash/_internal/http.py +101 -0
  4. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/eval.py +0 -21
  5. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/scaffold/TRAINING.md +2 -2
  6. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/freesolo_api.py +3 -2
  7. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/http.py +4 -3
  8. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/opd_train_runner.py +1 -0
  9. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/sft_train.py +0 -20
  10. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/plugin.py +26 -12
  11. freesolo_flash_dev-1.2.127/flash/engine/worker/train/opd/child/tensors.py +56 -0
  12. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/base.py +2 -3
  13. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/execution/provider.py +1 -0
  14. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/jobs/__init__.py +5 -72
  15. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/jobs/reap.py +2 -2
  16. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/job_execution.py +0 -1
  17. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/jobs.py +3 -21
  18. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/polling.py +4 -8
  19. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/provider.py +0 -4
  20. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/accounting/reconciliation.py +9 -31
  21. freesolo_flash_dev-1.2.127/flash/runner/lifecycle/attempts.py +635 -0
  22. freesolo_flash_dev-1.2.127/flash/runner/lifecycle/claim_lock.py +64 -0
  23. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/state.py +28 -2
  24. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/status.py +12 -1
  25. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/attach.py +62 -40
  26. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/errors.py +4 -0
  27. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/lifecycle.py +53 -86
  28. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/recovery.py +0 -88
  29. freesolo_flash_dev-1.2.127/flash/runner/supervise/retry_decision.py +401 -0
  30. freesolo_flash_dev-1.2.127/flash/runner/supervise/seed_submission.py +743 -0
  31. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/transport.py +15 -1
  32. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/billing/charges.py +2 -1
  33. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/ops/reconcile.py +2 -1
  34. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/checkpoints.py +2 -2
  35. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/environment_registry.py +2 -1
  36. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/projects.py +3 -2
  37. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/teacher/broker.py +2 -2
  38. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/auth.py +7 -3
  39. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/internal_client.py +5 -4
  40. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/runtime.py +68 -26
  41. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/app/README.md +6 -0
  42. freesolo_flash_dev-1.2.127/flash/serving/loadtest/__init__.py +5 -0
  43. freesolo_flash_dev-1.2.127/flash/serving/loadtest/__main__.py +5 -0
  44. freesolo_flash_dev-1.2.127/flash/serving/loadtest/artifacts.py +195 -0
  45. freesolo_flash_dev-1.2.127/flash/serving/loadtest/cli.py +100 -0
  46. freesolo_flash_dev-1.2.127/flash/serving/loadtest/metrics.py +279 -0
  47. freesolo_flash_dev-1.2.127/flash/serving/loadtest/protocol.py +321 -0
  48. freesolo_flash_dev-1.2.127/flash/serving/loadtest/runner.py +535 -0
  49. freesolo_flash_dev-1.2.127/flash/serving/loadtest/schedule.py +191 -0
  50. freesolo_flash_dev-1.2.127/flash/serving/loadtest/schema.py +459 -0
  51. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/pyproject.toml +2 -2
  52. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/runner.py +16 -0
  53. freesolo_flash_dev-1.2.127/tests/_helpers/wire_headers.py +24 -0
  54. freesolo_flash_dev-1.2.127/tests/serving/hosted_loadtest_fake_scenario.json +85 -0
  55. freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_artifacts.py +92 -0
  56. freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_metrics.py +203 -0
  57. freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_protocol.py +389 -0
  58. freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_runner.py +373 -0
  59. freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_schedule.py +87 -0
  60. freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_schema.py +158 -0
  61. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_allocator.py +1 -1
  62. freesolo_flash_dev-1.2.127/tests/test_authenticated_redirects.py +340 -0
  63. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cancel_remote.py +21 -4
  64. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_publish.py +3 -2
  65. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_ref_pinning.py +3 -2
  66. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_freesolo_api_transport.py +4 -3
  67. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_jobs.py +155 -245
  68. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lambda_runner.py +32 -307
  69. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_multi_gpu_gate.py +0 -25
  70. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_oom_escalate_gpu.py +30 -62
  71. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_multiturn_failure_exit.py +38 -0
  72. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_resume_safety.py +69 -21
  73. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_train.py +414 -0
  74. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_orchestrator_flash.py +4 -1
  75. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_projects.py +5 -4
  76. freesolo_flash_dev-1.2.127/tests/test_provider_routing.py +1941 -0
  77. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_resume_on_retry.py +9 -3
  78. freesolo_flash_dev-1.2.127/tests/test_retry_decision.py +226 -0
  79. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_runmgmt.py +1448 -530
  80. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_chat_transport.py +55 -0
  81. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_api.py +20 -11
  82. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_checkpoints_coverage.py +2 -6
  83. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_envs_coverage.py +21 -0
  84. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_source_attestation_flow.py +6 -5
  85. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_staged_environment.py +9 -1
  86. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_teacher_broker.py +2 -2
  87. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_weight_cache.py +3 -3
  88. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/uv.lock +1 -1
  89. freesolo_flash_dev-1.2.123/flash/runner/lifecycle/attempts.py +0 -151
  90. freesolo_flash_dev-1.2.123/flash/runner/supervise/retry_decision.py +0 -206
  91. freesolo_flash_dev-1.2.123/flash/runner/supervise/seed_submission.py +0 -935
  92. freesolo_flash_dev-1.2.123/tests/test_provider_routing.py +0 -3019
  93. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.dockerignore +0 -0
  94. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.env.example +0 -0
  95. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/CODEOWNERS +0 -0
  96. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  97. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  98. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  99. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  100. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/dependabot.yml +0 -0
  101. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/auto-rebake.yml +0 -0
  102. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/bake-kernel-cache.yml +0 -0
  103. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/ci.yml +0 -0
  104. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/deploy-modal-dev.yml +0 -0
  105. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/deploy-modal.yml +0 -0
  106. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/dev-kernel-cache.yml +0 -0
  107. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/main-source-guard.yml +0 -0
  108. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/notify-tests-repo.yml +0 -0
  109. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  110. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/publish-dev.yml +0 -0
  111. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/publish-image.yml +0 -0
  112. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/publish-serving-image.yml +0 -0
  113. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/publish.yml +0 -0
  114. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/version-parity.yml +0 -0
  115. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/worker-image.yml +0 -0
  116. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.gitignore +0 -0
  117. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/CHANGELOG.md +0 -0
  118. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/CODE_OF_CONDUCT.md +0 -0
  119. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/CONTRIBUTING.md +0 -0
  120. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/Dockerfile +0 -0
  121. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/Dockerfile.serve +0 -0
  122. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/Dockerfile.worker +0 -0
  123. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/LICENSE +0 -0
  124. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/NOTICE +0 -0
  125. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/README.md +0 -0
  126. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/SECURITY.md +0 -0
  127. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/SELF_HOSTING.md +0 -0
  128. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/build/kernel_cache/.gitignore +0 -0
  129. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/build/kernel_cache/.keep +0 -0
  130. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/deploy/infisical/README.md +0 -0
  131. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/deploy/infisical/entrypoint.sh +0 -0
  132. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/Dockerfile.kernelcache +0 -0
  133. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/Dockerfile.kernelcache.relayer +0 -0
  134. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/bake_kernel_cache.py +0 -0
  135. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/bake_pod_entry.py +0 -0
  136. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/extract_cudart_fix.py +0 -0
  137. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/kernel_fingerprint.py +0 -0
  138. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/make_rp_handler.py +0 -0
  139. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/patch_vllm_moe_lora.py +0 -0
  140. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docs/serving-contract.md +0 -0
  141. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/__init__.py +0 -0
  142. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/__init__.py +0 -0
  143. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/channel.py +0 -0
  144. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/diagnostics.py +0 -0
  145. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/fileio.py +0 -0
  146. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/logging.py +0 -0
  147. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/openai_sse.py +0 -0
  148. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/paths.py +0 -0
  149. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/version.py +0 -0
  150. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/adapters/__init__.py +0 -0
  151. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/adapters/artifacts.py +0 -0
  152. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/adapters/fused_experts.py +0 -0
  153. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/adapters/lora_rank.py +0 -0
  154. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/adapters/targets.py +0 -0
  155. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/__init__.py +0 -0
  156. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/__main__.py +0 -0
  157. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/__init__.py +0 -0
  158. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/__init__.py +0 -0
  159. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/__init__.py +0 -0
  160. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/imports.py +0 -0
  161. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/list.py +0 -0
  162. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/push.py +0 -0
  163. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/retained.py +0 -0
  164. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/setup.py +0 -0
  165. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  166. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/__init__.py +0 -0
  167. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/episode.py +0 -0
  168. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/eval_args.py +0 -0
  169. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/evaluations.py +0 -0
  170. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/params.py +0 -0
  171. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/test.py +0 -0
  172. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/warnings.py +0 -0
  173. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/__init__.py +0 -0
  174. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/account.py +0 -0
  175. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/catalog.py +0 -0
  176. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/deploy.py +0 -0
  177. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/log_follow.py +0 -0
  178. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/prompt_budget.py +0 -0
  179. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/runs.py +0 -0
  180. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/traces.py +0 -0
  181. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/train.py +0 -0
  182. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/worker_output.py +0 -0
  183. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/serving/__init__.py +0 -0
  184. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/serving/deploy.py +0 -0
  185. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/serving/identity.py +0 -0
  186. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/serving/status.py +0 -0
  187. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/serving/undeploy.py +0 -0
  188. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/__init__.py +0 -0
  189. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/account.py +0 -0
  190. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/env.py +0 -0
  191. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/errors.py +0 -0
  192. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/main.py +0 -0
  193. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/models.py +0 -0
  194. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/serve_parser.py +0 -0
  195. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/traces.py +0 -0
  196. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/training.py +0 -0
  197. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/scaffold/__init__.py +0 -0
  198. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/__init__.py +0 -0
  199. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/cost.py +0 -0
  200. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/env_panels.py +0 -0
  201. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/heartbeat.py +0 -0
  202. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/render.py +0 -0
  203. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/tables.py +0 -0
  204. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/tty.py +0 -0
  205. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/__init__.py +0 -0
  206. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/config.py +0 -0
  207. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/runtime_secrets.py +0 -0
  208. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/shapes.py +0 -0
  209. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/specs.py +0 -0
  210. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/streaming.py +0 -0
  211. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/__init__.py +0 -0
  212. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/image_descriptors.py +0 -0
  213. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/multimodal.py +0 -0
  214. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/reasoning_normalization.py +0 -0
  215. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/structured_outputs.py +0 -0
  216. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/thinking.py +0 -0
  217. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/core/__init__.py +0 -0
  218. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/core/catalog.py +0 -0
  219. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/core/grpo.py +0 -0
  220. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/core/spec.py +0 -0
  221. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/core/spec_persistence.py +0 -0
  222. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/__init__.py +0 -0
  223. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/analytical.py +0 -0
  224. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/currency.py +0 -0
  225. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/facts.py +0 -0
  226. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/spec.py +0 -0
  227. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/types.py +0 -0
  228. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/__init__.py +0 -0
  229. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/__init__.py +0 -0
  230. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/kv_sizing.py +0 -0
  231. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/model_config_probe.py +0 -0
  232. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/prompt_budget.py +0 -0
  233. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/recipe.py +0 -0
  234. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/steps.py +0 -0
  235. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/vram.py +0 -0
  236. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/__init__.py +0 -0
  237. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/dataset_profile.py +0 -0
  238. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/image_tokens.py +0 -0
  239. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/reasoning_render.py +0 -0
  240. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/sft_image_rows.py +0 -0
  241. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/sft_workload.py +0 -0
  242. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/tokenizer.py +0 -0
  243. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/workload_profile.py +0 -0
  244. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/result/__init__.py +0 -0
  245. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/result/accounting.py +0 -0
  246. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/result/rollout_samples.py +0 -0
  247. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/support/__init__.py +0 -0
  248. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/support/huggingface.py +0 -0
  249. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/support/verl_checkpoint.py +0 -0
  250. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/support/verl_policy.py +0 -0
  251. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/support/worker_entrypoint.py +0 -0
  252. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/__init__.py +0 -0
  253. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/__main__.py +0 -0
  254. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/entry/__init__.py +0 -0
  255. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/entry/opd.py +0 -0
  256. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/entry/rl.py +0 -0
  257. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/entry/sft.py +0 -0
  258. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/entry/worker.py +0 -0
  259. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/io/__init__.py +0 -0
  260. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/io/heartbeat.py +0 -0
  261. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/io/hf.py +0 -0
  262. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/io/prefetch.py +0 -0
  263. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/io/wandb_log.py +0 -0
  264. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/__init__.py +0 -0
  265. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/adapter.py +0 -0
  266. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/chatml_mask.py +0 -0
  267. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/decoding.py +0 -0
  268. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/lora.py +0 -0
  269. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/packing.py +0 -0
  270. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/perf/__init__.py +0 -0
  271. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/perf/diagnostics.py +0 -0
  272. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/perf/lifecycle.py +0 -0
  273. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/perf/liger.py +0 -0
  274. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/perf/memory.py +0 -0
  275. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/runtime/__init__.py +0 -0
  276. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  277. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/runtime/rng.py +0 -0
  278. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/runtime/state.py +0 -0
  279. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/teacher/__init__.py +0 -0
  280. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/teacher/client.py +0 -0
  281. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/teacher/encoding.py +0 -0
  282. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  283. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/__init__.py +0 -0
  284. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/__init__.py +0 -0
  285. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/child/__init__.py +0 -0
  286. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/child/glue.py +0 -0
  287. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/child/runtime.py +0 -0
  288. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  289. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  290. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  291. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  292. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/__init__.py +0 -0
  293. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/backend_common.py +0 -0
  294. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/opd_train.py +0 -0
  295. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  296. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/rl_train.py +0 -0
  297. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  298. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  299. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  300. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/__init__.py +0 -0
  301. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
  302. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
  303. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
  304. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
  305. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
  306. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
  307. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  308. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  309. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/entry.py +0 -0
  310. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
  311. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  312. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  313. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/structured.py +0 -0
  314. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
  315. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
  316. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
  317. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
  318. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
  319. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
  320. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
  321. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
  322. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
  323. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
  324. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
  325. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
  326. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
  327. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/__init__.py +0 -0
  328. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  329. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/child/entry.py +0 -0
  330. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  331. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/child/patches.py +0 -0
  332. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  333. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  334. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  335. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/launch/config.py +0 -0
  336. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  337. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  338. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  339. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  340. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  341. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
  342. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  343. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  344. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/__init__.py +0 -0
  345. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/child/entry.py +0 -0
  346. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/child/plugin.py +0 -0
  347. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  348. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  349. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/setup/config.py +0 -0
  350. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/__init__.py +0 -0
  351. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/capabilities.py +0 -0
  352. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/checkpoints.py +0 -0
  353. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/child_io.py +0 -0
  354. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/diagnostics.py +0 -0
  355. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/parallelism.py +0 -0
  356. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/parent_work.py +0 -0
  357. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/process_census.py +0 -0
  358. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/__init__.py +0 -0
  359. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/__init__.py +0 -0
  360. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/adapter.py +0 -0
  361. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/base.py +0 -0
  362. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/loader.py +0 -0
  363. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/pull.py +0 -0
  364. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/staged.py +0 -0
  365. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/__init__.py +0 -0
  366. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/cache_security.py +0 -0
  367. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/dataset_selection.py +0 -0
  368. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/evaluations.py +0 -0
  369. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/identity.py +0 -0
  370. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/namespace_listing.py +0 -0
  371. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/package/__init__.py +0 -0
  372. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/package/direct_tokens.py +0 -0
  373. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/package/limits.py +0 -0
  374. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/package/unpack.py +0 -0
  375. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/__init__.py +0 -0
  376. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/__init__.py +0 -0
  377. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  378. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
  379. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  380. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  381. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  382. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/host/__init__.py +0 -0
  383. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  384. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/host/failmark.py +0 -0
  385. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  386. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  387. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/instance.py +0 -0
  388. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/poll.py +0 -0
  389. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  390. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/provider.py +0 -0
  391. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  392. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/net/__init__.py +0 -0
  393. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/net/auth.py +0 -0
  394. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/net/deadline.py +0 -0
  395. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/net/http.py +0 -0
  396. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/net/worker.py +0 -0
  397. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/artifacts/__init__.py +0 -0
  398. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/artifacts/hf.py +0 -0
  399. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/artifacts/preload_runpod.py +0 -0
  400. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/artifacts/weight_cache.py +0 -0
  401. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/__init__.py +0 -0
  402. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/allocator.py +0 -0
  403. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/fit_errors.py +0 -0
  404. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/preflight.py +0 -0
  405. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/realized.py +0 -0
  406. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/registry.py +0 -0
  407. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/sharding.py +0 -0
  408. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/__init__.py +0 -0
  409. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/__init__.py +0 -0
  410. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/api.py +0 -0
  411. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/auth.py +0 -0
  412. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/gpus.py +0 -0
  413. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/preflight.py +0 -0
  414. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/pricing.py +0 -0
  415. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/execution/__init__.py +0 -0
  416. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/jobs/builders.py +0 -0
  417. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/__init__.py +0 -0
  418. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/__init__.py +0 -0
  419. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/api.py +0 -0
  420. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/auth.py +0 -0
  421. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/cost.py +0 -0
  422. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/gpus.py +0 -0
  423. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/preflight.py +0 -0
  424. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/pricing.py +0 -0
  425. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/__init__.py +0 -0
  426. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/resources.py +0 -0
  427. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/serverless/__init__.py +0 -0
  428. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/serverless/endpoints.py +0 -0
  429. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/__init__.py +0 -0
  430. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/client/__init__.py +0 -0
  431. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/client/api.py +0 -0
  432. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/client/auth.py +0 -0
  433. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/client/preflight.py +0 -0
  434. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/client/pricing.py +0 -0
  435. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/execution/__init__.py +0 -0
  436. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/execution/provider.py +0 -0
  437. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/jobs/__init__.py +0 -0
  438. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/jobs/builders.py +0 -0
  439. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/py.typed +0 -0
  440. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/__init__.py +0 -0
  441. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/accounting/__init__.py +0 -0
  442. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/accounting/artifacts.py +0 -0
  443. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/accounting/costs.py +0 -0
  444. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/accounting/weight_cache.py +0 -0
  445. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/__init__.py +0 -0
  446. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/deadlines.py +0 -0
  447. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/preparation.py +0 -0
  448. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/reporting.py +0 -0
  449. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/submit.py +0 -0
  450. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/results/__init__.py +0 -0
  451. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/results/checkpoints.py +0 -0
  452. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/results/verified_revisions.py +0 -0
  453. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/__init__.py +0 -0
  454. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/attach_reconcile.py +0 -0
  455. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/deploy.py +0 -0
  456. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/transitions.py +0 -0
  457. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runtime_capsule/__init__.py +0 -0
  458. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runtime_capsule/build.py +0 -0
  459. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runtime_capsule/manifest.py +0 -0
  460. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runtime_capsule/profiles.py +0 -0
  461. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/schema/__init__.py +0 -0
  462. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/schema/fields.py +0 -0
  463. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/__init__.py +0 -0
  464. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/__init__.py +0 -0
  465. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/__main__.py +0 -0
  466. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/bootstrap.py +0 -0
  467. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/chat_stream.py +0 -0
  468. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/http.py +0 -0
  469. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/launch.py +0 -0
  470. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/manifest.py +0 -0
  471. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/materialize.py +0 -0
  472. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/openai.py +0 -0
  473. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/progress.py +0 -0
  474. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/__init__.py +0 -0
  475. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/errors.py +0 -0
  476. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/protocol.py +0 -0
  477. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/provenance.py +0 -0
  478. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/responses.py +0 -0
  479. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/urls.py +0 -0
  480. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/__init__.py +0 -0
  481. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/_canonical.py +0 -0
  482. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/_serialization.py +0 -0
  483. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/_urls.py +0 -0
  484. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/credentials.py +0 -0
  485. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/planning.py +0 -0
  486. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/types.py +0 -0
  487. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/__init__.py +0 -0
  488. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/adapter_check.py +0 -0
  489. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/deploy.py +0 -0
  490. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/export.py +0 -0
  491. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/preflight.py +0 -0
  492. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/profiles.py +0 -0
  493. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/readiness.py +0 -0
  494. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/resolve.py +0 -0
  495. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/__init__.py +0 -0
  496. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/common/__init__.py +0 -0
  497. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/common/records.py +0 -0
  498. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/__init__.py +0 -0
  499. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  500. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  501. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  502. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  503. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  504. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  505. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  506. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  507. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  508. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  509. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  510. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  511. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  512. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/__init__.py +0 -0
  513. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/openai.py +0 -0
  514. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/runtime_support.py +0 -0
  515. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/streaming.py +0 -0
  516. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/thinking.py +0 -0
  517. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/validation.py +0 -0
  518. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/__init__.py +0 -0
  519. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/adapters.py +0 -0
  520. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/engine.py +0 -0
  521. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/errors.py +0 -0
  522. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/multimodal.py +0 -0
  523. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/prompt.py +0 -0
  524. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/sampling.py +0 -0
  525. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/structured_outputs.py +0 -0
  526. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/types.py +0 -0
  527. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/__init__.py +0 -0
  528. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/__main__.py +0 -0
  529. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/asgi/__init__.py +0 -0
  530. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/asgi/app.py +0 -0
  531. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/asgi/cli.py +0 -0
  532. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/billing/__init__.py +0 -0
  533. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/billing/retry.py +0 -0
  534. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/__init__.py +0 -0
  535. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/ops/__init__.py +0 -0
  536. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/ops/repo_cleanup.py +0 -0
  537. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/ops/serving_resources.py +0 -0
  538. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/__init__.py +0 -0
  539. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/envs.py +0 -0
  540. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/runs.py +0 -0
  541. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/teacher/__init__.py +0 -0
  542. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/teacher/errors.py +0 -0
  543. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/teacher/requests.py +0 -0
  544. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/__init__.py +0 -0
  545. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/db.py +0 -0
  546. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/deps.py +0 -0
  547. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/locks.py +0 -0
  548. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/__init__.py +0 -0
  549. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/envs.py +0 -0
  550. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/meta.py +0 -0
  551. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/runs.py +0 -0
  552. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/serving.py +0 -0
  553. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/serving_chat.py +0 -0
  554. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/serving_completion.py +0 -0
  555. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/serving_revisions.py +0 -0
  556. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/serving_smoke.py +0 -0
  557. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/teacher.py +0 -0
  558. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/__init__.py +0 -0
  559. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/app/__init__.py +0 -0
  560. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/app/modal_app.py +0 -0
  561. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/__init__.py +0 -0
  562. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/accounting/__init__.py +0 -0
  563. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/accounting/usage.py +0 -0
  564. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/accounting/usage_facts.py +0 -0
  565. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/accounting/usage_outbox.py +0 -0
  566. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/__init__.py +0 -0
  567. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/boot.py +0 -0
  568. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/errors.py +0 -0
  569. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/generation.py +0 -0
  570. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/lora_engine.py +0 -0
  571. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/lora_entries.py +0 -0
  572. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/model_config.py +0 -0
  573. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/prequant_config.py +0 -0
  574. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/support.py +0 -0
  575. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/__init__.py +0 -0
  576. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/adapter_routes.py +0 -0
  577. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/body_limit.py +0 -0
  578. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/context.py +0 -0
  579. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/headers.py +0 -0
  580. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/inference_routes.py +0 -0
  581. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/router.py +0 -0
  582. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/routing.py +0 -0
  583. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/__init__.py +0 -0
  584. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/multimodal.py +0 -0
  585. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/openai_request.py +0 -0
  586. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/openai_stream.py +0 -0
  587. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/provenance.py +0 -0
  588. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/requests.py +0 -0
  589. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/responses.py +0 -0
  590. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/schemas.py +0 -0
  591. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/streaming.py +0 -0
  592. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/structured_outputs.py +0 -0
  593. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/__init__.py +0 -0
  594. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/access.py +0 -0
  595. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/lookup.py +0 -0
  596. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/persisted_columns.py +0 -0
  597. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/persistence.py +0 -0
  598. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/registration.py +0 -0
  599. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/registry.py +0 -0
  600. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/settings.py +0 -0
  601. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/supabase_rest.py +0 -0
  602. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/undeploy.py +0 -0
  603. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/snapshot/__init__.py +0 -0
  604. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/snapshot/archive.py +0 -0
  605. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/teacher/__init__.py +0 -0
  606. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/teacher/limits.py +0 -0
  607. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/teacher/provider_status.py +0 -0
  608. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/teacher/retry_contract.py +0 -0
  609. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/build_dev_dist.py +0 -0
  610. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/check_file_size.py +0 -0
  611. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/check_function_size.py +0 -0
  612. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/check_rollout_identity_actor.py +0 -0
  613. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/check_source_layout.py +0 -0
  614. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/check_verl_pin_exists.py +0 -0
  615. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/qualify_serving_profile.py +0 -0
  616. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/scrub_history.sh +0 -0
  617. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/serve_launch.py +0 -0
  618. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/__init__.py +0 -0
  619. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/__init__.py +0 -0
  620. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/chat_provenance.py +0 -0
  621. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/chat_transport.py +0 -0
  622. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/managed_chat.py +0 -0
  623. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/profile.py +0 -0
  624. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/server_api_plugin.py +0 -0
  625. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/source_snapshot.py +0 -0
  626. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/specs.py +0 -0
  627. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/teacher.py +0 -0
  628. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/vast.py +0 -0
  629. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/capture_image_sft_processor_oracle.py +0 -0
  630. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/capture_qwen38_27b_metadata.py +0 -0
  631. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/conftest.py +0 -0
  632. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  633. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  634. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  635. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  636. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  637. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  638. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/__init__.py +0 -0
  639. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/conftest.py +0 -0
  640. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/test_lambda_live.py +0 -0
  641. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/test_runpod_live.py +0 -0
  642. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/test_sft_thinking_render_live.py +0 -0
  643. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/test_vast_live.py +0 -0
  644. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/checkpoint_fixtures.py +0 -0
  645. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/conftest.py +0 -0
  646. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_base_model_serving.py +0 -0
  647. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_chat_auth.py +0 -0
  648. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_chat_authorizer.py +0 -0
  649. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  650. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_checkpoint_model_validation.py +0 -0
  651. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_engine_error_status.py +0 -0
  652. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_fp8_config.py +0 -0
  653. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_immutable_engine.py +0 -0
  654. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_immutable_revisions.py +0 -0
  655. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_immutable_schemas.py +0 -0
  656. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_mirror_sampling_parity.py +0 -0
  657. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_modal_deploy_identity.py +0 -0
  658. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_modal_image_paths.py +0 -0
  659. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_model_config.py +0 -0
  660. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_multimodal.py +0 -0
  661. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_openai_stream_options.py +0 -0
  662. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_per_model_gpu.py +0 -0
  663. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_persistence.py +0 -0
  664. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_pre_first_disconnect.py +0 -0
  665. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_prequant_config.py +0 -0
  666. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_registry.py +0 -0
  667. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_registry_coverage.py +0 -0
  668. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_request_body_limit.py +0 -0
  669. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_router.py +0 -0
  670. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_router_coverage.py +0 -0
  671. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_router_edge_coverage.py +0 -0
  672. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_schemas_coverage.py +0 -0
  673. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_serve_reasoning_split.py +0 -0
  674. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_serve_structured_outputs.py +0 -0
  675. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_serve_thinking.py +0 -0
  676. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_settings.py +0 -0
  677. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_structured_outputs.py +0 -0
  678. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_structured_outputs_coverage.py +0 -0
  679. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_supabase_rest_coverage.py +0 -0
  680. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_usage_outbox.py +0 -0
  681. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_usage_reporter.py +0 -0
  682. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving_conformance/__init__.py +0 -0
  683. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving_conformance/conftest.py +0 -0
  684. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving_conformance/test_contract.py +0 -0
  685. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_accounting_coverage.py +0 -0
  686. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_adapter_shard_completeness.py +0 -0
  687. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_agent_flash_cli_contract.py +0 -0
  688. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_algorithms.py +0 -0
  689. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_backend_common.py +0 -0
  690. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_backend_jobspec_contract.py +0 -0
  691. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_bake_kernel_cache.py +0 -0
  692. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_base_model_provenance.py +0 -0
  693. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_billing_retry.py +0 -0
  694. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_build_context_contract.py +0 -0
  695. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_capture_qwen38_metadata.py +0 -0
  696. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_catalog_consistency.py +0 -0
  697. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_catalog_only_models.py +0 -0
  698. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_charge_pricing.py +0 -0
  699. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_chat_foundations.py +0 -0
  700. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_checkpoint_lifecycle.py +0 -0
  701. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_checkpoints.py +0 -0
  702. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_commands.py +0 -0
  703. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_commands_coverage.py +0 -0
  704. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_credential_shadowing.py +0 -0
  705. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_errors.py +0 -0
  706. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_estimate.py +0 -0
  707. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_gpus_flag.py +0 -0
  708. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_help.py +0 -0
  709. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_main_coverage.py +0 -0
  710. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_managed.py +0 -0
  711. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_render_coverage.py +0 -0
  712. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_render_theme.py +0 -0
  713. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_serve_deploy.py +0 -0
  714. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_serve_status.py +0 -0
  715. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_serve_undeploy.py +0 -0
  716. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_traces.py +0 -0
  717. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_wandb_warning.py +0 -0
  718. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_client.py +0 -0
  719. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_client_import_purity.py +0 -0
  720. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_client_server_integration.py +0 -0
  721. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_client_stream_reads.py +0 -0
  722. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_config_env_vars.py +0 -0
  723. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_config_overrides.py +0 -0
  724. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_console_upload.py +0 -0
  725. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_controlled_experiment_repairs.py +0 -0
  726. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_analytical.py +0 -0
  727. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_currency.py +0 -0
  728. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_equation.py +0 -0
  729. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_estimate.py +0 -0
  730. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_hardware.py +0 -0
  731. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_models.py +0 -0
  732. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_dataset_profile.py +0 -0
  733. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_deploy_latency.py +0 -0
  734. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_dev_channel.py +0 -0
  735. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_disk_gb.py +0 -0
  736. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_endpoint_name.py +0 -0
  737. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_cache_evict.py +0 -0
  738. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_delete.py +0 -0
  739. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_download.py +0 -0
  740. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_download_api.py +0 -0
  741. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_evaluations.py +0 -0
  742. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_list_api.py +0 -0
  743. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_list_cli.py +0 -0
  744. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_list_hub.py +0 -0
  745. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_no_install.py +0 -0
  746. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_pull.py +0 -0
  747. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_pull_coverage.py +0 -0
  748. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_pull_loader_coverage.py +0 -0
  749. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_pull_managed_control_plane.py +0 -0
  750. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_push.py +0 -0
  751. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_rate_limit_resolve.py +0 -0
  752. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_test.py +0 -0
  753. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_envs_coverage.py +0 -0
  754. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_export.py +0 -0
  755. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_flash_mvp.py +0 -0
  756. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_flash_worker.py +0 -0
  757. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_flashinfer_cache_dirs.py +0 -0
  758. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_fused_expert_warmstart.py +0 -0
  759. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_github_urlopen_retry.py +0 -0
  760. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_gpu_type_single_field.py +0 -0
  761. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_gpus.py +0 -0
  762. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_checkpoint_durability.py +0 -0
  763. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_params.py +0 -0
  764. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_process_census.py +0 -0
  765. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_resident_sizing.py +0 -0
  766. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_reward_batching.py +0 -0
  767. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_rollout_contract.py +0 -0
  768. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_rollout_identity.py +0 -0
  769. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_health_liveness.py +0 -0
  770. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_hf_retry.py +0 -0
  771. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_idle_endpoint_reaper.py +0 -0
  772. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_image_environment_capability.py +0 -0
  773. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_image_incremental_processor.py +0 -0
  774. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_image_sft_markers.py +0 -0
  775. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_image_sft_processor_parity.py +0 -0
  776. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_image_tokens.py +0 -0
  777. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_infisical_secrets.py +0 -0
  778. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_instance_bootstrap_coverage.py +0 -0
  779. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_internal_client.py +0 -0
  780. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_kernel_cache.py +0 -0
  781. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_kernel_fingerprint.py +0 -0
  782. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_kv_util.py +0 -0
  783. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lambda_api_coverage.py +0 -0
  784. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_logging.py +0 -0
  785. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_login_perms.py +0 -0
  786. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lora_rank_coverage.py +0 -0
  787. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lora_rank_nested_rung.py +0 -0
  788. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lora_rank_preflight.py +0 -0
  789. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lora_targeting.py +0 -0
  790. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lora_targeting_pinned_verl.py +0 -0
  791. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_managed_config_fields.py +0 -0
  792. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_managed_hf_repo.py +0 -0
  793. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_metrics_schema_agent_contract.py +0 -0
  794. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_mig_guard.py +0 -0
  795. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_mirror_sampling_parity.py +0 -0
  796. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_multimodal_training.py +0 -0
  797. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_named_reward_metrics.py +0 -0
  798. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd.py +0 -0
  799. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_limits.py +0 -0
  800. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  801. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_replay_guard.py +0 -0
  802. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_packing.py +0 -0
  803. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_packing_coverage.py +0 -0
  804. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_parasail_teacher.py +0 -0
  805. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_persisted_spec_envelope.py +0 -0
  806. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_poll_helpers.py +0 -0
  807. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_preflight.py +0 -0
  808. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_prompt_budget.py +0 -0
  809. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_provider_preflight_coverage.py +0 -0
  810. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_provider_teardown_robustness.py +0 -0
  811. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_providers_symmetry.py +0 -0
  812. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_realized_cost.py +0 -0
  813. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_repo_cleanup.py +0 -0
  814. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_resolve_params_b.py +0 -0
  815. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_rl_train.py +0 -0
  816. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_rollout_samples.py +0 -0
  817. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_run_registry_lifecycle.py +0 -0
  818. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_runpod_api_delete.py +0 -0
  819. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_runpod_key_fingerprint.py +0 -0
  820. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_runpod_key_waterfall.py +0 -0
  821. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_runtime_capsule.py +0 -0
  822. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve.py +0 -0
  823. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_bootstrap_http.py +0 -0
  824. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_launch.py +0 -0
  825. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_manifest.py +0 -0
  826. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_materialize.py +0 -0
  827. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_packaging.py +0 -0
  828. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_progress.py +0 -0
  829. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_control.py +0 -0
  830. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_docs.py +0 -0
  831. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_modal_contract_lock.py +0 -0
  832. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_modal_sdk.py +0 -0
  833. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  834. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_modal_teardown_identity.py +0 -0
  835. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_profile_qualification.py +0 -0
  836. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_profiles.py +0 -0
  837. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_provisioning_common.py +0 -0
  838. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_provisioning_modal.py +0 -0
  839. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_reasoning_content.py +0 -0
  840. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_resolve_provenance.py +0 -0
  841. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_runtime_adapters.py +0 -0
  842. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_runtime_engine.py +0 -0
  843. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_runtime_package.py +0 -0
  844. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_runtime_types.py +0 -0
  845. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_app_coverage.py +0 -0
  846. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_auth_singleflight.py +0 -0
  847. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_billing.py +0 -0
  848. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_db.py +0 -0
  849. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_locks_coverage.py +0 -0
  850. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_managed_chat_requests.py +0 -0
  851. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_serving_resources.py +0 -0
  852. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_standalone.py +0 -0
  853. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serving_conformance_gate.py +0 -0
  854. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serving_context_preflight.py +0 -0
  855. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serving_contract.py +0 -0
  856. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serving_schema_coverage.py +0 -0
  857. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_chunked_nll.py +0 -0
  858. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_example_selection.py +0 -0
  859. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_gc_off.py +0 -0
  860. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_max_context.py +0 -0
  861. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_step_floor.py +0 -0
  862. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_train.py +0 -0
  863. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_workload.py +0 -0
  864. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_source_layout.py +0 -0
  865. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_source_snapshot.py +0 -0
  866. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_spec_and_validation.py +0 -0
  867. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_spec_contract_bytes.py +0 -0
  868. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_step_floor.py +0 -0
  869. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_step_metrics.py +0 -0
  870. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_step_timing.py +0 -0
  871. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_structured_outputs.py +0 -0
  872. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_teacher_encoding_contract.py +0 -0
  873. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_terminal_artifacts.py +0 -0
  874. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_thinking_config.py +0 -0
  875. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_train_context_preflight.py +0 -0
  876. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_training_controls.py +0 -0
  877. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_type_comment_prose.py +0 -0
  878. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vast_api.py +0 -0
  879. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vast_api_coverage.py +0 -0
  880. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vast_offers.py +0 -0
  881. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vast_provider_coverage.py +0 -0
  882. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vast_runner.py +0 -0
  883. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_verified_revisions.py +0 -0
  884. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_verifiers.py +0 -0
  885. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_verl_checkpoint_export.py +0 -0
  886. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_verl_child_plugins.py +0 -0
  887. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_verl_silence_watchdog.py +0 -0
  888. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_version.py +0 -0
  889. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  890. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vllm_moe_lora_backport.py +0 -0
  891. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vram_architecture.py +0 -0
  892. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_wandb_link.py +0 -0
  893. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_wandb_naming.py +0 -0
  894. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_warmstart_adapter_download.py +0 -0
  895. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_warmstart_cross_repo.py +0 -0
  896. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_warmstart_error_attribution.py +0 -0
  897. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_warmstart_image_adapters.py +0 -0
  898. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_dryrun.py +0 -0
  899. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_hardexit.py +0 -0
  900. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_image.py +0 -0
  901. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_init_heartbeat.py +0 -0
  902. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_stack.py +0 -0
  903. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_thinking.py +0 -0
  904. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_workflow_contracts.py +0 -0
  905. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_workload_profile.py +0 -0
  906. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_zero2_sharding_gate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.2.123
3
+ Version: 1.2.127
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)
@@ -202,27 +202,6 @@ def _score_case(
202
202
  )
203
203
 
204
204
 
205
- _READY_DEPLOYMENT_STATES = frozenset({"ready", "deployed"})
206
- _BUSY_DEPLOYMENT_STATES = frozenset({"queued", "smoke_testing", "reconciling"})
207
-
208
-
209
- def _live_deployment(client, run_id: str) -> dict | None:
210
- """The run's deployment record, whatever state it is in, or None when it has none.
211
-
212
- Match by run id because `deployment_for` misses step deployments. Busy records name the rollout
213
- target and hide the revision that may still be serving.
214
- """
215
- for entry in client.deployments() or ():
216
- listed = entry.get("deployment") or {}
217
- if run_id not in (listed.get("run_id"), entry.get("run_id")):
218
- continue
219
- # the listing omits undeployed/dry_run rows, so anything here is servable.
220
- if not listed.get("run_id") and entry.get("run_id"):
221
- listed = {**listed, "run_id": entry["run_id"]}
222
- return listed
223
- return None
224
-
225
-
226
205
  def _case_ids(cases: list[EvalCase]) -> list[str]:
227
206
  """Stable per-case ids, disambiguating sidecars that reuse one id across cases.
228
207
 
@@ -681,7 +681,7 @@ spending another GPU run:
681
681
  | Local-only env path in config | Config validation says there is no local path mode | Publish first, then use the returned slug in `[environment] id`. `flash train` only runs published env ids, not local paths. |
682
682
  | Config knobs are in the wrong table | Validation rejects `[grpo]`, `[sft]`, or unknown `[train]` keys | Put `epochs`, `group_size`, `max_completion_tokens`, `temperature`, `max_context_tokens`, LoRA, and other training knobs under `[train]`. |
683
683
  | GPU selection is not what you expected | Leaving `[gpu] type` unset may select a different fitting class as prices or capacity change | Set `[gpu] type` to an active validated class to hard-pin it, to a list (`["A100 PCIe", "A100 SXM"]`) to allow several, or leave it unset for managed cheapest-fit allocation. `train.hf_repo` remains platform-managed. |
684
- | A pinned run stops after two capacity refusals | The pinned class had no capacity, and no other class was allowed, so there was nowhere to fail over | Widen the search: drop the `[gpu] type` pin for managed allocation, name alternatives with `type = ["A100 PCIe", "A100 SXM"]`, or drop `[gpu] provider`. Flash stops once the class a retry would land on has refused capacity twice, rather than re-queueing on a class the provider keeps refusing. One refusal always earns a retry, since a momentary shortage is not a sold-out class. |
684
+ | A run stops after an infrastructure or OOM failure | No candidate with strictly more usable VRAM remains, even if another provider offers the same-size GPU | Widen `[gpu] type` or the card-count ceiling to include a strictly larger fitting shape, or reduce the workload footprint. Flash preserves allocator order among larger candidates and never retries an equal-size shape. A managed shared-cache `no_capacity` or `poll_error` gets one cacheless same-shape retry before this rule applies. |
685
685
  | Secrets are not available on the worker | Reward code works locally but remote logs show missing API keys or auth failures | List secret names under `[environment] secrets = [...]`, export those env vars locally before submit, or put them in local `.env` / `.env.local`. Never hard-code secret values in the config. |
686
686
  | Scorer dependency is missing on the worker | Reward code works locally but every reward is `0.0` remotely; the import your scorer needs is installed in your venv, not the worker's | List the packages your scorer imports under `[environment] pip = ["pymongo>=4.6"]`. They are installed alongside Flash's own worker requirement. `flash env test` names the failing import locally before you spend a GPU on it. Entries name packages only: pip options and URLs with inline credentials are rejected, because the spec is stored and uploaded in plaintext (put the credential in `[environment] secrets`). |
687
687
  | Wrong model / thinking setting | Config validation fails, or chat behavior does not match the run | Config validation is authoritative for model and thinking compatibility. Thinking is a run-level choice, and `flash models chat` does not expose an override flag. |
@@ -690,7 +690,7 @@ spending another GPU run:
690
690
  | Reward rises but behavior is worse | Short, templated, malformed, or reward-hacked outputs score well | Deploy the adapter and probe real examples. Add hard validity gates before judge calls, penalize degenerate shortcuts, and judge the outcome rather than the surface string. |
691
691
  | OPD makes the student worse, not better | The distilled adapter scores _below_ its SFT/base start even though the per-token loss fell | The teacher, not a knob, is the ceiling. Reverse-KL only pulls the student toward the managed GLM-5.2 teacher, so a teacher that is weak or wrong on _your_ task transfers its mistakes. Vet the teacher before you spend — the "On-policy distillation" section gives the two ways to do that with a managed key. If it can't beat your student, use GRPO or SFT instead — OPD cannot exceed a teacher that can't do the task. |
692
692
  | Output is truncated | Correct-looking answers cut off mid-response or JSON is incomplete | Increase `max_completion_tokens` for GRPO/OPD rollouts or `max_context_tokens` for total prompt+completion context only after seeing truncation. Oversizing them by default just burns memory/cost. |
693
- | Infrastructure, CUDA, OOM, vLLM, or kernel failure | Run errors before useful metrics, often during setup/model load | Treat this as infrastructure pressure, not proof the model is too large. Read `flash runs log <run-id>`, reduce footprint (`max_context_tokens`, `max_completion_tokens`, `group_size`) if needed, and let Flash retry/allocate another fitting GPU class. |
693
+ | Infrastructure, CUDA, OOM, vLLM, or kernel failure | Run errors before useful metrics, often during setup/model load | Read `flash runs log <run-id>`. Flash advances a single executed-width-aware usable-VRAM floor for candidate-bound infrastructure and OOM failures, then retries only a strictly larger fitting candidate while keeping infrastructure and OOM budgets separate. Reduce `max_context_tokens`, `max_completion_tokens`, or `group_size` when no larger candidate remains. |
694
694
  | Run looks stuck after disconnecting | Terminal stopped streaming but the job may still be alive | Ctrl-C detaches. Use `flash runs log <run-id> --follow` to reattach, `flash runs log <run-id>` for the console/error output, or `flash runs cancel <run-id>` if you intentionally want to stop it. |
695
695
  | Two runs training the same thing | `flash runs list` shows a live run you thought you had killed, on top of the one you just submitted | Killing the `flash train` client only detaches; it never cancels. Always `flash runs list` and cancel the stale run _before_ re-submitting, and never wrap `flash train` in `timeout`. |
696
696
  | Wrong identity spends the money | Push/train lands in an org you did not expect, or a run id you know is valid comes back "unknown" | `FREESOLO_API_KEY` in the environment silently overrides `flash login`. Run `flash whoami` first. Run visibility is scoped to the key that created the run, so archive result baselines to disk rather than relying on `flash runs list` to find them later. |
@@ -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()
@@ -318,6 +318,7 @@ def _write_child_shims(
318
318
  ("train/opd/child/plugin.py", "flash_opd_plugin.py"),
319
319
  ("train/opd/child/bridge.py", "flash_opd_bridge.py"),
320
320
  ("train/opd/child/structured.py", "flash_opd_structured.py"),
321
+ ("train/opd/child/tensors.py", "flash_opd_tensors.py"),
321
322
  ("train/opd/child/multiturn.py", "flash_opd_multiturn.py"),
322
323
  ("train/opd/child/entry.py", "flash_opd_entry.py"),
323
324
  ("train/opd/child/replay_guard.py", "flash_opd_replay_guard.py"),
@@ -112,26 +112,6 @@ def _warmstart_adapter_path(
112
112
  return adapter_dir
113
113
 
114
114
 
115
- def _verl_image_message_content(content) -> str:
116
- if isinstance(content, str):
117
- return content
118
- if content is None:
119
- return ""
120
- if not isinstance(content, list):
121
- raise ValueError("multimodal message content must be text or content blocks")
122
- parts: list[str] = []
123
- for block in content:
124
- if not isinstance(block, dict):
125
- raise ValueError("multimodal message content blocks must be objects")
126
- if block.get("type") == "text":
127
- parts.append(str(block.get("text") or ""))
128
- elif block.get("type") == "image":
129
- parts.append("<image>")
130
- else:
131
- raise ValueError(f"unsupported multimodal SFT content block {block.get('type')!r}")
132
- return "".join(parts)
133
-
134
-
135
115
  _restore_verl_resume = partial(restore_verl_resume, job_label="SFT")
136
116
 
137
117
 
@@ -26,6 +26,15 @@ if PLUGIN_LOADED_EXTERNALLY:
26
26
  from flash_multiturn_glue import multi_modal_image_count
27
27
  from flash_opd_multiturn import build_flash_multi_turn_agent_loop
28
28
  from flash_opd_structured import StructuredOutputReplay, canonical_structured_spec
29
+ from flash_opd_tensors import (
30
+ full_sequence_signal_sequences as _full_sequence_signal_sequences,
31
+ )
32
+ from flash_opd_tensors import (
33
+ packed_full_sequence as _packed_full_sequence,
34
+ )
35
+ from flash_opd_tensors import (
36
+ signal_sequences as _signal_sequences,
37
+ )
29
38
  else:
30
39
  from flash.engine.worker.train.core.child.glue import multi_modal_image_count
31
40
  from flash.engine.worker.train.opd.child.multiturn import build_flash_multi_turn_agent_loop
@@ -33,6 +42,15 @@ else:
33
42
  StructuredOutputReplay,
34
43
  canonical_structured_spec,
35
44
  )
45
+ from flash.engine.worker.train.opd.child.tensors import (
46
+ full_sequence_signal_sequences as _full_sequence_signal_sequences,
47
+ )
48
+ from flash.engine.worker.train.opd.child.tensors import (
49
+ packed_full_sequence as _packed_full_sequence,
50
+ )
51
+ from flash.engine.worker.train.opd.child.tensors import (
52
+ signal_sequences as _signal_sequences,
53
+ )
36
54
 
37
55
  _PERMANENT_TEACHER_EXIT = 86
38
56
  _TRANSIENT_TEACHER_EXIT = 87
@@ -86,16 +104,6 @@ def deterministic_rollout_seed(
86
104
  return int.from_bytes(digest, "big") & ((1 << 63) - 1)
87
105
 
88
106
 
89
- def _signal_sequences(group_ids, response_mask):
90
- """Return the per-sequence mask for rows carrying at least one aligned student token."""
91
- return ((group_ids >= 0) & response_mask.bool()).any(dim=-1)
92
-
93
-
94
- def _full_sequence_signal_sequences(group_ids):
95
- """Detect aligned metadata in native full-sequence teacher tensors."""
96
- return group_ids.ge(0).flatten(start_dim=1).any(dim=-1)
97
-
98
-
99
107
  def _flash_groupwise_reverse_kl_values(
100
108
  student_logprobs,
101
109
  teacher_logsums,
@@ -408,8 +416,14 @@ def _register_flash_distillation_loss() -> None:
408
416
  def flash_groupwise_reverse_kl(config, distillation_config, model_output, data):
409
417
  _set_current_global_batch_info(config, data)
410
418
  student_logprobs = no_padding_2_padding(model_output["log_probs"], data)
411
- teacher_logsums = no_padding_2_padding(data["teacher_logprobs"], data).squeeze(-1)
412
- group_ids = no_padding_2_padding(data["teacher_ids"], data).squeeze(-1).long()
419
+ teacher_logsums = no_padding_2_padding(
420
+ _packed_full_sequence(data["teacher_logprobs"], data), data
421
+ ).squeeze(-1)
422
+ group_ids = (
423
+ no_padding_2_padding(_packed_full_sequence(data["teacher_ids"], data), data)
424
+ .squeeze(-1)
425
+ .long()
426
+ )
413
427
  response_mask = data["response_mask"]
414
428
  if response_mask.is_nested:
415
429
  response_mask = response_mask.to_padded_tensor(False)
@@ -0,0 +1,56 @@
1
+ """Batch-layout helpers for the flash OPD distillation loss.
2
+
3
+ verl hands the loss a `TensorDict` whose fields are laid out per field rather than per batch:
4
+ `list_of_dict_to_tensordict` stacks a field when every sample's tensor shares one shape and
5
+ nests it only when the shapes differ. So `prompts`, `teacher_logprobs`, and `teacher_ids` can
6
+ each arrive nested or padded independently, and the loss has to read all of them either way.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+
12
+ def signal_sequences(group_ids, response_mask):
13
+ """Return the per-sequence mask for rows carrying at least one aligned student token."""
14
+ return ((group_ids >= 0) & response_mask.bool()).any(dim=-1)
15
+
16
+
17
+ def full_sequence_signal_sequences(group_ids):
18
+ """Detect aligned metadata in native full-sequence teacher tensors.
19
+
20
+ Padded only: `flatten` raises on a nested tensor's ragged dim, so callers holding a nested
21
+ tensor must reduce per row instead.
22
+ """
23
+ return group_ids.ge(0).flatten(start_dim=1).any(dim=-1)
24
+
25
+
26
+ def packed_full_sequence(tensor, data):
27
+ """Put a full-sequence teacher tensor into the layout `no_padding_2_padding` documents.
28
+
29
+ That helper wants a nested tensor or `(total_nnz, *)` and reads `.values()` only when
30
+ nested, so a padded teacher measures as `bsz` and trips its `total_nnz` assertion.
31
+
32
+ The mask decides which positions are real, never the row's shape. verl pads a teacher row on
33
+ both sides (`_pad_teacher_outputs` left-pads by `prompt_width - prompt_length` and right-pads
34
+ the response), so a length alone cannot say where the real tokens sit and selecting a prefix
35
+ would silently train against the pad.
36
+ """
37
+ if tensor.is_nested:
38
+ return tensor
39
+ if "attention_mask" in data:
40
+ return tensor[data["attention_mask"].bool()]
41
+ # no mask: only a nested-prompt batch may omit that key, and only such a batch carries the
42
+ # lengths needed to check the stack. verl stacks this field only when every sequence shares
43
+ # one length, and pads a row only to the strided widths, so an unmasked stack is full.
44
+ prompts = data["prompts"]
45
+ if not prompts.is_nested:
46
+ raise AssertionError(
47
+ "flash OPD strided batch carries no attention mask, so real token positions "
48
+ "cannot be located"
49
+ )
50
+ lengths = prompts.offsets().diff() + data["responses"].offsets().diff()
51
+ if int(lengths.min()) != tensor.shape[1] or int(lengths.max()) != tensor.shape[1]:
52
+ raise AssertionError(
53
+ "flash OPD teacher tensor is padded but the batch carries no attention mask: "
54
+ f"width {tensor.shape[1]} against lengths {int(lengths.min())}..{int(lengths.max())}"
55
+ )
56
+ return tensor.flatten(0, 1)
@@ -929,9 +929,8 @@ class Provider(Protocol):
929
929
 
930
930
  # NOTE: ``supports_weight_cache: bool`` is an OPTIONAL capability attr (read via
931
931
  # ``getattr(prov, "supports_weight_cache", False)``, off this Protocol for the same isinstance
932
- # reason as below): True only for the provider that offers the shared weight-cache network volume
933
- # (RunPod). The runner gates its one-shot cache-less retry fallback on it; every other provider
934
- # defaults False.
932
+ # reason as below): True for providers that attach the managed shared weight cache. The runner
933
+ # gates its one-shot cache-less retry fallback on it; every other provider defaults False.
935
934
 
936
935
  # ``run_instances_remaining(run_id)`` is optional and must stay off this runtime-checkable
937
936
  # protocol. callers use getattr in server/_runtime.py. ``[]`` confirms clear; non-empty means a
@@ -23,6 +23,7 @@ class LambdaProvider(InstanceProvider):
23
23
  """``base.Provider`` for the Lambda Cloud substrate."""
24
24
 
25
25
  name = "lambda"
26
+ supports_weight_cache = True
26
27
  _gpu_identity_attr = "lambda_name"
27
28
 
28
29
  @property