freesolo-flash-dev 1.2.124__tar.gz → 1.2.127__tar.gz

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