freesolo-flash-dev 1.2.132__tar.gz → 1.2.133__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 (940) hide show
  1. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/ci.yml +1 -2
  2. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/deploy-modal-dev.yml +1 -1
  3. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/deploy-modal.yml +32 -8
  4. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/PKG-INFO +1 -1
  5. freesolo_flash_dev-1.2.133/flash/adapters/config.py +136 -0
  6. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/profiling/dataset_profile.py +27 -59
  7. freesolo_flash_dev-1.2.133/flash/providers/_lifecycle/bootstrapping/attempt.py +92 -0
  8. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +30 -61
  9. freesolo_flash_dev-1.2.133/flash/providers/_lifecycle/bootstrapping/preload.py +68 -0
  10. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/lifecycle/reporting.py +44 -28
  11. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/lifecycle/state.py +3 -7
  12. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runtime_capsule/profiles.py +3 -1
  13. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/app/launch.py +76 -24
  14. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/app/materialize.py +25 -48
  15. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/deployment/adapter_check.py +33 -17
  16. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/deployment/deploy.py +1 -1
  17. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/deployment/resolve.py +43 -120
  18. freesolo_flash_dev-1.2.133/flash/serve/provisioning/modal/planning/wrapper.py +38 -0
  19. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/asgi/app.py +10 -0
  20. freesolo_flash_dev-1.2.133/flash/server/billing/charges.py +288 -0
  21. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/registry/runs.py +4 -0
  22. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/platform/auth.py +80 -69
  23. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/routes/runs.py +46 -23
  24. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/app/README.md +22 -8
  25. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/app/modal_app.py +11 -21
  26. freesolo_flash_dev-1.2.133/flash/serving/app/timeouts.py +13 -0
  27. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/promotion/canary.py +2 -0
  28. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/promotion/gate.py +11 -10
  29. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/accounting/usage_facts.py +1 -1
  30. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/accounting/usage_outbox.py +28 -14
  31. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/engine/generation.py +3 -3
  32. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/engine/support.py +1 -1
  33. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/io/openai_stream.py +35 -21
  34. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/pyproject.toml +2 -2
  35. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/scripts/check_source_layout.py +8 -21
  36. freesolo_flash_dev-1.2.133/tests/_helpers/billing_precheck.py +130 -0
  37. freesolo_flash_dev-1.2.133/tests/serving/test_inference_duration.py +338 -0
  38. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_mirror_sampling_parity.py +59 -4
  39. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_per_model_gpu.py +17 -0
  40. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_promotion_canary.py +25 -0
  41. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_promotion_gate.py +24 -1
  42. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_router.py +22 -2
  43. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_serve_structured_outputs.py +4 -1
  44. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_usage_outbox.py +193 -23
  45. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_usage_reporter.py +9 -15
  46. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving_conformance/test_contract.py +1 -0
  47. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_authenticated_redirects.py +28 -5
  48. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_billing_retry.py +2 -4
  49. freesolo_flash_dev-1.2.133/tests/test_bootstrap_reentry.py +213 -0
  50. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_client_server_integration.py +8 -2
  51. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_dataset_profile.py +459 -1
  52. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_deploy_latency.py +12 -1
  53. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_download_api.py +1 -2
  54. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_publish.py +3 -0
  55. freesolo_flash_dev-1.2.133/tests/test_hosted_adapter_admission.py +197 -0
  56. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_instance_bootstrap_coverage.py +16 -4
  57. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_lambda_runner.py +8 -0
  58. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_run_registry_lifecycle.py +25 -0
  59. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve.py +15 -3
  60. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_app_launch.py +327 -8
  61. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_app_materialize.py +22 -10
  62. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_modal_sdk.py +127 -3
  63. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_modal_sdk_deadlines.py +13 -4
  64. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_resolve_provenance.py +4 -4
  65. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_runtime_package.py +14 -1
  66. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_server_api.py +165 -337
  67. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_server_app_coverage.py +70 -0
  68. freesolo_flash_dev-1.2.133/tests/test_server_auth_singleflight.py +289 -0
  69. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_server_billing.py +250 -145
  70. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serving_contract.py +15 -3
  71. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_source_layout.py +6 -18
  72. freesolo_flash_dev-1.2.133/tests/test_status_reporting.py +79 -0
  73. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_workflow_contracts.py +96 -8
  74. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/uv.lock +1 -1
  75. freesolo_flash_dev-1.2.132/flash/serve/provisioning/modal/planning/wrapper.py +0 -43
  76. freesolo_flash_dev-1.2.132/flash/server/billing/charges.py +0 -135
  77. freesolo_flash_dev-1.2.132/tests/test_server_auth_singleflight.py +0 -82
  78. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.dockerignore +0 -0
  79. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.env.example +0 -0
  80. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/CODEOWNERS +0 -0
  81. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  82. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  83. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  84. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  85. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/dependabot.yml +0 -0
  86. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/auto-rebake.yml +0 -0
  87. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/bake-kernel-cache.yml +0 -0
  88. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/dev-kernel-cache.yml +0 -0
  89. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/main-source-guard.yml +0 -0
  90. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/notify-tests-repo.yml +0 -0
  91. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  92. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/publish-dev.yml +0 -0
  93. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/publish-image.yml +0 -0
  94. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/publish-serving-image.yml +0 -0
  95. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/publish.yml +0 -0
  96. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/version-parity.yml +0 -0
  97. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.github/workflows/worker-image.yml +0 -0
  98. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/.gitignore +0 -0
  99. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/CHANGELOG.md +0 -0
  100. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/CODE_OF_CONDUCT.md +0 -0
  101. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/CONTRIBUTING.md +0 -0
  102. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/Dockerfile +0 -0
  103. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/Dockerfile.serve +0 -0
  104. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/Dockerfile.worker +0 -0
  105. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/LICENSE +0 -0
  106. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/NOTICE +0 -0
  107. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/README.md +0 -0
  108. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/SECURITY.md +0 -0
  109. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/SELF_HOSTING.md +0 -0
  110. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/build/kernel_cache/.gitignore +0 -0
  111. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/build/kernel_cache/.keep +0 -0
  112. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/deploy/infisical/README.md +0 -0
  113. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/deploy/infisical/entrypoint.sh +0 -0
  114. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/docker/Dockerfile.kernelcache +0 -0
  115. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/docker/Dockerfile.kernelcache.relayer +0 -0
  116. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/docker/bake_kernel_cache.py +0 -0
  117. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/docker/bake_pod_entry.py +0 -0
  118. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/docker/extract_cudart_fix.py +0 -0
  119. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/docker/kernel_fingerprint.py +0 -0
  120. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/docker/make_rp_handler.py +0 -0
  121. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/docker/patch_vllm_moe_lora.py +0 -0
  122. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/docs/hosted-inference-load-testing.md +0 -0
  123. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/docs/serving-contract.md +0 -0
  124. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/__init__.py +0 -0
  125. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/_internal/__init__.py +0 -0
  126. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/_internal/channel.py +0 -0
  127. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/_internal/diagnostics.py +0 -0
  128. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/_internal/fileio.py +0 -0
  129. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/_internal/http.py +0 -0
  130. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/_internal/logging.py +0 -0
  131. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/_internal/openai_sse.py +0 -0
  132. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/_internal/paths.py +0 -0
  133. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/_internal/version.py +0 -0
  134. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/adapters/__init__.py +0 -0
  135. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/adapters/artifacts.py +0 -0
  136. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/adapters/fused_experts.py +0 -0
  137. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/adapters/lora_rank.py +0 -0
  138. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/adapters/targets.py +0 -0
  139. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/__init__.py +0 -0
  140. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/__main__.py +0 -0
  141. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/__init__.py +0 -0
  142. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/__init__.py +0 -0
  143. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/ops/__init__.py +0 -0
  144. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/ops/imports.py +0 -0
  145. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/ops/list.py +0 -0
  146. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/ops/push.py +0 -0
  147. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/ops/retained.py +0 -0
  148. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/ops/setup.py +0 -0
  149. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  150. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/testing/__init__.py +0 -0
  151. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/testing/episode.py +0 -0
  152. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/testing/eval.py +0 -0
  153. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/testing/eval_args.py +0 -0
  154. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/testing/evaluations.py +0 -0
  155. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/testing/params.py +0 -0
  156. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/testing/test.py +0 -0
  157. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/env/testing/warnings.py +0 -0
  158. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/ops/__init__.py +0 -0
  159. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/ops/account.py +0 -0
  160. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/ops/catalog.py +0 -0
  161. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/ops/deploy.py +0 -0
  162. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/ops/log_follow.py +0 -0
  163. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/ops/prompt_budget.py +0 -0
  164. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/ops/runs.py +0 -0
  165. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/ops/traces.py +0 -0
  166. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/ops/train.py +0 -0
  167. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/ops/worker_output.py +0 -0
  168. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/serving/__init__.py +0 -0
  169. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/serving/deploy.py +0 -0
  170. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/serving/identity.py +0 -0
  171. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/serving/status.py +0 -0
  172. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/commands/serving/undeploy.py +0 -0
  173. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/parsing/__init__.py +0 -0
  174. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/parsing/account.py +0 -0
  175. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/parsing/env.py +0 -0
  176. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/parsing/errors.py +0 -0
  177. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/parsing/main.py +0 -0
  178. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/parsing/models.py +0 -0
  179. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/parsing/serve_parser.py +0 -0
  180. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/parsing/traces.py +0 -0
  181. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/parsing/training.py +0 -0
  182. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/scaffold/TRAINING.md +0 -0
  183. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/scaffold/__init__.py +0 -0
  184. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/ui/__init__.py +0 -0
  185. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/ui/cost.py +0 -0
  186. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/ui/env_panels.py +0 -0
  187. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/ui/heartbeat.py +0 -0
  188. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/ui/render.py +0 -0
  189. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/ui/tables.py +0 -0
  190. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cli/ui/tty.py +0 -0
  191. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/client/__init__.py +0 -0
  192. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/client/config.py +0 -0
  193. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/client/freesolo_api.py +0 -0
  194. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/client/http.py +0 -0
  195. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/client/runtime_secrets.py +0 -0
  196. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/client/shapes.py +0 -0
  197. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/client/specs.py +0 -0
  198. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/client/streaming.py +0 -0
  199. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/content/__init__.py +0 -0
  200. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/content/image_descriptors.py +0 -0
  201. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/content/multimodal.py +0 -0
  202. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/content/reasoning_normalization.py +0 -0
  203. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/content/structured_outputs.py +0 -0
  204. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/content/thinking.py +0 -0
  205. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/core/__init__.py +0 -0
  206. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/core/catalog.py +0 -0
  207. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/core/grpo.py +0 -0
  208. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/core/spec.py +0 -0
  209. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/core/spec_persistence.py +0 -0
  210. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cost/__init__.py +0 -0
  211. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cost/analytical.py +0 -0
  212. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cost/currency.py +0 -0
  213. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cost/facts.py +0 -0
  214. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cost/spec.py +0 -0
  215. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/cost/types.py +0 -0
  216. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/__init__.py +0 -0
  217. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/plan/__init__.py +0 -0
  218. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/plan/kv_sizing.py +0 -0
  219. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/plan/model_config_probe.py +0 -0
  220. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/plan/prompt_budget.py +0 -0
  221. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/plan/recipe.py +0 -0
  222. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/plan/steps.py +0 -0
  223. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/plan/vram.py +0 -0
  224. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/profiling/__init__.py +0 -0
  225. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/profiling/image_tokens.py +0 -0
  226. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/profiling/reasoning_render.py +0 -0
  227. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/profiling/sft_image_rows.py +0 -0
  228. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/profiling/sft_workload.py +0 -0
  229. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/profiling/tokenizer.py +0 -0
  230. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/profiling/workload_profile.py +0 -0
  231. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/result/__init__.py +0 -0
  232. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/result/accounting.py +0 -0
  233. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/result/rollout_samples.py +0 -0
  234. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/support/__init__.py +0 -0
  235. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/support/huggingface.py +0 -0
  236. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/support/verl_checkpoint.py +0 -0
  237. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/support/verl_policy.py +0 -0
  238. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/support/worker_entrypoint.py +0 -0
  239. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/__init__.py +0 -0
  240. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/__main__.py +0 -0
  241. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/entry/__init__.py +0 -0
  242. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/entry/opd.py +0 -0
  243. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/entry/rl.py +0 -0
  244. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/entry/sft.py +0 -0
  245. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/entry/worker.py +0 -0
  246. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/io/__init__.py +0 -0
  247. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/io/heartbeat.py +0 -0
  248. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/io/hf.py +0 -0
  249. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/io/prefetch.py +0 -0
  250. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/io/wandb_log.py +0 -0
  251. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/model/__init__.py +0 -0
  252. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/model/adapter.py +0 -0
  253. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/model/chatml_mask.py +0 -0
  254. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/model/decoding.py +0 -0
  255. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/model/lora.py +0 -0
  256. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/model/packing.py +0 -0
  257. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/perf/__init__.py +0 -0
  258. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/perf/diagnostics.py +0 -0
  259. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/perf/lifecycle.py +0 -0
  260. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/perf/liger.py +0 -0
  261. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/perf/memory.py +0 -0
  262. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/runtime/__init__.py +0 -0
  263. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  264. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/runtime/rng.py +0 -0
  265. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/runtime/state.py +0 -0
  266. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/teacher/__init__.py +0 -0
  267. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/teacher/client.py +0 -0
  268. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/teacher/encoding.py +0 -0
  269. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  270. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/__init__.py +0 -0
  271. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/core/__init__.py +0 -0
  272. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/core/child/__init__.py +0 -0
  273. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/core/child/glue.py +0 -0
  274. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/core/child/runtime.py +0 -0
  275. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  276. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  277. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  278. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  279. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/entry/__init__.py +0 -0
  280. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/entry/backend_common.py +0 -0
  281. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/entry/opd_train.py +0 -0
  282. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/entry/opd_train_runner.py +0 -0
  283. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  284. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/entry/rl_train.py +0 -0
  285. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  286. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  287. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/entry/sft_train.py +0 -0
  288. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  289. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/__init__.py +0 -0
  290. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
  291. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
  292. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
  293. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
  294. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
  295. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
  296. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  297. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  298. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/child/entry.py +0 -0
  299. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
  300. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/child/plugin.py +0 -0
  301. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  302. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  303. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/child/structured.py +0 -0
  304. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/child/tensors.py +0 -0
  305. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
  306. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
  307. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
  308. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
  309. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
  310. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
  311. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
  312. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
  313. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
  314. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
  315. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
  316. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
  317. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
  318. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/__init__.py +0 -0
  319. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  320. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/child/entry.py +0 -0
  321. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  322. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/child/patches.py +0 -0
  323. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  324. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  325. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  326. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/launch/config.py +0 -0
  327. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  328. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  329. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  330. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  331. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  332. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
  333. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  334. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  335. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/sft/__init__.py +0 -0
  336. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/sft/child/entry.py +0 -0
  337. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/sft/child/plugin.py +0 -0
  338. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  339. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  340. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/train/sft/setup/config.py +0 -0
  341. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/verl/__init__.py +0 -0
  342. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/verl/capabilities.py +0 -0
  343. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/verl/checkpoints.py +0 -0
  344. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/verl/child_io.py +0 -0
  345. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/verl/diagnostics.py +0 -0
  346. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/verl/parallelism.py +0 -0
  347. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/verl/parent_work.py +0 -0
  348. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/engine/worker/verl/process_census.py +0 -0
  349. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/__init__.py +0 -0
  350. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/loading/__init__.py +0 -0
  351. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/loading/adapter.py +0 -0
  352. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/loading/base.py +0 -0
  353. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/loading/loader.py +0 -0
  354. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/loading/pull.py +0 -0
  355. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/loading/staged.py +0 -0
  356. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/meta/__init__.py +0 -0
  357. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/meta/cache_security.py +0 -0
  358. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/meta/dataset_selection.py +0 -0
  359. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/meta/evaluations.py +0 -0
  360. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/meta/identity.py +0 -0
  361. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/meta/namespace_listing.py +0 -0
  362. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/package/__init__.py +0 -0
  363. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/package/direct_tokens.py +0 -0
  364. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/package/limits.py +0 -0
  365. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/envs/package/unpack.py +0 -0
  366. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/__init__.py +0 -0
  367. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/__init__.py +0 -0
  368. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  369. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  370. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  371. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/bootstrapping/processes.py +0 -0
  372. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  373. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/host/__init__.py +0 -0
  374. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  375. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/host/failmark.py +0 -0
  376. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  377. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  378. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/instances/instance.py +0 -0
  379. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/instances/poll.py +0 -0
  380. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  381. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/instances/provider.py +0 -0
  382. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  383. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/net/__init__.py +0 -0
  384. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/net/auth.py +0 -0
  385. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/net/deadline.py +0 -0
  386. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/net/http.py +0 -0
  387. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/_lifecycle/net/worker.py +0 -0
  388. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/artifacts/__init__.py +0 -0
  389. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/artifacts/hf.py +0 -0
  390. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/artifacts/preload_runpod.py +0 -0
  391. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/artifacts/weight_cache.py +0 -0
  392. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/core/__init__.py +0 -0
  393. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/core/allocator.py +0 -0
  394. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/core/base.py +0 -0
  395. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/core/fit_errors.py +0 -0
  396. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/core/preflight.py +0 -0
  397. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/core/realized.py +0 -0
  398. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/core/registry.py +0 -0
  399. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/core/sharding.py +0 -0
  400. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/__init__.py +0 -0
  401. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/client/__init__.py +0 -0
  402. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/client/api.py +0 -0
  403. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/client/auth.py +0 -0
  404. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/client/gpus.py +0 -0
  405. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/client/preflight.py +0 -0
  406. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/client/pricing.py +0 -0
  407. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/execution/__init__.py +0 -0
  408. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/execution/provider.py +0 -0
  409. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/jobs/__init__.py +0 -0
  410. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/jobs/builders.py +0 -0
  411. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/lambda_/jobs/reap.py +0 -0
  412. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/__init__.py +0 -0
  413. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/client/__init__.py +0 -0
  414. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/client/api.py +0 -0
  415. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/client/auth.py +0 -0
  416. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/client/cost.py +0 -0
  417. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/client/gpus.py +0 -0
  418. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/client/preflight.py +0 -0
  419. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/client/pricing.py +0 -0
  420. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/execution/__init__.py +0 -0
  421. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/execution/job_execution.py +0 -0
  422. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/execution/jobs.py +0 -0
  423. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/execution/polling.py +0 -0
  424. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/execution/provider.py +0 -0
  425. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/execution/resources.py +0 -0
  426. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/serverless/__init__.py +0 -0
  427. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/serverless/endpoints.py +0 -0
  428. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/runpod/serverless/naming.py +0 -0
  429. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/vast/__init__.py +0 -0
  430. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/vast/client/__init__.py +0 -0
  431. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/vast/client/api.py +0 -0
  432. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/vast/client/auth.py +0 -0
  433. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/vast/client/preflight.py +0 -0
  434. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/vast/client/pricing.py +0 -0
  435. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/vast/client/result.py +0 -0
  436. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/vast/execution/__init__.py +0 -0
  437. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/vast/execution/provider.py +0 -0
  438. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/vast/jobs/__init__.py +0 -0
  439. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/providers/vast/jobs/builders.py +0 -0
  440. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/py.typed +0 -0
  441. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/__init__.py +0 -0
  442. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/accounting/__init__.py +0 -0
  443. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/accounting/artifacts.py +0 -0
  444. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/accounting/costs.py +0 -0
  445. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/accounting/reconciliation.py +0 -0
  446. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/accounting/weight_cache.py +0 -0
  447. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/lifecycle/__init__.py +0 -0
  448. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/lifecycle/attempts.py +0 -0
  449. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/lifecycle/claim_lock.py +0 -0
  450. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/lifecycle/deadlines.py +0 -0
  451. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/lifecycle/preparation.py +0 -0
  452. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/lifecycle/status.py +0 -0
  453. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/lifecycle/submit.py +0 -0
  454. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/results/__init__.py +0 -0
  455. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/results/checkpoints.py +0 -0
  456. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/results/verified_revisions.py +0 -0
  457. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/supervise/__init__.py +0 -0
  458. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/supervise/attach.py +0 -0
  459. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/supervise/attach_reconcile.py +0 -0
  460. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/supervise/attempt_supervision.py +0 -0
  461. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/supervise/deploy.py +0 -0
  462. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/supervise/errors.py +0 -0
  463. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/supervise/lifecycle.py +0 -0
  464. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/supervise/recovery.py +0 -0
  465. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/supervise/retry_decision.py +0 -0
  466. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runner/supervise/transitions.py +0 -0
  467. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runtime_capsule/__init__.py +0 -0
  468. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runtime_capsule/build.py +0 -0
  469. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/runtime_capsule/manifest.py +0 -0
  470. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/schema/__init__.py +0 -0
  471. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/schema/fields.py +0 -0
  472. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/__init__.py +0 -0
  473. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/app/__init__.py +0 -0
  474. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/app/__main__.py +0 -0
  475. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/app/bootstrap.py +0 -0
  476. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/app/chat_stream.py +0 -0
  477. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/app/http.py +0 -0
  478. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/app/manifest.py +0 -0
  479. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/app/openai.py +0 -0
  480. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/app/progress.py +0 -0
  481. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/contract/__init__.py +0 -0
  482. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/contract/errors.py +0 -0
  483. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/contract/protocol.py +0 -0
  484. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/contract/provenance.py +0 -0
  485. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/contract/responses.py +0 -0
  486. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/contract/urls.py +0 -0
  487. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/control/__init__.py +0 -0
  488. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/control/_canonical.py +0 -0
  489. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/control/_serialization.py +0 -0
  490. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/control/_urls.py +0 -0
  491. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/control/credentials.py +0 -0
  492. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/control/planning.py +0 -0
  493. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/control/types.py +0 -0
  494. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/deployment/__init__.py +0 -0
  495. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/deployment/export.py +0 -0
  496. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/deployment/preflight.py +0 -0
  497. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/deployment/profiles.py +0 -0
  498. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/deployment/readiness.py +0 -0
  499. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/__init__.py +0 -0
  500. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/common/__init__.py +0 -0
  501. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/common/records.py +0 -0
  502. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/__init__.py +0 -0
  503. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  504. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  505. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  506. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  507. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  508. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  509. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  510. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  511. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  512. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  513. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  514. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  515. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/request/__init__.py +0 -0
  516. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/request/openai.py +0 -0
  517. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/request/runtime_support.py +0 -0
  518. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/request/streaming.py +0 -0
  519. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/request/text_scan.py +0 -0
  520. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/request/thinking.py +0 -0
  521. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/request/tool_calls.py +0 -0
  522. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/request/tool_template.py +0 -0
  523. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/request/transport.py +0 -0
  524. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/request/validation.py +0 -0
  525. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/runtime/__init__.py +0 -0
  526. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/runtime/adapters.py +0 -0
  527. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/runtime/engine.py +0 -0
  528. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/runtime/errors.py +0 -0
  529. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/runtime/multimodal.py +0 -0
  530. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/runtime/prompt.py +0 -0
  531. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/runtime/sampling.py +0 -0
  532. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/runtime/structured_outputs.py +0 -0
  533. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/runtime/tool_calls.py +0 -0
  534. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serve/runtime/types.py +0 -0
  535. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/__init__.py +0 -0
  536. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/__main__.py +0 -0
  537. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/asgi/__init__.py +0 -0
  538. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/asgi/cli.py +0 -0
  539. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/billing/__init__.py +0 -0
  540. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/billing/retry.py +0 -0
  541. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/__init__.py +0 -0
  542. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/ops/__init__.py +0 -0
  543. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/ops/reconcile.py +0 -0
  544. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/ops/repo_cleanup.py +0 -0
  545. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/ops/serving_resources.py +0 -0
  546. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/registry/__init__.py +0 -0
  547. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/registry/checkpoints.py +0 -0
  548. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/registry/environment_registry.py +0 -0
  549. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/registry/envs.py +0 -0
  550. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/registry/projects.py +0 -0
  551. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/teacher/__init__.py +0 -0
  552. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/teacher/broker.py +0 -0
  553. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/teacher/errors.py +0 -0
  554. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/domain/teacher/requests.py +0 -0
  555. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/platform/__init__.py +0 -0
  556. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/platform/db.py +0 -0
  557. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/platform/deps.py +0 -0
  558. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/platform/internal_client.py +0 -0
  559. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/platform/locks.py +0 -0
  560. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/platform/runtime.py +0 -0
  561. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/routes/__init__.py +0 -0
  562. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/routes/envs.py +0 -0
  563. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/routes/meta.py +0 -0
  564. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/routes/serving.py +0 -0
  565. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/routes/serving_chat.py +0 -0
  566. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/routes/serving_completion.py +0 -0
  567. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/routes/serving_revisions.py +0 -0
  568. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/routes/serving_smoke.py +0 -0
  569. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/server/routes/teacher.py +0 -0
  570. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/__init__.py +0 -0
  571. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/app/__init__.py +0 -0
  572. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/loadtest/__init__.py +0 -0
  573. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/loadtest/__main__.py +0 -0
  574. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/loadtest/artifacts.py +0 -0
  575. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/loadtest/cli.py +0 -0
  576. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/loadtest/metrics.py +0 -0
  577. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/loadtest/protocol.py +0 -0
  578. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/loadtest/runner.py +0 -0
  579. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/loadtest/schedule.py +0 -0
  580. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/loadtest/schema.py +0 -0
  581. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/promotion/__init__.py +0 -0
  582. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/promotion/evidence.py +0 -0
  583. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/__init__.py +0 -0
  584. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/accounting/__init__.py +0 -0
  585. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/accounting/usage.py +0 -0
  586. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/accounting/usage_retry.py +0 -0
  587. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/engine/__init__.py +0 -0
  588. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/engine/boot.py +0 -0
  589. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/engine/errors.py +0 -0
  590. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/engine/lora_engine.py +0 -0
  591. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/engine/lora_entries.py +0 -0
  592. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/engine/model_config.py +0 -0
  593. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/engine/prequant_config.py +0 -0
  594. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/http/__init__.py +0 -0
  595. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/http/adapter_routes.py +0 -0
  596. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/http/body_limit.py +0 -0
  597. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/http/context.py +0 -0
  598. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/http/headers.py +0 -0
  599. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/http/inference_routes.py +0 -0
  600. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/http/router.py +0 -0
  601. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/http/routing.py +0 -0
  602. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/io/__init__.py +0 -0
  603. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/io/multimodal.py +0 -0
  604. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/io/openai_request.py +0 -0
  605. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/io/provenance.py +0 -0
  606. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/io/requests.py +0 -0
  607. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/io/responses.py +0 -0
  608. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/io/schemas.py +0 -0
  609. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/io/streaming.py +0 -0
  610. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/io/structured_outputs.py +0 -0
  611. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/store/__init__.py +0 -0
  612. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/store/access.py +0 -0
  613. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/store/lookup.py +0 -0
  614. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/store/persisted_columns.py +0 -0
  615. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/store/persistence.py +0 -0
  616. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/store/registration.py +0 -0
  617. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/store/registry.py +0 -0
  618. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/store/settings.py +0 -0
  619. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/store/supabase_rest.py +0 -0
  620. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/store/undeploy.py +0 -0
  621. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/stream_channel/__init__.py +0 -0
  622. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/stream_channel/_tasks.py +0 -0
  623. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/stream_channel/client.py +0 -0
  624. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/stream_channel/engine.py +0 -0
  625. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/serving/src/stream_channel/protocol.py +0 -0
  626. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/snapshot/__init__.py +0 -0
  627. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/snapshot/archive.py +0 -0
  628. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/teacher/__init__.py +0 -0
  629. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/teacher/limits.py +0 -0
  630. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/teacher/provider_status.py +0 -0
  631. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/flash/teacher/retry_contract.py +0 -0
  632. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/scripts/build_dev_dist.py +0 -0
  633. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/scripts/check_file_size.py +0 -0
  634. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/scripts/check_function_size.py +0 -0
  635. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/scripts/check_rollout_identity_actor.py +0 -0
  636. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/scripts/check_verl_pin_exists.py +0 -0
  637. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/scripts/qualify_serving_profile.py +0 -0
  638. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/scripts/scrub_history.sh +0 -0
  639. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/serve_launch.py +0 -0
  640. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/__init__.py +0 -0
  641. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/__init__.py +0 -0
  642. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/chat_provenance.py +0 -0
  643. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/chat_transport.py +0 -0
  644. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/managed_chat.py +0 -0
  645. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/profile.py +0 -0
  646. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/runner.py +0 -0
  647. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/server_api_plugin.py +0 -0
  648. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/source_snapshot.py +0 -0
  649. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/specs.py +0 -0
  650. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/teacher.py +0 -0
  651. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/vast.py +0 -0
  652. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/_helpers/wire_headers.py +0 -0
  653. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/capture_image_sft_processor_oracle.py +0 -0
  654. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/capture_qwen38_27b_metadata.py +0 -0
  655. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/conftest.py +0 -0
  656. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  657. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  658. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  659. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  660. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  661. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  662. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/live/__init__.py +0 -0
  663. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/live/conftest.py +0 -0
  664. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/live/test_lambda_live.py +0 -0
  665. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/live/test_runpod_live.py +0 -0
  666. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/live/test_sft_thinking_render_live.py +0 -0
  667. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/live/test_vast_live.py +0 -0
  668. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/checkpoint_fixtures.py +0 -0
  669. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/conftest.py +0 -0
  670. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/hosted_loadtest_fake_scenario.json +0 -0
  671. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_base_model_serving.py +0 -0
  672. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_chat_auth.py +0 -0
  673. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_chat_authorizer.py +0 -0
  674. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  675. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_checkpoint_model_validation.py +0 -0
  676. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_engine_error_status.py +0 -0
  677. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_fp8_config.py +0 -0
  678. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_immutable_engine.py +0 -0
  679. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_immutable_revisions.py +0 -0
  680. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_immutable_schemas.py +0 -0
  681. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_loadtest_artifacts.py +0 -0
  682. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_loadtest_metrics.py +0 -0
  683. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_loadtest_protocol.py +0 -0
  684. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_loadtest_runner.py +0 -0
  685. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_loadtest_schedule.py +0 -0
  686. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_loadtest_schema.py +0 -0
  687. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_modal_deploy_identity.py +0 -0
  688. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_modal_image_paths.py +0 -0
  689. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_model_config.py +0 -0
  690. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_multimodal.py +0 -0
  691. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_openai_stream_options.py +0 -0
  692. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_persistence.py +0 -0
  693. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_pre_first_disconnect.py +0 -0
  694. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_prequant_config.py +0 -0
  695. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_promotion_evidence.py +0 -0
  696. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_registry.py +0 -0
  697. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_registry_coverage.py +0 -0
  698. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_request_body_limit.py +0 -0
  699. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_router_coverage.py +0 -0
  700. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_router_edge_coverage.py +0 -0
  701. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_schemas_coverage.py +0 -0
  702. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_serve_reasoning_split.py +0 -0
  703. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_serve_thinking.py +0 -0
  704. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_settings.py +0 -0
  705. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_stream_channel.py +0 -0
  706. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_structured_outputs.py +0 -0
  707. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_structured_outputs_coverage.py +0 -0
  708. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving/test_supabase_rest_coverage.py +0 -0
  709. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving_conformance/__init__.py +0 -0
  710. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/serving_conformance/conftest.py +0 -0
  711. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_accounting_coverage.py +0 -0
  712. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_adapter_shard_completeness.py +0 -0
  713. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_agent_flash_cli_contract.py +0 -0
  714. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_algorithms.py +0 -0
  715. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_allocator.py +0 -0
  716. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_backend_common.py +0 -0
  717. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_backend_jobspec_contract.py +0 -0
  718. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_bake_kernel_cache.py +0 -0
  719. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_base_model_provenance.py +0 -0
  720. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_bootstrap_process_groups.py +0 -0
  721. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_build_context_contract.py +0 -0
  722. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cancel_remote.py +0 -0
  723. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_capture_qwen38_metadata.py +0 -0
  724. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_catalog_consistency.py +0 -0
  725. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_catalog_only_models.py +0 -0
  726. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_charge_pricing.py +0 -0
  727. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_chat_foundations.py +0 -0
  728. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_checkpoint_lifecycle.py +0 -0
  729. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_checkpoints.py +0 -0
  730. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_commands.py +0 -0
  731. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_commands_coverage.py +0 -0
  732. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_credential_shadowing.py +0 -0
  733. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_errors.py +0 -0
  734. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_estimate.py +0 -0
  735. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_gpus_flag.py +0 -0
  736. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_help.py +0 -0
  737. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_main_coverage.py +0 -0
  738. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_managed.py +0 -0
  739. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_render_coverage.py +0 -0
  740. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_render_theme.py +0 -0
  741. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_serve_deploy.py +0 -0
  742. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_serve_status.py +0 -0
  743. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_serve_undeploy.py +0 -0
  744. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_traces.py +0 -0
  745. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cli_wandb_warning.py +0 -0
  746. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_client.py +0 -0
  747. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_client_import_purity.py +0 -0
  748. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_client_stream_reads.py +0 -0
  749. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_config_env_vars.py +0 -0
  750. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_config_overrides.py +0 -0
  751. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_console_upload.py +0 -0
  752. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_controlled_experiment_repairs.py +0 -0
  753. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cost_analytical.py +0 -0
  754. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cost_currency.py +0 -0
  755. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cost_equation.py +0 -0
  756. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cost_estimate.py +0 -0
  757. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cost_hardware.py +0 -0
  758. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_cost_models.py +0 -0
  759. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_dev_channel.py +0 -0
  760. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_disk_gb.py +0 -0
  761. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_endpoint_name.py +0 -0
  762. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_cache_evict.py +0 -0
  763. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_delete.py +0 -0
  764. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_download.py +0 -0
  765. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_evaluations.py +0 -0
  766. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_git_auth.py +0 -0
  767. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_list_api.py +0 -0
  768. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_list_cli.py +0 -0
  769. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_list_hub.py +0 -0
  770. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_no_install.py +0 -0
  771. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_pull.py +0 -0
  772. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_pull_coverage.py +0 -0
  773. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_pull_loader_coverage.py +0 -0
  774. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_pull_managed_control_plane.py +0 -0
  775. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_push.py +0 -0
  776. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_rate_limit_resolve.py +0 -0
  777. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_ref_pinning.py +0 -0
  778. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_env_test.py +0 -0
  779. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_envs_coverage.py +0 -0
  780. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_export.py +0 -0
  781. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_flash_mvp.py +0 -0
  782. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_flash_worker.py +0 -0
  783. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_flashinfer_cache_dirs.py +0 -0
  784. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_freesolo_api_transport.py +0 -0
  785. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_fused_expert_warmstart.py +0 -0
  786. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_github_urlopen_retry.py +0 -0
  787. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_gpu_type_single_field.py +0 -0
  788. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_gpus.py +0 -0
  789. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_grpo_checkpoint_durability.py +0 -0
  790. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_grpo_params.py +0 -0
  791. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_grpo_process_census.py +0 -0
  792. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_grpo_resident_sizing.py +0 -0
  793. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_grpo_reward_batching.py +0 -0
  794. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_grpo_rollout_contract.py +0 -0
  795. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_grpo_rollout_identity.py +0 -0
  796. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_health_liveness.py +0 -0
  797. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_hf_retry.py +0 -0
  798. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_idle_endpoint_reaper.py +0 -0
  799. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_image_environment_capability.py +0 -0
  800. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_image_incremental_processor.py +0 -0
  801. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_image_sft_markers.py +0 -0
  802. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_image_sft_processor_parity.py +0 -0
  803. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_image_tokens.py +0 -0
  804. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_infisical_secrets.py +0 -0
  805. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_internal_client.py +0 -0
  806. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_jobs.py +0 -0
  807. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_kernel_cache.py +0 -0
  808. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_kernel_fingerprint.py +0 -0
  809. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_kv_util.py +0 -0
  810. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_lambda_api_coverage.py +0 -0
  811. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_logging.py +0 -0
  812. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_login_perms.py +0 -0
  813. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_lora_rank_coverage.py +0 -0
  814. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_lora_rank_nested_rung.py +0 -0
  815. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_lora_rank_preflight.py +0 -0
  816. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_lora_targeting.py +0 -0
  817. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_lora_targeting_pinned_verl.py +0 -0
  818. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_loraplus_config.py +0 -0
  819. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_managed_config_fields.py +0 -0
  820. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_managed_hf_repo.py +0 -0
  821. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_metrics_schema_agent_contract.py +0 -0
  822. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_mig_guard.py +0 -0
  823. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_mirror_sampling_parity.py +0 -0
  824. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_multi_gpu_gate.py +0 -0
  825. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_multimodal_training.py +0 -0
  826. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_named_reward_metrics.py +0 -0
  827. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_oom_escalate_gpu.py +0 -0
  828. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_opd.py +0 -0
  829. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_opd_limits.py +0 -0
  830. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  831. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_opd_multiturn_failure_exit.py +0 -0
  832. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_opd_replay_guard.py +0 -0
  833. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_opd_resume_safety.py +0 -0
  834. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_opd_train.py +0 -0
  835. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_orchestrator_flash.py +0 -0
  836. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_packing.py +0 -0
  837. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_packing_coverage.py +0 -0
  838. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_parasail_teacher.py +0 -0
  839. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_persisted_spec_envelope.py +0 -0
  840. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_poll_helpers.py +0 -0
  841. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_preflight.py +0 -0
  842. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_projects.py +0 -0
  843. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_prompt_budget.py +0 -0
  844. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_provider_preflight_coverage.py +0 -0
  845. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_provider_routing.py +0 -0
  846. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_provider_teardown_robustness.py +0 -0
  847. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_providers_symmetry.py +0 -0
  848. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_realized_cost.py +0 -0
  849. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_repo_cleanup.py +0 -0
  850. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_resolve_params_b.py +0 -0
  851. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_resume_on_retry.py +0 -0
  852. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_retry_decision.py +0 -0
  853. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_rl_train.py +0 -0
  854. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_rollout_samples.py +0 -0
  855. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_runmgmt.py +0 -0
  856. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_runpod_api_delete.py +0 -0
  857. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_runpod_key_fingerprint.py +0 -0
  858. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_runpod_key_waterfall.py +0 -0
  859. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_runtime_capsule.py +0 -0
  860. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_app_bootstrap_http.py +0 -0
  861. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_app_manifest.py +0 -0
  862. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_app_packaging.py +0 -0
  863. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_app_progress.py +0 -0
  864. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_chat_transport.py +0 -0
  865. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_control.py +0 -0
  866. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_docs.py +0 -0
  867. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_modal_contract_lock.py +0 -0
  868. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_modal_teardown_identity.py +0 -0
  869. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_profile_qualification.py +0 -0
  870. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_profiles.py +0 -0
  871. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_provisioning_common.py +0 -0
  872. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_provisioning_modal.py +0 -0
  873. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_reasoning_content.py +0 -0
  874. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_runtime_adapters.py +0 -0
  875. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_runtime_engine.py +0 -0
  876. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serve_runtime_types.py +0 -0
  877. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_server_checkpoints_coverage.py +0 -0
  878. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_server_db.py +0 -0
  879. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_server_envs_coverage.py +0 -0
  880. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_server_locks_coverage.py +0 -0
  881. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_server_managed_chat_requests.py +0 -0
  882. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_server_serving_resources.py +0 -0
  883. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_server_standalone.py +0 -0
  884. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serving_conformance_gate.py +0 -0
  885. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serving_context_preflight.py +0 -0
  886. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_serving_schema_coverage.py +0 -0
  887. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_sft_chunked_nll.py +0 -0
  888. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_sft_example_selection.py +0 -0
  889. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_sft_gc_off.py +0 -0
  890. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_sft_max_context.py +0 -0
  891. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_sft_step_floor.py +0 -0
  892. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_sft_train.py +0 -0
  893. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_sft_workload.py +0 -0
  894. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_source_attestation_flow.py +0 -0
  895. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_source_snapshot.py +0 -0
  896. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_spec_and_validation.py +0 -0
  897. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_spec_contract_bytes.py +0 -0
  898. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_staged_environment.py +0 -0
  899. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_step_floor.py +0 -0
  900. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_step_metrics.py +0 -0
  901. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_step_timing.py +0 -0
  902. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_structured_outputs.py +0 -0
  903. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_teacher_broker.py +0 -0
  904. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_teacher_encoding_contract.py +0 -0
  905. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_terminal_artifacts.py +0 -0
  906. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_thinking_config.py +0 -0
  907. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_tool_call_exact_parsing.py +0 -0
  908. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_train_context_preflight.py +0 -0
  909. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_training_controls.py +0 -0
  910. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_type_comment_prose.py +0 -0
  911. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_vast_api.py +0 -0
  912. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_vast_api_coverage.py +0 -0
  913. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_vast_offers.py +0 -0
  914. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_vast_provider_coverage.py +0 -0
  915. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_vast_result.py +0 -0
  916. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_vast_runner.py +0 -0
  917. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_verified_revisions.py +0 -0
  918. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_verifiers.py +0 -0
  919. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_verl_checkpoint_export.py +0 -0
  920. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_verl_child_plugins.py +0 -0
  921. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_verl_silence_watchdog.py +0 -0
  922. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_version.py +0 -0
  923. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  924. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_vllm_moe_lora_backport.py +0 -0
  925. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_vram_architecture.py +0 -0
  926. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_wandb_link.py +0 -0
  927. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_wandb_naming.py +0 -0
  928. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_warmstart_adapter_download.py +0 -0
  929. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_warmstart_cross_repo.py +0 -0
  930. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_warmstart_error_attribution.py +0 -0
  931. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_warmstart_image_adapters.py +0 -0
  932. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_weight_cache.py +0 -0
  933. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_worker_dryrun.py +0 -0
  934. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_worker_hardexit.py +0 -0
  935. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_worker_image.py +0 -0
  936. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_worker_init_heartbeat.py +0 -0
  937. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_worker_stack.py +0 -0
  938. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_worker_thinking.py +0 -0
  939. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_workload_profile.py +0 -0
  940. {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.133}/tests/test_zero2_sharding_gate.py +0 -0
@@ -60,8 +60,7 @@ jobs:
60
60
  - name: Function size check
61
61
  run: uv run python scripts/check_function_size.py
62
62
 
63
- # Keep the source hierarchy reviewable: no directory may exceed ten tracked files, and package
64
- # roots may mix subdirectories only with the three required marker files.
63
+ # Package roots may mix subdirectories only with semantic package marker files.
65
64
  - name: Source layout check
66
65
  run: uv run python scripts/check_source_layout.py
67
66
 
@@ -114,7 +114,7 @@ jobs:
114
114
  # pinned to the exact client pyproject declares; see deploy-modal.yml for why an
115
115
  # unbounded range is unsafe for the deploy path.
116
116
  # exact pins keep the deploy client bootstrap reproducible across runner image changes.
117
- uv pip install --system "modal==1.5.4" "python-dotenv==1.2.3"
117
+ uv pip install --system "modal==1.6.1" "python-dotenv==1.2.3"
118
118
 
119
119
  - name: Verify development deployment inputs
120
120
  if: steps.gate.outputs.deploy == 'true'
@@ -11,6 +11,7 @@ name: Deploy serving Modal app
11
11
  # FREESOLO_INTERNAL_KEY - shared platform internal key (backend + serving)
12
12
  # PLATFORM_BACKEND_URL - platform backend base URL
13
13
  # SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY - serving startup hydration (durable adapter registry)
14
+ # required Actions variable: SERVING_CANARY_ORG_ID - existing internal organization billed for probes
14
15
  # modal_app.py reads these from the environment (load_dotenv only supplements os.environ), so no
15
16
  # .env file is written in CI. the "Verify required runtime secrets" step below hard-fails the deploy
16
17
  # if a required secret is absent, preventing a broken production config with external chat failures,
@@ -40,13 +41,13 @@ jobs:
40
41
  if: github.ref == 'refs/heads/main'
41
42
  runs-on: ubuntu-latest
42
43
  # the job's own bounded waits now sum well past the old 30: two 300s readiness polls, the remote
43
- # image build, a 420s canary that pays a GPU cold start, a 180s accounting deadline, and on the
44
- # failure path a SECOND `modal deploy` plus a 300s restore poll. 60 minutes clears that worst
44
+ # image build, a 3360s canary that pays a GPU cold start, a 180s accounting deadline, and on the
45
+ # failure path a SECOND `modal deploy` plus a 300s restore poll. 90 minutes clears that worst
45
46
  # case with room while keeping a wedged deploy from holding the runner for GitHub's 6-hour
46
47
  # default. the headroom is specifically for the rollback: a job killed partway through the
47
48
  # restore leaves the broken release live with no second attempt, which is the one outcome this
48
49
  # workflow exists to prevent.
49
- timeout-minutes: 60
50
+ timeout-minutes: 90
50
51
  # serialize serving deploys across runs because each deploy mutates the live app. github can still
51
52
  # replace a pending run, so the gate compares against the sha reported by the deployed app rather
52
53
  # than assuming every push predecessor was deployed.
@@ -75,6 +76,7 @@ jobs:
75
76
  # (empty => default *.modal.run url), so non-prod/fork/local workspaces stay deployable. This
76
77
  # domain is verified in the production Modal workspace, so prod keeps serving on serve.freesolo.co.
77
78
  SERVING_CUSTOM_DOMAIN: serve.freesolo.co
79
+ SERVING_CANARY_ORG_ID: ${{ vars.SERVING_CANARY_ORG_ID }}
78
80
 
79
81
  steps:
80
82
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
@@ -168,7 +170,7 @@ jobs:
168
170
  # pinned to the exact client pyproject declares and the provisioning path was validated
169
171
  # against: deploy behaviour (app lifecycle, tags, lookup) is client-version sensitive, so
170
172
  # an unbounded range lets a future release change deploys with no diff here.
171
- python -m pip install "modal==1.5.4" "python-dotenv==1.2.3"
173
+ python -m pip install "modal==1.6.1" "python-dotenv==1.2.3"
172
174
 
173
175
  - name: Verify Modal auth is configured
174
176
  if: steps.gate.outputs.deploy == 'true'
@@ -198,7 +200,7 @@ jobs:
198
200
  if [ -z "$SUPABASE_SERVICE_ROLE_KEY" ]; then
199
201
  missing="$missing SUPABASE_SERVICE_ROLE_KEY"
200
202
  fi
201
- required="FREESOLO_INTERNAL_KEY PLATFORM_BACKEND_URL"
203
+ required="FREESOLO_INTERNAL_KEY PLATFORM_BACKEND_URL SERVING_CANARY_ORG_ID"
202
204
  for name in $required; do
203
205
  # indirect expansion: the secrets are exported into the env via the job-level `env:` block.
204
206
  if [ -z "${!name}" ]; then
@@ -206,10 +208,21 @@ jobs:
206
208
  fi
207
209
  done
208
210
  if [ -n "$missing" ]; then
209
- echo "::error::Refusing to deploy serving to prod: missing required secret(s):${missing}. Set them in repo Settings -> Secrets and variables -> Actions."
211
+ echo "::error::Refusing to deploy serving to prod: missing required setting(s):${missing}. Set them in repo Settings -> Secrets and variables -> Actions."
210
212
  exit 1
211
213
  fi
212
- echo "All required serving runtime secrets are present."
214
+ # reject malformed attribution before replacing the live app.
215
+ python - <<'PY'
216
+ import os
217
+ import sys
218
+ import uuid
219
+
220
+ try:
221
+ uuid.UUID(os.environ["SERVING_CANARY_ORG_ID"].strip())
222
+ except ValueError:
223
+ sys.exit("::error::SERVING_CANARY_ORG_ID must be an existing internal organization UUID.")
224
+ PY
225
+ echo "All required serving runtime secrets and canary settings are present."
213
226
 
214
227
  - name: Wait for production adapter schema readiness
215
228
  if: steps.gate.outputs.deploy == 'true'
@@ -411,6 +424,7 @@ jobs:
411
424
  # durably. this step is the only thing standing between "the process booted" and "the
412
425
  # release can actually serve", so a failure here must not be promoted.
413
426
  SERVING_BASE_URL: https://serve.freesolo.co
427
+ SERVING_CANARY_ORG_ID: ${{ vars.SERVING_CANARY_ORG_ID }}
414
428
  FREESOLO_INTERNAL_KEY: ${{ secrets.FREESOLO_INTERNAL_KEY }}
415
429
  SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
416
430
  SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.SUPABASE_SERVICE_ROLE_KEY }}
@@ -456,10 +470,20 @@ jobs:
456
470
  echo "Promotion failed; restoring ${PREVIOUS_SHA}."
457
471
  git checkout --quiet --force "$PREVIOUS_SHA"
458
472
 
473
+ # resolve the entrypoint in the restored tree, including releases before the source move.
474
+ if [ -f flash/serving/app/modal_app.py ]; then
475
+ rollback_app=flash/serving/app/modal_app.py
476
+ elif [ -f flash/serving/modal_app.py ]; then
477
+ rollback_app=flash/serving/modal_app.py
478
+ else
479
+ echo "::error::Previous release has no supported serving entrypoint. Restore production manually."
480
+ exit 1
481
+ fi
482
+
459
483
  # the restored app must report the RESTORED sha, deployed from the restored tree.
460
484
  FREESOLO_DEPLOYMENT_SHA="$PREVIOUS_SHA" \
461
485
  FREESOLO_DEPLOYMENT_ID="$ROLLBACK_DEPLOYMENT_ID" \
462
- modal deploy flash/serving/app/modal_app.py
486
+ modal deploy "$rollback_app"
463
487
 
464
488
  response_file="$(mktemp)"
465
489
  trap 'rm -f "$response_file"' EXIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.2.132
3
+ Version: 1.2.133
4
4
  Summary: Flash — managed LoRA post-training (SFT/GRPO/OPD) for Freesolo environments, driven by the `flash` CLI
5
5
  Project-URL: Homepage, https://github.com/freesolo-co/flash
6
6
  Project-URL: Repository, https://github.com/freesolo-co/flash
@@ -0,0 +1,136 @@
1
+ """one strict reader for the bytes of an ``adapter_config.json``.
2
+
3
+ Three boundaries admit an adapter by reading this one file, and all three are gated on the same
4
+ question: do these exact bytes describe a LoRA adapter that the engine about to load them can
5
+ actually serve? Answering it separately let them drift -- customer-owned resolution rejected a
6
+ config that hosted admission accepted, so the same artifact was refused before provisioning on one
7
+ path and refused inside the paid container on the other.
8
+
9
+ Every rule here is decidable from the config alone. Nothing in this module reads the hub, the
10
+ filesystem, or a provider, so a verdict costs a caller nothing beyond the bytes it already holds.
11
+ That is why it sits beside the rank and target rules rather than under a deployment path: the
12
+ GPU-side materializer revalidates a cache entry it already holds, and it needs the same verdict
13
+ without importing anything that resolves or deploys.
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ import json
19
+ from dataclasses import dataclass
20
+ from typing import Any
21
+
22
+ from flash.adapters.lora_rank import rank_from_adapter_config
23
+ from flash.serve.contract.protocol import reject_non_finite_json_constant
24
+
25
+
26
+ class AdapterConfigError(ValueError):
27
+ """these ``adapter_config.json`` bytes cannot describe a servable LoRA adapter."""
28
+
29
+
30
+ @dataclass(frozen=True)
31
+ class DeclaredAdapterConfig:
32
+ """what an adapter stamps about itself, after every deterministic rule has passed."""
33
+
34
+ config: dict[str, Any]
35
+ lora_rank: int
36
+ base_model: str
37
+ base_revision: str | None
38
+
39
+
40
+ class _DuplicateConfigKey(AdapterConfigError):
41
+ """raised through ``json.loads``, so it stays a ValueError for any caller expecting one."""
42
+
43
+
44
+ def parse_declared_adapter_config(raw: bytes, *, source: str) -> DeclaredAdapterConfig:
45
+ """read one adapter's declared provenance, or refuse the bytes.
46
+
47
+ ``source`` names the file in every message, so a caller that fetched the config from the hub and
48
+ one that read it off disk both report a location the reader can go look at.
49
+ """
50
+
51
+ config = _strict_object(raw, source=source)
52
+ try:
53
+ rank = rank_from_adapter_config(config, source=source)
54
+ except ValueError as exc:
55
+ raise AdapterConfigError(f"{source} declares no usable lora rank: {exc}") from exc
56
+
57
+ peft_type = config.get("peft_type")
58
+ if peft_type != "LORA":
59
+ raise AdapterConfigError(f"{source} peft_type must be LORA, not {peft_type!r}")
60
+ task_type = config.get("task_type")
61
+ if task_type not in {None, "CAUSAL_LM"}:
62
+ raise AdapterConfigError(
63
+ f"{source} task_type must be absent or CAUSAL_LM, not {task_type!r}"
64
+ )
65
+ modules_to_save = config.get("modules_to_save")
66
+ if modules_to_save is not None and modules_to_save != []:
67
+ raise AdapterConfigError(f"{source} modules_to_save adapters are not supported")
68
+
69
+ # the engine compares `base_model_name_or_path` for equality, so an absent, empty, or
70
+ # non-string one can never match and the deployment is already doomed. skipping the check
71
+ # instead deferred a certain failure until after a provider had allocated and started billing.
72
+ base_model = _text(config, "base_model_name_or_path", source=source)
73
+ if base_model is None:
74
+ raise AdapterConfigError(f"{source} declares no base_model_name_or_path")
75
+ revision = config.get("revision")
76
+ if revision is not None and not isinstance(revision, str):
77
+ raise AdapterConfigError(f"{source} revision must be a string when present")
78
+ return DeclaredAdapterConfig(
79
+ config=config,
80
+ lora_rank=rank,
81
+ base_model=base_model,
82
+ base_revision=_text(config, "revision", source=source),
83
+ )
84
+
85
+
86
+ def _strict_object(raw: bytes, *, source: str) -> dict[str, Any]:
87
+ """decode exactly the way the gpu-side materializer does, from the same bytes.
88
+
89
+ handing the bytes straight to ``json.load`` instead lets it auto-detect utf-16 and accept a bom
90
+ (rfc 4627), so a config the container refuses outright parsed cleanly at admission -- and the
91
+ deployment failed only after the provider resources had been allocated. duplicate keys are the
92
+ same case: plain decoding takes the last value, so a config declaring ``r`` twice would be
93
+ admitted against one rank and then rejected inside the container this check exists to avoid
94
+ paying for.
95
+ """
96
+
97
+ try:
98
+ config = json.loads(
99
+ raw.decode("utf-8"),
100
+ object_pairs_hook=_reject_duplicate_keys,
101
+ parse_constant=reject_non_finite_json_constant,
102
+ )
103
+ except _DuplicateConfigKey as exc:
104
+ raise AdapterConfigError(f"{source} contains a duplicate key") from exc
105
+ except (UnicodeDecodeError, ValueError) as exc:
106
+ raise AdapterConfigError(f"{source} is not readable json") from exc
107
+ if not isinstance(config, dict):
108
+ raise AdapterConfigError(f"{source} must be a json object")
109
+ return config
110
+
111
+
112
+ def _reject_duplicate_keys(pairs: list[tuple[str, Any]]) -> dict[str, Any]:
113
+ result: dict[str, Any] = {}
114
+ for key, value in pairs:
115
+ if key in result:
116
+ raise _DuplicateConfigKey(f"{key!r} appears twice")
117
+ result[key] = value
118
+ return result
119
+
120
+
121
+ def _text(config: dict[str, Any], key: str, *, source: str) -> str | None:
122
+ """read a config string exactly as the engine will compare it.
123
+
124
+ the engine compares these raw bytes for equality, so a value that matches only after stripping
125
+ is admitted here and then rejected inside the paid container -- the outcome this reader exists
126
+ to prevent. normalizing the padding away instead would be worse for ``revision``, which the
127
+ resolver *adopts* into the immutable manifest: that would launder a padded string into the record
128
+ rather than surface it. rejecting keeps the admission-time and container-time verdicts identical.
129
+ """
130
+
131
+ value = config.get(key)
132
+ if not isinstance(value, str):
133
+ return None
134
+ if value != value.strip():
135
+ raise AdapterConfigError(f"{source} {key} has surrounding whitespace: {value!r}")
136
+ return value or None
@@ -189,96 +189,64 @@ def _selected_dataset_path(base_dir: Path, params: dict[str, Any]) -> Path:
189
189
  )
190
190
 
191
191
 
192
- def _read_jsonl_rows(path: Path, *, max_examples: int) -> tuple[int, list[dict[str, Any]]]:
193
- source_examples = 0
194
- values = []
195
- missing = []
196
- with path.open(encoding="utf-8") as handle:
197
- for line in handle:
198
- if not line.strip():
199
- continue
200
- row = json.loads(line)
201
- if not isinstance(row, dict):
202
- raise TypeError("dataset row is not an object")
203
- if _CANONICAL_INPUT_KEY not in row and len(missing) < 10:
204
- missing.append(source_examples)
205
- source_examples += 1
206
- if max_examples <= 0 or len(values) < max_examples:
207
- values.append(row)
208
- if missing:
209
- raise ValueError(
210
- "Freesolo dataset records must contain an input field; missing at row indexes "
211
- f"{missing}"
212
- )
213
- return source_examples, values
214
-
215
-
216
192
  def _validate_dataset_rows(
217
193
  values: object,
218
194
  *,
219
195
  invalid_message: str,
220
- empty_message: str,
221
196
  max_examples: int,
197
+ empty_message: str | None = None,
222
198
  ) -> tuple[int, list[dict[str, Any]]]:
223
199
  if not isinstance(values, list) or not all(isinstance(row, dict) for row in values):
224
200
  raise PackagedDatasetUnavailable(invalid_message)
225
- source_examples = len(values)
226
- missing = [index for index, row in enumerate(values) if _CANONICAL_INPUT_KEY not in row]
201
+ rows = values
202
+ source_examples = len(rows)
203
+ missing = [
204
+ index
205
+ for index, row in enumerate(rows)
206
+ if _CANONICAL_INPUT_KEY not in row or row.get(_CANONICAL_INPUT_KEY) is None
207
+ ]
227
208
  if missing:
228
209
  raise ValueError(
229
210
  "Freesolo dataset records must contain an input field; missing at row indexes "
230
211
  f"{missing[:10]}"
231
212
  )
232
- selected = values[:max_examples] if max_examples > 0 else values
233
- if not selected:
213
+ selected = rows[:max_examples] if max_examples > 0 else rows
214
+ if not selected and empty_message is not None:
234
215
  raise PackagedDatasetUnavailable(empty_message)
235
216
  return source_examples, [dict(row) for row in selected]
236
217
 
237
218
 
238
219
  def _read_dataset_rows(path: Path, *, max_examples: int) -> tuple[int, list[dict[str, Any]]]:
220
+ from freesolo.datasets.records import load_records
221
+
222
+ invalid_message = (
223
+ f"environment dataset file {path.name!r} must contain JSON object or string rows. Add a "
224
+ "valid dataset/train.jsonl to the environment package."
225
+ )
239
226
  try:
240
227
  if path.stat().st_size > _MAX_PROFILE_DATASET_BYTES:
241
228
  raise PackagedDatasetUnavailable(
242
229
  f"environment dataset file {path.name!r} exceeds the 32 MiB control-plane profiling "
243
230
  "limit. Reduce the packaged training dataset."
244
231
  )
245
- if path.suffix.lower() == ".jsonl":
246
- source_examples, values = _read_jsonl_rows(path, max_examples=max_examples)
247
- elif path.suffix.lower() == ".json":
248
- loaded = json.loads(path.read_text(encoding="utf-8"))
249
- values = loaded.get("records") if isinstance(loaded, dict) else loaded
250
- source_examples, values = _validate_dataset_rows(
251
- values,
252
- invalid_message=(
253
- f"environment dataset file {path.name!r} must contain JSON object rows. Add a "
254
- "valid dataset/train.jsonl to the environment package."
255
- ),
256
- empty_message=(
257
- f"environment dataset file {path.name!r} contains no rows. Add training rows to "
258
- "dataset/train.jsonl in the environment package."
259
- ),
260
- max_examples=max_examples,
261
- )
262
- else:
263
- raise ValueError("dataset file must end in .jsonl or .json")
232
+ if path.suffix.lower() not in {".jsonl", ".json"}:
233
+ raise PackagedDatasetUnavailable("dataset file must end in .jsonl or .json")
234
+ # use the worker's decoder; it materializes all rows before profiling selects a prefix.
235
+ rows = load_records(path)
264
236
  except PackagedDatasetUnavailable:
265
237
  raise
266
- except TypeError as exc:
267
- raise PackagedDatasetUnavailable(
268
- f"environment dataset file {path.name!r} must contain JSON object rows. Add a valid "
269
- "dataset/train.jsonl to the environment package."
270
- ) from exc
271
238
  except (OSError, UnicodeError, json.JSONDecodeError) as exc:
272
239
  raise PackagedDatasetUnavailable(
273
240
  f"environment dataset file {path.name!r} is not readable JSON. Add a valid "
274
241
  "dataset/train.jsonl to the environment package."
275
242
  ) from exc
276
- if not values:
277
- raise PackagedDatasetUnavailable(
278
- f"environment dataset file {path.name!r} contains no rows. Add training rows to "
279
- "dataset/train.jsonl in the environment package."
280
- )
281
- return source_examples, [dict(row) for row in values]
243
+ except (TypeError, ValueError) as exc:
244
+ raise PackagedDatasetUnavailable(invalid_message) from exc
245
+ return _validate_dataset_rows(
246
+ rows,
247
+ invalid_message=invalid_message,
248
+ max_examples=max_examples,
249
+ )
282
250
 
283
251
 
284
252
  def profile_packaged_sft_dataset(
@@ -0,0 +1,92 @@
1
+ """Serialize bootstrap re-entry and retain the first terminal result on the worker."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import contextlib
6
+ import json
7
+ import os
8
+ import tempfile
9
+ from pathlib import Path
10
+
11
+
12
+ def _create_once(path: Path, value: dict) -> None:
13
+ """Publish complete json without replacing a concurrent writer's result."""
14
+ path.parent.mkdir(parents=True, exist_ok=True)
15
+ fd, temporary = tempfile.mkstemp(dir=path.parent, prefix=".result-")
16
+ try:
17
+ with os.fdopen(fd, "w") as stream:
18
+ json.dump(value, stream, sort_keys=True)
19
+ stream.flush()
20
+ os.fsync(stream.fileno())
21
+ with contextlib.suppress(FileExistsError):
22
+ os.link(temporary, path)
23
+ finally:
24
+ os.unlink(temporary)
25
+
26
+
27
+ class AttemptState:
28
+ """Local state survives a provider restarting the same attempt's container command."""
29
+
30
+ def __init__(self, code_dir: str, payload: dict):
31
+ self.directory = Path(code_dir + ".bootstrap")
32
+ self.record_path = self.directory / "result.json"
33
+ self.marker_path = self.directory / "marker.json"
34
+ self.identity = {
35
+ key: payload.get(key)
36
+ for key in (
37
+ "run_id",
38
+ "attempt",
39
+ "flash_arm",
40
+ "phase",
41
+ "hf_repo",
42
+ "hf_prefix",
43
+ "source_snapshot",
44
+ )
45
+ }
46
+
47
+ @contextlib.contextmanager
48
+ def locked(self):
49
+ import fcntl
50
+
51
+ self.directory.mkdir(parents=True, exist_ok=True)
52
+ with (self.directory / "lock").open("a") as lock:
53
+ # wait for the owner to finish; returning early lets the launch script destroy its gpu.
54
+ try:
55
+ fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB)
56
+ except BlockingIOError:
57
+ print("bootstrap: duplicate start waiting for attempt owner", flush=True)
58
+ fcntl.flock(lock, fcntl.LOCK_EX)
59
+ try:
60
+ yield
61
+ finally:
62
+ fcntl.flock(lock, fcntl.LOCK_UN)
63
+
64
+ def read(self) -> dict | None:
65
+ try:
66
+ record = json.loads(self.record_path.read_text())
67
+ except FileNotFoundError:
68
+ return None
69
+ if not isinstance(record, dict) or record.get("identity") != self.identity:
70
+ raise RuntimeError("persisted bootstrap result belongs to a different attempt payload")
71
+ marker = record.get("marker")
72
+ if (
73
+ not isinstance(marker, dict)
74
+ or type(marker.get("ok")) is not bool
75
+ or marker.get("run_id") != self.identity["run_id"]
76
+ or marker.get("attempt") != self.identity["attempt"]
77
+ ):
78
+ raise RuntimeError("persisted bootstrap result is invalid")
79
+ return marker
80
+
81
+ def save(self, marker: dict) -> dict:
82
+ # persist before network i/o, so a restart can retry publication without rerunning training.
83
+ _create_once(self.record_path, {"identity": self.identity, "marker": marker})
84
+ saved = self.read()
85
+ assert saved is not None
86
+ return saved
87
+
88
+ def publication_path(self, marker: dict) -> str:
89
+ _create_once(self.marker_path, marker)
90
+ if json.loads(self.marker_path.read_text()) != marker:
91
+ raise RuntimeError("persisted bootstrap marker does not match its terminal result")
92
+ return str(self.marker_path)
@@ -23,6 +23,8 @@ if __package__:
23
23
  from flash.providers._lifecycle.bootstrapping import console as _bootstrap_console
24
24
  from flash.providers._lifecycle.bootstrapping import pip as bootstrap_pip
25
25
  from flash.providers._lifecycle.bootstrapping import processes as _bootstrap_processes
26
+ from flash.providers._lifecycle.bootstrapping.attempt import AttemptState
27
+ from flash.providers._lifecycle.bootstrapping.preload import run_preload
26
28
  from flash.providers._lifecycle.bootstrapping.secrets import (
27
29
  _payload_secrets,
28
30
  _read_console_tail,
@@ -36,6 +38,8 @@ else:
36
38
  import bootstrap_console as _bootstrap_console # type: ignore[no-redef]
37
39
  import bootstrap_pip # type: ignore[no-redef]
38
40
  import bootstrap_processes as _bootstrap_processes # type: ignore[no-redef]
41
+ from bootstrap_attempt import AttemptState # type: ignore[no-redef]
42
+ from bootstrap_preload import run_preload # type: ignore[no-redef]
39
43
  from bootstrap_secrets import ( # type: ignore[no-redef]
40
44
  _payload_secrets,
41
45
  _read_console_tail,
@@ -800,9 +804,14 @@ def write_attempt_marker(payload: dict, ok: bool, error: str = "", retriable: bo
800
804
  run_id=run_id,
801
805
  attempt=attempt,
802
806
  )
803
- p = "/tmp/attempt_marker.json"
804
- with open(p, "w") as f:
805
- json.dump(marker, f)
807
+ if payload.get("mode") == "preload":
808
+ p = "/tmp/attempt_marker.json"
809
+ with open(p, "w") as f:
810
+ json.dump(marker, f)
811
+ else:
812
+ state = AttemptState(_code_dir(payload), payload)
813
+ marker = state.save(marker)
814
+ p = state.publication_path(marker)
806
815
  hf_upload(
807
816
  payload,
808
817
  p,
@@ -832,68 +841,28 @@ def _arm_preload_wall_cap(payload: dict) -> tuple[threading.Timer, threading.Eve
832
841
  return timer, done
833
842
 
834
843
 
835
- def run_preload(payload: dict) -> dict:
836
- """Download models into the bind-mounted weight cache. Fails if cache isn't mounted to avoid warming ephemeral disk."""
837
- env = payload.get("env") or {}
838
- cache_dir = env.get("FLASH_WEIGHT_CACHE_DIR") or ""
839
- token = env.get("HF_TOKEN")
840
- mount = os.path.dirname(os.path.dirname(cache_dir.rstrip("/"))) if cache_dir else ""
841
- if not cache_dir or not mount or not os.path.isdir(mount):
842
- return {
843
- "preloaded": [],
844
- "already_cached": [],
845
- "failed": {},
846
- "error": f"weight-cache not mounted (FLASH_WEIGHT_CACHE_DIR={cache_dir!r}); refusing to warm ephemeral disk",
847
- }
848
- # Sentinel written by cloud-init only onto a real mount; absent sentinel means Docker silently
849
- # auto-created an empty host dir (isdir passes) — we'd warm ephemeral disk. Must check.
850
- if payload.get("cache_mount_marker"):
851
- marker = os.path.join(mount, payload["cache_mount_marker"])
852
- if not os.path.exists(marker):
853
- return {
854
- "preloaded": [],
855
- "already_cached": [],
856
- "failed": {},
857
- "error": (
858
- f"weight-cache NFS filesystem not mounted (no sentinel at {marker}); "
859
- "refusing to warm ephemeral disk"
860
- ),
861
- }
862
- from huggingface_hub import snapshot_download
863
-
864
- ignore_patterns = ["*.pth", "*.gguf", "original/*", "*.onnx", "*.msgpack", "*.h5"]
865
- done, already, failed = [], [], {}
866
- for repo_id in payload.get("models") or []:
867
- try:
868
- # Probe with local_files_only first (HF's own resolution, not a dir-name guess).
869
- try:
870
- snapshot_download(
871
- repo_id=repo_id,
872
- token=token,
873
- cache_dir=cache_dir,
874
- ignore_patterns=ignore_patterns,
875
- local_files_only=True,
876
- )
877
- already.append(repo_id)
878
- print(f"preload: {repo_id} -> {cache_dir} (cached)", flush=True)
879
- continue
880
- except Exception:
881
- pass
882
- snapshot_download(
883
- repo_id=repo_id, token=token, cache_dir=cache_dir, ignore_patterns=ignore_patterns
884
- )
885
- done.append(repo_id)
886
- print(f"preload: {repo_id} -> {cache_dir} (downloaded)", flush=True)
887
- except Exception as exc:
888
- failed[repo_id] = _safe_detail(exc, secrets=_payload_secrets(payload))
889
- print(f"preload FAILED {repo_id}: {failed[repo_id]}", flush=True)
890
- return {"preloaded": done, "already_cached": already, "failed": failed}
891
-
892
-
893
844
  def main() -> int:
894
845
  # SIGTERM → sys.exit so the finally block still uploads the terminal marker.
895
846
  signal.signal(signal.SIGTERM, lambda *a: sys.exit(1))
896
847
  payload = load_payload()
848
+ if payload.get("mode") == "preload":
849
+ return _run_attempt(payload)
850
+ state = AttemptState(_code_dir(payload), payload)
851
+ with state.locked():
852
+ marker = state.read()
853
+ if marker is not None:
854
+ print("bootstrap: replaying the persisted terminal result", flush=True)
855
+ hf_upload(
856
+ payload,
857
+ state.publication_path(marker),
858
+ f"{_arm(payload)}_attempt{payload['attempt']}.json",
859
+ enforce_deadline=False,
860
+ )
861
+ return 0 if marker["ok"] else 1
862
+ return _run_attempt(payload)
863
+
864
+
865
+ def _run_attempt(payload: dict) -> int:
897
866
  ok = False
898
867
  error = ""
899
868
  retriable = False