freesolo-flash-dev 1.2.123__tar.gz → 1.2.124__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 (886) hide show
  1. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/PKG-INFO +1 -1
  2. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/eval.py +0 -21
  3. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/scaffold/TRAINING.md +2 -2
  4. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/opd_train_runner.py +1 -0
  5. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/sft_train.py +0 -20
  6. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/plugin.py +26 -12
  7. freesolo_flash_dev-1.2.124/flash/engine/worker/train/opd/child/tensors.py +56 -0
  8. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/base.py +2 -3
  9. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/execution/provider.py +1 -0
  10. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/jobs/__init__.py +5 -72
  11. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/jobs/reap.py +2 -2
  12. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/job_execution.py +0 -1
  13. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/jobs.py +3 -21
  14. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/polling.py +4 -8
  15. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/provider.py +0 -4
  16. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/accounting/reconciliation.py +9 -31
  17. freesolo_flash_dev-1.2.124/flash/runner/lifecycle/attempts.py +635 -0
  18. freesolo_flash_dev-1.2.124/flash/runner/lifecycle/claim_lock.py +64 -0
  19. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/state.py +28 -2
  20. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/status.py +12 -1
  21. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/attach.py +62 -40
  22. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/errors.py +4 -0
  23. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/lifecycle.py +53 -86
  24. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/recovery.py +0 -88
  25. freesolo_flash_dev-1.2.124/flash/runner/supervise/retry_decision.py +401 -0
  26. freesolo_flash_dev-1.2.124/flash/runner/supervise/seed_submission.py +743 -0
  27. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/teacher/broker.py +2 -2
  28. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/runtime.py +68 -26
  29. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/pyproject.toml +2 -2
  30. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/runner.py +16 -0
  31. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_allocator.py +1 -1
  32. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cancel_remote.py +21 -4
  33. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_ref_pinning.py +3 -2
  34. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_jobs.py +155 -245
  35. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lambda_runner.py +32 -307
  36. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_multi_gpu_gate.py +0 -25
  37. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_oom_escalate_gpu.py +30 -62
  38. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_multiturn_failure_exit.py +38 -0
  39. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_resume_safety.py +69 -21
  40. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_train.py +414 -0
  41. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_orchestrator_flash.py +4 -1
  42. freesolo_flash_dev-1.2.124/tests/test_provider_routing.py +1941 -0
  43. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_resume_on_retry.py +9 -3
  44. freesolo_flash_dev-1.2.124/tests/test_retry_decision.py +226 -0
  45. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_runmgmt.py +1448 -530
  46. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_api.py +20 -11
  47. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_source_attestation_flow.py +6 -5
  48. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_staged_environment.py +9 -1
  49. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_teacher_broker.py +2 -2
  50. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_weight_cache.py +3 -3
  51. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/uv.lock +1 -1
  52. freesolo_flash_dev-1.2.123/flash/runner/lifecycle/attempts.py +0 -151
  53. freesolo_flash_dev-1.2.123/flash/runner/supervise/retry_decision.py +0 -206
  54. freesolo_flash_dev-1.2.123/flash/runner/supervise/seed_submission.py +0 -935
  55. freesolo_flash_dev-1.2.123/tests/test_provider_routing.py +0 -3019
  56. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.dockerignore +0 -0
  57. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.env.example +0 -0
  58. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/CODEOWNERS +0 -0
  59. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  60. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  61. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  62. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  63. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/dependabot.yml +0 -0
  64. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/auto-rebake.yml +0 -0
  65. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/bake-kernel-cache.yml +0 -0
  66. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/ci.yml +0 -0
  67. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/deploy-modal-dev.yml +0 -0
  68. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/deploy-modal.yml +0 -0
  69. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/dev-kernel-cache.yml +0 -0
  70. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/main-source-guard.yml +0 -0
  71. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/notify-tests-repo.yml +0 -0
  72. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  73. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/publish-dev.yml +0 -0
  74. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/publish-image.yml +0 -0
  75. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/publish-serving-image.yml +0 -0
  76. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/publish.yml +0 -0
  77. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/version-parity.yml +0 -0
  78. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/worker-image.yml +0 -0
  79. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.gitignore +0 -0
  80. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/CHANGELOG.md +0 -0
  81. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/CODE_OF_CONDUCT.md +0 -0
  82. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/CONTRIBUTING.md +0 -0
  83. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/Dockerfile +0 -0
  84. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/Dockerfile.serve +0 -0
  85. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/Dockerfile.worker +0 -0
  86. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/LICENSE +0 -0
  87. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/NOTICE +0 -0
  88. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/README.md +0 -0
  89. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/SECURITY.md +0 -0
  90. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/SELF_HOSTING.md +0 -0
  91. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/build/kernel_cache/.gitignore +0 -0
  92. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/build/kernel_cache/.keep +0 -0
  93. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/deploy/infisical/README.md +0 -0
  94. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/deploy/infisical/entrypoint.sh +0 -0
  95. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/Dockerfile.kernelcache +0 -0
  96. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/Dockerfile.kernelcache.relayer +0 -0
  97. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/bake_kernel_cache.py +0 -0
  98. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/bake_pod_entry.py +0 -0
  99. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/extract_cudart_fix.py +0 -0
  100. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/kernel_fingerprint.py +0 -0
  101. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/make_rp_handler.py +0 -0
  102. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/patch_vllm_moe_lora.py +0 -0
  103. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docs/serving-contract.md +0 -0
  104. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/__init__.py +0 -0
  105. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/__init__.py +0 -0
  106. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/channel.py +0 -0
  107. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/diagnostics.py +0 -0
  108. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/fileio.py +0 -0
  109. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/logging.py +0 -0
  110. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/openai_sse.py +0 -0
  111. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/paths.py +0 -0
  112. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/version.py +0 -0
  113. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/adapters/__init__.py +0 -0
  114. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/adapters/artifacts.py +0 -0
  115. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/adapters/fused_experts.py +0 -0
  116. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/adapters/lora_rank.py +0 -0
  117. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/adapters/targets.py +0 -0
  118. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/__init__.py +0 -0
  119. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/__main__.py +0 -0
  120. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/__init__.py +0 -0
  121. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/__init__.py +0 -0
  122. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/__init__.py +0 -0
  123. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/imports.py +0 -0
  124. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/list.py +0 -0
  125. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/push.py +0 -0
  126. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/retained.py +0 -0
  127. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/setup.py +0 -0
  128. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  129. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/__init__.py +0 -0
  130. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/episode.py +0 -0
  131. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/eval_args.py +0 -0
  132. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/evaluations.py +0 -0
  133. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/params.py +0 -0
  134. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/test.py +0 -0
  135. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/warnings.py +0 -0
  136. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/__init__.py +0 -0
  137. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/account.py +0 -0
  138. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/catalog.py +0 -0
  139. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/deploy.py +0 -0
  140. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/log_follow.py +0 -0
  141. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/prompt_budget.py +0 -0
  142. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/runs.py +0 -0
  143. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/traces.py +0 -0
  144. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/train.py +0 -0
  145. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/worker_output.py +0 -0
  146. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/serving/__init__.py +0 -0
  147. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/serving/deploy.py +0 -0
  148. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/serving/identity.py +0 -0
  149. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/serving/status.py +0 -0
  150. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/serving/undeploy.py +0 -0
  151. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/__init__.py +0 -0
  152. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/account.py +0 -0
  153. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/env.py +0 -0
  154. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/errors.py +0 -0
  155. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/main.py +0 -0
  156. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/models.py +0 -0
  157. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/serve_parser.py +0 -0
  158. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/traces.py +0 -0
  159. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/training.py +0 -0
  160. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/scaffold/__init__.py +0 -0
  161. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/__init__.py +0 -0
  162. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/cost.py +0 -0
  163. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/env_panels.py +0 -0
  164. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/heartbeat.py +0 -0
  165. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/render.py +0 -0
  166. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/tables.py +0 -0
  167. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/tty.py +0 -0
  168. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/__init__.py +0 -0
  169. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/config.py +0 -0
  170. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/freesolo_api.py +0 -0
  171. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/http.py +0 -0
  172. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/runtime_secrets.py +0 -0
  173. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/shapes.py +0 -0
  174. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/specs.py +0 -0
  175. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/streaming.py +0 -0
  176. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/__init__.py +0 -0
  177. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/image_descriptors.py +0 -0
  178. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/multimodal.py +0 -0
  179. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/reasoning_normalization.py +0 -0
  180. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/structured_outputs.py +0 -0
  181. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/thinking.py +0 -0
  182. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/core/__init__.py +0 -0
  183. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/core/catalog.py +0 -0
  184. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/core/grpo.py +0 -0
  185. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/core/spec.py +0 -0
  186. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/core/spec_persistence.py +0 -0
  187. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/__init__.py +0 -0
  188. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/analytical.py +0 -0
  189. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/currency.py +0 -0
  190. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/facts.py +0 -0
  191. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/spec.py +0 -0
  192. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/types.py +0 -0
  193. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/__init__.py +0 -0
  194. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/__init__.py +0 -0
  195. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/kv_sizing.py +0 -0
  196. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/model_config_probe.py +0 -0
  197. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/prompt_budget.py +0 -0
  198. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/recipe.py +0 -0
  199. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/steps.py +0 -0
  200. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/vram.py +0 -0
  201. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/__init__.py +0 -0
  202. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/dataset_profile.py +0 -0
  203. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/image_tokens.py +0 -0
  204. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/reasoning_render.py +0 -0
  205. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/sft_image_rows.py +0 -0
  206. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/sft_workload.py +0 -0
  207. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/tokenizer.py +0 -0
  208. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/workload_profile.py +0 -0
  209. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/result/__init__.py +0 -0
  210. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/result/accounting.py +0 -0
  211. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/result/rollout_samples.py +0 -0
  212. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/support/__init__.py +0 -0
  213. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/support/huggingface.py +0 -0
  214. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/support/verl_checkpoint.py +0 -0
  215. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/support/verl_policy.py +0 -0
  216. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/support/worker_entrypoint.py +0 -0
  217. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/__init__.py +0 -0
  218. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/__main__.py +0 -0
  219. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/entry/__init__.py +0 -0
  220. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/entry/opd.py +0 -0
  221. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/entry/rl.py +0 -0
  222. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/entry/sft.py +0 -0
  223. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/entry/worker.py +0 -0
  224. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/io/__init__.py +0 -0
  225. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/io/heartbeat.py +0 -0
  226. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/io/hf.py +0 -0
  227. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/io/prefetch.py +0 -0
  228. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/io/wandb_log.py +0 -0
  229. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/__init__.py +0 -0
  230. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/adapter.py +0 -0
  231. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/chatml_mask.py +0 -0
  232. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/decoding.py +0 -0
  233. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/lora.py +0 -0
  234. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/packing.py +0 -0
  235. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/perf/__init__.py +0 -0
  236. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/perf/diagnostics.py +0 -0
  237. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/perf/lifecycle.py +0 -0
  238. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/perf/liger.py +0 -0
  239. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/perf/memory.py +0 -0
  240. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/runtime/__init__.py +0 -0
  241. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  242. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/runtime/rng.py +0 -0
  243. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/runtime/state.py +0 -0
  244. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/teacher/__init__.py +0 -0
  245. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/teacher/client.py +0 -0
  246. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/teacher/encoding.py +0 -0
  247. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  248. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/__init__.py +0 -0
  249. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/__init__.py +0 -0
  250. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/child/__init__.py +0 -0
  251. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/child/glue.py +0 -0
  252. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/child/runtime.py +0 -0
  253. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  254. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  255. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  256. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  257. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/__init__.py +0 -0
  258. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/backend_common.py +0 -0
  259. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/opd_train.py +0 -0
  260. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  261. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/rl_train.py +0 -0
  262. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  263. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  264. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  265. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/__init__.py +0 -0
  266. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
  267. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
  268. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
  269. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
  270. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
  271. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
  272. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  273. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  274. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/entry.py +0 -0
  275. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
  276. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  277. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  278. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/structured.py +0 -0
  279. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
  280. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
  281. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
  282. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
  283. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
  284. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
  285. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
  286. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
  287. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
  288. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
  289. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
  290. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
  291. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
  292. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/__init__.py +0 -0
  293. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  294. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/child/entry.py +0 -0
  295. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  296. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/child/patches.py +0 -0
  297. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  298. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  299. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  300. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/launch/config.py +0 -0
  301. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  302. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  303. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  304. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  305. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  306. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
  307. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  308. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  309. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/__init__.py +0 -0
  310. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/child/entry.py +0 -0
  311. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/child/plugin.py +0 -0
  312. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  313. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  314. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/setup/config.py +0 -0
  315. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/__init__.py +0 -0
  316. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/capabilities.py +0 -0
  317. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/checkpoints.py +0 -0
  318. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/child_io.py +0 -0
  319. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/diagnostics.py +0 -0
  320. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/parallelism.py +0 -0
  321. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/parent_work.py +0 -0
  322. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/process_census.py +0 -0
  323. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/__init__.py +0 -0
  324. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/__init__.py +0 -0
  325. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/adapter.py +0 -0
  326. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/base.py +0 -0
  327. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/loader.py +0 -0
  328. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/pull.py +0 -0
  329. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/staged.py +0 -0
  330. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/__init__.py +0 -0
  331. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/cache_security.py +0 -0
  332. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/dataset_selection.py +0 -0
  333. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/evaluations.py +0 -0
  334. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/identity.py +0 -0
  335. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/namespace_listing.py +0 -0
  336. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/package/__init__.py +0 -0
  337. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/package/direct_tokens.py +0 -0
  338. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/package/limits.py +0 -0
  339. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/package/unpack.py +0 -0
  340. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/__init__.py +0 -0
  341. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/__init__.py +0 -0
  342. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  343. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
  344. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  345. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  346. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  347. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/host/__init__.py +0 -0
  348. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  349. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/host/failmark.py +0 -0
  350. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  351. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  352. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/instance.py +0 -0
  353. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/poll.py +0 -0
  354. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  355. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/provider.py +0 -0
  356. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  357. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/net/__init__.py +0 -0
  358. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/net/auth.py +0 -0
  359. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/net/deadline.py +0 -0
  360. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/net/http.py +0 -0
  361. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/net/worker.py +0 -0
  362. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/artifacts/__init__.py +0 -0
  363. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/artifacts/hf.py +0 -0
  364. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/artifacts/preload_runpod.py +0 -0
  365. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/artifacts/weight_cache.py +0 -0
  366. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/__init__.py +0 -0
  367. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/allocator.py +0 -0
  368. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/fit_errors.py +0 -0
  369. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/preflight.py +0 -0
  370. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/realized.py +0 -0
  371. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/registry.py +0 -0
  372. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/sharding.py +0 -0
  373. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/__init__.py +0 -0
  374. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/__init__.py +0 -0
  375. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/api.py +0 -0
  376. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/auth.py +0 -0
  377. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/gpus.py +0 -0
  378. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/preflight.py +0 -0
  379. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/pricing.py +0 -0
  380. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/execution/__init__.py +0 -0
  381. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/jobs/builders.py +0 -0
  382. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/__init__.py +0 -0
  383. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/__init__.py +0 -0
  384. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/api.py +0 -0
  385. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/auth.py +0 -0
  386. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/cost.py +0 -0
  387. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/gpus.py +0 -0
  388. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/preflight.py +0 -0
  389. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/pricing.py +0 -0
  390. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/__init__.py +0 -0
  391. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/resources.py +0 -0
  392. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/serverless/__init__.py +0 -0
  393. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/serverless/endpoints.py +0 -0
  394. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/__init__.py +0 -0
  395. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/client/__init__.py +0 -0
  396. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/client/api.py +0 -0
  397. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/client/auth.py +0 -0
  398. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/client/preflight.py +0 -0
  399. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/client/pricing.py +0 -0
  400. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/execution/__init__.py +0 -0
  401. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/execution/provider.py +0 -0
  402. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/jobs/__init__.py +0 -0
  403. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/jobs/builders.py +0 -0
  404. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/py.typed +0 -0
  405. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/__init__.py +0 -0
  406. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/accounting/__init__.py +0 -0
  407. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/accounting/artifacts.py +0 -0
  408. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/accounting/costs.py +0 -0
  409. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/accounting/weight_cache.py +0 -0
  410. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/__init__.py +0 -0
  411. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/deadlines.py +0 -0
  412. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/preparation.py +0 -0
  413. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/reporting.py +0 -0
  414. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/submit.py +0 -0
  415. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/results/__init__.py +0 -0
  416. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/results/checkpoints.py +0 -0
  417. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/results/verified_revisions.py +0 -0
  418. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/__init__.py +0 -0
  419. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/attach_reconcile.py +0 -0
  420. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/deploy.py +0 -0
  421. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/transitions.py +0 -0
  422. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runtime_capsule/__init__.py +0 -0
  423. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runtime_capsule/build.py +0 -0
  424. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runtime_capsule/manifest.py +0 -0
  425. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runtime_capsule/profiles.py +0 -0
  426. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/schema/__init__.py +0 -0
  427. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/schema/fields.py +0 -0
  428. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/__init__.py +0 -0
  429. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/__init__.py +0 -0
  430. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/__main__.py +0 -0
  431. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/bootstrap.py +0 -0
  432. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/chat_stream.py +0 -0
  433. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/http.py +0 -0
  434. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/launch.py +0 -0
  435. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/manifest.py +0 -0
  436. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/materialize.py +0 -0
  437. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/openai.py +0 -0
  438. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/progress.py +0 -0
  439. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/__init__.py +0 -0
  440. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/errors.py +0 -0
  441. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/protocol.py +0 -0
  442. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/provenance.py +0 -0
  443. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/responses.py +0 -0
  444. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/urls.py +0 -0
  445. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/__init__.py +0 -0
  446. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/_canonical.py +0 -0
  447. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/_serialization.py +0 -0
  448. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/_urls.py +0 -0
  449. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/credentials.py +0 -0
  450. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/planning.py +0 -0
  451. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/types.py +0 -0
  452. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/__init__.py +0 -0
  453. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/adapter_check.py +0 -0
  454. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/deploy.py +0 -0
  455. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/export.py +0 -0
  456. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/preflight.py +0 -0
  457. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/profiles.py +0 -0
  458. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/readiness.py +0 -0
  459. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/resolve.py +0 -0
  460. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/__init__.py +0 -0
  461. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/common/__init__.py +0 -0
  462. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/common/records.py +0 -0
  463. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/__init__.py +0 -0
  464. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  465. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  466. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  467. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  468. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  469. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  470. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  471. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  472. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  473. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  474. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  475. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  476. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  477. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/__init__.py +0 -0
  478. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/openai.py +0 -0
  479. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/runtime_support.py +0 -0
  480. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/streaming.py +0 -0
  481. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/thinking.py +0 -0
  482. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/transport.py +0 -0
  483. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/validation.py +0 -0
  484. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/__init__.py +0 -0
  485. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/adapters.py +0 -0
  486. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/engine.py +0 -0
  487. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/errors.py +0 -0
  488. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/multimodal.py +0 -0
  489. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/prompt.py +0 -0
  490. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/sampling.py +0 -0
  491. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/structured_outputs.py +0 -0
  492. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/types.py +0 -0
  493. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/__init__.py +0 -0
  494. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/__main__.py +0 -0
  495. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/asgi/__init__.py +0 -0
  496. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/asgi/app.py +0 -0
  497. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/asgi/cli.py +0 -0
  498. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/billing/__init__.py +0 -0
  499. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/billing/charges.py +0 -0
  500. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/billing/retry.py +0 -0
  501. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/__init__.py +0 -0
  502. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/ops/__init__.py +0 -0
  503. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/ops/reconcile.py +0 -0
  504. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/ops/repo_cleanup.py +0 -0
  505. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/ops/serving_resources.py +0 -0
  506. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/__init__.py +0 -0
  507. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/checkpoints.py +0 -0
  508. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/environment_registry.py +0 -0
  509. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/envs.py +0 -0
  510. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/projects.py +0 -0
  511. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/runs.py +0 -0
  512. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/teacher/__init__.py +0 -0
  513. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/teacher/errors.py +0 -0
  514. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/teacher/requests.py +0 -0
  515. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/__init__.py +0 -0
  516. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/auth.py +0 -0
  517. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/db.py +0 -0
  518. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/deps.py +0 -0
  519. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/internal_client.py +0 -0
  520. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/locks.py +0 -0
  521. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/__init__.py +0 -0
  522. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/envs.py +0 -0
  523. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/meta.py +0 -0
  524. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/runs.py +0 -0
  525. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/serving.py +0 -0
  526. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/serving_chat.py +0 -0
  527. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/serving_completion.py +0 -0
  528. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/serving_revisions.py +0 -0
  529. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/serving_smoke.py +0 -0
  530. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/teacher.py +0 -0
  531. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/__init__.py +0 -0
  532. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/app/README.md +0 -0
  533. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/app/__init__.py +0 -0
  534. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/app/modal_app.py +0 -0
  535. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/__init__.py +0 -0
  536. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/accounting/__init__.py +0 -0
  537. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/accounting/usage.py +0 -0
  538. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/accounting/usage_facts.py +0 -0
  539. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/accounting/usage_outbox.py +0 -0
  540. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/__init__.py +0 -0
  541. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/boot.py +0 -0
  542. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/errors.py +0 -0
  543. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/generation.py +0 -0
  544. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/lora_engine.py +0 -0
  545. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/lora_entries.py +0 -0
  546. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/model_config.py +0 -0
  547. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/prequant_config.py +0 -0
  548. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/support.py +0 -0
  549. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/__init__.py +0 -0
  550. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/adapter_routes.py +0 -0
  551. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/body_limit.py +0 -0
  552. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/context.py +0 -0
  553. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/headers.py +0 -0
  554. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/inference_routes.py +0 -0
  555. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/router.py +0 -0
  556. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/routing.py +0 -0
  557. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/__init__.py +0 -0
  558. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/multimodal.py +0 -0
  559. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/openai_request.py +0 -0
  560. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/openai_stream.py +0 -0
  561. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/provenance.py +0 -0
  562. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/requests.py +0 -0
  563. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/responses.py +0 -0
  564. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/schemas.py +0 -0
  565. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/streaming.py +0 -0
  566. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/structured_outputs.py +0 -0
  567. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/__init__.py +0 -0
  568. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/access.py +0 -0
  569. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/lookup.py +0 -0
  570. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/persisted_columns.py +0 -0
  571. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/persistence.py +0 -0
  572. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/registration.py +0 -0
  573. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/registry.py +0 -0
  574. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/settings.py +0 -0
  575. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/supabase_rest.py +0 -0
  576. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/undeploy.py +0 -0
  577. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/snapshot/__init__.py +0 -0
  578. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/snapshot/archive.py +0 -0
  579. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/teacher/__init__.py +0 -0
  580. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/teacher/limits.py +0 -0
  581. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/teacher/provider_status.py +0 -0
  582. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/teacher/retry_contract.py +0 -0
  583. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/build_dev_dist.py +0 -0
  584. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/check_file_size.py +0 -0
  585. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/check_function_size.py +0 -0
  586. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/check_rollout_identity_actor.py +0 -0
  587. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/check_source_layout.py +0 -0
  588. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/check_verl_pin_exists.py +0 -0
  589. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/qualify_serving_profile.py +0 -0
  590. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/scrub_history.sh +0 -0
  591. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/serve_launch.py +0 -0
  592. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/__init__.py +0 -0
  593. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/__init__.py +0 -0
  594. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/chat_provenance.py +0 -0
  595. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/chat_transport.py +0 -0
  596. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/managed_chat.py +0 -0
  597. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/profile.py +0 -0
  598. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/server_api_plugin.py +0 -0
  599. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/source_snapshot.py +0 -0
  600. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/specs.py +0 -0
  601. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/teacher.py +0 -0
  602. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/vast.py +0 -0
  603. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/capture_image_sft_processor_oracle.py +0 -0
  604. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/capture_qwen38_27b_metadata.py +0 -0
  605. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/conftest.py +0 -0
  606. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  607. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  608. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  609. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  610. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  611. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  612. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/__init__.py +0 -0
  613. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/conftest.py +0 -0
  614. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/test_lambda_live.py +0 -0
  615. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/test_runpod_live.py +0 -0
  616. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/test_sft_thinking_render_live.py +0 -0
  617. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/test_vast_live.py +0 -0
  618. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/checkpoint_fixtures.py +0 -0
  619. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/conftest.py +0 -0
  620. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_base_model_serving.py +0 -0
  621. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_chat_auth.py +0 -0
  622. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_chat_authorizer.py +0 -0
  623. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  624. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_checkpoint_model_validation.py +0 -0
  625. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_engine_error_status.py +0 -0
  626. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_fp8_config.py +0 -0
  627. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_immutable_engine.py +0 -0
  628. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_immutable_revisions.py +0 -0
  629. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_immutable_schemas.py +0 -0
  630. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_mirror_sampling_parity.py +0 -0
  631. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_modal_deploy_identity.py +0 -0
  632. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_modal_image_paths.py +0 -0
  633. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_model_config.py +0 -0
  634. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_multimodal.py +0 -0
  635. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_openai_stream_options.py +0 -0
  636. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_per_model_gpu.py +0 -0
  637. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_persistence.py +0 -0
  638. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_pre_first_disconnect.py +0 -0
  639. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_prequant_config.py +0 -0
  640. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_registry.py +0 -0
  641. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_registry_coverage.py +0 -0
  642. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_request_body_limit.py +0 -0
  643. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_router.py +0 -0
  644. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_router_coverage.py +0 -0
  645. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_router_edge_coverage.py +0 -0
  646. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_schemas_coverage.py +0 -0
  647. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_serve_reasoning_split.py +0 -0
  648. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_serve_structured_outputs.py +0 -0
  649. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_serve_thinking.py +0 -0
  650. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_settings.py +0 -0
  651. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_structured_outputs.py +0 -0
  652. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_structured_outputs_coverage.py +0 -0
  653. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_supabase_rest_coverage.py +0 -0
  654. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_usage_outbox.py +0 -0
  655. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_usage_reporter.py +0 -0
  656. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving_conformance/__init__.py +0 -0
  657. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving_conformance/conftest.py +0 -0
  658. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving_conformance/test_contract.py +0 -0
  659. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_accounting_coverage.py +0 -0
  660. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_adapter_shard_completeness.py +0 -0
  661. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_agent_flash_cli_contract.py +0 -0
  662. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_algorithms.py +0 -0
  663. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_backend_common.py +0 -0
  664. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_backend_jobspec_contract.py +0 -0
  665. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_bake_kernel_cache.py +0 -0
  666. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_base_model_provenance.py +0 -0
  667. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_billing_retry.py +0 -0
  668. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_build_context_contract.py +0 -0
  669. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_capture_qwen38_metadata.py +0 -0
  670. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_catalog_consistency.py +0 -0
  671. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_catalog_only_models.py +0 -0
  672. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_charge_pricing.py +0 -0
  673. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_chat_foundations.py +0 -0
  674. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_checkpoint_lifecycle.py +0 -0
  675. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_checkpoints.py +0 -0
  676. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_commands.py +0 -0
  677. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_commands_coverage.py +0 -0
  678. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_credential_shadowing.py +0 -0
  679. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_errors.py +0 -0
  680. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_estimate.py +0 -0
  681. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_gpus_flag.py +0 -0
  682. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_help.py +0 -0
  683. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_main_coverage.py +0 -0
  684. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_managed.py +0 -0
  685. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_render_coverage.py +0 -0
  686. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_render_theme.py +0 -0
  687. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_serve_deploy.py +0 -0
  688. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_serve_status.py +0 -0
  689. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_serve_undeploy.py +0 -0
  690. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_traces.py +0 -0
  691. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_wandb_warning.py +0 -0
  692. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_client.py +0 -0
  693. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_client_import_purity.py +0 -0
  694. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_client_server_integration.py +0 -0
  695. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_client_stream_reads.py +0 -0
  696. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_config_env_vars.py +0 -0
  697. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_config_overrides.py +0 -0
  698. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_console_upload.py +0 -0
  699. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_controlled_experiment_repairs.py +0 -0
  700. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_analytical.py +0 -0
  701. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_currency.py +0 -0
  702. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_equation.py +0 -0
  703. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_estimate.py +0 -0
  704. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_hardware.py +0 -0
  705. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_models.py +0 -0
  706. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_dataset_profile.py +0 -0
  707. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_deploy_latency.py +0 -0
  708. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_dev_channel.py +0 -0
  709. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_disk_gb.py +0 -0
  710. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_endpoint_name.py +0 -0
  711. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_cache_evict.py +0 -0
  712. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_delete.py +0 -0
  713. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_download.py +0 -0
  714. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_download_api.py +0 -0
  715. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_evaluations.py +0 -0
  716. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_list_api.py +0 -0
  717. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_list_cli.py +0 -0
  718. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_list_hub.py +0 -0
  719. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_no_install.py +0 -0
  720. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_publish.py +0 -0
  721. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_pull.py +0 -0
  722. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_pull_coverage.py +0 -0
  723. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_pull_loader_coverage.py +0 -0
  724. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_pull_managed_control_plane.py +0 -0
  725. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_push.py +0 -0
  726. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_rate_limit_resolve.py +0 -0
  727. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_test.py +0 -0
  728. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_envs_coverage.py +0 -0
  729. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_export.py +0 -0
  730. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_flash_mvp.py +0 -0
  731. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_flash_worker.py +0 -0
  732. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_flashinfer_cache_dirs.py +0 -0
  733. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_freesolo_api_transport.py +0 -0
  734. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_fused_expert_warmstart.py +0 -0
  735. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_github_urlopen_retry.py +0 -0
  736. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_gpu_type_single_field.py +0 -0
  737. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_gpus.py +0 -0
  738. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_checkpoint_durability.py +0 -0
  739. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_params.py +0 -0
  740. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_process_census.py +0 -0
  741. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_resident_sizing.py +0 -0
  742. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_reward_batching.py +0 -0
  743. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_rollout_contract.py +0 -0
  744. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_rollout_identity.py +0 -0
  745. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_health_liveness.py +0 -0
  746. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_hf_retry.py +0 -0
  747. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_idle_endpoint_reaper.py +0 -0
  748. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_image_environment_capability.py +0 -0
  749. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_image_incremental_processor.py +0 -0
  750. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_image_sft_markers.py +0 -0
  751. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_image_sft_processor_parity.py +0 -0
  752. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_image_tokens.py +0 -0
  753. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_infisical_secrets.py +0 -0
  754. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_instance_bootstrap_coverage.py +0 -0
  755. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_internal_client.py +0 -0
  756. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_kernel_cache.py +0 -0
  757. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_kernel_fingerprint.py +0 -0
  758. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_kv_util.py +0 -0
  759. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lambda_api_coverage.py +0 -0
  760. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_logging.py +0 -0
  761. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_login_perms.py +0 -0
  762. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lora_rank_coverage.py +0 -0
  763. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lora_rank_nested_rung.py +0 -0
  764. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lora_rank_preflight.py +0 -0
  765. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lora_targeting.py +0 -0
  766. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lora_targeting_pinned_verl.py +0 -0
  767. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_managed_config_fields.py +0 -0
  768. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_managed_hf_repo.py +0 -0
  769. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_metrics_schema_agent_contract.py +0 -0
  770. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_mig_guard.py +0 -0
  771. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_mirror_sampling_parity.py +0 -0
  772. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_multimodal_training.py +0 -0
  773. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_named_reward_metrics.py +0 -0
  774. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd.py +0 -0
  775. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_limits.py +0 -0
  776. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  777. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_replay_guard.py +0 -0
  778. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_packing.py +0 -0
  779. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_packing_coverage.py +0 -0
  780. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_parasail_teacher.py +0 -0
  781. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_persisted_spec_envelope.py +0 -0
  782. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_poll_helpers.py +0 -0
  783. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_preflight.py +0 -0
  784. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_projects.py +0 -0
  785. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_prompt_budget.py +0 -0
  786. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_provider_preflight_coverage.py +0 -0
  787. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_provider_teardown_robustness.py +0 -0
  788. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_providers_symmetry.py +0 -0
  789. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_realized_cost.py +0 -0
  790. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_repo_cleanup.py +0 -0
  791. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_resolve_params_b.py +0 -0
  792. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_rl_train.py +0 -0
  793. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_rollout_samples.py +0 -0
  794. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_run_registry_lifecycle.py +0 -0
  795. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_runpod_api_delete.py +0 -0
  796. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_runpod_key_fingerprint.py +0 -0
  797. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_runpod_key_waterfall.py +0 -0
  798. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_runtime_capsule.py +0 -0
  799. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve.py +0 -0
  800. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_bootstrap_http.py +0 -0
  801. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_launch.py +0 -0
  802. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_manifest.py +0 -0
  803. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_materialize.py +0 -0
  804. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_packaging.py +0 -0
  805. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_progress.py +0 -0
  806. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_chat_transport.py +0 -0
  807. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_control.py +0 -0
  808. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_docs.py +0 -0
  809. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_modal_contract_lock.py +0 -0
  810. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_modal_sdk.py +0 -0
  811. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  812. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_modal_teardown_identity.py +0 -0
  813. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_profile_qualification.py +0 -0
  814. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_profiles.py +0 -0
  815. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_provisioning_common.py +0 -0
  816. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_provisioning_modal.py +0 -0
  817. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_reasoning_content.py +0 -0
  818. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_resolve_provenance.py +0 -0
  819. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_runtime_adapters.py +0 -0
  820. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_runtime_engine.py +0 -0
  821. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_runtime_package.py +0 -0
  822. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_runtime_types.py +0 -0
  823. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_app_coverage.py +0 -0
  824. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_auth_singleflight.py +0 -0
  825. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_billing.py +0 -0
  826. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_checkpoints_coverage.py +0 -0
  827. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_db.py +0 -0
  828. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_envs_coverage.py +0 -0
  829. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_locks_coverage.py +0 -0
  830. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_managed_chat_requests.py +0 -0
  831. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_serving_resources.py +0 -0
  832. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_standalone.py +0 -0
  833. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serving_conformance_gate.py +0 -0
  834. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serving_context_preflight.py +0 -0
  835. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serving_contract.py +0 -0
  836. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serving_schema_coverage.py +0 -0
  837. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_chunked_nll.py +0 -0
  838. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_example_selection.py +0 -0
  839. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_gc_off.py +0 -0
  840. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_max_context.py +0 -0
  841. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_step_floor.py +0 -0
  842. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_train.py +0 -0
  843. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_workload.py +0 -0
  844. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_source_layout.py +0 -0
  845. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_source_snapshot.py +0 -0
  846. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_spec_and_validation.py +0 -0
  847. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_spec_contract_bytes.py +0 -0
  848. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_step_floor.py +0 -0
  849. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_step_metrics.py +0 -0
  850. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_step_timing.py +0 -0
  851. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_structured_outputs.py +0 -0
  852. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_teacher_encoding_contract.py +0 -0
  853. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_terminal_artifacts.py +0 -0
  854. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_thinking_config.py +0 -0
  855. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_train_context_preflight.py +0 -0
  856. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_training_controls.py +0 -0
  857. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_type_comment_prose.py +0 -0
  858. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vast_api.py +0 -0
  859. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vast_api_coverage.py +0 -0
  860. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vast_offers.py +0 -0
  861. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vast_provider_coverage.py +0 -0
  862. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vast_runner.py +0 -0
  863. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_verified_revisions.py +0 -0
  864. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_verifiers.py +0 -0
  865. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_verl_checkpoint_export.py +0 -0
  866. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_verl_child_plugins.py +0 -0
  867. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_verl_silence_watchdog.py +0 -0
  868. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_version.py +0 -0
  869. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  870. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vllm_moe_lora_backport.py +0 -0
  871. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vram_architecture.py +0 -0
  872. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_wandb_link.py +0 -0
  873. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_wandb_naming.py +0 -0
  874. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_warmstart_adapter_download.py +0 -0
  875. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_warmstart_cross_repo.py +0 -0
  876. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_warmstart_error_attribution.py +0 -0
  877. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_warmstart_image_adapters.py +0 -0
  878. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_dryrun.py +0 -0
  879. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_hardexit.py +0 -0
  880. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_image.py +0 -0
  881. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_init_heartbeat.py +0 -0
  882. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_stack.py +0 -0
  883. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_thinking.py +0 -0
  884. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_workflow_contracts.py +0 -0
  885. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_workload_profile.py +0 -0
  886. {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/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.124
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
@@ -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. |
@@ -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
@@ -314,7 +314,7 @@ def _rent_instance(
314
314
  """Rent one box and return its handle, owing nothing rented behind on any exit.
315
315
 
316
316
  The whole rent-to-handle window lives here because its ORDER is the correctness argument, and
317
- both call sites (the region walk and its cache-less retry) need exactly the same order:
317
+ every region in the launch walk needs exactly the same order:
318
318
 
319
319
  - ``arm`` immediately before the request and only then. A deadline miss in the precheck rents
320
320
  nothing, and an armed guard there would reap by run label, killing every other concurrent
@@ -356,46 +356,6 @@ def _rent_instance(
356
356
  raise
357
357
 
358
358
 
359
- def _retry_launch_without_cache(
360
- plan: _LaunchPlan, inst: LambdaInstance, say, reap
361
- ) -> tuple[LambdaJobHandle | None, Exception | None]:
362
- """Rent a cache-less box for this region; return ``(handle, None)`` or ``(None, rejection)``.
363
-
364
- The arm/own/return ordering lives in ``_rent_instance``. What is specific here is the
365
- rejection policy, which mirrors the main walk's: a CLEAN reject rented nothing and stands the
366
- guard down before anything below can raise, while an AMBIGUOUS one may have billed a box and
367
- keeps the guard armed across reconciliation.
368
- """
369
- say(f"retrying {inst.region} WITHOUT the weight cache (attach may have caused the reject)")
370
- try:
371
- return _rent_instance(
372
- plan,
373
- inst,
374
- say,
375
- reap,
376
- user_data=plan.cold_user_data,
377
- file_system_names=None,
378
- describe=lambda instance_id: (
379
- f"launched lambda instance {instance_id} (cold, cache-less): {inst.gpu} "
380
- f"{inst.instance_type} in {inst.region} attempt={plan.attempt} seed={plan.seed}"
381
- ),
382
- ), None
383
- except lambda_api.LambdaApiError as error:
384
- clean = _launch_rejection_is_clean(error)
385
- if clean:
386
- # rented nothing: stand down on the FIRST statement, before the diagnostic and the say
387
- # below, either of which can raise while armed and would then reap by run label,
388
- # killing every other concurrent seed over a request that rented nothing.
389
- reap.disarm()
390
- cold_detail = sanitize_diagnostic(error, limit=1000)
391
- if not clean:
392
- # may have billed a box: the guard stays ARMED across reconciliation, which always
393
- # raises, so an unnamed instance still has something able to find it.
394
- _abort_ambiguous_launch(plan.spec.run_id, type(error).__name__)
395
- say(f"region {inst.region} also rejected cold: {cold_detail}")
396
- return None, error
397
-
398
-
399
359
  def _refresh_launch_candidates(
400
360
  inst: LambdaInstance,
401
361
  tried_regions: set[str],
@@ -495,11 +455,7 @@ def _build_launch_plan(
495
455
  def _region_launch_inputs(
496
456
  plan: _LaunchPlan, inst: LambdaInstance, say
497
457
  ) -> tuple[str | None, list[str] | None, Exception | None]:
498
- """Resolve one region's ``(user_data, file_system_names)``, falling back cold on a cache miss.
499
-
500
- Returns ``(None, None, error)`` when the region must be skipped: a preload that trained on a
501
- cache-less box would warm nothing, so it walks on instead of falling back.
502
- """
458
+ """Resolve one region's cached launch inputs or return its attachment failure."""
503
459
  if not plan.cache_name:
504
460
  return plan.cold_user_data, None, None
505
461
  try:
@@ -527,14 +483,9 @@ def _region_launch_inputs(
527
483
  return region_user_data, [plan.cache_name], None
528
484
  except Exception as e:
529
485
  detail = sanitize_diagnostic(e, limit=1000)
530
- # preload must not fall back cold because it would train instead of warming the cache.
531
- if plan.mode == "preload":
532
- say(
533
- f"weight cache unavailable in {inst.region} ({detail}); skipping (preload needs it)"
534
- )
535
- return None, None, e
536
- say(f"weight cache unavailable in {inst.region} ({detail}); launching cold")
537
- return plan.cold_user_data, None, e
486
+ suffix = " (preload needs it)" if plan.mode == "preload" else ""
487
+ say(f"weight cache unavailable in {inst.region} ({detail}); skipping{suffix}")
488
+ return None, None, e
538
489
 
539
490
 
540
491
  def launch_and_submit(
@@ -620,24 +571,6 @@ def launch_and_submit(
620
571
  )
621
572
  _abort_ambiguous_launch(spec.run_id, type(e).__name__)
622
573
  say(f"region {inst.region} ({inst.gpu} {inst.instance_type}) rejected: {detail}")
623
- # Filesystem-attach errors: retry once without the cache before walking (clean reject = safe).
624
- fs_attach_reject = fs_names and any(
625
- tok in str(e).lower() for tok in ("file_system", "filesystem", "file-system")
626
- )
627
- if mode != "preload" and fs_attach_reject:
628
- # the cache-less retry rents its own box, and arms the guard itself immediately
629
- # before that request: an interrupt while it is in flight can leave an instance
630
- # created but unnamed, and only the run-label reap can find it. Arming across
631
- # the whole call instead would reap on paths that rented nothing (a deadline
632
- # miss in the precheck, a raising preamble) or that already cleaned up exactly.
633
- handle, last_err = _retry_launch_without_cache(plan, inst, say, reap)
634
- if handle is not None:
635
- # the retry's box is rented and owned by exact id; keep the guard holding
636
- # it until the caller has the handle, exactly as the primary path does.
637
- return handle
638
- # nothing stayed rented: the retry disarmed on its reject paths, and this
639
- # keeps the walk's next region from inheriting a guard it did not arm.
640
- reap.disarm()
641
574
  # Preload must not refresh to a different region (would warm the wrong one).
642
575
  if mode != "preload" and not candidates and not refreshed:
643
576
  refreshed = True
@@ -21,8 +21,8 @@ class _CoarseReapGuard:
21
21
 
22
22
  Armed for exactly the window a launch request is in flight with no instance id in hand, when
23
23
  the label reap is the ONLY thing that can find a box that is rented but not yet named. It is
24
- an object rather than a local so the cache-less retry can arm it around its own request
25
- instead of the caller arming across that whole call.
24
+ an object rather than a local so each region can arm it around its own request instead of the
25
+ caller arming across the whole walk.
26
26
 
27
27
  ``owns`` narrows the guard the instant an id exists. Ownership transfer would otherwise span
28
28
  two statements (the publication helper returns, then the caller disarms), and an interrupt
@@ -189,7 +189,6 @@ def submit_run(
189
189
  failure_detail_reader=failure_reader,
190
190
  current_attempt=attempt_id,
191
191
  **deadline_kwargs(runpod_polling.poll_job, deadline_at),
192
- on_last_gpu=on_last_gpu,
193
192
  # the count actually rented for this attempt, which allocation may have resolved to fewer
194
193
  # cards than the spec's ceiling named -- so read the effective spec, not the run's request.
195
194
  **stall_kwargs(on_last_gpu=on_last_gpu, gpu_count=gpu_count_of(spec)),
@@ -25,7 +25,6 @@ FAILURE_TEXT_LIMIT = 64_000
25
25
  __all__ = [
26
26
  "JobHandle",
27
27
  "PollResult",
28
- "capacity_escalation_note",
29
28
  "capacity_grace_multiplier",
30
29
  "decode_output",
31
30
  ]
@@ -33,16 +32,12 @@ __all__ = [
33
32
 
34
33
  # capacity grace on the LAST candidate class: there is nowhere left to walk, so wait longer before
35
34
  # giving up. purely a timing knob -- it says nothing about whether a retry follows, because
36
- # on_last_gpu (runner/lifecycle.py) is also true when the infra retry budget is exhausted.
35
+ # on_last_gpu (runner/supervise/retry_decision.py) is also true when the infra retry budget is exhausted.
37
36
  LAST_GPU_CAPACITY_GRACE_S = 900.0
38
37
 
39
38
  # multi-card shapes are rarer than single cards, so a grace sized for 1x expires on a 4x wait that
40
- # was merely slow rather than starved. expiring it does not find capacity faster: the supervisor
41
- # tears the endpoint down and re-requests THE SAME class (`_select_candidate` re-picks the only
42
- # fitting shape once nothing is untried), so the run pays a fresh cold start to rejoin the same
43
- # queue it just left. observed: 3-5 attempts and ~55 min of queueing per arm before a single
44
- # optimizer step, with the multi-GPU arms churning most. scale the wait with the card count
45
- # instead, so scarcity is waited out on one queue position rather than re-requested.
39
+ # was merely slow rather than starved. scale the wait with the card count so scarcity is waited out
40
+ # on one queue position rather than paying another cold start.
46
41
  CAPACITY_GRACE_PER_GPU_CAP = 4
47
42
 
48
43
 
@@ -209,19 +204,6 @@ class GraceTimer:
209
204
  self.seen = now
210
205
 
211
206
 
212
- def capacity_escalation_note(on_last_gpu: bool) -> str:
213
- """The escalation clause a capacity failure detail carries. States the escalation fact ONLY.
214
-
215
- `on_last_gpu` means no further class escalation follows, not that classes are exhausted or a
216
- retry occurs. Keep both branches neutral; the supervisor owns target selection and budget.
217
- """
218
- return (
219
- "no further GPU-class escalation follows"
220
- if on_last_gpu
221
- else "GPU-class escalation may follow"
222
- )
223
-
224
-
225
207
  # heartbeat readers and provenance checks are provider-neutral and live in
226
208
  # flash.providers.artifacts.hf; this module imports only the predicate it executes.
227
209
 
@@ -30,7 +30,6 @@ from flash.providers.runpod.execution.jobs import (
30
30
  GraceTimer,
31
31
  _append_failure_artifacts,
32
32
  _safe_failure_text,
33
- capacity_escalation_note,
34
33
  decode_output,
35
34
  surfaced_worker_flags,
36
35
  )
@@ -61,7 +60,6 @@ class _PollContext:
61
60
  absolute_deadline: float | None
62
61
  current_attempt: int
63
62
  launch_ts: float
64
- next_gpu_note: str
65
63
  poll_errors: PollErrorTracker
66
64
 
67
65
 
@@ -233,7 +231,7 @@ def _classify_queue_state(
233
231
  failure="no_capacity",
234
232
  detail=f"never scheduled: job stuck IN_QUEUE for "
235
233
  f"{int(now - state.queued_timer.since)}s "
236
- f"(no RunPod capacity for the pinned GPU class); {context.next_gpu_note}",
234
+ "(no RunPod capacity for the pinned GPU class)",
237
235
  )
238
236
  if status != "IN_QUEUE":
239
237
  # the in-queue grace timers measure continuous throttle/unhealthy while queued (like
@@ -307,8 +305,8 @@ def _classify_queue_state(
307
305
  False,
308
306
  failure="no_capacity",
309
307
  detail=f"never scheduled: worker stuck THROTTLED for "
310
- f"{int(now - state.throttled_timer.since)}s while IN_QUEUE (no RunPod "
311
- f"capacity for the pinned GPU class); {context.next_gpu_note}",
308
+ f"{int(now - state.throttled_timer.since)}s while IN_QUEUE "
309
+ "(no RunPod capacity for the pinned GPU class)",
312
310
  )
313
311
  except Exception:
314
312
  pass
@@ -456,12 +454,11 @@ def poll_job(
456
454
  queue_grace_s: float = 300.0,
457
455
  deadline_at: float | None = None,
458
456
  current_attempt: int | None = None,
459
- on_last_gpu: bool = False,
460
457
  ) -> PollResult:
461
458
  """Poll a queue job to completion; resilient to transient API errors.
462
459
 
463
460
  Use setup grace before the first heartbeat, then stall grace; fail fast on sustained throttled,
464
- unhealthy, or over-queued states. `on_last_gpu` states only whether escalation remains.
461
+ unhealthy, or over-queued states.
465
462
  """
466
463
  if not handle.job_id:
467
464
  raise ValueError("endpoint-only RunPod handles cannot be polled")
@@ -487,7 +484,6 @@ def poll_job(
487
484
  absolute_deadline=absolute_deadline,
488
485
  current_attempt=attempt_id,
489
486
  launch_ts=launch_ts,
490
- next_gpu_note=capacity_escalation_note(on_last_gpu),
491
487
  poll_errors=PollErrorTracker(say, interval_s),
492
488
  )
493
489
  state = _PollState(
@@ -155,10 +155,6 @@ class RunpodProvider:
155
155
  failure_detail_reader=failure_reader,
156
156
  current_attempt=rh.attempt,
157
157
  **deadline_kwargs(runpod_polling.poll_job, _deadline_at),
158
- # the persisted scarcity flag controls stall grace, not capacity wording. recovery
159
- # rebuilds the unpinned allocation with a fresh candidate set, so claiming no escalation
160
- # remains would be false.
161
- #
162
158
  # the card count comes from the spec rather than the handle's `allocated_gpu_count`:
163
159
  # attach polls the persisted EFFECTIVE worker spec, which submission already stamped
164
160
  # with the count allocation resolved, and the attach context pops that handle key off
@@ -99,31 +99,6 @@ def _compare_and_clear_remote(run_id: str, expected_remote: dict) -> bool:
99
99
  return True
100
100
 
101
101
 
102
- def _compare_and_prepare_resubmit(
103
- run_id: str,
104
- expected_remote: dict | None,
105
- *,
106
- expected_state: str | None = None,
107
- ) -> bool:
108
- """Claim a nonterminal recovery launch only while its expected remote still owns the run."""
109
- report_status: RunStatus | None = None
110
- with state._status_guard(run_id):
111
- status = status_ops.get_status(run_id)
112
- if status.state in state.TERMINAL_STATES:
113
- return False
114
- if expected_state is not None and status.state != expected_state:
115
- return False
116
- if not _expected_remote_matches(status.remote, expected_remote):
117
- return False
118
- status.state = "provisioning"
119
- status.updated_at = time.time()
120
- state._save_status_unlocked(status)
121
- report_status = status
122
- if report_status is not None:
123
- reporting._report_status(report_status)
124
- return True
125
-
126
-
127
102
  def _compare_and_fail_remote(
128
103
  run_id: str,
129
104
  expected_remote: dict | None,
@@ -180,7 +155,7 @@ def _compare_and_complete_remote(
180
155
  expected_attempt = (
181
156
  expected_remote.get("attempt")
182
157
  if isinstance(expected_remote, dict)
183
- else attempts._latest_reserved_attempt(run_id)
158
+ else attempts.latest_reserved_attempt(run_id)
184
159
  )
185
160
  metrics, verified_attempt = status_ops.validate_terminal_source_metrics(
186
161
  status,
@@ -236,15 +211,18 @@ def _canonical_cleanup_remote(remote: object) -> dict | None:
236
211
  if provider == "runpod":
237
212
  from flash.providers.runpod.execution.jobs import JobHandle as RunpodJobHandle
238
213
 
239
- return RunpodJobHandle.from_dict(remote).to_dict()
240
- if provider == "lambda":
214
+ record = RunpodJobHandle.from_dict(remote).to_dict()
215
+ elif provider == "lambda":
241
216
  from flash.providers.lambda_.jobs.builders import LambdaJobHandle
242
217
 
243
- return LambdaJobHandle.from_dict(remote).to_dict()
244
- if provider == "vast":
218
+ record = LambdaJobHandle.from_dict(remote).to_dict()
219
+ elif provider == "vast":
245
220
  from flash.providers.vast.jobs.builders import VastJobHandle
246
221
 
247
- return VastJobHandle.from_dict(remote).to_dict()
222
+ record = VastJobHandle.from_dict(remote).to_dict()
223
+ else:
224
+ return None
225
+ return record
248
226
  except (TypeError, ValueError):
249
227
  return None
250
228
  return None