freesolo-flash-dev 1.4.15__tar.gz → 1.4.16__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 (1071) hide show
  1. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/PKG-INFO +1 -1
  2. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/core/catalog.py +2 -2
  3. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/controller.py +41 -9
  4. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/session.py +39 -0
  5. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/core/base.py +3 -1
  6. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/modal/checkpoint_upload.py +93 -22
  7. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/modal/jobs.py +9 -4
  8. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/results/checkpoints.py +7 -3
  9. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/deployment/profiles.py +2 -2
  10. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/sampling.py +12 -0
  11. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/runs.py +8 -1
  12. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/serving_revisions.py +8 -1
  13. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/app/modal_app.py +21 -31
  14. freesolo_flash_dev-1.4.16/flash/serving/promotion/accounting_smoke_test.py +193 -0
  15. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/lora_engine.py +11 -8
  16. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/model_config.py +6 -2
  17. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/warmup.py +6 -1
  18. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/authorization_transport.py +5 -2
  19. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/pyproject.toml +2 -2
  20. freesolo_flash_dev-1.4.16/scripts/benchmark_qwen_serving.py +174 -0
  21. freesolo_flash_dev-1.4.16/scripts/benchmark_router_resources.py +373 -0
  22. freesolo_flash_dev-1.4.16/tests/serving/test_authorization_rollout.py +70 -0
  23. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_authorization_transport.py +39 -1
  24. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_chat_authorizer.py +51 -6
  25. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_immutable_engine.py +88 -7
  26. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_model_config.py +1 -1
  27. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_per_model_gpu.py +17 -14
  28. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_promotion_accounting_smoke.py +107 -0
  29. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_promotion_canary.py +1 -0
  30. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_qwen_warmup.py +27 -0
  31. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_usage_reporter.py +10 -12
  32. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_adapter_download.py +1 -1
  33. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_catalog_consistency.py +2 -2
  34. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_checkpoints.py +4 -4
  35. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_client_server_integration.py +1 -1
  36. freesolo_flash_dev-1.4.16/tests/test_cpu_checkpoint_upload_retry.py +357 -0
  37. freesolo_flash_dev-1.4.16/tests/test_custom_controller_connect.py +124 -0
  38. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_mirror_sampling_parity.py +42 -0
  39. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_qwen9b_base.py +2 -0
  40. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_modal_contract_lock.py +34 -12
  41. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_server_api.py +42 -13
  42. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_server_envs_coverage.py +1 -1
  43. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/uv.lock +1 -1
  44. freesolo_flash_dev-1.4.15/flash/serving/promotion/accounting_smoke_test.py +0 -100
  45. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.dockerignore +0 -0
  46. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.env.example +0 -0
  47. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/CODEOWNERS +0 -0
  48. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  49. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  50. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  51. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/dependabot.yml +0 -0
  52. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/scripts/ci_sharding.py +0 -0
  53. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/scripts/notify_tests_repo.py +0 -0
  54. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/auto-rebake.yml +0 -0
  55. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/bake-kernel-cache.yml +0 -0
  56. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/ci.yml +0 -0
  57. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/deploy-deepinfer.yml +0 -0
  58. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/deploy-modal-dev.yml +0 -0
  59. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/deploy-modal.yml +0 -0
  60. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/dev-kernel-cache.yml +0 -0
  61. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/main-source-guard.yml +0 -0
  62. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/notify-tests-repo.yml +0 -0
  63. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  64. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/publish-dev.yml +0 -0
  65. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/publish-image.yml +0 -0
  66. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/publish-serving-image.yml +0 -0
  67. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/publish.yml +0 -0
  68. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/version-parity.yml +0 -0
  69. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.github/workflows/worker-image.yml +0 -0
  70. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/.gitignore +0 -0
  71. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/Dockerfile +0 -0
  72. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/Dockerfile.serve +0 -0
  73. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/Dockerfile.worker +0 -0
  74. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/LICENSE +0 -0
  75. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/NOTICE +0 -0
  76. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/build/kernel_cache/.gitignore +0 -0
  77. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/build/kernel_cache/.keep +0 -0
  78. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/deploy/infisical/entrypoint.sh +0 -0
  79. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/docker/Dockerfile.kernelcache +0 -0
  80. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/docker/Dockerfile.kernelcache.relayer +0 -0
  81. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/docker/bake_kernel_cache.py +0 -0
  82. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/docker/bake_sandbox_entry.py +0 -0
  83. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/docker/extract_cudart_fix.py +0 -0
  84. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/docker/kernel_fingerprint.py +0 -0
  85. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/docker/patch_vllm_moe_lora.py +0 -0
  86. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/__init__.py +0 -0
  87. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/_internal/__init__.py +0 -0
  88. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/_internal/background.py +0 -0
  89. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/_internal/channel.py +0 -0
  90. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/_internal/diagnostics.py +0 -0
  91. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/_internal/fileio.py +0 -0
  92. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/_internal/http.py +0 -0
  93. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/_internal/http_deadline.py +0 -0
  94. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/_internal/logging.py +0 -0
  95. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/_internal/openai_sse.py +0 -0
  96. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/_internal/paths.py +0 -0
  97. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/_internal/version.py +0 -0
  98. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/adapters/__init__.py +0 -0
  99. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/adapters/artifacts.py +0 -0
  100. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/adapters/config.py +0 -0
  101. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/adapters/fused_experts.py +0 -0
  102. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/adapters/lora_rank.py +0 -0
  103. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/adapters/targets.py +0 -0
  104. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/artifacts/__init__.py +0 -0
  105. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/artifacts/api.py +0 -0
  106. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/artifacts/config.py +0 -0
  107. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/artifacts/errors.py +0 -0
  108. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/artifacts/manifest.py +0 -0
  109. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/artifacts/storage.py +0 -0
  110. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/__init__.py +0 -0
  111. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/__main__.py +0 -0
  112. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/__init__.py +0 -0
  113. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/__init__.py +0 -0
  114. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/ops/__init__.py +0 -0
  115. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/ops/imports.py +0 -0
  116. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/ops/list.py +0 -0
  117. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/ops/push.py +0 -0
  118. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/ops/retained.py +0 -0
  119. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/ops/setup.py +0 -0
  120. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  121. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/testing/__init__.py +0 -0
  122. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/testing/episode.py +0 -0
  123. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/testing/eval.py +0 -0
  124. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/testing/eval_args.py +0 -0
  125. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/testing/evaluations.py +0 -0
  126. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/testing/params.py +0 -0
  127. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/testing/test.py +0 -0
  128. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/env/testing/warnings.py +0 -0
  129. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/ops/__init__.py +0 -0
  130. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/ops/account.py +0 -0
  131. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/ops/catalog.py +0 -0
  132. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/ops/deploy.py +0 -0
  133. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/ops/log_follow.py +0 -0
  134. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/ops/prompt_budget.py +0 -0
  135. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/ops/runs.py +0 -0
  136. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/ops/traces.py +0 -0
  137. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/ops/train.py +0 -0
  138. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/ops/worker_output.py +0 -0
  139. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/serving/__init__.py +0 -0
  140. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/serving/deploy.py +0 -0
  141. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/serving/identity.py +0 -0
  142. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/serving/status.py +0 -0
  143. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/commands/serving/undeploy.py +0 -0
  144. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/parsing/__init__.py +0 -0
  145. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/parsing/account.py +0 -0
  146. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/parsing/custom.py +0 -0
  147. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/parsing/env.py +0 -0
  148. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/parsing/errors.py +0 -0
  149. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/parsing/main.py +0 -0
  150. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/parsing/models.py +0 -0
  151. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/parsing/serve_parser.py +0 -0
  152. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/parsing/traces.py +0 -0
  153. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/parsing/training.py +0 -0
  154. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/scaffold/TRAINING.md +0 -0
  155. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/scaffold/__init__.py +0 -0
  156. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/ui/__init__.py +0 -0
  157. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/ui/cost.py +0 -0
  158. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/ui/env_panels.py +0 -0
  159. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/ui/heartbeat.py +0 -0
  160. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/ui/render.py +0 -0
  161. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/ui/tables.py +0 -0
  162. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cli/ui/tty.py +0 -0
  163. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/client/__init__.py +0 -0
  164. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/client/config.py +0 -0
  165. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/client/freesolo_api.py +0 -0
  166. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/client/http.py +0 -0
  167. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/client/runtime_secrets.py +0 -0
  168. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/client/shapes.py +0 -0
  169. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/client/specs.py +0 -0
  170. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/client/streaming.py +0 -0
  171. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/content/__init__.py +0 -0
  172. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/content/image_descriptors.py +0 -0
  173. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/content/multimodal.py +0 -0
  174. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/content/processor.py +0 -0
  175. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/content/reasoning_normalization.py +0 -0
  176. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/content/stop_tokens.py +0 -0
  177. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/content/structured_options.py +0 -0
  178. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/content/structured_outputs.py +0 -0
  179. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/content/thinking.py +0 -0
  180. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/core/__init__.py +0 -0
  181. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/core/grpo.py +0 -0
  182. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/core/spec.py +0 -0
  183. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/core/spec_persistence.py +0 -0
  184. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cost/__init__.py +0 -0
  185. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cost/analytical.py +0 -0
  186. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cost/currency.py +0 -0
  187. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cost/facts.py +0 -0
  188. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cost/spec.py +0 -0
  189. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/cost/types.py +0 -0
  190. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/__init__.py +0 -0
  191. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/async_client.py +0 -0
  192. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/backend.py +0 -0
  193. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/billing.py +0 -0
  194. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/checkpoints.py +0 -0
  195. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/client.py +0 -0
  196. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/managed.py +0 -0
  197. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/server.py +0 -0
  198. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/starter.py +0 -0
  199. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/types.py +0 -0
  200. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/validation.py +0 -0
  201. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/custom/worker.py +0 -0
  202. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/__init__.py +0 -0
  203. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/plan/__init__.py +0 -0
  204. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/plan/kv_sizing.py +0 -0
  205. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/plan/model_config_probe.py +0 -0
  206. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/plan/prompt_budget.py +0 -0
  207. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/plan/recipe.py +0 -0
  208. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/plan/steps.py +0 -0
  209. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/plan/vram.py +0 -0
  210. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/profiling/__init__.py +0 -0
  211. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/profiling/dataset_profile.py +0 -0
  212. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/profiling/image_tokens.py +0 -0
  213. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/profiling/reasoning_render.py +0 -0
  214. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/profiling/sft_image_rows.py +0 -0
  215. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/profiling/sft_rows.py +0 -0
  216. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/profiling/sft_tools.py +0 -0
  217. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/profiling/sft_workload.py +0 -0
  218. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/profiling/tokenizer.py +0 -0
  219. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/profiling/workload_profile.py +0 -0
  220. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/result/__init__.py +0 -0
  221. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/result/accounting.py +0 -0
  222. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/result/rollout_samples.py +0 -0
  223. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/support/__init__.py +0 -0
  224. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/support/checkpoint_transport.py +0 -0
  225. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/support/huggingface.py +0 -0
  226. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/support/model_snapshot.py +0 -0
  227. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/support/verl_checkpoint.py +0 -0
  228. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/support/worker_entrypoint.py +0 -0
  229. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/__init__.py +0 -0
  230. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/__main__.py +0 -0
  231. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/entry/__init__.py +0 -0
  232. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/entry/rl.py +0 -0
  233. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/entry/worker.py +0 -0
  234. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/io/__init__.py +0 -0
  235. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/io/artifacts.py +0 -0
  236. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/io/cpu_handoff.py +0 -0
  237. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/io/heartbeat.py +0 -0
  238. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/io/prefetch.py +0 -0
  239. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/io/transfer.py +0 -0
  240. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/io/wandb_log.py +0 -0
  241. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/model/__init__.py +0 -0
  242. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/model/adapter.py +0 -0
  243. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/model/chatml_mask.py +0 -0
  244. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/model/decoding.py +0 -0
  245. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/model/lora.py +0 -0
  246. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/model/packing.py +0 -0
  247. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/perf/__init__.py +0 -0
  248. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/perf/diagnostics.py +0 -0
  249. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/perf/lifecycle.py +0 -0
  250. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/perf/memory.py +0 -0
  251. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/perf/model_size.py +0 -0
  252. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/runtime/__init__.py +0 -0
  253. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  254. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/runtime/phases.py +0 -0
  255. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/runtime/rng.py +0 -0
  256. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/runtime/state.py +0 -0
  257. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/__init__.py +0 -0
  258. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/__init__.py +0 -0
  259. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/__init__.py +0 -0
  260. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/agents.yaml +0 -0
  261. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/batch.py +0 -0
  262. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/compact_checkpoint.py +0 -0
  263. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/configuration.py +0 -0
  264. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/engine.py +0 -0
  265. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/flashinfer_cache.py +0 -0
  266. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/glue.py +0 -0
  267. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/launch.py +0 -0
  268. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/model.py +0 -0
  269. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/observations.py +0 -0
  270. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/options.py +0 -0
  271. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/prompt_media.py +0 -0
  272. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/queue.py +0 -0
  273. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/readiness.py +0 -0
  274. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/reference.py +0 -0
  275. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/registration.py +0 -0
  276. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/replay.py +0 -0
  277. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/replay_guard.py +0 -0
  278. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/rollout.py +0 -0
  279. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/rollout_contract.py +0 -0
  280. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/startup.py +0 -0
  281. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/tracking.py +0 -0
  282. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/trainer.py +0 -0
  283. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/upstream.py +0 -0
  284. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/vllm_worker.py +0 -0
  285. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/child/worker.py +0 -0
  286. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  287. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  288. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  289. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/lifecycle/persistence.py +0 -0
  290. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  291. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/lifecycle/timing.py +0 -0
  292. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/rollout/__init__.py +0 -0
  293. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/rollout/contract.py +0 -0
  294. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/rollout/episode.py +0 -0
  295. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/rollout/generation.py +0 -0
  296. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/rollout/identity.py +0 -0
  297. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/core/rollout/lifecycle.py +0 -0
  298. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/entry/__init__.py +0 -0
  299. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/entry/backend_common.py +0 -0
  300. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  301. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/entry/rl_train.py +0 -0
  302. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  303. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  304. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/entry/sft_train.py +0 -0
  305. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  306. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/__init__.py +0 -0
  307. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  308. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/child/contract.py +0 -0
  309. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/child/credit.py +0 -0
  310. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/child/entry.py +0 -0
  311. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/child/identity.py +0 -0
  312. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/child/metrics.py +0 -0
  313. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  314. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/child/reward.py +0 -0
  315. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/child/rollout.py +0 -0
  316. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/child/trainer.py +0 -0
  317. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/child/transport.py +0 -0
  318. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  319. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  320. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/launch/config.py +0 -0
  321. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  322. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  323. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  324. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  325. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  326. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  327. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  328. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/sft/__init__.py +0 -0
  329. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/sft/child/dataset.py +0 -0
  330. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/sft/child/entry.py +0 -0
  331. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/sft/child/loop.py +0 -0
  332. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/sft/child/schedule.py +0 -0
  333. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/sft/child/trainer.py +0 -0
  334. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  335. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  336. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/train/sft/setup/config.py +0 -0
  337. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/verl/__init__.py +0 -0
  338. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/verl/adapter_merger.py +0 -0
  339. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/verl/capabilities.py +0 -0
  340. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/verl/checkpoints.py +0 -0
  341. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/verl/child_io.py +0 -0
  342. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/verl/diagnostics.py +0 -0
  343. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/verl/parallelism.py +0 -0
  344. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/engine/worker/verl/parent_work.py +0 -0
  345. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/__init__.py +0 -0
  346. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/loading/__init__.py +0 -0
  347. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/loading/adapter.py +0 -0
  348. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/loading/base.py +0 -0
  349. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/loading/loader.py +0 -0
  350. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/loading/pull.py +0 -0
  351. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/loading/staged.py +0 -0
  352. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/meta/__init__.py +0 -0
  353. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/meta/cache_security.py +0 -0
  354. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/meta/cache_storage.py +0 -0
  355. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/meta/dataset_selection.py +0 -0
  356. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/meta/evaluations.py +0 -0
  357. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/meta/identity.py +0 -0
  358. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/meta/namespace_listing.py +0 -0
  359. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/package/__init__.py +0 -0
  360. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/package/direct_tokens.py +0 -0
  361. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/package/limits.py +0 -0
  362. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/package/unpack.py +0 -0
  363. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/registry/__init__.py +0 -0
  364. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/registry/azure.py +0 -0
  365. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/registry/packages.py +0 -0
  366. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/scoring/__init__.py +0 -0
  367. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/scoring/context.py +0 -0
  368. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/envs/scoring/response.py +0 -0
  369. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/__init__.py +0 -0
  370. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/__init__.py +0 -0
  371. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  372. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/bootstrapping/attempt.py +0 -0
  373. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
  374. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  375. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  376. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/bootstrapping/processes.py +0 -0
  377. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  378. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  379. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/instances/instance.py +0 -0
  380. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/instances/poll.py +0 -0
  381. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  382. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  383. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/net/__init__.py +0 -0
  384. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/net/auth.py +0 -0
  385. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/net/deadline.py +0 -0
  386. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/net/http.py +0 -0
  387. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/_lifecycle/net/worker.py +0 -0
  388. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/artifacts/__init__.py +0 -0
  389. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/artifacts/channel.py +0 -0
  390. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/artifacts/weight_cache.py +0 -0
  391. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/core/__init__.py +0 -0
  392. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/core/allocator.py +0 -0
  393. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/core/fit_errors.py +0 -0
  394. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/core/preflight.py +0 -0
  395. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/core/registry.py +0 -0
  396. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/core/sharding.py +0 -0
  397. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/modal/__init__.py +0 -0
  398. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/modal/api.py +0 -0
  399. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/modal/auth.py +0 -0
  400. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/modal/handles.py +0 -0
  401. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/modal/prefetch.py +0 -0
  402. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/modal/pricing.py +0 -0
  403. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/modal/provider.py +0 -0
  404. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/providers/modal/startup.py +0 -0
  405. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/py.typed +0 -0
  406. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/__init__.py +0 -0
  407. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/accounting/__init__.py +0 -0
  408. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/accounting/artifacts.py +0 -0
  409. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/accounting/costs.py +0 -0
  410. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/accounting/weight_cache.py +0 -0
  411. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/lifecycle/__init__.py +0 -0
  412. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/lifecycle/attempts.py +0 -0
  413. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/lifecycle/claim_lock.py +0 -0
  414. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/lifecycle/cleanup.py +0 -0
  415. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/lifecycle/deadlines.py +0 -0
  416. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/lifecycle/preparation.py +0 -0
  417. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/lifecycle/reporting.py +0 -0
  418. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/lifecycle/runtime_credentials.py +0 -0
  419. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/lifecycle/state.py +0 -0
  420. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/lifecycle/status.py +0 -0
  421. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/lifecycle/submit.py +0 -0
  422. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/results/__init__.py +0 -0
  423. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/results/deployments.py +0 -0
  424. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/supervise/__init__.py +0 -0
  425. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/supervise/attach.py +0 -0
  426. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/supervise/deploy.py +0 -0
  427. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/supervise/errors.py +0 -0
  428. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/supervise/execution.py +0 -0
  429. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/supervise/lifecycle.py +0 -0
  430. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/supervise/recovery.py +0 -0
  431. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/supervise/retry_decision.py +0 -0
  432. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runner/supervise/transitions.py +0 -0
  433. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runtime_capsule/__init__.py +0 -0
  434. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runtime_capsule/build.py +0 -0
  435. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runtime_capsule/manifest.py +0 -0
  436. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/runtime_capsule/profiles.py +0 -0
  437. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/schema/__init__.py +0 -0
  438. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/schema/custom.py +0 -0
  439. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/schema/fields.py +0 -0
  440. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/__init__.py +0 -0
  441. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/app/__init__.py +0 -0
  442. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/app/__main__.py +0 -0
  443. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/app/bootstrap.py +0 -0
  444. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/app/chat_stream.py +0 -0
  445. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/app/http.py +0 -0
  446. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/app/hydration_credentials.py +0 -0
  447. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/app/launch.py +0 -0
  448. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/app/manifest.py +0 -0
  449. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/app/materialize.py +0 -0
  450. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/app/openai.py +0 -0
  451. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/app/progress.py +0 -0
  452. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/contract/__init__.py +0 -0
  453. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/contract/errors.py +0 -0
  454. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/contract/protocol.py +0 -0
  455. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/contract/provenance.py +0 -0
  456. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/contract/responses.py +0 -0
  457. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/contract/urls.py +0 -0
  458. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/control/__init__.py +0 -0
  459. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/control/_canonical.py +0 -0
  460. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/control/_serialization.py +0 -0
  461. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/control/_urls.py +0 -0
  462. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/control/credentials.py +0 -0
  463. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/control/planning.py +0 -0
  464. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/control/types.py +0 -0
  465. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/deployment/__init__.py +0 -0
  466. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/deployment/adapter_check.py +0 -0
  467. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/deployment/deploy.py +0 -0
  468. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/deployment/download.py +0 -0
  469. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/deployment/export.py +0 -0
  470. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/deployment/preflight.py +0 -0
  471. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/deployment/readiness.py +0 -0
  472. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/deployment/resolve.py +0 -0
  473. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/__init__.py +0 -0
  474. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/common/__init__.py +0 -0
  475. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/common/records.py +0 -0
  476. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/__init__.py +0 -0
  477. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  478. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  479. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  480. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  481. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  482. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  483. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  484. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  485. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  486. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  487. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  488. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  489. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  490. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/request/__init__.py +0 -0
  491. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/request/openai.py +0 -0
  492. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/request/runtime_support.py +0 -0
  493. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/request/schema_types.py +0 -0
  494. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/request/streaming.py +0 -0
  495. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/request/text_scan.py +0 -0
  496. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/request/thinking.py +0 -0
  497. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/request/tool_calls.py +0 -0
  498. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/request/tool_template.py +0 -0
  499. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/request/transport.py +0 -0
  500. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/request/validation.py +0 -0
  501. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/__init__.py +0 -0
  502. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/adapters.py +0 -0
  503. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/cache_admission.py +0 -0
  504. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/cache_retention.py +0 -0
  505. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/cache_scheduler.py +0 -0
  506. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/engine.py +0 -0
  507. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/errors.py +0 -0
  508. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/hub.py +0 -0
  509. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/multimodal.py +0 -0
  510. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/prompt.py +0 -0
  511. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/prompt_cache.py +0 -0
  512. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/reasoning_tools.py +0 -0
  513. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/structured_outputs.py +0 -0
  514. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/token_batch.py +0 -0
  515. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/token_prefix_cache.py +0 -0
  516. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/tool_calls.py +0 -0
  517. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serve/runtime/types.py +0 -0
  518. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/__init__.py +0 -0
  519. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/__main__.py +0 -0
  520. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/asgi/__init__.py +0 -0
  521. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/asgi/app.py +0 -0
  522. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/asgi/cli.py +0 -0
  523. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/billing/__init__.py +0 -0
  524. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/billing/charges.py +0 -0
  525. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/billing/retry.py +0 -0
  526. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/__init__.py +0 -0
  527. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/ops/__init__.py +0 -0
  528. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/ops/repo_cleanup.py +0 -0
  529. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/ops/serving_resources.py +0 -0
  530. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/registry/__init__.py +0 -0
  531. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/registry/blob_envs.py +0 -0
  532. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/registry/checkpoints.py +0 -0
  533. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/registry/env_files.py +0 -0
  534. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/registry/environment_registry.py +0 -0
  535. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/registry/envs.py +0 -0
  536. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/registry/projects.py +0 -0
  537. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/domain/registry/runs.py +0 -0
  538. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/platform/__init__.py +0 -0
  539. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/platform/auth.py +0 -0
  540. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/platform/db.py +0 -0
  541. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/platform/deployment_jobs.py +0 -0
  542. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/platform/deployment_state.py +0 -0
  543. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/platform/deps.py +0 -0
  544. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/platform/internal_client.py +0 -0
  545. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/platform/locks.py +0 -0
  546. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/platform/plane_lease.py +0 -0
  547. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/platform/runtime.py +0 -0
  548. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/__init__.py +0 -0
  549. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/adapter_download.py +0 -0
  550. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/custom.py +0 -0
  551. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/env_files.py +0 -0
  552. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/envs.py +0 -0
  553. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/meta.py +0 -0
  554. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/serving.py +0 -0
  555. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/serving_chat.py +0 -0
  556. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/serving_completion.py +0 -0
  557. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/serving_errors.py +0 -0
  558. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/server/routes/serving_smoke.py +0 -0
  559. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/__init__.py +0 -0
  560. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/app/__init__.py +0 -0
  561. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/app/timeouts.py +0 -0
  562. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/__init__.py +0 -0
  563. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/app/__init__.py +0 -0
  564. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/app/autoscaling.py +0 -0
  565. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/app/client.py +0 -0
  566. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/app/events.py +0 -0
  567. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/app/http.py +0 -0
  568. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/app/modal_app.py +0 -0
  569. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/app/render.py +0 -0
  570. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/app/retries.py +0 -0
  571. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/app/rollout.py +0 -0
  572. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/contract/__init__.py +0 -0
  573. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/contract/config.py +0 -0
  574. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/contract/errors.py +0 -0
  575. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/contract/protocol.py +0 -0
  576. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/contract/tokenizer.py +0 -0
  577. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/native/__init__.py +0 -0
  578. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/native/engram_transport.py +0 -0
  579. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/native/image.py +0 -0
  580. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/native/patches.py +0 -0
  581. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/native/transport.py +0 -0
  582. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/runtime/__init__.py +0 -0
  583. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/runtime/bridge.py +0 -0
  584. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/runtime/kernel_cache.py +0 -0
  585. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/runtime/prefill_scheduler.py +0 -0
  586. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/runtime/prefix_cache.py +0 -0
  587. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/runtime/provenance.py +0 -0
  588. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/runtime/routing.py +0 -0
  589. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/runtime/snapshots.py +0 -0
  590. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/runtime/tiered_cache.py +0 -0
  591. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/runtime/warmup.py +0 -0
  592. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/deepinfer/runtime/worker.py +0 -0
  593. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/promotion/__init__.py +0 -0
  594. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/promotion/canary.py +0 -0
  595. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/promotion/evidence.py +0 -0
  596. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/promotion/gate.py +0 -0
  597. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/__init__.py +0 -0
  598. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/accounting/__init__.py +0 -0
  599. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/accounting/usage.py +0 -0
  600. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/accounting/usage_facts.py +0 -0
  601. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/accounting/usage_outbox.py +0 -0
  602. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/accounting/usage_retry.py +0 -0
  603. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/__init__.py +0 -0
  604. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/boot.py +0 -0
  605. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/errors.py +0 -0
  606. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/generation.py +0 -0
  607. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/hub.py +0 -0
  608. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/lora_entries.py +0 -0
  609. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/prequant_config.py +0 -0
  610. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/reasoning_usage.py +0 -0
  611. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/support.py +0 -0
  612. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/engine/text_tokenizer.py +0 -0
  613. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/__init__.py +0 -0
  614. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/adapter_routes.py +0 -0
  615. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/body_limit.py +0 -0
  616. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/context.py +0 -0
  617. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/headers.py +0 -0
  618. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/inference_routes.py +0 -0
  619. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/key_rate_limit.py +0 -0
  620. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/rate_limit.py +0 -0
  621. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/router.py +0 -0
  622. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/routing.py +0 -0
  623. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/http/stream_response.py +0 -0
  624. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/io/__init__.py +0 -0
  625. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/io/cache_namespace.py +0 -0
  626. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/io/multimodal.py +0 -0
  627. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/io/openai_request.py +0 -0
  628. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/io/openai_stream.py +0 -0
  629. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/io/provenance.py +0 -0
  630. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/io/requests.py +0 -0
  631. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/io/responses.py +0 -0
  632. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/io/schemas.py +0 -0
  633. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/io/streaming.py +0 -0
  634. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/io/structured_outputs.py +0 -0
  635. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/store/__init__.py +0 -0
  636. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/store/access.py +0 -0
  637. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/store/lookup.py +0 -0
  638. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/store/persisted_columns.py +0 -0
  639. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/store/persistence.py +0 -0
  640. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/store/registration.py +0 -0
  641. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/store/registry.py +0 -0
  642. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/store/settings.py +0 -0
  643. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/store/supabase_rest.py +0 -0
  644. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/store/undeploy.py +0 -0
  645. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/stream_channel/__init__.py +0 -0
  646. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/stream_channel/_tasks.py +0 -0
  647. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/stream_channel/client.py +0 -0
  648. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/stream_channel/engine.py +0 -0
  649. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/serving/src/stream_channel/protocol.py +0 -0
  650. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/snapshot/__init__.py +0 -0
  651. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/flash/snapshot/archive.py +0 -0
  652. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/build_dev_dist.py +0 -0
  653. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/check_dev_release.py +0 -0
  654. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/check_file_size.py +0 -0
  655. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/check_function_size.py +0 -0
  656. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/check_rollout_identity_actor.py +0 -0
  657. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/check_source_layout.py +0 -0
  658. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/check_verl_pin_exists.py +0 -0
  659. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/fixtures/custom_algorithm.py +0 -0
  660. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/fixtures/modal_environment/dataset/train.jsonl +0 -0
  661. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/fixtures/modal_environment/environment.py +0 -0
  662. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/fixtures/modal_environment/evaluations.py +0 -0
  663. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/qualify_serving_profile.py +0 -0
  664. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/smoke_custom_training.py +0 -0
  665. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/smoke_modal_sft.py +0 -0
  666. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/scripts/smoke_modal_training.py +0 -0
  667. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/serve_launch.py +0 -0
  668. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/__init__.py +0 -0
  669. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/__init__.py +0 -0
  670. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/billing_precheck.py +0 -0
  671. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/chat_provenance.py +0 -0
  672. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/chat_transport.py +0 -0
  673. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/deployments.py +0 -0
  674. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/managed_chat.py +0 -0
  675. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/modal.py +0 -0
  676. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/profile.py +0 -0
  677. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/runner.py +0 -0
  678. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/server_api_plugin.py +0 -0
  679. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/source_snapshot.py +0 -0
  680. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/specs.py +0 -0
  681. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/_helpers/wire_headers.py +0 -0
  682. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/capture_image_sft_processor_oracle.py +0 -0
  683. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/capture_qwen38_27b_metadata.py +0 -0
  684. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/conftest.py +0 -0
  685. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  686. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  687. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  688. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  689. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  690. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  691. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/live/__init__.py +0 -0
  692. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/live/conftest.py +0 -0
  693. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/live/test_sft_thinking_render_live.py +0 -0
  694. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/checkpoint_fixtures.py +0 -0
  695. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/conftest.py +0 -0
  696. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_adapter_hub.py +0 -0
  697. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_artifact_protections.py +0 -0
  698. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_base_model_serving.py +0 -0
  699. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_chat_auth.py +0 -0
  700. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_checkpoint_fingerprint_validation.py +0 -0
  701. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  702. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_checkpoint_model_validation.py +0 -0
  703. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_checkpoint_revocation.py +0 -0
  704. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer.py +0 -0
  705. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_autoscaling.py +0 -0
  706. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_deadline.py +0 -0
  707. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_hosted.py +0 -0
  708. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_http_deadline.py +0 -0
  709. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_kernel_cache.py +0 -0
  710. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_latency.py +0 -0
  711. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_optimizations.py +0 -0
  712. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_parallel.py +0 -0
  713. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_prefill_scheduler.py +0 -0
  714. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_provenance.py +0 -0
  715. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_retention.py +0 -0
  716. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_retries.py +0 -0
  717. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_rollout.py +0 -0
  718. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_routing.py +0 -0
  719. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_deepinfer_tiering.py +0 -0
  720. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_engine_error_status.py +0 -0
  721. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_fp8_config.py +0 -0
  722. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_immutable_revisions.py +0 -0
  723. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_immutable_schemas.py +0 -0
  724. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_inference_duration.py +0 -0
  725. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_internal_header_integrity.py +0 -0
  726. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_key_rate_limit.py +0 -0
  727. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_key_rate_limit_review.py +0 -0
  728. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_kv_namespace.py +0 -0
  729. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_latency_admission.py +0 -0
  730. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_mirror_sampling_parity.py +0 -0
  731. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_modal_deploy_identity.py +0 -0
  732. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_modal_image_paths.py +0 -0
  733. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_multimodal.py +0 -0
  734. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_openai_stream_options.py +0 -0
  735. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_persistence.py +0 -0
  736. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_pre_first_disconnect.py +0 -0
  737. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_prequant_config.py +0 -0
  738. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_promotion_evidence.py +0 -0
  739. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_promotion_gate.py +0 -0
  740. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_rate_limit.py +0 -0
  741. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_reasoning_usage.py +0 -0
  742. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_registration_endpoint.py +0 -0
  743. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_registry.py +0 -0
  744. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_registry_coverage.py +0 -0
  745. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_request_body_limit.py +0 -0
  746. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_router.py +0 -0
  747. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_router_coverage.py +0 -0
  748. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_router_edge_coverage.py +0 -0
  749. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_schemas_coverage.py +0 -0
  750. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_serve_reasoning_split.py +0 -0
  751. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_serve_structured_outputs.py +0 -0
  752. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_serve_thinking.py +0 -0
  753. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_settings.py +0 -0
  754. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_stream_channel.py +0 -0
  755. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_stream_response_disconnect.py +0 -0
  756. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_stream_wait_cleanup.py +0 -0
  757. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_structured_outputs.py +0 -0
  758. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_structured_outputs_coverage.py +0 -0
  759. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_supabase_rest_coverage.py +0 -0
  760. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_token_prefix_cache.py +0 -0
  761. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_usage_delivery_concurrency.py +0 -0
  762. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_usage_integrity.py +0 -0
  763. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving/test_usage_outbox.py +0 -0
  764. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving_conformance/__init__.py +0 -0
  765. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving_conformance/conftest.py +0 -0
  766. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/serving_conformance/test_contract.py +0 -0
  767. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_accounting_coverage.py +0 -0
  768. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_adapter_shard_completeness.py +0 -0
  769. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_agent_flash_cli_contract.py +0 -0
  770. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_algorithms.py +0 -0
  771. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_allocator.py +0 -0
  772. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_authenticated_redirects.py +0 -0
  773. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_azure_artifacts.py +0 -0
  774. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_azure_environment_registry.py +0 -0
  775. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_backend_common.py +0 -0
  776. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_backend_jobspec_contract.py +0 -0
  777. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_background_supervisor.py +0 -0
  778. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_bake_kernel_cache.py +0 -0
  779. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_bake_sandbox_entry.py +0 -0
  780. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_base_environment_integrity.py +0 -0
  781. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_base_model_provenance.py +0 -0
  782. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_billing_response_integrity.py +0 -0
  783. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_billing_retry.py +0 -0
  784. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_bootstrap_process_groups.py +0 -0
  785. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_bootstrap_reentry.py +0 -0
  786. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_bootstrap_worker_cleanup.py +0 -0
  787. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_build_context_contract.py +0 -0
  788. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cache_admission.py +0 -0
  789. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cache_retention.py +0 -0
  790. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cache_scheduler.py +0 -0
  791. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_capture_qwen38_metadata.py +0 -0
  792. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_catalog_only_models.py +0 -0
  793. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_charge_pricing.py +0 -0
  794. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_chat_foundations.py +0 -0
  795. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_chat_stop_tokens.py +0 -0
  796. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_chat_worker_isolation.py +0 -0
  797. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_checkpoint_cancellation.py +0 -0
  798. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_checkpoint_deployment_inventory_api.py +0 -0
  799. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_checkpoint_deployments.py +0 -0
  800. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_checkpoint_lifecycle.py +0 -0
  801. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_checkpoint_listing_integrity.py +0 -0
  802. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_checkpoint_storage_overlap.py +0 -0
  803. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_checkpoint_transport.py +0 -0
  804. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_ci_sharding.py +0 -0
  805. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_commands.py +0 -0
  806. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_commands_coverage.py +0 -0
  807. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_credential_shadowing.py +0 -0
  808. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_errors.py +0 -0
  809. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_estimate.py +0 -0
  810. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_gpus_flag.py +0 -0
  811. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_help.py +0 -0
  812. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_main_coverage.py +0 -0
  813. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_managed.py +0 -0
  814. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_render_coverage.py +0 -0
  815. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_render_theme.py +0 -0
  816. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_serve_deploy.py +0 -0
  817. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_serve_status.py +0 -0
  818. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_serve_undeploy.py +0 -0
  819. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_traces.py +0 -0
  820. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cli_wandb_warning.py +0 -0
  821. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_client.py +0 -0
  822. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_client_deadline_integrity.py +0 -0
  823. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_client_import_purity.py +0 -0
  824. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_client_stream_reads.py +0 -0
  825. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_compact_checkpoint.py +0 -0
  826. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_config_env_vars.py +0 -0
  827. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_config_overrides.py +0 -0
  828. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_console_upload.py +0 -0
  829. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_controlled_experiment_repairs.py +0 -0
  830. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cost_analytical.py +0 -0
  831. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cost_currency.py +0 -0
  832. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cost_equation.py +0 -0
  833. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cost_estimate.py +0 -0
  834. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cost_hardware.py +0 -0
  835. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cost_models.py +0 -0
  836. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_cpu_checkpoint_handoff.py +0 -0
  837. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_custom_checkpoints.py +0 -0
  838. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_custom_client.py +0 -0
  839. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_custom_gpu_selection.py +0 -0
  840. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_custom_gradients.py +0 -0
  841. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_custom_managed.py +0 -0
  842. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_custom_session.py +0 -0
  843. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_custom_worker.py +0 -0
  844. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_customer_serving_contract.py +0 -0
  845. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_dataset_profile.py +0 -0
  846. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_deploy_latency.py +0 -0
  847. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_deployment_cleanup_resilience.py +0 -0
  848. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_deployment_generation_completion.py +0 -0
  849. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_deployment_registration_cleanup.py +0 -0
  850. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_dev_channel.py +0 -0
  851. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_dev_publish_decision.py +0 -0
  852. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_disk_gb.py +0 -0
  853. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_cache_evict.py +0 -0
  854. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_delete.py +0 -0
  855. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_download.py +0 -0
  856. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_download_api.py +0 -0
  857. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_evaluations.py +0 -0
  858. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_list_api.py +0 -0
  859. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_list_cli.py +0 -0
  860. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_list_registry.py +0 -0
  861. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_no_install.py +0 -0
  862. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_publish.py +0 -0
  863. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_pull.py +0 -0
  864. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_pull_coverage.py +0 -0
  865. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_pull_loader_coverage.py +0 -0
  866. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_pull_managed_control_plane.py +0 -0
  867. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_push.py +0 -0
  868. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_rate_limit_resolve.py +0 -0
  869. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_ref_pinning.py +0 -0
  870. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_env_test.py +0 -0
  871. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_environment_cache_integrity.py +0 -0
  872. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_environment_publish_integrity.py +0 -0
  873. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_envs_coverage.py +0 -0
  874. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_export.py +0 -0
  875. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_flash_mvp.py +0 -0
  876. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_flash_worker.py +0 -0
  877. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_flashinfer_aot_cache.py +0 -0
  878. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_flashinfer_cache_dirs.py +0 -0
  879. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_freesolo_api_transport.py +0 -0
  880. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_fused_expert_warmstart.py +0 -0
  881. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_generation_eos.py +0 -0
  882. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_github_urlopen_retry.py +0 -0
  883. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_gpu_type_single_field.py +0 -0
  884. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_gpus.py +0 -0
  885. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_grpo_checkpoint_durability.py +0 -0
  886. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_grpo_metric_stream.py +0 -0
  887. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_grpo_params.py +0 -0
  888. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_grpo_resident_sizing.py +0 -0
  889. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_grpo_reward_batching.py +0 -0
  890. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_grpo_reward_context.py +0 -0
  891. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_grpo_rollout_contract.py +0 -0
  892. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_grpo_rollout_identity.py +0 -0
  893. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_health_liveness.py +0 -0
  894. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_heartbeat_startup_cleanup.py +0 -0
  895. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_hf_retry.py +0 -0
  896. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_hosted_adapter_admission.py +0 -0
  897. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_image_environment_capability.py +0 -0
  898. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_image_incremental_processor.py +0 -0
  899. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_image_sft_markers.py +0 -0
  900. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_image_sft_processor_parity.py +0 -0
  901. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_image_tokens.py +0 -0
  902. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_infisical_secrets.py +0 -0
  903. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_instance_bootstrap_coverage.py +0 -0
  904. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_internal_client.py +0 -0
  905. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_kernel_bake_build_contracts.py +0 -0
  906. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_kernel_cache.py +0 -0
  907. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_kernel_cache_promotion.py +0 -0
  908. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_kernel_fingerprint.py +0 -0
  909. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_kv_util.py +0 -0
  910. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_local_credential_integrity.py +0 -0
  911. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_logging.py +0 -0
  912. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_login_perms.py +0 -0
  913. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_lora_rank_coverage.py +0 -0
  914. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_lora_rank_nested_rung.py +0 -0
  915. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_lora_rank_preflight.py +0 -0
  916. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_lora_targeting.py +0 -0
  917. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_lora_targeting_pinned_verl.py +0 -0
  918. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_managed_config_fields.py +0 -0
  919. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_managed_hf_repo.py +0 -0
  920. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_metrics_schema_agent_contract.py +0 -0
  921. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_mig_guard.py +0 -0
  922. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_modal_api_loop.py +0 -0
  923. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_modal_prefetch_snapshot.py +0 -0
  924. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_modal_provider.py +0 -0
  925. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_modal_startup.py +0 -0
  926. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_modal_training_lifecycle.py +0 -0
  927. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_modal_weight_warm.py +0 -0
  928. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_multi_gpu_gate.py +0 -0
  929. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_multimodal_boundary_integrity.py +0 -0
  930. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_multimodal_training.py +0 -0
  931. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_named_reward_metrics.py +0 -0
  932. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_notify_tests_repo.py +0 -0
  933. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_offline_http.py +0 -0
  934. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_oom_escalate_gpu.py +0 -0
  935. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_orchestrator_flash.py +0 -0
  936. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_packing.py +0 -0
  937. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_packing_coverage.py +0 -0
  938. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_persisted_spec_envelope.py +0 -0
  939. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_plane_lease.py +0 -0
  940. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_poll_helpers.py +0 -0
  941. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_preflight.py +0 -0
  942. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_processor_chat_template.py +0 -0
  943. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_projects.py +0 -0
  944. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_prompt_budget.py +0 -0
  945. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_removed_algorithms.py +0 -0
  946. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_removed_training_settings.py +0 -0
  947. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_replay_guard.py +0 -0
  948. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_repo_cleanup.py +0 -0
  949. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_resolve_params_b.py +0 -0
  950. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_resume_on_retry.py +0 -0
  951. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_retry_decision.py +0 -0
  952. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_reward_server_cleanup.py +0 -0
  953. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_rl_train.py +0 -0
  954. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_rollout_engine_prompt.py +0 -0
  955. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_rollout_samples.py +0 -0
  956. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_run_log_integrity.py +0 -0
  957. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_run_registry_lifecycle.py +0 -0
  958. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_runmgmt.py +0 -0
  959. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_runtime_capsule.py +0 -0
  960. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_runtime_credentials.py +0 -0
  961. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_runtime_secret_integrity.py +0 -0
  962. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_schema_boundary_integrity.py +0 -0
  963. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve.py +0 -0
  964. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_app_bootstrap_http.py +0 -0
  965. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_app_launch.py +0 -0
  966. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_app_manifest.py +0 -0
  967. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_app_materialize.py +0 -0
  968. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_app_packaging.py +0 -0
  969. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_app_progress.py +0 -0
  970. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_cache_resource_cleanup.py +0 -0
  971. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_chat_transport.py +0 -0
  972. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_control.py +0 -0
  973. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_modal_sdk.py +0 -0
  974. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  975. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_modal_teardown_identity.py +0 -0
  976. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_profile_qualification.py +0 -0
  977. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_profiles.py +0 -0
  978. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_provisioning_common.py +0 -0
  979. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_provisioning_modal.py +0 -0
  980. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_reasoning_content.py +0 -0
  981. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_resolve_provenance.py +0 -0
  982. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_runtime_adapters.py +0 -0
  983. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_runtime_engine.py +0 -0
  984. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_runtime_hub.py +0 -0
  985. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_runtime_package.py +0 -0
  986. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serve_runtime_types.py +0 -0
  987. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_server_app_coverage.py +0 -0
  988. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_server_auth_singleflight.py +0 -0
  989. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_server_billing.py +0 -0
  990. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_server_checkpoints_coverage.py +0 -0
  991. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_server_db.py +0 -0
  992. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_server_locks_coverage.py +0 -0
  993. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_server_managed_chat_requests.py +0 -0
  994. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_server_serving_resources.py +0 -0
  995. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_server_standalone.py +0 -0
  996. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serving_conformance_gate.py +0 -0
  997. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serving_context_preflight.py +0 -0
  998. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serving_contract.py +0 -0
  999. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serving_input_integrity.py +0 -0
  1000. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serving_schema_coverage.py +0 -0
  1001. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_serving_unavailable_errors.py +0 -0
  1002. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_batch_prefetch.py +0 -0
  1003. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_cancel_profile_pricing.py +0 -0
  1004. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_chunked_nll.py +0 -0
  1005. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_cost_reduction.py +0 -0
  1006. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_dataset_lazy_images.py +0 -0
  1007. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_dataset_nulls.py +0 -0
  1008. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_example_selection.py +0 -0
  1009. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_gc_off.py +0 -0
  1010. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_max_context.py +0 -0
  1011. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_memory_policy.py +0 -0
  1012. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_step_floor.py +0 -0
  1013. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_tools.py +0 -0
  1014. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_train.py +0 -0
  1015. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_warmup_schedule.py +0 -0
  1016. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_sft_workload.py +0 -0
  1017. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_smoke_content_integrity.py +0 -0
  1018. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_source_attestation_flow.py +0 -0
  1019. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_source_layout.py +0 -0
  1020. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_source_snapshot.py +0 -0
  1021. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_spec_and_validation.py +0 -0
  1022. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_spec_contract_bytes.py +0 -0
  1023. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_staged_environment.py +0 -0
  1024. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_status_reporting.py +0 -0
  1025. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_status_updates.py +0 -0
  1026. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_step_floor.py +0 -0
  1027. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_step_metrics.py +0 -0
  1028. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_step_timing.py +0 -0
  1029. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_structured_option_safety.py +0 -0
  1030. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_structured_outputs.py +0 -0
  1031. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_structured_runtime_options.py +0 -0
  1032. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_submission_outcome.py +0 -0
  1033. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_terminal_artifacts.py +0 -0
  1034. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_thinking_config.py +0 -0
  1035. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_thinking_tool_calls.py +0 -0
  1036. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_tool_call_exact_parsing.py +0 -0
  1037. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_tool_scalar_unions.py +0 -0
  1038. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_train_context_preflight.py +0 -0
  1039. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_training_controls.py +0 -0
  1040. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_training_phases.py +0 -0
  1041. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_transfer_queue_init.py +0 -0
  1042. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_type_comment_prose.py +0 -0
  1043. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_upstream_rollout_contract.py +0 -0
  1044. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_upstream_runtime_policy.py +0 -0
  1045. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_upstream_verl_contract.py +0 -0
  1046. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_verifiers.py +0 -0
  1047. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_verl_checkpoint_export.py +0 -0
  1048. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_verl_child_plugins.py +0 -0
  1049. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_verl_silence_watchdog.py +0 -0
  1050. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_version.py +0 -0
  1051. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_versioned_rollout_contract.py +0 -0
  1052. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  1053. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_vllm_moe_lora_backport.py +0 -0
  1054. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_vram_architecture.py +0 -0
  1055. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_wandb_link.py +0 -0
  1056. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_wandb_naming.py +0 -0
  1057. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_warmstart_adapter_download.py +0 -0
  1058. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_warmstart_cross_repo.py +0 -0
  1059. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_warmstart_error_attribution.py +0 -0
  1060. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_warmstart_image_adapters.py +0 -0
  1061. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_watchdog_startup_cleanup.py +0 -0
  1062. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_weight_cache.py +0 -0
  1063. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_worker_dryrun.py +0 -0
  1064. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_worker_hardexit.py +0 -0
  1065. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_worker_image.py +0 -0
  1066. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_worker_init_heartbeat.py +0 -0
  1067. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_worker_stack.py +0 -0
  1068. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_worker_thinking.py +0 -0
  1069. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_workflow_contracts.py +0 -0
  1070. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_workload_profile.py +0 -0
  1071. {freesolo_flash_dev-1.4.15 → freesolo_flash_dev-1.4.16}/tests/test_zero2_sharding_gate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.4.15
3
+ Version: 1.4.16
4
4
  Summary: Flash — managed LoRA post-training (SFT/GRPO) 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
@@ -382,7 +382,7 @@ MODELS: dict[str, ModelInfo] = {
382
382
  max_cpu_loras=16,
383
383
  max_lora_rank=128,
384
384
  max_model_len=262144,
385
- max_num_seqs=8,
385
+ max_num_seqs=16,
386
386
  tensor_parallel_size=1,
387
387
  gpu_memory_utilization=0.90,
388
388
  image_limit=MAX_IMAGES_PER_CONVERSATION,
@@ -549,7 +549,7 @@ MODELS["Qwen/Qwen3.5-9B-Base"] = replace(
549
549
  max_cpu_loras=16,
550
550
  max_lora_rank=128,
551
551
  max_model_len=262144,
552
- max_num_seqs=8,
552
+ max_num_seqs=32,
553
553
  tensor_parallel_size=1,
554
554
  gpu_memory_utilization=0.90,
555
555
  image_limit=MAX_IMAGES_PER_CONVERSATION,
@@ -58,9 +58,28 @@ def submit_custom(api, payload, *, client_train_schema=None):
58
58
  ) from error
59
59
 
60
60
 
61
- def connect(api, run_id, *, timeout=1200):
62
- deadline = time.monotonic() + timeout
63
- while time.monotonic() < deadline:
61
+ _ATTACH_RETRY_MAX_SECONDS = 30.0
62
+
63
+
64
+ def _transient_attach_error(exc):
65
+ """Whether a failed attach lookup can be retried rather than ending the run.
66
+
67
+ 425 is the documented "GPU still provisioning" answer. A 5xx or a transport failure (no
68
+ status) means the control plane could not answer this time -- for example a slow Modal
69
+ tunnel lookup or an overloaded plane -- not that the run is gone. Treating those as fatal made
70
+ run_custom cancel healthy runs. Every other 4xx (ended run, auth, ownership) stays fatal.
71
+ """
72
+ if isinstance(exc, ApiError):
73
+ status = exc.status or 0
74
+ return status == 425 or status >= 500
75
+ return isinstance(exc, ClientError)
76
+
77
+
78
+ def connect(api, run_id, *, timeout=1200, sleep=time.sleep, clock=time.monotonic):
79
+ deadline = clock() + timeout
80
+ failures = 0
81
+ last = None
82
+ while clock() < deadline:
64
83
  try:
65
84
  connection = api._request("GET", f"/v1/runs/{run_id}/custom")
66
85
  try:
@@ -70,13 +89,26 @@ def connect(api, run_id, *, timeout=1200):
70
89
  client._http.timeout = 300
71
90
  client.run_id = run_id
72
91
  return client
73
- except ClientError:
74
- pass # tunnel can exist before model loading finishes.
75
- except ApiError as exc:
76
- if exc.status != 425:
92
+ except ClientError as exc:
93
+ last = exc # tunnel can exist before model loading finishes.
94
+ delay = 2.0
95
+ except ClientError as exc:
96
+ if not _transient_attach_error(exc):
77
97
  raise
78
- time.sleep(2)
79
- raise TimeoutError(f"custom run {run_id} did not become ready")
98
+ last = exc
99
+ if isinstance(exc, ApiError) and exc.status == 425:
100
+ delay = 2.0
101
+ else:
102
+ failures += 1
103
+ delay = min(_ATTACH_RETRY_MAX_SECONDS, 2.0 * 2 ** min(failures, 4))
104
+ if failures == 1:
105
+ print(
106
+ f"control plane could not attach {run_id} yet ({exc}); retrying",
107
+ file=sys.stderr,
108
+ flush=True,
109
+ )
110
+ sleep(max(0.0, min(delay, deadline - clock())))
111
+ raise TimeoutError(f"custom run {run_id} did not become ready ({last})")
80
112
 
81
113
 
82
114
  def run_custom(args, spec, authored_train_keys):
@@ -13,6 +13,41 @@ from flash._internal.diagnostics import sanitize_diagnostic
13
13
  from flash.custom.types import integer
14
14
 
15
15
 
16
+ def _reset_cuda_peak():
17
+ """Start a fresh per-operation peak; best effort, a no-op without CUDA."""
18
+ try:
19
+ import torch
20
+
21
+ if torch.cuda.is_available():
22
+ torch.cuda.reset_peak_memory_stats()
23
+ except Exception:
24
+ pass
25
+
26
+
27
+ def _cuda_memory():
28
+ """GPU memory at the end of an operation (GiB), or None without CUDA.
29
+
30
+ Logged with every operation event so an out-of-memory failure shows whether memory crept up
31
+ over earlier operations or spiked inside the failing one. Never raises.
32
+ """
33
+ try:
34
+ import torch
35
+
36
+ if not torch.cuda.is_available():
37
+ return None
38
+ gib = 1024**3
39
+ free, total = torch.cuda.mem_get_info()
40
+ return {
41
+ "allocated_gib": round(torch.cuda.memory_allocated() / gib, 2),
42
+ "reserved_gib": round(torch.cuda.memory_reserved() / gib, 2),
43
+ "peak_allocated_gib": round(torch.cuda.max_memory_allocated() / gib, 2),
44
+ "free_gib": round(free / gib, 2),
45
+ "total_gib": round(total / gib, 2),
46
+ }
47
+ except Exception:
48
+ return None
49
+
50
+
16
51
  class SessionConflict(ValueError):
17
52
  """The caller must inspect/reconcile session state before doing more work."""
18
53
 
@@ -61,6 +96,9 @@ class TrainingSession:
61
96
  }
62
97
  if result.get("error"):
63
98
  event["error"] = result["error"]
99
+ memory = _cuda_memory()
100
+ if memory is not None:
101
+ event["cuda_memory"] = memory
64
102
  self.events.append(event)
65
103
  # prompts, token ids and credentials never enter worker stdout.
66
104
  print(json.dumps({"custom_training": event}, allow_nan=False), flush=True)
@@ -116,6 +154,7 @@ class TrainingSession:
116
154
  "step": self.step,
117
155
  }
118
156
  start = time.monotonic()
157
+ _reset_cuda_peak()
119
158
  try:
120
159
  output = self.backend.execute(operation, arguments)
121
160
  # reject invalid numerical results before committing a success receipt.
@@ -596,7 +596,9 @@ class JobHandle:
596
596
  class PollResult:
597
597
  ok: bool
598
598
  metrics: dict | None = None
599
- # failure: job_failed, oom, job_preempted, no_capacity, stalled, or poll_error.
599
+ # failure: job_failed, oom, job_preempted, no_capacity, stalled, poll_error, or
600
+ # checkpoint_upload_failed (training finished; the final CPU checkpoint upload failed after
601
+ # its own retries, and the committed handoff is preserved).
600
602
  failure: str | None = None
601
603
  detail: str | None = None
602
604
 
@@ -59,8 +59,20 @@ def cleanup_run(run_id: str) -> None:
59
59
  api.call(remove, timeout=api.TERMINATION_TIMEOUT_SECONDS)
60
60
 
61
61
 
62
- def _uploader_tags(handle):
63
- return {
62
+ # Training is finished and the GPU released by the time the CPU uploader runs, and the handoff
63
+ # Volume keeps the committed checkpoint, so a failed upload is retried on a fresh uploader instead
64
+ # of failing the run (`cpu_handoff` re-validates and re-uploads idempotently). Try 0 keeps the
65
+ # original name and tags so uploads launched by an older control plane still reconcile.
66
+ UPLOAD_TRIES = 3
67
+ _UPLOAD_RETRY_DELAYS_S = (15.0, 60.0)
68
+
69
+
70
+ class CheckpointUploadError(api.ModalApiError):
71
+ """Every CPU uploader try failed; the committed handoff Volume is preserved."""
72
+
73
+
74
+ def _uploader_tags(handle, try_index: int = 0):
75
+ tags = {
64
76
  "flash_owner": "flash-training",
65
77
  "flash_run": handle.run_id,
66
78
  "flash_attempt": str(handle.attempt),
@@ -68,28 +80,51 @@ def _uploader_tags(handle):
68
80
  "flash_role": "checkpoint-upload",
69
81
  "flash_scope": handle.scope,
70
82
  }
83
+ if try_index:
84
+ tags["flash_upload_try"] = str(try_index)
85
+ return tags
71
86
 
72
87
 
73
- def _uploader_name(handle):
74
- return "upload-" + handle.instance_id
88
+ def _uploader_name(handle, try_index: int = 0):
89
+ name = "upload-" + handle.instance_id
90
+ return f"{name}-r{try_index}" if try_index else name
75
91
 
76
92
 
77
- async def _find_owned_uploader(modal, client, handle):
93
+ async def _find_owned_uploader(modal, client, handle, try_index: int = 0):
78
94
  try:
79
95
  sandbox = await modal.Sandbox.from_name.aio(
80
96
  api.APP_NAME,
81
- _uploader_name(handle),
97
+ _uploader_name(handle, try_index),
82
98
  environment_name=api.environment(),
83
99
  client=client,
84
100
  )
85
101
  except modal.exception.NotFoundError:
86
102
  return None
87
- if await sandbox.get_tags.aio() != _uploader_tags(handle):
103
+ if await sandbox.get_tags.aio() != _uploader_tags(handle, try_index):
88
104
  raise UnreconciledCreateError("CPU uploader name belongs to another attempt")
89
105
  return sandbox
90
106
 
91
107
 
92
- def finish(handle, spec, *, deadline_at):
108
+ async def _launched_spec_sha256(modal, client, handle):
109
+ """Bind publication to the original launch, not a reconstructed polling spec."""
110
+ sandbox = await modal.Sandbox.from_id.aio(handle.instance_id, client=client)
111
+ tags = await sandbox.get_tags.aio()
112
+ expected = {
113
+ "flash_owner": "flash-training",
114
+ "flash_run": handle.run_id,
115
+ "flash_attempt": str(handle.attempt),
116
+ "flash_name": handle.name,
117
+ "flash_handoff": volume_name(handle.scope, handle.run_id, handle.attempt),
118
+ }
119
+ if any(tags.get(key) != value for key, value in expected.items()):
120
+ raise api.ModalApiError("CPU checkpoint parent launch identity mismatch")
121
+ digest = tags.get("flash_spec")
122
+ if not isinstance(digest, str) or not re.fullmatch(r"[0-9a-f]{64}", digest):
123
+ raise api.ModalApiError("CPU checkpoint parent launch has no valid specification digest")
124
+ return digest
125
+
126
+
127
+ def finish(handle, *, deadline_at):
93
128
  """The GPU must be stopped and its Volume committed before attaching a CPU reader."""
94
129
  from flash.providers._lifecycle.net.worker import worker_image_for_gpu
95
130
 
@@ -103,7 +138,6 @@ def finish(handle, spec, *, deadline_at):
103
138
  environment = {
104
139
  **storage_environment,
105
140
  "FLASH_JOB_SPEC_PATH": f"{MOUNT}/spec.json",
106
- "FLASH_EXPECTED_SPEC_SHA256": hashlib.sha256(spec.to_json().encode()).hexdigest(),
107
141
  "HF_REPO": handle.hf_repo,
108
142
  "RUN_ID": handle.run_id,
109
143
  "PHASE": handle.phase,
@@ -113,9 +147,22 @@ def finish(handle, spec, *, deadline_at):
113
147
  "PYTHONPATH": f"{MOUNT}/source",
114
148
  }
115
149
 
116
- async def upload(modal, client):
117
- sandbox = await _find_owned_uploader(modal, client, handle)
150
+ def uploader(try_index: int):
151
+ async def upload(modal, client):
152
+ await _run_uploader(modal, client, try_index)
153
+
154
+ return upload
155
+
156
+ async def _run_uploader(modal, client, try_index: int):
157
+ # a finished sandbox from an earlier try (or an earlier control plane) is not relaunched:
158
+ # its exit code is the result for that try.
159
+ sandbox = await _find_owned_uploader(modal, client, handle, try_index)
118
160
  if sandbox is None:
161
+ # Recovery reduces gpu.max_wall_seconds on the poll spec. Hashing that spec
162
+ # rejects the untouched handoff from the original GPU launch on every retry.
163
+ environment["FLASH_EXPECTED_SPEC_SHA256"] = await _launched_spec_sha256(
164
+ modal, client, handle
165
+ )
119
166
  app = await modal.App.lookup.aio(
120
167
  api.APP_NAME,
121
168
  environment_name=api.environment(),
@@ -134,8 +181,8 @@ def finish(handle, spec, *, deadline_at):
134
181
  "-m",
135
182
  "flash.engine.worker.io.cpu_handoff",
136
183
  app=app,
137
- name=_uploader_name(handle),
138
- tags=_uploader_tags(handle),
184
+ name=_uploader_name(handle, try_index),
185
+ tags=_uploader_tags(handle, try_index),
139
186
  image=modal.Image.from_registry(worker_image_for_gpu(handle.gpu)).pip_install(
140
187
  "azure-storage-blob>=12.24,<13", "azure-identity>=1.19,<2"
141
188
  ),
@@ -147,19 +194,42 @@ def finish(handle, spec, *, deadline_at):
147
194
  client=client,
148
195
  )
149
196
  except Exception:
150
- sandbox = await _find_owned_uploader(modal, client, handle)
197
+ sandbox = await _find_owned_uploader(modal, client, handle, try_index)
151
198
  if sandbox is None:
152
199
  raise UnreconciledCreateError(
153
200
  "CPU upload launch could not be reconciled"
154
201
  ) from None
155
202
  await sandbox.wait.aio()
156
- if await sandbox.poll.aio() != 0:
157
- raise api.ModalApiError("CPU checkpoint upload failed; prior durable save is preserved")
203
+ returncode = await sandbox.poll.aio()
204
+ if returncode != 0:
205
+ raise api.ModalApiError(
206
+ f"CPU checkpoint uploader {sandbox.object_id} exited with code {returncode}"
207
+ )
158
208
 
159
- api.call(upload, deadline_at=deadline_at, timeout=1900)
209
+ tries = 0
210
+ for try_index in range(UPLOAD_TRIES):
211
+ tries = try_index + 1
212
+ try:
213
+ api.call(uploader(try_index), deadline_at=deadline_at, timeout=1900)
214
+ break
215
+ except (api.ModalApiError, TimeoutError) as exc:
216
+ remaining = deadline_at - time.time()
217
+ if tries >= UPLOAD_TRIES or remaining <= 0:
218
+ raise CheckpointUploadError(
219
+ f"CPU checkpoint upload failed after {tries} "
220
+ f"{'try' if tries == 1 else 'tries'}; prior durable save is preserved; {exc}"
221
+ ) from exc
222
+ time.sleep(
223
+ min(
224
+ _UPLOAD_RETRY_DELAYS_S[min(try_index, len(_UPLOAD_RETRY_DELAYS_S) - 1)],
225
+ remaining,
226
+ )
227
+ )
160
228
  seconds = time.time() - started
161
229
  return {
162
230
  "cpu_upload_wall_seconds": seconds,
231
+ "cpu_upload_tries": tries,
232
+ # tries run one after another, so wall time already covers every uploader
163
233
  "cpu_upload_cost_upper_estimate_usd": seconds
164
234
  / 3600
165
235
  * (4 * CPU_HOURLY + 8 * MEMORY_GIB_HOURLY),
@@ -170,11 +240,12 @@ def cleanup(handle):
170
240
  """Cancel an owned CPU child before deleting its per-attempt storage."""
171
241
 
172
242
  async def remove(modal, client):
173
- sandbox = await _find_owned_uploader(modal, client, handle)
174
- if sandbox is not None:
175
- await sandbox.terminate.aio(wait=True)
176
- if await sandbox.poll.aio() is None:
177
- raise api.ModalApiError("CPU uploader termination was not confirmed")
243
+ for try_index in range(UPLOAD_TRIES):
244
+ sandbox = await _find_owned_uploader(modal, client, handle, try_index)
245
+ if sandbox is not None:
246
+ await sandbox.terminate.aio(wait=True)
247
+ if await sandbox.poll.aio() is None:
248
+ raise api.ModalApiError("CPU uploader termination was not confirmed")
178
249
  with contextlib.suppress(modal.exception.NotFoundError):
179
250
  await modal.Volume.objects.delete.aio(
180
251
  volume_name(handle.scope, handle.run_id, handle.attempt),
@@ -146,11 +146,16 @@ def poll(handle, spec, *, log=None, deadline_at=None):
146
146
  from flash.providers.modal import checkpoint_upload
147
147
 
148
148
  try:
149
- notes = checkpoint_upload.finish(h, spec, deadline_at=deadline_at)
150
- except (api.ModalApiError, TimeoutError):
151
- return PollResult(
152
- False, failure="job_preempted", detail="Final CPU checkpoint publication failed"
149
+ notes = checkpoint_upload.finish(h, deadline_at=deadline_at)
150
+ except (api.ModalApiError, TimeoutError) as exc:
151
+ # training completed and the handoff Volume is preserved; this is an upload failure
152
+ # (finish already retried it), not a preemption -- report it as its own category.
153
+ detail = (
154
+ str(exc)
155
+ if isinstance(exc, checkpoint_upload.CheckpointUploadError)
156
+ else "Final CPU checkpoint publication failed"
153
157
  )
158
+ return PollResult(False, failure="checkpoint_upload_failed", detail=detail)
154
159
  result.metrics.setdefault("notes", {}).update(notes)
155
160
  return result
156
161
 
@@ -102,7 +102,7 @@ def _checkpoints_from_files(spec: JobSpec, files: list[str]) -> list[dict]:
102
102
  return out
103
103
 
104
104
 
105
- def list_checkpoints(spec: JobSpec) -> list[dict]:
105
+ def list_checkpoints(spec: JobSpec, *, strict: bool = False) -> list[dict]:
106
106
  """Deployable per-step adapter snapshots for ``spec``, ascending by step.
107
107
 
108
108
  A step is included only if its adapter folder carries BOTH ``adapter_config.json`` AND a
@@ -110,8 +110,12 @@ def list_checkpoints(spec: JobSpec) -> list[dict]:
110
110
  entry: ``{"step", "adapter_prefix", "subfolder", "repo_id", "repo_type"}`` where
111
111
  ``adapter_prefix`` is the value to hand ``deploy_adapter`` to serve that exact step and
112
112
  ``subfolder`` is the full path of the adapter folder in the repo. Returns ``[]`` when the
113
- run has no artifact namespace or no published snapshots (older runs, or none saved yet)."""
114
- return _checkpoints_from_files(spec, _repo_files(spec, strict=False))
113
+ run has no artifact namespace or no published snapshots (older runs, or none saved yet).
114
+
115
+ ``strict=True`` raises ``CheckpointListingError`` when the artifact listing itself fails,
116
+ instead of reporting that failure as "no checkpoints". User-facing listing and deploy routes
117
+ use it so a transient store error is not shown as a run whose checkpoints are gone."""
118
+ return _checkpoints_from_files(spec, _repo_files(spec, strict=strict))
115
119
 
116
120
 
117
121
  def adapter_artifact_exists(
@@ -206,7 +206,7 @@ _PROFILES: dict[str, ServingProfile] = {
206
206
  quantization=None,
207
207
  kv_cache_dtype="fp8",
208
208
  max_model_len=262144,
209
- max_num_seqs=8,
209
+ max_num_seqs=16,
210
210
  max_num_batched_tokens=None,
211
211
  max_loras=16,
212
212
  max_cpu_loras=16,
@@ -234,7 +234,7 @@ _PROFILES: dict[str, ServingProfile] = {
234
234
  quantization=None,
235
235
  kv_cache_dtype="fp8",
236
236
  max_model_len=262144,
237
- max_num_seqs=8,
237
+ max_num_seqs=32,
238
238
  max_num_batched_tokens=None,
239
239
  max_loras=16,
240
240
  max_cpu_loras=16,
@@ -115,6 +115,12 @@ def _normalize_token_position(
115
115
  for candidate_id, candidate in candidates.items():
116
116
  if type(candidate_id) is not int:
117
117
  raise RuntimeNotReadyError("vllm returned a non-integer logprob token id")
118
+ if candidate_id != token_id and _is_masked_alternative(candidate):
119
+ # guided decoding (structured outputs, tool grammars) masks forbidden tokens to -inf,
120
+ # and vllm can still return them among the top-k alternatives. they have zero
121
+ # probability, so they are dropped instead of failing the whole request; the
122
+ # response may then carry fewer than `top_logprobs` alternatives.
123
+ continue
118
124
  record = _normalize_logprob_candidate(candidate_id, candidate)
119
125
  normalized.append((candidate_id, record))
120
126
  if candidate_id == token_id:
@@ -130,6 +136,12 @@ def _normalize_token_position(
130
136
  }
131
137
 
132
138
 
139
+ def _is_masked_alternative(candidate: Any) -> bool:
140
+ """A grammar-masked candidate: logprob is exactly -inf (NaN and +inf stay errors)."""
141
+ value = getattr(candidate, "logprob", None)
142
+ return type(value) in {int, float} and math.isinf(value) and value < 0
143
+
144
+
133
145
  def _normalize_logprob_candidate(token_id: int, candidate: Any) -> dict[str, Any]:
134
146
  raw_value = getattr(candidate, "logprob", None)
135
147
  if type(raw_value) not in {int, float}:
@@ -588,7 +588,14 @@ def run_checkpoints(run_id: str, key: Annotated[dict, Depends(require_key)]):
588
588
  from flash.runner.lifecycle.state import _internal_spec_from_status
589
589
 
590
590
  spec = _internal_spec_from_status(status)
591
- checkpoints = checkpoint_service.list_checkpoints(spec)
591
+ try:
592
+ checkpoints = checkpoint_service.list_checkpoints(spec, strict=True)
593
+ except checkpoint_service.CheckpointListingError:
594
+ # a failed artifact listing is not "this run has no checkpoints" (which reads as lost).
595
+ raise HTTPException(
596
+ status_code=503,
597
+ detail=f"could not list checkpoints for run {run_id} right now; retry shortly",
598
+ ) from None
592
599
  with contextlib.suppress(Exception):
593
600
  from flash.server.domain.registry.checkpoints import register_checkpoints_best_effort
594
601
 
@@ -79,7 +79,14 @@ def _resolve_deploy_step(run_id: str, spec, checkpoint_id: object) -> int | None
79
79
  step = parsed[1]
80
80
  if step is None:
81
81
  return None
82
- checkpoints = run_checkpoints.list_checkpoints(spec)
82
+ try:
83
+ checkpoints = run_checkpoints.list_checkpoints(spec, strict=True)
84
+ except run_checkpoints.CheckpointListingError:
85
+ # do not turn a transient listing failure into "no deployable checkpoint (available: none)"
86
+ raise HTTPException(
87
+ status_code=503,
88
+ detail=f"could not list checkpoints for run {run_id} right now; retry shortly",
89
+ ) from None
83
90
  if any(candidate["step"] == step for candidate in checkpoints):
84
91
  return step
85
92
  available = ", ".join(str(candidate["step"]) for candidate in checkpoints) or "none"
@@ -148,23 +148,17 @@ def scaledown_window_for(gpu: str) -> int:
148
148
  # gpu model engines scale to zero. inference and adapter registration remote calls start the matching
149
149
  # parameter-bound engine on demand.
150
150
  MIN_CONTAINERS = 0
151
- # Limit GPU autoscaling to four containers per model, including its active buffer. `base_model` is
151
+ # Limit GPU autoscaling to four containers per model. `base_model` is
152
152
  # a modal.parameter(), so each model has its own pool and cannot borrow another model's capacity.
153
153
  # Requests queue when all four containers are busy. This applies independently in each environment.
154
154
  MAX_CONTAINERS = 4
155
- # One spare warm container for each autoscaling pool -- every base-model engine AND the cpu router --
156
- # so a burst past `TARGET_INPUTS` does not pay a full cold boot (420s on L40S, 900s on H100, 1010s on
157
- # H200) before it can be served. Modal only provisions the buffer while a Function is ACTIVE, so this
158
- # does not defeat `MIN_CONTAINERS = 0`: idle engines still scale to zero and bill nothing.
159
- BUFFER_CONTAINERS = 1
160
- # Concurrent requests packed onto one base-model GPU before Modal autoscales a new (costly) one.
161
- # A prior real-GPU sweep on A10G/Qwen2.5-1.5B showed vLLM
162
- # throughput scaling near-linearly with no saturation through 128 concurrent, while TTFT stayed
163
- # <60 ms — so the old default of 32 left ~2x of each GPU idle. 64 packs ~2.3x the throughput per
164
- # GPU for ~+14% per-request latency (now blunted by the fp8 KV cache, which is on for every base —
165
- # see settings.KV_CACHE_DTYPE), roughly halving GPU count for the same load.
166
- # Per-engine concurrency is sized by _engine_concurrency from each model's max_num_seqs; these are
167
- # the router/global ceiling. TARGET_INPUTS auto-derives to 48 (= 64*3//4).
155
+ # A spare GPU per active model doubles the allocation for lightly loaded pools, then
156
+ # remains billable through the 35-minute idle window. Scale GPUs from actual demand;
157
+ # retain a cheap CPU-router buffer so admission does not wait on router startup.
158
+ ENGINE_BUFFER_CONTAINERS = 0
159
+ ROUTER_BUFFER_CONTAINERS = 1
160
+ # Router concurrency and the fallback ceiling for engines without a sequence cap.
161
+ # Qwen engines use their own qualified max_num_seqs, not this router capacity.
168
162
  MAX_INPUTS = 64
169
163
  TARGET_INPUTS = max(1, MAX_INPUTS * 3 // 4)
170
164
 
@@ -341,22 +335,18 @@ from flash.serving.src.engine.model_config import ( # noqa: E402
341
335
  def _engine_concurrency(base_model: str) -> tuple[int, int]:
342
336
  """return Modal input admission aligned with the engine's sequence capacity.
343
337
 
344
- Modal counts requests while vLLM schedules sequences. The prior 2x buffer admitted 16 requests
345
- onto every current 8-sequence engine, so normal ``n=1`` traffic queued half of them inside the
346
- container and delayed scale-out until 12 inputs. OpenAI ``n`` can fan one input out to as many as
347
- four sequences, but sizing every container for that rare worst case would leave normal traffic
348
- underutilizing the GPU and cold-boot expensive replicas prematurely. Cap request admission at the
349
- authored sequence capacity instead: current tiers admit 8 and scale out at 6. This deliberately
350
- changes Modal's request knobs, not ``max_num_seqs``: raising the engine cap is not allocation-free,
351
- and the 35B tier has a documented startup profiling OOM at higher sequence counts. Models without
352
- an authored sequence cap retain the global sizing until their real capacity is explicit.
338
+ Fill the qualified sequence capacity before requesting another GPU. A 75% target
339
+ provisioned extra replicas while ordinary n=1 batches still had room. Keep the hard
340
+ request cap at the sequence limit so this does not introduce a hidden vLLM queue.
341
+ n>1 requests still share the same bounded scheduler capacity. Larger sequence caps
342
+ need GPU qualification, especially for the memory-bound 35B MoE. Models without an
343
+ authored cap use the global ceiling.
353
344
  """
354
345
  configured = engine_overrides_for(base_model).get("max_num_seqs")
355
346
  if configured is None:
356
- return MAX_INPUTS, TARGET_INPUTS
347
+ return MAX_INPUTS, MAX_INPUTS
357
348
  max_inputs = max(1, min(MAX_INPUTS, int(configured)))
358
- target_inputs = max(1, max_inputs * 3 // 4)
359
- return max_inputs, target_inputs
349
+ return max_inputs, max_inputs
360
350
 
361
351
 
362
352
  def _engine_class_name(gpu: str, max_inputs: int) -> str:
@@ -474,7 +464,7 @@ def _build_engine(
474
464
  timeout=REQUEST_TIMEOUT_SECONDS,
475
465
  min_containers=MIN_CONTAINERS,
476
466
  max_containers=MAX_CONTAINERS,
477
- buffer_containers=BUFFER_CONTAINERS,
467
+ buffer_containers=ENGINE_BUFFER_CONTAINERS,
478
468
  )(modal.concurrent(max_inputs=max_inputs, target_inputs=target_inputs)(_Engine))
479
469
  # Rebind the module name to the decorated handle, matching the normal ``@app.cls class X`` pattern
480
470
  # where the module attribute ends up referring to the decorated class.
@@ -498,7 +488,7 @@ def _distinct_engine_keys() -> list[tuple[str, int]]:
498
488
  # One engine class per distinct (GPU tier, concurrency) — see _engine_concurrency for why max_inputs
499
489
  # is part of the class identity (Modal fixes concurrency per class).
500
490
  ENGINE_BY_KEY: dict[tuple[str, int], Any] = {
501
- (gpu, mi): _build_engine(gpu, _engine_class_name(gpu, mi), mi, max(1, mi * 3 // 4))
491
+ (gpu, mi): _build_engine(gpu, _engine_class_name(gpu, mi), mi, mi)
502
492
  for (gpu, mi) in _distinct_engine_keys()
503
493
  }
504
494
 
@@ -874,11 +864,11 @@ def _base_model_records() -> list:
874
864
  @app.function(
875
865
  secrets=runtime_secrets,
876
866
  region="us-east", # keep admission, private HTTP dispatch, and serving ingress nearby
877
- cpu=8, # exact long-context token counting and concurrent stream framing
878
- memory=16384, # pinned tokenizers plus bounded in-flight prompt state
867
+ cpu=2, # HTTP parsing and stream framing; the engine handles tokenization
868
+ memory=4096, # reservation, not a hard cap: near-limit request bursts need additional memory
879
869
  nonpreemptible=True, # a CPU-host interruption cannot resume an open token stream
880
870
  min_containers=1, # one warm CPU front door (hardcoded; no deploy-time knob)
881
- buffer_containers=BUFFER_CONTAINERS, # scales out with the engines; see BUFFER_CONTAINERS
871
+ buffer_containers=ROUTER_BUFFER_CONTAINERS,
882
872
  timeout=ROUTER_TIMEOUT_SECONDS, # must cover engine cold start (see ROUTER_TIMEOUT_SECONDS)
883
873
  )
884
874
  @modal.concurrent(max_inputs=MAX_INPUTS, target_inputs=TARGET_INPUTS)