freesolo-flash-dev 1.2.119__tar.gz → 1.2.120__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 (891) hide show
  1. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/CHANGELOG.md +14 -4
  2. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/PKG-INFO +16 -10
  3. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/README.md +15 -9
  4. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/SELF_HOSTING.md +25 -32
  5. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/docs/serving-contract.md +17 -4
  6. freesolo_flash_dev-1.2.120/flash/cli/commands/serving/deploy.py +284 -0
  7. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/serving/identity.py +28 -57
  8. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/serving/status.py +16 -29
  9. freesolo_flash_dev-1.2.120/flash/cli/commands/serving/undeploy.py +103 -0
  10. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/parsing/serve_parser.py +10 -27
  11. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/core/catalog.py +24 -2
  12. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/app/__main__.py +3 -3
  13. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/app/bootstrap.py +4 -3
  14. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/app/launch.py +2 -2
  15. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/app/materialize.py +3 -3
  16. freesolo_flash_dev-1.2.120/flash/serve/app/progress.py +113 -0
  17. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/control/__init__.py +1 -6
  18. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/control/_serialization.py +10 -20
  19. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/control/_urls.py +0 -26
  20. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/control/credentials.py +1 -25
  21. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/control/planning.py +1 -1
  22. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/control/types.py +18 -147
  23. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/deployment/profiles.py +213 -135
  24. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/common/records.py +7 -16
  25. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/execution/lifecycle.py +2 -3
  26. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/execution/operations.py +2 -2
  27. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/planning/plan.py +1 -1
  28. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/readiness_checks/readiness.py +3 -3
  29. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/domain/ops/serving_resources.py +20 -3
  30. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/pyproject.toml +2 -2
  31. freesolo_flash_dev-1.2.120/scripts/qualify_serving_profile.py +57 -0
  32. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_catalog_consistency.py +27 -3
  33. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_serve_deploy.py +278 -422
  34. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_serve_status.py +39 -89
  35. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_serve_undeploy.py +64 -152
  36. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_lora_rank_preflight.py +24 -12
  37. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_app_bootstrap_http.py +86 -1
  38. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_app_launch.py +17 -1
  39. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_app_manifest.py +51 -0
  40. freesolo_flash_dev-1.2.120/tests/test_serve_app_progress.py +187 -0
  41. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_control.py +195 -326
  42. freesolo_flash_dev-1.2.120/tests/test_serve_docs.py +69 -0
  43. freesolo_flash_dev-1.2.120/tests/test_serve_modal_contract_lock.py +167 -0
  44. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_modal_sdk.py +49 -0
  45. freesolo_flash_dev-1.2.120/tests/test_serve_profile_qualification.py +77 -0
  46. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_profiles.py +148 -104
  47. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_provisioning_common.py +2 -2
  48. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_provisioning_modal.py +43 -1
  49. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_serving_resources.py +48 -40
  50. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serving_context_preflight.py +13 -3
  51. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_spec_and_validation.py +19 -4
  52. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_train_context_preflight.py +23 -6
  53. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/uv.lock +1 -1
  54. freesolo_flash_dev-1.2.119/flash/cli/commands/serving/deploy.py +0 -332
  55. freesolo_flash_dev-1.2.119/flash/cli/commands/serving/undeploy.py +0 -177
  56. freesolo_flash_dev-1.2.119/flash/serve/app/progress.py +0 -18
  57. freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/lifecycle.py +0 -83
  58. freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/mutations.py +0 -46
  59. freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/operations.py +0 -992
  60. freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/plan.py +0 -221
  61. freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/probe.py +0 -74
  62. freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/protocol.py +0 -451
  63. freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/readiness.py +0 -683
  64. freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/resources.py +0 -316
  65. freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/transport.py +0 -295
  66. freesolo_flash_dev-1.2.119/tests/serving_conformance/__init__.py +0 -0
  67. freesolo_flash_dev-1.2.119/tests/test_serve_provisioning_runpod.py +0 -4630
  68. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.dockerignore +0 -0
  69. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.env.example +0 -0
  70. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/CODEOWNERS +0 -0
  71. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  72. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  73. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  74. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  75. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/dependabot.yml +0 -0
  76. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/auto-rebake.yml +0 -0
  77. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/bake-kernel-cache.yml +0 -0
  78. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/ci.yml +0 -0
  79. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/deploy-modal-dev.yml +0 -0
  80. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/deploy-modal.yml +0 -0
  81. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/dev-kernel-cache.yml +0 -0
  82. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/main-source-guard.yml +0 -0
  83. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/notify-tests-repo.yml +0 -0
  84. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  85. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/publish-dev.yml +0 -0
  86. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/publish-image.yml +0 -0
  87. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/publish-serving-image.yml +0 -0
  88. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/publish.yml +0 -0
  89. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/version-parity.yml +0 -0
  90. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.github/workflows/worker-image.yml +0 -0
  91. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/.gitignore +0 -0
  92. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/CODE_OF_CONDUCT.md +0 -0
  93. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/CONTRIBUTING.md +0 -0
  94. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/Dockerfile +0 -0
  95. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/Dockerfile.serve +0 -0
  96. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/Dockerfile.worker +0 -0
  97. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/LICENSE +0 -0
  98. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/NOTICE +0 -0
  99. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/SECURITY.md +0 -0
  100. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/build/kernel_cache/.gitignore +0 -0
  101. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/build/kernel_cache/.keep +0 -0
  102. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/deploy/infisical/README.md +0 -0
  103. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/deploy/infisical/entrypoint.sh +0 -0
  104. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/docker/Dockerfile.kernelcache +0 -0
  105. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/docker/Dockerfile.kernelcache.relayer +0 -0
  106. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/docker/bake_kernel_cache.py +0 -0
  107. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/docker/bake_pod_entry.py +0 -0
  108. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/docker/extract_cudart_fix.py +0 -0
  109. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/docker/kernel_fingerprint.py +0 -0
  110. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/docker/make_rp_handler.py +0 -0
  111. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/docker/patch_vllm_moe_lora.py +0 -0
  112. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/__init__.py +0 -0
  113. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/_internal/__init__.py +0 -0
  114. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/_internal/channel.py +0 -0
  115. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/_internal/diagnostics.py +0 -0
  116. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/_internal/fileio.py +0 -0
  117. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/_internal/logging.py +0 -0
  118. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/_internal/openai_sse.py +0 -0
  119. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/_internal/paths.py +0 -0
  120. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/_internal/version.py +0 -0
  121. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/adapters/__init__.py +0 -0
  122. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/adapters/artifacts.py +0 -0
  123. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/adapters/fused_experts.py +0 -0
  124. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/adapters/lora_rank.py +0 -0
  125. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/adapters/targets.py +0 -0
  126. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/__init__.py +0 -0
  127. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/__main__.py +0 -0
  128. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/__init__.py +0 -0
  129. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/__init__.py +0 -0
  130. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/ops/__init__.py +0 -0
  131. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/ops/imports.py +0 -0
  132. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/ops/list.py +0 -0
  133. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/ops/push.py +0 -0
  134. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/ops/retained.py +0 -0
  135. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/ops/setup.py +0 -0
  136. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  137. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/testing/__init__.py +0 -0
  138. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/testing/episode.py +0 -0
  139. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/testing/eval.py +0 -0
  140. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/testing/eval_args.py +0 -0
  141. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/testing/evaluations.py +0 -0
  142. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/testing/params.py +0 -0
  143. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/testing/test.py +0 -0
  144. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/env/testing/warnings.py +0 -0
  145. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/ops/__init__.py +0 -0
  146. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/ops/account.py +0 -0
  147. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/ops/catalog.py +0 -0
  148. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/ops/deploy.py +0 -0
  149. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/ops/log_follow.py +0 -0
  150. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/ops/prompt_budget.py +0 -0
  151. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/ops/runs.py +0 -0
  152. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/ops/traces.py +0 -0
  153. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/ops/train.py +0 -0
  154. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/ops/worker_output.py +0 -0
  155. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/commands/serving/__init__.py +0 -0
  156. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/parsing/__init__.py +0 -0
  157. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/parsing/account.py +0 -0
  158. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/parsing/env.py +0 -0
  159. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/parsing/errors.py +0 -0
  160. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/parsing/main.py +0 -0
  161. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/parsing/models.py +0 -0
  162. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/parsing/traces.py +0 -0
  163. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/parsing/training.py +0 -0
  164. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/scaffold/TRAINING.md +0 -0
  165. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/scaffold/__init__.py +0 -0
  166. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/ui/__init__.py +0 -0
  167. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/ui/cost.py +0 -0
  168. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/ui/env_panels.py +0 -0
  169. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/ui/heartbeat.py +0 -0
  170. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/ui/render.py +0 -0
  171. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/ui/tables.py +0 -0
  172. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cli/ui/tty.py +0 -0
  173. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/client/__init__.py +0 -0
  174. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/client/config.py +0 -0
  175. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/client/freesolo_api.py +0 -0
  176. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/client/http.py +0 -0
  177. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/client/runtime_secrets.py +0 -0
  178. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/client/shapes.py +0 -0
  179. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/client/specs.py +0 -0
  180. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/client/streaming.py +0 -0
  181. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/content/__init__.py +0 -0
  182. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/content/image_descriptors.py +0 -0
  183. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/content/multimodal.py +0 -0
  184. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/content/reasoning_normalization.py +0 -0
  185. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/content/structured_outputs.py +0 -0
  186. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/content/thinking.py +0 -0
  187. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/core/__init__.py +0 -0
  188. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/core/grpo.py +0 -0
  189. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/core/spec.py +0 -0
  190. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/core/spec_persistence.py +0 -0
  191. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cost/__init__.py +0 -0
  192. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cost/analytical.py +0 -0
  193. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cost/currency.py +0 -0
  194. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cost/facts.py +0 -0
  195. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cost/spec.py +0 -0
  196. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/cost/types.py +0 -0
  197. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/__init__.py +0 -0
  198. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/plan/__init__.py +0 -0
  199. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/plan/kv_sizing.py +0 -0
  200. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/plan/model_config_probe.py +0 -0
  201. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/plan/prompt_budget.py +0 -0
  202. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/plan/recipe.py +0 -0
  203. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/plan/steps.py +0 -0
  204. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/plan/vram.py +0 -0
  205. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/profiling/__init__.py +0 -0
  206. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/profiling/dataset_profile.py +0 -0
  207. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/profiling/image_tokens.py +0 -0
  208. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/profiling/reasoning_render.py +0 -0
  209. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/profiling/sft_image_rows.py +0 -0
  210. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/profiling/sft_workload.py +0 -0
  211. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/profiling/tokenizer.py +0 -0
  212. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/profiling/workload_profile.py +0 -0
  213. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/result/__init__.py +0 -0
  214. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/result/accounting.py +0 -0
  215. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/result/rollout_samples.py +0 -0
  216. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/support/__init__.py +0 -0
  217. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/support/huggingface.py +0 -0
  218. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/support/verl_checkpoint.py +0 -0
  219. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/support/verl_policy.py +0 -0
  220. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/support/worker_entrypoint.py +0 -0
  221. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/__init__.py +0 -0
  222. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/__main__.py +0 -0
  223. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/entry/__init__.py +0 -0
  224. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/entry/opd.py +0 -0
  225. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/entry/rl.py +0 -0
  226. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/entry/sft.py +0 -0
  227. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/entry/worker.py +0 -0
  228. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/io/__init__.py +0 -0
  229. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/io/heartbeat.py +0 -0
  230. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/io/hf.py +0 -0
  231. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/io/prefetch.py +0 -0
  232. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/io/wandb_log.py +0 -0
  233. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/model/__init__.py +0 -0
  234. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/model/adapter.py +0 -0
  235. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/model/chatml_mask.py +0 -0
  236. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/model/decoding.py +0 -0
  237. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/model/lora.py +0 -0
  238. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/model/packing.py +0 -0
  239. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/perf/__init__.py +0 -0
  240. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/perf/diagnostics.py +0 -0
  241. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/perf/lifecycle.py +0 -0
  242. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/perf/liger.py +0 -0
  243. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/perf/memory.py +0 -0
  244. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/runtime/__init__.py +0 -0
  245. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  246. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/runtime/rng.py +0 -0
  247. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/runtime/state.py +0 -0
  248. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/teacher/__init__.py +0 -0
  249. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/teacher/client.py +0 -0
  250. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/teacher/encoding.py +0 -0
  251. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  252. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/__init__.py +0 -0
  253. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/core/__init__.py +0 -0
  254. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/core/child/__init__.py +0 -0
  255. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/core/child/glue.py +0 -0
  256. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/core/child/runtime.py +0 -0
  257. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  258. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  259. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  260. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  261. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/entry/__init__.py +0 -0
  262. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/entry/backend_common.py +0 -0
  263. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/entry/opd_train.py +0 -0
  264. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/entry/opd_train_runner.py +0 -0
  265. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  266. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/entry/rl_train.py +0 -0
  267. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  268. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  269. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/entry/sft_train.py +0 -0
  270. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  271. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/__init__.py +0 -0
  272. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
  273. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
  274. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
  275. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
  276. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
  277. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
  278. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  279. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  280. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/child/entry.py +0 -0
  281. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
  282. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/child/plugin.py +0 -0
  283. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  284. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  285. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/child/structured.py +0 -0
  286. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
  287. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
  288. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
  289. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
  290. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
  291. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
  292. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
  293. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
  294. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
  295. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
  296. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
  297. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
  298. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
  299. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/__init__.py +0 -0
  300. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  301. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/child/entry.py +0 -0
  302. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  303. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/child/patches.py +0 -0
  304. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  305. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  306. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  307. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/launch/config.py +0 -0
  308. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  309. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  310. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  311. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  312. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  313. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
  314. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  315. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  316. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/sft/__init__.py +0 -0
  317. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/sft/child/entry.py +0 -0
  318. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/sft/child/plugin.py +0 -0
  319. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  320. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  321. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/train/sft/setup/config.py +0 -0
  322. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/verl/__init__.py +0 -0
  323. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/verl/capabilities.py +0 -0
  324. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/verl/checkpoints.py +0 -0
  325. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/verl/child_io.py +0 -0
  326. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/verl/diagnostics.py +0 -0
  327. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/verl/parallelism.py +0 -0
  328. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/verl/parent_work.py +0 -0
  329. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/engine/worker/verl/process_census.py +0 -0
  330. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/__init__.py +0 -0
  331. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/loading/__init__.py +0 -0
  332. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/loading/adapter.py +0 -0
  333. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/loading/base.py +0 -0
  334. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/loading/loader.py +0 -0
  335. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/loading/pull.py +0 -0
  336. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/loading/staged.py +0 -0
  337. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/meta/__init__.py +0 -0
  338. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/meta/cache_security.py +0 -0
  339. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/meta/dataset_selection.py +0 -0
  340. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/meta/evaluations.py +0 -0
  341. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/meta/identity.py +0 -0
  342. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/meta/namespace_listing.py +0 -0
  343. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/package/__init__.py +0 -0
  344. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/package/direct_tokens.py +0 -0
  345. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/package/limits.py +0 -0
  346. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/envs/package/unpack.py +0 -0
  347. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/__init__.py +0 -0
  348. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/__init__.py +0 -0
  349. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  350. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
  351. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  352. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  353. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  354. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/host/__init__.py +0 -0
  355. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  356. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/host/failmark.py +0 -0
  357. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  358. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  359. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/instances/instance.py +0 -0
  360. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/instances/poll.py +0 -0
  361. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  362. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/instances/provider.py +0 -0
  363. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  364. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/net/__init__.py +0 -0
  365. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/net/auth.py +0 -0
  366. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/net/deadline.py +0 -0
  367. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/net/http.py +0 -0
  368. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/_lifecycle/net/worker.py +0 -0
  369. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/artifacts/__init__.py +0 -0
  370. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/artifacts/hf.py +0 -0
  371. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/artifacts/preload_runpod.py +0 -0
  372. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/artifacts/weight_cache.py +0 -0
  373. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/core/__init__.py +0 -0
  374. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/core/allocator.py +0 -0
  375. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/core/base.py +0 -0
  376. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/core/fit_errors.py +0 -0
  377. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/core/preflight.py +0 -0
  378. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/core/realized.py +0 -0
  379. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/core/registry.py +0 -0
  380. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/core/sharding.py +0 -0
  381. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/__init__.py +0 -0
  382. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/client/__init__.py +0 -0
  383. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/client/api.py +0 -0
  384. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/client/auth.py +0 -0
  385. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/client/gpus.py +0 -0
  386. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/client/preflight.py +0 -0
  387. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/client/pricing.py +0 -0
  388. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/execution/__init__.py +0 -0
  389. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/execution/provider.py +0 -0
  390. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/jobs/__init__.py +0 -0
  391. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/jobs/builders.py +0 -0
  392. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/lambda_/jobs/reap.py +0 -0
  393. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/__init__.py +0 -0
  394. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/client/__init__.py +0 -0
  395. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/client/api.py +0 -0
  396. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/client/auth.py +0 -0
  397. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/client/cost.py +0 -0
  398. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/client/gpus.py +0 -0
  399. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/client/preflight.py +0 -0
  400. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/client/pricing.py +0 -0
  401. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/execution/__init__.py +0 -0
  402. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/execution/job_execution.py +0 -0
  403. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/execution/jobs.py +0 -0
  404. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/execution/polling.py +0 -0
  405. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/execution/provider.py +0 -0
  406. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/execution/resources.py +0 -0
  407. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/serverless/__init__.py +0 -0
  408. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/runpod/serverless/endpoints.py +0 -0
  409. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/vast/__init__.py +0 -0
  410. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/vast/client/__init__.py +0 -0
  411. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/vast/client/api.py +0 -0
  412. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/vast/client/auth.py +0 -0
  413. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/vast/client/preflight.py +0 -0
  414. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/vast/client/pricing.py +0 -0
  415. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/vast/execution/__init__.py +0 -0
  416. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/vast/execution/provider.py +0 -0
  417. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/vast/jobs/__init__.py +0 -0
  418. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/providers/vast/jobs/builders.py +0 -0
  419. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/py.typed +0 -0
  420. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/__init__.py +0 -0
  421. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/accounting/__init__.py +0 -0
  422. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/accounting/artifacts.py +0 -0
  423. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/accounting/costs.py +0 -0
  424. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/accounting/reconciliation.py +0 -0
  425. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/accounting/weight_cache.py +0 -0
  426. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/lifecycle/__init__.py +0 -0
  427. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/lifecycle/attempts.py +0 -0
  428. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/lifecycle/deadlines.py +0 -0
  429. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/lifecycle/preparation.py +0 -0
  430. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/lifecycle/reporting.py +0 -0
  431. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/lifecycle/state.py +0 -0
  432. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/lifecycle/status.py +0 -0
  433. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/lifecycle/submit.py +0 -0
  434. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/results/__init__.py +0 -0
  435. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/results/checkpoints.py +0 -0
  436. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/results/verified_revisions.py +0 -0
  437. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/supervise/__init__.py +0 -0
  438. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/supervise/attach.py +0 -0
  439. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/supervise/deploy.py +0 -0
  440. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/supervise/errors.py +0 -0
  441. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/supervise/lifecycle.py +0 -0
  442. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/supervise/recovery.py +0 -0
  443. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/supervise/retry_decision.py +0 -0
  444. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/supervise/seed_submission.py +0 -0
  445. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runner/supervise/transitions.py +0 -0
  446. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runtime_capsule/__init__.py +0 -0
  447. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runtime_capsule/build.py +0 -0
  448. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runtime_capsule/manifest.py +0 -0
  449. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/runtime_capsule/profiles.py +0 -0
  450. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/schema/__init__.py +0 -0
  451. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/schema/fields.py +0 -0
  452. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/__init__.py +0 -0
  453. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/app/__init__.py +0 -0
  454. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/app/chat_stream.py +0 -0
  455. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/app/http.py +0 -0
  456. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/app/manifest.py +0 -0
  457. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/app/openai.py +0 -0
  458. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/contract/__init__.py +0 -0
  459. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/contract/errors.py +0 -0
  460. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/contract/protocol.py +0 -0
  461. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/contract/provenance.py +0 -0
  462. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/contract/responses.py +0 -0
  463. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/contract/urls.py +0 -0
  464. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/control/_canonical.py +0 -0
  465. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/deployment/__init__.py +0 -0
  466. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/deployment/adapter_check.py +0 -0
  467. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/deployment/deploy.py +0 -0
  468. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/deployment/export.py +0 -0
  469. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/deployment/preflight.py +0 -0
  470. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/deployment/readiness.py +0 -0
  471. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/deployment/resolve.py +0 -0
  472. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/__init__.py +0 -0
  473. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/common/__init__.py +0 -0
  474. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/__init__.py +0 -0
  475. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  476. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  477. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  478. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  479. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  480. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  481. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  482. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  483. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  484. {freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod → freesolo_flash_dev-1.2.120/flash/serve/request}/__init__.py +0 -0
  485. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/request/openai.py +0 -0
  486. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/request/runtime_support.py +0 -0
  487. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/request/streaming.py +0 -0
  488. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/request/thinking.py +0 -0
  489. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/request/transport.py +0 -0
  490. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/request/validation.py +0 -0
  491. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/runtime/__init__.py +0 -0
  492. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/runtime/adapters.py +0 -0
  493. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/runtime/engine.py +0 -0
  494. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/runtime/errors.py +0 -0
  495. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/runtime/multimodal.py +0 -0
  496. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/runtime/prompt.py +0 -0
  497. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/runtime/sampling.py +0 -0
  498. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/runtime/structured_outputs.py +0 -0
  499. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serve/runtime/types.py +0 -0
  500. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/__init__.py +0 -0
  501. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/__main__.py +0 -0
  502. {freesolo_flash_dev-1.2.119/flash/serve/request → freesolo_flash_dev-1.2.120/flash/server/asgi}/__init__.py +0 -0
  503. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/asgi/app.py +0 -0
  504. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/asgi/cli.py +0 -0
  505. {freesolo_flash_dev-1.2.119/flash/server/asgi → freesolo_flash_dev-1.2.120/flash/server/billing}/__init__.py +0 -0
  506. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/billing/charges.py +0 -0
  507. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/billing/retry.py +0 -0
  508. {freesolo_flash_dev-1.2.119/flash/server/billing → freesolo_flash_dev-1.2.120/flash/server/domain}/__init__.py +0 -0
  509. {freesolo_flash_dev-1.2.119/flash/server/domain → freesolo_flash_dev-1.2.120/flash/server/domain/ops}/__init__.py +0 -0
  510. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/domain/ops/reconcile.py +0 -0
  511. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/domain/ops/repo_cleanup.py +0 -0
  512. {freesolo_flash_dev-1.2.119/flash/server/domain/ops → freesolo_flash_dev-1.2.120/flash/server/domain/registry}/__init__.py +0 -0
  513. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/domain/registry/checkpoints.py +0 -0
  514. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/domain/registry/environment_registry.py +0 -0
  515. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/domain/registry/envs.py +0 -0
  516. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/domain/registry/projects.py +0 -0
  517. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/domain/registry/runs.py +0 -0
  518. {freesolo_flash_dev-1.2.119/flash/server/domain/registry → freesolo_flash_dev-1.2.120/flash/server/domain/teacher}/__init__.py +0 -0
  519. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/domain/teacher/broker.py +0 -0
  520. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/domain/teacher/errors.py +0 -0
  521. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/domain/teacher/requests.py +0 -0
  522. {freesolo_flash_dev-1.2.119/flash/server/domain/teacher → freesolo_flash_dev-1.2.120/flash/server/platform}/__init__.py +0 -0
  523. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/platform/auth.py +0 -0
  524. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/platform/db.py +0 -0
  525. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/platform/deps.py +0 -0
  526. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/platform/internal_client.py +0 -0
  527. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/platform/locks.py +0 -0
  528. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/platform/runtime.py +0 -0
  529. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/routes/__init__.py +0 -0
  530. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/routes/envs.py +0 -0
  531. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/routes/meta.py +0 -0
  532. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/routes/runs.py +0 -0
  533. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/routes/serving.py +0 -0
  534. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/routes/serving_chat.py +0 -0
  535. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/routes/serving_completion.py +0 -0
  536. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/routes/serving_revisions.py +0 -0
  537. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/routes/serving_smoke.py +0 -0
  538. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/server/routes/teacher.py +0 -0
  539. {freesolo_flash_dev-1.2.119/flash/server/platform → freesolo_flash_dev-1.2.120/flash/serving}/__init__.py +0 -0
  540. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/app/README.md +0 -0
  541. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/app/__init__.py +0 -0
  542. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/app/modal_app.py +0 -0
  543. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/__init__.py +0 -0
  544. {freesolo_flash_dev-1.2.119/flash/serving → freesolo_flash_dev-1.2.120/flash/serving/src/accounting}/__init__.py +0 -0
  545. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/accounting/usage.py +0 -0
  546. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/accounting/usage_facts.py +0 -0
  547. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/accounting/usage_outbox.py +0 -0
  548. {freesolo_flash_dev-1.2.119/flash/serving/src/accounting → freesolo_flash_dev-1.2.120/flash/serving/src/engine}/__init__.py +0 -0
  549. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/engine/boot.py +0 -0
  550. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/engine/errors.py +0 -0
  551. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/engine/generation.py +0 -0
  552. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/engine/lora_engine.py +0 -0
  553. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/engine/lora_entries.py +0 -0
  554. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/engine/model_config.py +0 -0
  555. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/engine/prequant_config.py +0 -0
  556. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/engine/support.py +0 -0
  557. {freesolo_flash_dev-1.2.119/flash/serving/src/engine → freesolo_flash_dev-1.2.120/flash/serving/src/http}/__init__.py +0 -0
  558. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/http/adapter_routes.py +0 -0
  559. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/http/body_limit.py +0 -0
  560. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/http/context.py +0 -0
  561. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/http/headers.py +0 -0
  562. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/http/inference_routes.py +0 -0
  563. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/http/router.py +0 -0
  564. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/http/routing.py +0 -0
  565. {freesolo_flash_dev-1.2.119/flash/serving/src/http → freesolo_flash_dev-1.2.120/flash/serving/src/io}/__init__.py +0 -0
  566. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/io/multimodal.py +0 -0
  567. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/io/openai_request.py +0 -0
  568. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/io/openai_stream.py +0 -0
  569. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/io/provenance.py +0 -0
  570. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/io/requests.py +0 -0
  571. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/io/responses.py +0 -0
  572. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/io/schemas.py +0 -0
  573. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/io/streaming.py +0 -0
  574. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/io/structured_outputs.py +0 -0
  575. {freesolo_flash_dev-1.2.119/flash/serving/src/io → freesolo_flash_dev-1.2.120/flash/serving/src/store}/__init__.py +0 -0
  576. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/store/access.py +0 -0
  577. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/store/lookup.py +0 -0
  578. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/store/persisted_columns.py +0 -0
  579. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/store/persistence.py +0 -0
  580. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/store/registration.py +0 -0
  581. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/store/registry.py +0 -0
  582. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/store/settings.py +0 -0
  583. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/store/supabase_rest.py +0 -0
  584. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/serving/src/store/undeploy.py +0 -0
  585. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/snapshot/__init__.py +0 -0
  586. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/snapshot/archive.py +0 -0
  587. {freesolo_flash_dev-1.2.119/flash/serving/src/store → freesolo_flash_dev-1.2.120/flash/teacher}/__init__.py +0 -0
  588. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/teacher/limits.py +0 -0
  589. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/teacher/provider_status.py +0 -0
  590. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/flash/teacher/retry_contract.py +0 -0
  591. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/scripts/build_dev_dist.py +0 -0
  592. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/scripts/check_file_size.py +0 -0
  593. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/scripts/check_function_size.py +0 -0
  594. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/scripts/check_rollout_identity_actor.py +0 -0
  595. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/scripts/check_source_layout.py +0 -0
  596. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/scripts/check_verl_pin_exists.py +0 -0
  597. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/scripts/scrub_history.sh +0 -0
  598. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/serve_launch.py +0 -0
  599. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/__init__.py +0 -0
  600. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/_helpers/__init__.py +0 -0
  601. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/_helpers/chat_provenance.py +0 -0
  602. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/_helpers/chat_transport.py +0 -0
  603. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/_helpers/managed_chat.py +0 -0
  604. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/_helpers/profile.py +0 -0
  605. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/_helpers/runner.py +0 -0
  606. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/_helpers/server_api_plugin.py +0 -0
  607. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/_helpers/source_snapshot.py +0 -0
  608. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/_helpers/specs.py +0 -0
  609. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/_helpers/teacher.py +0 -0
  610. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/_helpers/vast.py +0 -0
  611. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/capture_image_sft_processor_oracle.py +0 -0
  612. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/capture_qwen38_27b_metadata.py +0 -0
  613. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/conftest.py +0 -0
  614. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  615. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  616. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  617. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  618. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  619. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  620. {freesolo_flash_dev-1.2.119/flash/teacher → freesolo_flash_dev-1.2.120/tests/live}/__init__.py +0 -0
  621. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/live/conftest.py +0 -0
  622. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/live/test_lambda_live.py +0 -0
  623. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/live/test_runpod_live.py +0 -0
  624. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/live/test_sft_thinking_render_live.py +0 -0
  625. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/live/test_vast_live.py +0 -0
  626. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/conftest.py +0 -0
  627. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_base_model_serving.py +0 -0
  628. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_chat_auth.py +0 -0
  629. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_chat_authorizer.py +0 -0
  630. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_checkpoint_model_validation.py +0 -0
  631. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_engine_error_status.py +0 -0
  632. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_fp8_config.py +0 -0
  633. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_immutable_engine.py +0 -0
  634. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_immutable_revisions.py +0 -0
  635. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_immutable_schemas.py +0 -0
  636. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_mirror_sampling_parity.py +0 -0
  637. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_modal_deploy_identity.py +0 -0
  638. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_modal_image_paths.py +0 -0
  639. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_model_config.py +0 -0
  640. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_multimodal.py +0 -0
  641. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_openai_stream_options.py +0 -0
  642. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_per_model_gpu.py +0 -0
  643. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_persistence.py +0 -0
  644. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_pre_first_disconnect.py +0 -0
  645. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_prequant_config.py +0 -0
  646. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_registry.py +0 -0
  647. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_registry_coverage.py +0 -0
  648. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_request_body_limit.py +0 -0
  649. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_router.py +0 -0
  650. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_router_coverage.py +0 -0
  651. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_router_edge_coverage.py +0 -0
  652. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_schemas_coverage.py +0 -0
  653. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_serve_reasoning_split.py +0 -0
  654. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_serve_structured_outputs.py +0 -0
  655. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_serve_thinking.py +0 -0
  656. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_settings.py +0 -0
  657. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_structured_outputs.py +0 -0
  658. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_structured_outputs_coverage.py +0 -0
  659. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_supabase_rest_coverage.py +0 -0
  660. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_usage_outbox.py +0 -0
  661. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving/test_usage_reporter.py +0 -0
  662. {freesolo_flash_dev-1.2.119/tests/live → freesolo_flash_dev-1.2.120/tests/serving_conformance}/__init__.py +0 -0
  663. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving_conformance/conftest.py +0 -0
  664. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/serving_conformance/test_contract.py +0 -0
  665. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_accounting_coverage.py +0 -0
  666. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_adapter_shard_completeness.py +0 -0
  667. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_agent_flash_cli_contract.py +0 -0
  668. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_algorithms.py +0 -0
  669. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_allocator.py +0 -0
  670. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_backend_common.py +0 -0
  671. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_backend_jobspec_contract.py +0 -0
  672. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_bake_kernel_cache.py +0 -0
  673. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_base_model_provenance.py +0 -0
  674. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_billing_retry.py +0 -0
  675. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_build_context_contract.py +0 -0
  676. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cancel_remote.py +0 -0
  677. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_capture_qwen38_metadata.py +0 -0
  678. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_catalog_only_models.py +0 -0
  679. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_charge_pricing.py +0 -0
  680. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_chat_foundations.py +0 -0
  681. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_checkpoint_lifecycle.py +0 -0
  682. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_checkpoints.py +0 -0
  683. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_commands.py +0 -0
  684. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_commands_coverage.py +0 -0
  685. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_credential_shadowing.py +0 -0
  686. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_errors.py +0 -0
  687. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_estimate.py +0 -0
  688. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_gpus_flag.py +0 -0
  689. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_help.py +0 -0
  690. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_main_coverage.py +0 -0
  691. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_managed.py +0 -0
  692. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_render_coverage.py +0 -0
  693. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_render_theme.py +0 -0
  694. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_traces.py +0 -0
  695. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cli_wandb_warning.py +0 -0
  696. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_client.py +0 -0
  697. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_client_import_purity.py +0 -0
  698. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_client_server_integration.py +0 -0
  699. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_client_stream_reads.py +0 -0
  700. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_config_env_vars.py +0 -0
  701. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_config_overrides.py +0 -0
  702. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_console_upload.py +0 -0
  703. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_controlled_experiment_repairs.py +0 -0
  704. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cost_analytical.py +0 -0
  705. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cost_currency.py +0 -0
  706. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cost_equation.py +0 -0
  707. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cost_estimate.py +0 -0
  708. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cost_hardware.py +0 -0
  709. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_cost_models.py +0 -0
  710. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_dataset_profile.py +0 -0
  711. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_deploy_alias_move_warning.py +0 -0
  712. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_deploy_latency.py +0 -0
  713. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_dev_channel.py +0 -0
  714. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_disk_gb.py +0 -0
  715. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_endpoint_name.py +0 -0
  716. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_cache_evict.py +0 -0
  717. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_delete.py +0 -0
  718. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_download.py +0 -0
  719. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_download_api.py +0 -0
  720. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_evaluations.py +0 -0
  721. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_list_api.py +0 -0
  722. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_list_cli.py +0 -0
  723. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_list_hub.py +0 -0
  724. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_no_install.py +0 -0
  725. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_publish.py +0 -0
  726. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_pull.py +0 -0
  727. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_pull_coverage.py +0 -0
  728. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_pull_loader_coverage.py +0 -0
  729. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_pull_managed_control_plane.py +0 -0
  730. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_push.py +0 -0
  731. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_rate_limit_resolve.py +0 -0
  732. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_ref_pinning.py +0 -0
  733. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_env_test.py +0 -0
  734. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_envs_coverage.py +0 -0
  735. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_export.py +0 -0
  736. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_flash_mvp.py +0 -0
  737. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_flash_worker.py +0 -0
  738. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_flashinfer_cache_dirs.py +0 -0
  739. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_freesolo_api_transport.py +0 -0
  740. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_fused_expert_warmstart.py +0 -0
  741. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_github_urlopen_retry.py +0 -0
  742. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_gpu_type_single_field.py +0 -0
  743. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_gpus.py +0 -0
  744. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_grpo_checkpoint_durability.py +0 -0
  745. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_grpo_params.py +0 -0
  746. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_grpo_process_census.py +0 -0
  747. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_grpo_resident_sizing.py +0 -0
  748. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_grpo_reward_batching.py +0 -0
  749. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_grpo_rollout_contract.py +0 -0
  750. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_grpo_rollout_identity.py +0 -0
  751. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_health_liveness.py +0 -0
  752. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_hf_retry.py +0 -0
  753. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_idle_endpoint_reaper.py +0 -0
  754. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_image_environment_capability.py +0 -0
  755. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_image_incremental_processor.py +0 -0
  756. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_image_sft_markers.py +0 -0
  757. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_image_sft_processor_parity.py +0 -0
  758. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_image_tokens.py +0 -0
  759. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_infisical_secrets.py +0 -0
  760. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_instance_bootstrap_coverage.py +0 -0
  761. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_internal_client.py +0 -0
  762. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_jobs.py +0 -0
  763. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_kernel_cache.py +0 -0
  764. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_kernel_fingerprint.py +0 -0
  765. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_kv_util.py +0 -0
  766. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_lambda_api_coverage.py +0 -0
  767. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_lambda_runner.py +0 -0
  768. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_logging.py +0 -0
  769. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_login_perms.py +0 -0
  770. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_lora_rank_coverage.py +0 -0
  771. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_lora_rank_nested_rung.py +0 -0
  772. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_lora_targeting.py +0 -0
  773. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_lora_targeting_pinned_verl.py +0 -0
  774. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_managed_config_fields.py +0 -0
  775. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_managed_hf_repo.py +0 -0
  776. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_metrics_schema_agent_contract.py +0 -0
  777. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_mig_guard.py +0 -0
  778. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_mirror_sampling_parity.py +0 -0
  779. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_multi_gpu_gate.py +0 -0
  780. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_multimodal_training.py +0 -0
  781. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_named_reward_metrics.py +0 -0
  782. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_oom_escalate_gpu.py +0 -0
  783. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_opd.py +0 -0
  784. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_opd_limits.py +0 -0
  785. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  786. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_opd_multiturn_failure_exit.py +0 -0
  787. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_opd_replay_guard.py +0 -0
  788. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_opd_resume_safety.py +0 -0
  789. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_opd_train.py +0 -0
  790. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_orchestrator_flash.py +0 -0
  791. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_packing.py +0 -0
  792. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_packing_coverage.py +0 -0
  793. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_parasail_teacher.py +0 -0
  794. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_persisted_spec_envelope.py +0 -0
  795. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_poll_helpers.py +0 -0
  796. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_preflight.py +0 -0
  797. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_projects.py +0 -0
  798. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_prompt_budget.py +0 -0
  799. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_provider_preflight_coverage.py +0 -0
  800. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_provider_routing.py +0 -0
  801. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_provider_teardown_robustness.py +0 -0
  802. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_providers_symmetry.py +0 -0
  803. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_realized_cost.py +0 -0
  804. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_repo_cleanup.py +0 -0
  805. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_resolve_params_b.py +0 -0
  806. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_resume_on_retry.py +0 -0
  807. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_rl_train.py +0 -0
  808. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_rollout_samples.py +0 -0
  809. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_runmgmt.py +0 -0
  810. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_runpod_api_delete.py +0 -0
  811. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_runpod_key_fingerprint.py +0 -0
  812. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_runpod_key_waterfall.py +0 -0
  813. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_runtime_capsule.py +0 -0
  814. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve.py +0 -0
  815. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_app_materialize.py +0 -0
  816. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_app_packaging.py +0 -0
  817. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_chat_transport.py +0 -0
  818. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  819. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_modal_teardown_identity.py +0 -0
  820. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_reasoning_content.py +0 -0
  821. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_resolve_provenance.py +0 -0
  822. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_runtime_adapters.py +0 -0
  823. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_runtime_engine.py +0 -0
  824. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_runtime_package.py +0 -0
  825. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serve_runtime_types.py +0 -0
  826. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_api.py +0 -0
  827. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_app_coverage.py +0 -0
  828. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_auth_singleflight.py +0 -0
  829. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_billing.py +0 -0
  830. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_checkpoints_coverage.py +0 -0
  831. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_db.py +0 -0
  832. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_envs_coverage.py +0 -0
  833. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_locks_coverage.py +0 -0
  834. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_managed_chat_requests.py +0 -0
  835. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_managed_chat_revisions.py +0 -0
  836. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_server_standalone.py +0 -0
  837. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serving_conformance_gate.py +0 -0
  838. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serving_contract.py +0 -0
  839. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_serving_schema_coverage.py +0 -0
  840. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_sft_chunked_nll.py +0 -0
  841. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_sft_example_selection.py +0 -0
  842. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_sft_gc_off.py +0 -0
  843. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_sft_max_context.py +0 -0
  844. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_sft_step_floor.py +0 -0
  845. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_sft_train.py +0 -0
  846. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_sft_workload.py +0 -0
  847. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_source_attestation_flow.py +0 -0
  848. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_source_layout.py +0 -0
  849. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_source_snapshot.py +0 -0
  850. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_spec_contract_bytes.py +0 -0
  851. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_staged_environment.py +0 -0
  852. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_step_floor.py +0 -0
  853. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_step_metrics.py +0 -0
  854. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_step_timing.py +0 -0
  855. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_structured_outputs.py +0 -0
  856. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_teacher_broker.py +0 -0
  857. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_teacher_encoding_contract.py +0 -0
  858. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_terminal_artifacts.py +0 -0
  859. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_thinking_config.py +0 -0
  860. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_training_controls.py +0 -0
  861. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_type_comment_prose.py +0 -0
  862. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_vast_api.py +0 -0
  863. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_vast_api_coverage.py +0 -0
  864. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_vast_offers.py +0 -0
  865. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_vast_provider_coverage.py +0 -0
  866. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_vast_runner.py +0 -0
  867. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_verified_revisions.py +0 -0
  868. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_verifiers.py +0 -0
  869. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_verl_checkpoint_export.py +0 -0
  870. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_verl_child_plugins.py +0 -0
  871. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_verl_silence_watchdog.py +0 -0
  872. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_version.py +0 -0
  873. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  874. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_vllm_moe_lora_backport.py +0 -0
  875. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_vram_architecture.py +0 -0
  876. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_wandb_link.py +0 -0
  877. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_wandb_naming.py +0 -0
  878. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_warmstart_adapter_download.py +0 -0
  879. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_warmstart_cross_repo.py +0 -0
  880. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_warmstart_error_attribution.py +0 -0
  881. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_warmstart_image_adapters.py +0 -0
  882. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_weight_cache.py +0 -0
  883. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_worker_dryrun.py +0 -0
  884. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_worker_hardexit.py +0 -0
  885. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_worker_image.py +0 -0
  886. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_worker_init_heartbeat.py +0 -0
  887. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_worker_stack.py +0 -0
  888. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_worker_thinking.py +0 -0
  889. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_workflow_contracts.py +0 -0
  890. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_workload_profile.py +0 -0
  891. {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.120}/tests/test_zero2_sharding_gate.py +0 -0
@@ -25,13 +25,23 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
25
25
 
26
26
  ### Changed
27
27
 
28
- - Active training and hosted serving now expose exactly `Qwen/Qwen3.5-9B`,
29
- `Qwen/Qwen3.8-27B`, and `Qwen/Qwen3.6-35B-A3B`. Qwen3.8 uses the immutable BF16 revision
28
+ - Active training now exposes exactly `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
29
+ `Qwen/Qwen3.6-35B-A3B`. Hosted serving remains active for 9B and 35B-A3B; hosted Qwen3.8 27B
30
+ remains inactive. Qwen3.8 uses the immutable BF16 revision
30
31
  `1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0` and official native block-FP8 serving revision
31
- `017b9c7af6b5689d5dd426a76e0bc077eb5ca20a`. The Qwen3.5 0.8B, 2B, and 4B tiers and
32
+ `017b9c7af6b5689d5dd426a76e0bc077eb5ca20a`, with the logical base and tokenizer provenance kept
33
+ distinct from the served checkpoint. The Qwen3.5 0.8B, 2B, and 4B tiers and
32
34
  `Qwen/Qwen3.6-27B` cannot activate, while historical status, accepted billing retry,
33
35
  cancellation, cleanup, hosted revocation, and exact identity-based undeploy remain available.
34
- Qwen3.6 27B adapters are not compatible with Qwen3.8. Customer-owned serving remains 9B-only.
36
+ Qwen3.6 27B adapters are not compatible with Qwen3.8.
37
+ - Customer-owned serving is now Modal-only and requires explicit `--provider modal`. Modal remains
38
+ live-qualified for all three active models. The 27B and 35B-A3B qualifications stay bound to the
39
+ exact certified serving image digest. Each deployment still serves one exact base model. The 27B
40
+ engine keeps its `H100!` placement and distinct served checkpoint and tokenizer provenance. The
41
+ 35B-A3B engine keeps its H200, BF16, FP8 KV, 32K context, eight-sequence, 4096 batched-token, and
42
+ six rank-64 LoRA-slot contract. Customer-serving RunPod commands, profiles, identities, and
43
+ lifecycle code are removed without a compatibility or teardown shim. Managed RunPod training,
44
+ serverless workers, dependencies, provider routing, artifacts, and caching are unchanged.
35
45
  - `[train] init_from_adapter` now works for every source/target algorithm pair. SFT was rejected as
36
46
  a warm-start target, so an adapter could be continued only by GRPO or OPD; that restriction
37
47
  described the retired trl SFT backend, and the verl backend that replaced it loads a warm-start
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.2.119
3
+ Version: 1.2.120
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
@@ -116,10 +116,10 @@ point of use; install it with `pip install freesolo`.
116
116
 
117
117
  Two components stay Freesolo-operated and are **not** in this repository:
118
118
 
119
- | Component | Where it lives | Self-hosted equivalent |
120
- | ------------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- |
121
- | Multi-tenant identity | `api.freesolo.co`; verifies keys and owns projects/orgs | `FLASH_STANDALONE=1` runs single-tenant on your own key |
122
- | Hosted Multi-LoRA serving | `serve.freesolo.co`, deployed from `flash/serving/`; `flash/serve/` owns the client and shared runtime | `flash serve deploy` provisions serving in your own Modal or RunPod account |
119
+ | Component | Where it lives | Self-hosted equivalent |
120
+ | ------------------------- | ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- |
121
+ | Multi-tenant identity | `api.freesolo.co`; verifies keys and owns projects/orgs | `FLASH_STANDALONE=1` runs single-tenant on your own key |
122
+ | Hosted Multi-LoRA serving | `serve.freesolo.co`, deployed from `flash/serving/`; `flash/serve/` owns the client and shared runtime | `flash serve deploy` provisions serving in your own Modal account |
123
123
 
124
124
  So there are three ways to use Flash: against the **hosted service**, **self-hosted** against
125
125
  your own GPU accounts, or as **training and provider code to read and modify**. The training
@@ -127,9 +127,13 @@ path is self-hostable end to end — see **[SELF_HOSTING.md](SELF_HOSTING.md)**.
127
127
 
128
128
  ## Using the hosted service
129
129
 
130
- The active training and hosted-serving catalog is `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
131
- `Qwen/Qwen3.6-35B-A3B`. The retired dense Qwen3.6 27B identity is never translated into Qwen3.8,
132
- and customer-owned Modal or RunPod serving remains limited to Qwen3.5 9B.
130
+ The active training catalog is `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
131
+ `Qwen/Qwen3.6-35B-A3B`. Hosted serving is active for 9B and 35B-A3B; hosted Qwen3.8 27B remains
132
+ inactive. The retired dense Qwen3.6 27B identity is never translated into Qwen3.8. Customer-owned
133
+ Modal supports all three active models; 27B and 35B-A3B are bound to the certified serving image
134
+ digest. Customer-owned `flash serve` requires explicit `--provider modal`. Customer-serving RunPod
135
+ commands and deployment identities are unsupported, with no migration or teardown shim. Managed
136
+ RunPod training remains supported and unchanged.
133
137
 
134
138
  `flash login` is not interactive. Export `FREESOLO_API_KEY` first so the key does not appear in process listings:
135
139
 
@@ -305,8 +309,10 @@ External bearer tokens are rejected rather than accepted unverified. A standalon
305
309
  **single-tenant** — whoever holds that key can spend your GPU budget, so keep it off
306
310
  untrusted networks. See [the security model](SELF_HOSTING.md#the-security-model).
307
311
 
308
- `flash serve deploy` provisions serving in your own Modal or RunPod account, implementing the
309
- same contract `flash/serve/` speaks; [docs/serving-contract.md](docs/serving-contract.md)
312
+ `flash serve deploy` provisions serving in your own Modal account and requires explicit
313
+ `--provider modal`. Each deployment owns one exact base model and its compatible adapters; another
314
+ base model requires another deployment. Customer-serving RunPod identities are unsupported.
315
+ It implements the same contract `flash/serve/` speaks; [docs/serving-contract.md](docs/serving-contract.md)
310
316
  documents it if you would rather write your own.
311
317
 
312
318
  The GPU worker image is public and published under an explicit CUDA tag, not `latest`:
@@ -33,10 +33,10 @@ point of use; install it with `pip install freesolo`.
33
33
 
34
34
  Two components stay Freesolo-operated and are **not** in this repository:
35
35
 
36
- | Component | Where it lives | Self-hosted equivalent |
37
- | ------------------------- | ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- |
38
- | Multi-tenant identity | `api.freesolo.co`; verifies keys and owns projects/orgs | `FLASH_STANDALONE=1` runs single-tenant on your own key |
39
- | Hosted Multi-LoRA serving | `serve.freesolo.co`, deployed from `flash/serving/`; `flash/serve/` owns the client and shared runtime | `flash serve deploy` provisions serving in your own Modal or RunPod account |
36
+ | Component | Where it lives | Self-hosted equivalent |
37
+ | ------------------------- | ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- |
38
+ | Multi-tenant identity | `api.freesolo.co`; verifies keys and owns projects/orgs | `FLASH_STANDALONE=1` runs single-tenant on your own key |
39
+ | Hosted Multi-LoRA serving | `serve.freesolo.co`, deployed from `flash/serving/`; `flash/serve/` owns the client and shared runtime | `flash serve deploy` provisions serving in your own Modal account |
40
40
 
41
41
  So there are three ways to use Flash: against the **hosted service**, **self-hosted** against
42
42
  your own GPU accounts, or as **training and provider code to read and modify**. The training
@@ -44,9 +44,13 @@ path is self-hostable end to end — see **[SELF_HOSTING.md](SELF_HOSTING.md)**.
44
44
 
45
45
  ## Using the hosted service
46
46
 
47
- The active training and hosted-serving catalog is `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
48
- `Qwen/Qwen3.6-35B-A3B`. The retired dense Qwen3.6 27B identity is never translated into Qwen3.8,
49
- and customer-owned Modal or RunPod serving remains limited to Qwen3.5 9B.
47
+ The active training catalog is `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
48
+ `Qwen/Qwen3.6-35B-A3B`. Hosted serving is active for 9B and 35B-A3B; hosted Qwen3.8 27B remains
49
+ inactive. The retired dense Qwen3.6 27B identity is never translated into Qwen3.8. Customer-owned
50
+ Modal supports all three active models; 27B and 35B-A3B are bound to the certified serving image
51
+ digest. Customer-owned `flash serve` requires explicit `--provider modal`. Customer-serving RunPod
52
+ commands and deployment identities are unsupported, with no migration or teardown shim. Managed
53
+ RunPod training remains supported and unchanged.
50
54
 
51
55
  `flash login` is not interactive. Export `FREESOLO_API_KEY` first so the key does not appear in process listings:
52
56
 
@@ -222,8 +226,10 @@ External bearer tokens are rejected rather than accepted unverified. A standalon
222
226
  **single-tenant** — whoever holds that key can spend your GPU budget, so keep it off
223
227
  untrusted networks. See [the security model](SELF_HOSTING.md#the-security-model).
224
228
 
225
- `flash serve deploy` provisions serving in your own Modal or RunPod account, implementing the
226
- same contract `flash/serve/` speaks; [docs/serving-contract.md](docs/serving-contract.md)
229
+ `flash serve deploy` provisions serving in your own Modal account and requires explicit
230
+ `--provider modal`. Each deployment owns one exact base model and its compatible adapters; another
231
+ base model requires another deployment. Customer-serving RunPod identities are unsupported.
232
+ It implements the same contract `flash/serve/` speaks; [docs/serving-contract.md](docs/serving-contract.md)
227
233
  documents it if you would rather write your own.
228
234
 
229
235
  The GPU worker image is public and published under an explicit CUDA tag, not `latest`:
@@ -22,9 +22,11 @@ Two credentials and at least one GPU account:
22
22
 
23
23
  Everything else is optional.
24
24
 
25
- The active training catalog is Qwen3.5 9B, Qwen3.8 27B, and Qwen3.6 35B-A3B. Customer-owned
26
- serving through `flash serve deploy` remains Qwen3.5 9B-only; the hosted 27B profile is not a
27
- customer-provider placement contract.
25
+ The active training catalog is Qwen3.5 9B, Qwen3.8 27B, and Qwen3.6 35B-A3B. Hosted Qwen3.8
26
+ 27B remains inactive. Customer-owned Modal supports all three models; 27B and 35B-A3B are bound to
27
+ the certified serving image digest. Customer-owned `flash serve` requires explicit
28
+ `--provider modal`. Customer-serving RunPod commands and identities are unsupported, with no
29
+ migration or teardown shim. Managed RunPod training remains supported and unchanged.
28
30
 
29
31
  ## Quickstart
30
32
 
@@ -363,10 +365,23 @@ without `FLASH_STANDALONE` and set `FREESOLO_BASE_URL` to point at it.
363
365
 
364
366
  ## Serving
365
367
 
366
- `flash serve deploy` provisions serving in **your own** Modal or RunPod account, running the
367
- published worker image against one base model and one run's adapter. Training and export remain
368
- independent of serving. Catalog serving checkpoint repositories are informational only and are never
369
- resolved by the training path.
368
+ `flash serve deploy` provisions serving in **your own** Modal account, running the published worker
369
+ image against one exact base model and that model's compatible adapters. A separate deployment is
370
+ required for each base model. Training and export remain independent of serving. The required
371
+ provider argument has the sole accepted value `--provider modal`.
372
+ Catalog serving checkpoint repositories are informational only and are never resolved by the
373
+ training path.
374
+
375
+ Customer-owned Modal is live-qualified for Qwen3.5 9B, Qwen3.8 27B, and Qwen3.6 35B-A3B. The 27B
376
+ and 35B-A3B qualifications are bound to the certified serving image digest. The 27B engine runs on
377
+ `H100!` and serves the pinned `Qwen/Qwen3.8-27B-FP8` checkpoint while retaining
378
+ `Qwen/Qwen3.8-27B` as its logical base and tokenizer provenance. The 35B-A3B engine serves the BF16
379
+ model on one H200 with FP8 KV cache, a 32K context, eight sequences, a 4096 batched-token cap, and
380
+ six rank-64 LoRA slots.
381
+ Customer-serving RunPod lifecycle commands and deployment identities are unsupported. There is no
382
+ migration, status, undeploy, or teardown shim for an old RunPod identity. This does not affect the
383
+ managed RunPod training provider, serverless workers, artifact caching, or `RUNPOD_API_KEY` used by
384
+ the training control plane.
370
385
 
371
386
  ```bash
372
387
  # the `server` extra, not the bare install: `serve deploy` resolves the adapter through
@@ -392,31 +407,9 @@ flash serve deploy \
392
407
  --modal-region us-east
393
408
  ```
394
409
 
395
- The three `--modal-*` placement flags are required for `--provider modal` even though `--help`
396
- lists them as optional: they are optional to _argparse_ because RunPod takes its own pair instead,
397
- and `placement_for` is what requires exactly one provider's set. Omitting them exits with
398
- `modal placement requires environment, region, workspace_name`.
399
-
400
- For RunPod, export `RUNPOD_API_KEY` instead and swap the placement flags rather than adding to
401
- them -- `placement_for` rejects the other provider's inputs instead of ignoring them, so keeping
402
- `--modal-*` alongside `--provider runpod` fails before anything is created:
403
-
404
- ```bash
405
- flash serve deploy \
406
- --provider runpod \
407
- --model Qwen/Qwen3.5-9B \
408
- --run <run-id> \
409
- --deployment-id my-9b-serving \
410
- --image ghcr.io/freesolo-co/freesolo-flash-serve@sha256:<digest> \
411
- --artifact-repo <hub-repo> \
412
- --artifact-subfolder <path-within-repo> \
413
- --lora-rank 32 \
414
- --runpod-account <your-account-id> \
415
- --runpod-data-center <data-center-id>
416
- ```
417
-
418
- Both `--runpod-*` flags are required and must be nonempty, for the same reason the `--modal-*`
419
- trio is: `--help` lists them as optional only because each provider takes its own set.
410
+ The three `--modal-*` placement flags are required for `--provider modal`. Omitting them exits with
411
+ `modal placement requires environment, region, workspace_name`. Passing `--provider runpod` is
412
+ rejected by argument parsing before Hub resolution, credential reads, or provider access.
420
413
 
421
414
  Provider credentials are read from the process environment for the duration of a single call and are
422
415
  never written to the deployment record, logs, or command arguments — so any later resize or teardown
@@ -3,10 +3,23 @@
3
3
  `flash models deploy`, `chat`, and `undeploy` use an HTTP serving backend. `flash/serve/` owns the
4
4
  client, shared runtime, and customer-owned provider deployment. Freesolo's hosted backend
5
5
  (`flash/serving/`) is another implementation of this contract.
6
- A deployment serves one base model and its LoRA adapters. Use `flash serve deploy` to provision one
7
- in your own Modal or RunPod account, or implement these endpoints and run the conformance suite
8
- below. The maintained customer-owned profile supports only `Qwen/Qwen3.5-9B`; Qwen3.6 27B is
9
- retired and Qwen3.8 27B is available only through the separately managed hosted-serving catalog.
6
+ A deployment serves one exact base model and its compatible LoRA adapters. A different base model
7
+ requires a separate deployment. Use `flash serve deploy --provider modal` to provision one in your
8
+ own Modal account, or implement these endpoints and run the conformance suite below.
9
+
10
+ Customer-owned Modal is live-qualified for `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
11
+ `Qwen/Qwen3.6-35B-A3B`. The 27B and 35B-A3B qualifications are bound to the exact certified serving
12
+ image digest; another digest remains available for offline planning but cannot allocate Modal.
13
+ Hosted Qwen3.8 27B remains inactive. Its customer-owned engine runs on
14
+ `H100!` and serves the pinned `Qwen/Qwen3.8-27B-FP8` checkpoint while preserving
15
+ `Qwen/Qwen3.8-27B` as the distinct logical base and tokenizer provenance. The 35B-A3B engine serves
16
+ BF16 weights on one H200 with FP8 KV cache,
17
+ a 32K context, eight sequences, a 4096 batched-token cap, and six rank-64 LoRA slots.
18
+
19
+ Customer-owned `flash serve` is Modal-only and requires the explicit provider argument. Historical
20
+ customer-serving RunPod deployment identities are unsupported, with no migration, status, undeploy,
21
+ or teardown shim. Managed RunPod training remains supported and unchanged. Retired Qwen3.6 27B is
22
+ never translated into Qwen3.8 27B.
10
23
 
11
24
  ## Identity model
12
25
 
@@ -0,0 +1,284 @@
1
+ """provision one exact deployment in the user's own modal account.
2
+
3
+ Provider credentials are read from the process environment for the duration of one call and wrapped
4
+ in the request-scoped credential boundary. They are never accepted as arguments, written anywhere,
5
+ or logged. Provider failures surface as sanitized codes rather than raw responses.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import os
11
+ import sys
12
+ import time
13
+
14
+ from flash.serve.control import ModalCredentials
15
+ from flash.serve.provisioning import (
16
+ FreshDeploymentArtifactTokenRequired,
17
+ InterruptedProvisioning,
18
+ )
19
+
20
+ MODAL_TOKEN_ID_ENV = "MODAL_TOKEN_ID"
21
+ MODAL_TOKEN_SECRET_ENV = "MODAL_TOKEN_SECRET"
22
+ # the serving app authenticates callers with this. a provider endpoint url is public, so without
23
+ # it anyone who finds the url can load adapters and spend the customer's gpu budget.
24
+ INFERENCE_KEY_ENV = "FLASH_SERVING_KEY"
25
+ # the container hydrates its adapter from the hub itself, so it needs the same read token the
26
+ # control plane used to resolve that adapter. an artifact repo is private by default, and without
27
+ # this the launcher reaches `_prepare_cache` with nothing to authenticate as and dies after the
28
+ # provider has already created and started billing for every resource.
29
+ ARTIFACT_TOKEN_ENV = "HF_TOKEN"
30
+
31
+
32
+ def _err(message: str) -> int:
33
+ print(f"error: {message}", file=sys.stderr)
34
+ return 1
35
+
36
+
37
+ def _required_env(name: str) -> str:
38
+ value = os.environ.get(name, "").strip()
39
+ if not value:
40
+ raise ValueError(f"{name} is not set")
41
+ return value
42
+
43
+
44
+ def _optional_env(name: str) -> str | None:
45
+ """read a token that is genuinely optional, mapping unset and blank alike to absence."""
46
+
47
+ return os.environ.get(name, "").strip() or None
48
+
49
+
50
+ def _require_modal_provider(provider: object) -> None:
51
+ if provider != "modal":
52
+ raise ValueError("provider must be modal")
53
+
54
+
55
+ def _credentials() -> ModalCredentials:
56
+ """build request-scoped modal credentials from the environment."""
57
+
58
+ return ModalCredentials(
59
+ token_id=_required_env(MODAL_TOKEN_ID_ENV),
60
+ token_secret=_required_env(MODAL_TOKEN_SECRET_ENV),
61
+ )
62
+
63
+
64
+ def _image(reference: str):
65
+ from flash.serve.provisioning import ServingImage
66
+
67
+ if "@" not in reference:
68
+ raise ValueError(
69
+ "the serving image must be digest-qualified (name@sha256:...). a tag can be moved "
70
+ "to different content after the deployment is recorded"
71
+ )
72
+ _, digest = reference.rsplit("@", 1)
73
+ return ServingImage(reference=reference, digest=digest)
74
+
75
+
76
+ def _report_handle(handle, *, endpoint: bool = True) -> None:
77
+ """print only sanitized provider identity, never request credentials."""
78
+
79
+ if endpoint:
80
+ print(f"endpoint {handle.public_url}")
81
+ print(f"app id {handle.app_id}")
82
+ print(f"volume id {handle.volume_id}")
83
+ print(f"secret id {handle.inference_secret_id}")
84
+
85
+
86
+ def _report(result, bundle) -> int:
87
+ print(f"deployment {result.deployment_id} generation {result.generation}")
88
+ print(f"provider {result.provider}")
89
+ print(f"engine {result.engine_id}")
90
+ print(f"image {result.image_digest}")
91
+ print(f"status {result.status}")
92
+ handle = result.handle
93
+ if handle is not None:
94
+ _report_handle(handle)
95
+ _report_identity(bundle)
96
+ if result.status == "ready":
97
+ return 0
98
+ if result.error_code:
99
+ print(f"error {result.error_code}", file=sys.stderr)
100
+ if result.error_reason:
101
+ print(f"reason {result.error_reason}", file=sys.stderr)
102
+ if str(result.error_reason or "").startswith("artifact_cleanup_") and handle is not None:
103
+ # every artifact-cleanup reason is raised after readiness proved, so the provider resource
104
+ # is live and billing whatever the status says.
105
+ print(
106
+ f"\nthe service reached readiness on app {handle.app_id}, but artifact cleanup did not "
107
+ "settle. the app is live and billing. run `flash serve status` to inspect the "
108
+ "deployment, then `flash serve undeploy` to stop it billing if you do not want it.",
109
+ file=sys.stderr,
110
+ )
111
+ elif result.status == "outcome_unknown":
112
+ # the provider may or may not hold live resources. saying "failed" here would invite a
113
+ # retry that double-provisions and bills twice.
114
+ print(
115
+ "\nthe provider outcome could not be confirmed. resources may exist; run `flash serve "
116
+ "status` to inspect them, then `flash serve undeploy` to stop them billing before "
117
+ "retrying rather than provisioning again.",
118
+ file=sys.stderr,
119
+ )
120
+ return 1
121
+
122
+
123
+ def _report_identity(bundle) -> None:
124
+ """print recovery identity without replacing the reported outcome if encoding fails."""
125
+
126
+ try:
127
+ from flash.cli.commands.serving.identity import encode_deployment_identity
128
+
129
+ print(f"identity {encode_deployment_identity(bundle)}")
130
+ except Exception:
131
+ return
132
+
133
+
134
+ def _build_provider_plan(bundle):
135
+ """return the validated modal plan without contacting the provider."""
136
+
137
+ from flash.serve.provisioning.modal.planning.plan import build_modal_create_plan
138
+
139
+ return build_modal_create_plan(bundle, phase="finalized")
140
+
141
+
142
+ def _runtime_secrets():
143
+ """build request-scoped endpoint secrets from the environment."""
144
+
145
+ from flash.serve.provisioning import ServingRuntimeSecrets
146
+
147
+ return ServingRuntimeSecrets(
148
+ inference_token=_required_env(INFERENCE_KEY_ENV),
149
+ artifact_token=_optional_env(ARTIFACT_TOKEN_ENV),
150
+ )
151
+
152
+
153
+ def _deployment_bundle(args):
154
+ """build the exact immutable modal deployment input shared by lifecycle commands."""
155
+
156
+ from flash.serve.control import DeploymentRequest
157
+ from flash.serve.deployment.profiles import get_profile, placement_for
158
+ from flash.serve.deployment.resolve import (
159
+ execution_inputs,
160
+ resolve_adapter,
161
+ resolve_base_revision,
162
+ )
163
+ from flash.server.domain.ops.serving_resources import resolve_deployment_bundle
164
+
165
+ _require_modal_provider(args.provider)
166
+ profile = get_profile(args.model)
167
+ image = _image(args.image)
168
+ placement = placement_for(
169
+ profile,
170
+ args.provider,
171
+ workspace_name=getattr(args, "modal_workspace", "") or "",
172
+ environment=getattr(args, "modal_environment", "") or "",
173
+ region=getattr(args, "modal_region", "") or "",
174
+ # "" means the no-suffix environment, which is a real modal configuration.
175
+ web_suffix=(getattr(args, "modal_web_suffix", "") or "") or None,
176
+ )
177
+ logical_base_revision = resolve_base_revision(args.model)
178
+ resolved = resolve_adapter(
179
+ run_id=args.run,
180
+ artifact_repo_id=args.artifact_repo,
181
+ artifact_subfolder=args.artifact_subfolder,
182
+ artifact_repo_type=getattr(args, "artifact_repo_type", "dataset"),
183
+ base_model=args.model,
184
+ base_model_revision=logical_base_revision,
185
+ lora_rank=args.lora_rank,
186
+ checkpoint_step=getattr(args, "checkpoint_step", None),
187
+ thinking_default=bool(getattr(args, "thinking", False)),
188
+ )
189
+ logical_base_revision = resolved.adapter.base_model_revision
190
+ if profile.served_model == args.model:
191
+ model_revision = logical_base_revision
192
+ elif profile.served_model_revision is not None:
193
+ model_revision = profile.served_model_revision
194
+ else:
195
+ model_revision = resolve_base_revision(profile.served_model)
196
+
197
+ if profile.tokenizer_model == profile.served_model:
198
+ tokenizer_revision = model_revision
199
+ elif profile.tokenizer_model == args.model:
200
+ tokenizer_revision = logical_base_revision
201
+ else:
202
+ tokenizer_revision = resolve_base_revision(profile.tokenizer_model)
203
+
204
+ engine = profile.engine(
205
+ model_revision=model_revision,
206
+ tokenizer_revision=tokenizer_revision,
207
+ image=image,
208
+ )
209
+ request = DeploymentRequest(
210
+ deployment_id=args.deployment_id,
211
+ generation=args.generation,
212
+ provider=args.provider,
213
+ placement=placement,
214
+ engine=engine,
215
+ adapters=(resolved.adapter,),
216
+ )
217
+ return resolve_deployment_bundle(
218
+ request,
219
+ execution_inputs(profile, image, (resolved,)),
220
+ image,
221
+ )
222
+
223
+
224
+ def cmd_serve_deploy(args) -> int:
225
+ try:
226
+ _require_modal_provider(args.provider)
227
+ if not getattr(args, "dry_run", False):
228
+ from flash.serve.deployment.profiles import get_profile, require_live_qualification
229
+
230
+ image = _image(args.image)
231
+ require_live_qualification(get_profile(args.model), args.provider, image.digest)
232
+ bundle = _deployment_bundle(args)
233
+ except (ValueError, TypeError) as exc:
234
+ return _err(str(exc))
235
+
236
+ from flash.server.domain.ops.serving_resources import dry_run_deployment
237
+
238
+ try:
239
+ # validate the provider-specific hostname contract on both dry-run and allocation paths.
240
+ _build_provider_plan(bundle)
241
+ except (ValueError, TypeError) as exc:
242
+ return _err(str(exc))
243
+
244
+ if getattr(args, "dry_run", False):
245
+ for key, value in dry_run_deployment(bundle).items():
246
+ print(f"{key:18} {value}")
247
+ print("\ndry run: no provider was contacted and nothing was provisioned.")
248
+ return 0
249
+
250
+ try:
251
+ credentials = _credentials()
252
+ runtime_secrets = _runtime_secrets()
253
+ except ValueError as exc:
254
+ return _err(
255
+ f"{exc}. provider credentials are read from the environment for this one request "
256
+ "and are never stored"
257
+ )
258
+
259
+ deadline_at = time.monotonic() + float(args.timeout)
260
+ try:
261
+ from flash.serve.provisioning.modal.execution.operations import provision_modal_deployment
262
+
263
+ result = provision_modal_deployment(
264
+ bundle, credentials, runtime_secrets, deadline_at=deadline_at
265
+ )
266
+ except FreshDeploymentArtifactTokenRequired as exc:
267
+ return _err(f"{ARTIFACT_TOKEN_ENV} is not set. {exc}")
268
+ except InterruptedProvisioning:
269
+ # the interrupt still propagates, but first report the exact identity and billing ambiguity.
270
+ _report_identity(bundle)
271
+ _warn_unconfirmed_cleanup(args.deployment_id)
272
+ raise
273
+ return _report(result, bundle)
274
+
275
+
276
+ def _warn_unconfirmed_cleanup(deployment_id: str) -> None:
277
+ """say what ctrl-c actually left behind before the generic handler says aborted."""
278
+
279
+ print(
280
+ f"\nwarning: interrupted before ready, and modal cleanup could not be confirmed for "
281
+ f"{deployment_id}. resources may still exist and bill; run `flash serve status` to inspect "
282
+ "them, then `flash serve undeploy` before retrying rather than provisioning again.",
283
+ file=sys.stderr,
284
+ )
@@ -1,9 +1,9 @@
1
1
  """portable immutable identity for existing customer-owned serving deployments.
2
2
 
3
- The provider plans validate more than deterministic resource names: Modal binds the exact manifest
4
- and spec into app tags, while RunPod binds image and placement topology into observed resources.
5
- Re-resolving mutable Hub repositories is therefore neither sufficient nor necessary for status or
6
- teardown. This codec carries the already-resolved, credential-free bundle without persisting it.
3
+ The Modal plan validates more than deterministic resource names: it binds the exact manifest and
4
+ spec into app tags. Re-resolving mutable Hub repositories is therefore neither sufficient nor
5
+ necessary for status or teardown. This codec carries the already-resolved, credential-free bundle
6
+ without persisting it.
7
7
  """
8
8
 
9
9
  from __future__ import annotations
@@ -23,27 +23,18 @@ _BASE64URL_RE = re.compile(r"[A-Za-z0-9_-]+")
23
23
 
24
24
 
25
25
  def _placement_payload(placement) -> dict[str, object]:
26
- from flash.serve.control import ModalPlacement, RunPodPlacement
27
-
28
- if type(placement) is ModalPlacement:
29
- return {
30
- "environment": placement.environment,
31
- "gpu": placement.gpu,
32
- "gpu_count": placement.gpu_count,
33
- "region": placement.region,
34
- "web_suffix": placement.web_suffix,
35
- "workspace_name": placement.workspace_name,
36
- }
37
- if type(placement) is RunPodPlacement:
38
- return {
39
- "account_id": placement.account_id,
40
- "container_disk_gb": placement.container_disk_gb,
41
- "data_center_id": placement.data_center_id,
42
- "gpu_count": placement.gpu_count,
43
- "gpu_type_id": placement.gpu_type_id,
44
- "volume_size_gb": placement.volume_size_gb,
45
- }
46
- raise TypeError("deployment identity requires an exact provider placement")
26
+ from flash.serve.control import ModalPlacement
27
+
28
+ if type(placement) is not ModalPlacement:
29
+ raise TypeError("deployment identity requires an exact ModalPlacement")
30
+ return {
31
+ "environment": placement.environment,
32
+ "gpu": placement.gpu,
33
+ "gpu_count": placement.gpu_count,
34
+ "region": placement.region,
35
+ "web_suffix": placement.web_suffix,
36
+ "workspace_name": placement.workspace_name,
37
+ }
47
38
 
48
39
 
49
40
  def encode_deployment_identity(bundle) -> str:
@@ -120,31 +111,17 @@ def _exact_keys(value: Mapping[str, object], expected: set[str], name: str) -> N
120
111
 
121
112
 
122
113
  def _placement(provider: object, value: object):
123
- from flash.serve.control import ModalPlacement, RunPodPlacement
114
+ from flash.serve.control import ModalPlacement
124
115
 
116
+ if provider != "modal":
117
+ raise ValueError("deployment identity provider must be modal")
125
118
  payload = _mapping(value, "placement")
126
- if provider == "modal":
127
- _exact_keys(
128
- payload,
129
- {"environment", "gpu", "gpu_count", "region", "web_suffix", "workspace_name"},
130
- "modal placement",
131
- )
132
- return ModalPlacement(**payload)
133
- if provider == "runpod":
134
- _exact_keys(
135
- payload,
136
- {
137
- "account_id",
138
- "container_disk_gb",
139
- "data_center_id",
140
- "gpu_count",
141
- "gpu_type_id",
142
- "volume_size_gb",
143
- },
144
- "runpod placement",
145
- )
146
- return RunPodPlacement(**payload)
147
- raise ValueError("deployment identity provider must be modal or runpod")
119
+ _exact_keys(
120
+ payload,
121
+ {"environment", "gpu", "gpu_count", "region", "web_suffix", "workspace_name"},
122
+ "modal placement",
123
+ )
124
+ return ModalPlacement(**payload)
148
125
 
149
126
 
150
127
  def _resolved_adapters(manifest) -> tuple[object, ...]:
@@ -193,6 +170,8 @@ def decode_deployment_identity(value: str):
193
170
  )
194
171
 
195
172
  payload = _decode_payload(value)
173
+ if payload["provider"] != "modal":
174
+ raise ValueError("deployment identity provider must be modal")
196
175
  manifest_value = payload["manifest"]
197
176
  image_reference = payload["image_reference"]
198
177
  if type(manifest_value) is not str or type(image_reference) is not str:
@@ -216,7 +195,7 @@ def _mismatch(flag: str) -> None:
216
195
 
217
196
 
218
197
  def _validate_authored_identity(args, bundle) -> None:
219
- from flash.serve.control import ModalPlacement, RunPodPlacement
198
+ from flash.serve.control import ModalPlacement
220
199
 
221
200
  spec = bundle.spec
222
201
  if len(spec.adapters) != 1:
@@ -256,14 +235,6 @@ def _validate_authored_identity(args, bundle) -> None:
256
235
  for flag, actual, expected in modal:
257
236
  if actual != expected:
258
237
  _mismatch(flag)
259
- elif type(placement) is RunPodPlacement:
260
- runpod = (
261
- ("runpod-account", placement.account_id, args.runpod_account),
262
- ("runpod-data-center", placement.data_center_id, args.runpod_data_center),
263
- )
264
- for flag, actual, expected in runpod:
265
- if actual != expected:
266
- _mismatch(flag)
267
238
  else: # pragma: no cover - DeploymentSpec validation already excludes this
268
239
  raise TypeError("deployment identity placement is invalid")
269
240