freesolo-flash-dev 1.4.8__tar.gz → 1.4.9__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 (1065) hide show
  1. freesolo_flash_dev-1.4.9/.github/scripts/ci_sharding.py +59 -0
  2. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/ci.yml +70 -79
  3. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/Dockerfile +4 -2
  4. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/PKG-INFO +1 -1
  5. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/backend.py +43 -12
  6. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/worker.py +25 -0
  7. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/schema/__init__.py +5 -1
  8. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/schema/custom.py +6 -0
  9. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/app/modal_app.py +28 -19
  10. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/lora_engine.py +25 -0
  11. freesolo_flash_dev-1.4.9/flash/serving/src/http/authorization_transport.py +59 -0
  12. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/pyproject.toml +2 -2
  13. freesolo_flash_dev-1.4.9/tests/serving/test_authorization_transport.py +97 -0
  14. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_chat_authorizer.py +91 -3
  15. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_immutable_engine.py +68 -0
  16. freesolo_flash_dev-1.4.9/tests/test_ci_sharding.py +143 -0
  17. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_custom_managed.py +21 -0
  18. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_custom_worker.py +41 -0
  19. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_worker_image.py +3 -1
  20. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/uv.lock +1 -1
  21. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.dockerignore +0 -0
  22. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.env.example +0 -0
  23. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/CODEOWNERS +0 -0
  24. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  25. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  26. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  27. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  28. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/dependabot.yml +0 -0
  29. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/scripts/notify_tests_repo.py +0 -0
  30. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/auto-rebake.yml +0 -0
  31. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/bake-kernel-cache.yml +0 -0
  32. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/deploy-deepinfer.yml +0 -0
  33. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/deploy-modal-dev.yml +0 -0
  34. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/deploy-modal.yml +0 -0
  35. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/dev-kernel-cache.yml +0 -0
  36. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/main-source-guard.yml +0 -0
  37. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/notify-tests-repo.yml +0 -0
  38. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  39. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/publish-dev.yml +0 -0
  40. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/publish-image.yml +0 -0
  41. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/publish-serving-image.yml +0 -0
  42. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/publish.yml +0 -0
  43. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/version-parity.yml +0 -0
  44. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.github/workflows/worker-image.yml +0 -0
  45. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/.gitignore +0 -0
  46. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/CHANGELOG.md +0 -0
  47. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/CODE_OF_CONDUCT.md +0 -0
  48. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/CONTRIBUTING.md +0 -0
  49. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/Dockerfile.serve +0 -0
  50. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/Dockerfile.worker +0 -0
  51. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/LICENSE +0 -0
  52. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/NOTICE +0 -0
  53. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/README.md +0 -0
  54. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/SECURITY.md +0 -0
  55. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/SELF_HOSTING.md +0 -0
  56. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/build/kernel_cache/.gitignore +0 -0
  57. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/build/kernel_cache/.keep +0 -0
  58. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/deploy/infisical/README.md +0 -0
  59. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/deploy/infisical/entrypoint.sh +0 -0
  60. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/docker/Dockerfile.kernelcache +0 -0
  61. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/docker/Dockerfile.kernelcache.relayer +0 -0
  62. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/docker/bake_kernel_cache.py +0 -0
  63. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/docker/bake_sandbox_entry.py +0 -0
  64. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/docker/extract_cudart_fix.py +0 -0
  65. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/docker/kernel_fingerprint.py +0 -0
  66. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/docker/patch_vllm_moe_lora.py +0 -0
  67. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/__init__.py +0 -0
  68. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/_internal/__init__.py +0 -0
  69. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/_internal/background.py +0 -0
  70. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/_internal/channel.py +0 -0
  71. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/_internal/diagnostics.py +0 -0
  72. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/_internal/fileio.py +0 -0
  73. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/_internal/http.py +0 -0
  74. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/_internal/http_deadline.py +0 -0
  75. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/_internal/logging.py +0 -0
  76. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/_internal/openai_sse.py +0 -0
  77. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/_internal/paths.py +0 -0
  78. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/_internal/version.py +0 -0
  79. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/adapters/__init__.py +0 -0
  80. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/adapters/artifacts.py +0 -0
  81. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/adapters/config.py +0 -0
  82. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/adapters/fused_experts.py +0 -0
  83. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/adapters/lora_rank.py +0 -0
  84. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/adapters/targets.py +0 -0
  85. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/__init__.py +0 -0
  86. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/__main__.py +0 -0
  87. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/__init__.py +0 -0
  88. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/__init__.py +0 -0
  89. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/ops/__init__.py +0 -0
  90. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/ops/imports.py +0 -0
  91. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/ops/list.py +0 -0
  92. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/ops/push.py +0 -0
  93. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/ops/retained.py +0 -0
  94. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/ops/setup.py +0 -0
  95. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  96. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/testing/__init__.py +0 -0
  97. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/testing/episode.py +0 -0
  98. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/testing/eval.py +0 -0
  99. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/testing/eval_args.py +0 -0
  100. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/testing/evaluations.py +0 -0
  101. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/testing/params.py +0 -0
  102. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/testing/test.py +0 -0
  103. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/env/testing/warnings.py +0 -0
  104. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/ops/__init__.py +0 -0
  105. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/ops/account.py +0 -0
  106. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/ops/catalog.py +0 -0
  107. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/ops/deploy.py +0 -0
  108. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/ops/log_follow.py +0 -0
  109. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/ops/prompt_budget.py +0 -0
  110. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/ops/runs.py +0 -0
  111. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/ops/traces.py +0 -0
  112. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/ops/train.py +0 -0
  113. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/ops/worker_output.py +0 -0
  114. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/serving/__init__.py +0 -0
  115. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/serving/deploy.py +0 -0
  116. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/serving/identity.py +0 -0
  117. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/serving/status.py +0 -0
  118. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/commands/serving/undeploy.py +0 -0
  119. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/parsing/__init__.py +0 -0
  120. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/parsing/account.py +0 -0
  121. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/parsing/custom.py +0 -0
  122. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/parsing/env.py +0 -0
  123. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/parsing/errors.py +0 -0
  124. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/parsing/main.py +0 -0
  125. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/parsing/models.py +0 -0
  126. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/parsing/serve_parser.py +0 -0
  127. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/parsing/traces.py +0 -0
  128. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/parsing/training.py +0 -0
  129. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/scaffold/TRAINING.md +0 -0
  130. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/scaffold/__init__.py +0 -0
  131. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/ui/__init__.py +0 -0
  132. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/ui/cost.py +0 -0
  133. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/ui/env_panels.py +0 -0
  134. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/ui/heartbeat.py +0 -0
  135. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/ui/render.py +0 -0
  136. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/ui/tables.py +0 -0
  137. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cli/ui/tty.py +0 -0
  138. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/client/__init__.py +0 -0
  139. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/client/config.py +0 -0
  140. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/client/freesolo_api.py +0 -0
  141. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/client/http.py +0 -0
  142. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/client/runtime_secrets.py +0 -0
  143. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/client/shapes.py +0 -0
  144. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/client/specs.py +0 -0
  145. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/client/streaming.py +0 -0
  146. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/content/__init__.py +0 -0
  147. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/content/image_descriptors.py +0 -0
  148. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/content/multimodal.py +0 -0
  149. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/content/processor.py +0 -0
  150. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/content/reasoning_normalization.py +0 -0
  151. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/content/stop_tokens.py +0 -0
  152. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/content/structured_options.py +0 -0
  153. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/content/structured_outputs.py +0 -0
  154. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/content/thinking.py +0 -0
  155. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/core/__init__.py +0 -0
  156. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/core/catalog.py +0 -0
  157. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/core/grpo.py +0 -0
  158. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/core/spec.py +0 -0
  159. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/core/spec_persistence.py +0 -0
  160. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cost/__init__.py +0 -0
  161. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cost/analytical.py +0 -0
  162. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cost/currency.py +0 -0
  163. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cost/facts.py +0 -0
  164. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cost/spec.py +0 -0
  165. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/cost/types.py +0 -0
  166. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/__init__.py +0 -0
  167. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/async_client.py +0 -0
  168. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/billing.py +0 -0
  169. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/checkpoints.py +0 -0
  170. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/client.py +0 -0
  171. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/controller.py +0 -0
  172. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/managed.py +0 -0
  173. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/server.py +0 -0
  174. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/session.py +0 -0
  175. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/starter.py +0 -0
  176. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/types.py +0 -0
  177. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/custom/validation.py +0 -0
  178. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/__init__.py +0 -0
  179. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/plan/__init__.py +0 -0
  180. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/plan/kv_sizing.py +0 -0
  181. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/plan/model_config_probe.py +0 -0
  182. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/plan/prompt_budget.py +0 -0
  183. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/plan/recipe.py +0 -0
  184. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/plan/steps.py +0 -0
  185. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/plan/vram.py +0 -0
  186. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/profiling/__init__.py +0 -0
  187. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/profiling/dataset_profile.py +0 -0
  188. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/profiling/image_tokens.py +0 -0
  189. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/profiling/reasoning_render.py +0 -0
  190. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/profiling/sft_image_rows.py +0 -0
  191. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/profiling/sft_rows.py +0 -0
  192. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/profiling/sft_tools.py +0 -0
  193. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/profiling/sft_workload.py +0 -0
  194. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/profiling/tokenizer.py +0 -0
  195. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/profiling/workload_profile.py +0 -0
  196. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/result/__init__.py +0 -0
  197. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/result/accounting.py +0 -0
  198. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/result/rollout_samples.py +0 -0
  199. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/support/__init__.py +0 -0
  200. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/support/checkpoint_transport.py +0 -0
  201. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/support/huggingface.py +0 -0
  202. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/support/model_snapshot.py +0 -0
  203. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/support/verl_checkpoint.py +0 -0
  204. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/support/worker_entrypoint.py +0 -0
  205. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/__init__.py +0 -0
  206. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/__main__.py +0 -0
  207. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/entry/__init__.py +0 -0
  208. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/entry/rl.py +0 -0
  209. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/entry/worker.py +0 -0
  210. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/io/__init__.py +0 -0
  211. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/io/cpu_handoff.py +0 -0
  212. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/io/heartbeat.py +0 -0
  213. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/io/hf.py +0 -0
  214. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/io/prefetch.py +0 -0
  215. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/io/transfer.py +0 -0
  216. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/io/wandb_log.py +0 -0
  217. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/model/__init__.py +0 -0
  218. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/model/adapter.py +0 -0
  219. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/model/chatml_mask.py +0 -0
  220. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/model/decoding.py +0 -0
  221. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/model/lora.py +0 -0
  222. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/model/packing.py +0 -0
  223. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/perf/__init__.py +0 -0
  224. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/perf/diagnostics.py +0 -0
  225. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/perf/lifecycle.py +0 -0
  226. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/perf/memory.py +0 -0
  227. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/perf/model_size.py +0 -0
  228. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/runtime/__init__.py +0 -0
  229. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  230. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/runtime/phases.py +0 -0
  231. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/runtime/rng.py +0 -0
  232. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/runtime/state.py +0 -0
  233. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/__init__.py +0 -0
  234. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/__init__.py +0 -0
  235. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/__init__.py +0 -0
  236. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/agents.yaml +0 -0
  237. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/batch.py +0 -0
  238. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/compact_checkpoint.py +0 -0
  239. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/configuration.py +0 -0
  240. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/engine.py +0 -0
  241. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/flashinfer_cache.py +0 -0
  242. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/glue.py +0 -0
  243. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/launch.py +0 -0
  244. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/model.py +0 -0
  245. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/observations.py +0 -0
  246. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/options.py +0 -0
  247. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/prompt_media.py +0 -0
  248. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/queue.py +0 -0
  249. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/readiness.py +0 -0
  250. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/reference.py +0 -0
  251. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/registration.py +0 -0
  252. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/replay.py +0 -0
  253. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/replay_guard.py +0 -0
  254. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/rollout.py +0 -0
  255. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/rollout_contract.py +0 -0
  256. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/startup.py +0 -0
  257. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/tracking.py +0 -0
  258. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/trainer.py +0 -0
  259. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/upstream.py +0 -0
  260. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/vllm_worker.py +0 -0
  261. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/child/worker.py +0 -0
  262. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  263. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  264. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  265. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/lifecycle/persistence.py +0 -0
  266. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  267. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/lifecycle/timing.py +0 -0
  268. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/rollout/__init__.py +0 -0
  269. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/rollout/contract.py +0 -0
  270. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/rollout/episode.py +0 -0
  271. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/rollout/generation.py +0 -0
  272. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/rollout/identity.py +0 -0
  273. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/core/rollout/lifecycle.py +0 -0
  274. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/entry/__init__.py +0 -0
  275. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/entry/backend_common.py +0 -0
  276. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  277. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/entry/rl_train.py +0 -0
  278. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  279. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  280. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/entry/sft_train.py +0 -0
  281. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  282. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/__init__.py +0 -0
  283. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  284. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/child/contract.py +0 -0
  285. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/child/credit.py +0 -0
  286. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/child/entry.py +0 -0
  287. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/child/identity.py +0 -0
  288. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/child/metrics.py +0 -0
  289. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  290. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/child/reward.py +0 -0
  291. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/child/rollout.py +0 -0
  292. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/child/trainer.py +0 -0
  293. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/child/transport.py +0 -0
  294. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  295. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  296. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/launch/config.py +0 -0
  297. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  298. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  299. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  300. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  301. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  302. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  303. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  304. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/sft/__init__.py +0 -0
  305. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/sft/child/dataset.py +0 -0
  306. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/sft/child/entry.py +0 -0
  307. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/sft/child/loop.py +0 -0
  308. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/sft/child/schedule.py +0 -0
  309. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/sft/child/trainer.py +0 -0
  310. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  311. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  312. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/train/sft/setup/config.py +0 -0
  313. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/verl/__init__.py +0 -0
  314. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/verl/adapter_merger.py +0 -0
  315. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/verl/capabilities.py +0 -0
  316. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/verl/checkpoints.py +0 -0
  317. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/verl/child_io.py +0 -0
  318. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/verl/diagnostics.py +0 -0
  319. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/verl/parallelism.py +0 -0
  320. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/engine/worker/verl/parent_work.py +0 -0
  321. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/__init__.py +0 -0
  322. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/loading/__init__.py +0 -0
  323. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/loading/adapter.py +0 -0
  324. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/loading/base.py +0 -0
  325. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/loading/loader.py +0 -0
  326. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/loading/pull.py +0 -0
  327. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/loading/staged.py +0 -0
  328. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/meta/__init__.py +0 -0
  329. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/meta/cache_security.py +0 -0
  330. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/meta/cache_storage.py +0 -0
  331. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/meta/dataset_selection.py +0 -0
  332. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/meta/evaluations.py +0 -0
  333. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/meta/identity.py +0 -0
  334. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/meta/namespace_listing.py +0 -0
  335. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/package/__init__.py +0 -0
  336. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/package/direct_tokens.py +0 -0
  337. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/package/limits.py +0 -0
  338. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/package/unpack.py +0 -0
  339. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/registry/__init__.py +0 -0
  340. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/registry/azure.py +0 -0
  341. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/registry/packages.py +0 -0
  342. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/scoring/__init__.py +0 -0
  343. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/scoring/context.py +0 -0
  344. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/envs/scoring/response.py +0 -0
  345. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/__init__.py +0 -0
  346. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/__init__.py +0 -0
  347. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  348. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/bootstrapping/attempt.py +0 -0
  349. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
  350. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  351. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  352. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/bootstrapping/processes.py +0 -0
  353. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  354. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  355. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/instances/instance.py +0 -0
  356. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/instances/poll.py +0 -0
  357. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  358. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  359. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/net/__init__.py +0 -0
  360. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/net/auth.py +0 -0
  361. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/net/deadline.py +0 -0
  362. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/net/http.py +0 -0
  363. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/_lifecycle/net/worker.py +0 -0
  364. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/artifacts/__init__.py +0 -0
  365. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/artifacts/hf.py +0 -0
  366. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/artifacts/weight_cache.py +0 -0
  367. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/core/__init__.py +0 -0
  368. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/core/allocator.py +0 -0
  369. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/core/base.py +0 -0
  370. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/core/fit_errors.py +0 -0
  371. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/core/preflight.py +0 -0
  372. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/core/registry.py +0 -0
  373. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/core/sharding.py +0 -0
  374. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/modal/__init__.py +0 -0
  375. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/modal/api.py +0 -0
  376. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/modal/auth.py +0 -0
  377. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/modal/checkpoint_upload.py +0 -0
  378. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/modal/handles.py +0 -0
  379. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/modal/jobs.py +0 -0
  380. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/modal/prefetch.py +0 -0
  381. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/modal/pricing.py +0 -0
  382. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/modal/provider.py +0 -0
  383. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/providers/modal/startup.py +0 -0
  384. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/py.typed +0 -0
  385. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/__init__.py +0 -0
  386. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/accounting/__init__.py +0 -0
  387. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/accounting/artifacts.py +0 -0
  388. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/accounting/costs.py +0 -0
  389. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/accounting/weight_cache.py +0 -0
  390. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/lifecycle/__init__.py +0 -0
  391. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/lifecycle/attempts.py +0 -0
  392. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/lifecycle/claim_lock.py +0 -0
  393. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/lifecycle/cleanup.py +0 -0
  394. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/lifecycle/deadlines.py +0 -0
  395. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/lifecycle/preparation.py +0 -0
  396. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/lifecycle/reporting.py +0 -0
  397. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/lifecycle/runtime_credentials.py +0 -0
  398. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/lifecycle/state.py +0 -0
  399. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/lifecycle/status.py +0 -0
  400. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/lifecycle/submit.py +0 -0
  401. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/results/__init__.py +0 -0
  402. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/results/checkpoints.py +0 -0
  403. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/results/deployments.py +0 -0
  404. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/supervise/__init__.py +0 -0
  405. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/supervise/attach.py +0 -0
  406. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/supervise/deploy.py +0 -0
  407. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/supervise/errors.py +0 -0
  408. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/supervise/execution.py +0 -0
  409. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/supervise/lifecycle.py +0 -0
  410. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/supervise/recovery.py +0 -0
  411. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/supervise/retry_decision.py +0 -0
  412. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runner/supervise/transitions.py +0 -0
  413. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runtime_capsule/__init__.py +0 -0
  414. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runtime_capsule/build.py +0 -0
  415. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runtime_capsule/manifest.py +0 -0
  416. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/runtime_capsule/profiles.py +0 -0
  417. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/schema/fields.py +0 -0
  418. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/__init__.py +0 -0
  419. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/app/__init__.py +0 -0
  420. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/app/__main__.py +0 -0
  421. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/app/bootstrap.py +0 -0
  422. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/app/chat_stream.py +0 -0
  423. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/app/http.py +0 -0
  424. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/app/launch.py +0 -0
  425. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/app/manifest.py +0 -0
  426. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/app/materialize.py +0 -0
  427. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/app/openai.py +0 -0
  428. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/app/progress.py +0 -0
  429. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/contract/__init__.py +0 -0
  430. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/contract/errors.py +0 -0
  431. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/contract/protocol.py +0 -0
  432. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/contract/provenance.py +0 -0
  433. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/contract/responses.py +0 -0
  434. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/contract/urls.py +0 -0
  435. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/control/__init__.py +0 -0
  436. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/control/_canonical.py +0 -0
  437. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/control/_serialization.py +0 -0
  438. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/control/_urls.py +0 -0
  439. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/control/credentials.py +0 -0
  440. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/control/planning.py +0 -0
  441. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/control/types.py +0 -0
  442. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/deployment/__init__.py +0 -0
  443. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/deployment/adapter_check.py +0 -0
  444. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/deployment/deploy.py +0 -0
  445. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/deployment/download.py +0 -0
  446. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/deployment/export.py +0 -0
  447. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/deployment/preflight.py +0 -0
  448. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/deployment/profiles.py +0 -0
  449. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/deployment/readiness.py +0 -0
  450. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/deployment/resolve.py +0 -0
  451. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/__init__.py +0 -0
  452. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/common/__init__.py +0 -0
  453. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/common/records.py +0 -0
  454. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/__init__.py +0 -0
  455. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  456. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  457. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  458. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  459. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  460. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  461. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  462. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  463. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  464. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  465. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  466. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  467. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  468. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/request/__init__.py +0 -0
  469. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/request/openai.py +0 -0
  470. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/request/runtime_support.py +0 -0
  471. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/request/schema_types.py +0 -0
  472. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/request/streaming.py +0 -0
  473. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/request/text_scan.py +0 -0
  474. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/request/thinking.py +0 -0
  475. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/request/tool_calls.py +0 -0
  476. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/request/tool_template.py +0 -0
  477. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/request/transport.py +0 -0
  478. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/request/validation.py +0 -0
  479. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/__init__.py +0 -0
  480. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/adapters.py +0 -0
  481. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/cache_admission.py +0 -0
  482. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/cache_retention.py +0 -0
  483. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/cache_scheduler.py +0 -0
  484. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/engine.py +0 -0
  485. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/errors.py +0 -0
  486. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/hub.py +0 -0
  487. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/multimodal.py +0 -0
  488. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/prompt.py +0 -0
  489. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/prompt_cache.py +0 -0
  490. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/reasoning_tools.py +0 -0
  491. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/sampling.py +0 -0
  492. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/structured_outputs.py +0 -0
  493. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/token_batch.py +0 -0
  494. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/token_prefix_cache.py +0 -0
  495. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/tool_calls.py +0 -0
  496. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serve/runtime/types.py +0 -0
  497. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/__init__.py +0 -0
  498. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/__main__.py +0 -0
  499. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/asgi/__init__.py +0 -0
  500. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/asgi/app.py +0 -0
  501. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/asgi/cli.py +0 -0
  502. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/billing/__init__.py +0 -0
  503. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/billing/charges.py +0 -0
  504. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/billing/retry.py +0 -0
  505. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/__init__.py +0 -0
  506. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/ops/__init__.py +0 -0
  507. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/ops/repo_cleanup.py +0 -0
  508. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/ops/serving_resources.py +0 -0
  509. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/registry/__init__.py +0 -0
  510. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/registry/blob_envs.py +0 -0
  511. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/registry/checkpoints.py +0 -0
  512. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/registry/env_files.py +0 -0
  513. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/registry/environment_registry.py +0 -0
  514. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/registry/envs.py +0 -0
  515. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/registry/projects.py +0 -0
  516. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/domain/registry/runs.py +0 -0
  517. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/platform/__init__.py +0 -0
  518. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/platform/auth.py +0 -0
  519. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/platform/db.py +0 -0
  520. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/platform/deployment_jobs.py +0 -0
  521. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/platform/deployment_state.py +0 -0
  522. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/platform/deps.py +0 -0
  523. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/platform/internal_client.py +0 -0
  524. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/platform/locks.py +0 -0
  525. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/platform/plane_lease.py +0 -0
  526. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/platform/runtime.py +0 -0
  527. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/__init__.py +0 -0
  528. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/adapter_download.py +0 -0
  529. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/custom.py +0 -0
  530. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/env_files.py +0 -0
  531. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/envs.py +0 -0
  532. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/meta.py +0 -0
  533. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/runs.py +0 -0
  534. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/serving.py +0 -0
  535. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/serving_chat.py +0 -0
  536. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/serving_completion.py +0 -0
  537. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/serving_revisions.py +0 -0
  538. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/server/routes/serving_smoke.py +0 -0
  539. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/__init__.py +0 -0
  540. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/app/GPU_QUALIFICATION.md +0 -0
  541. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/app/README.md +0 -0
  542. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/app/__init__.py +0 -0
  543. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/app/timeouts.py +0 -0
  544. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/__init__.py +0 -0
  545. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/app/README.md +0 -0
  546. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/app/__init__.py +0 -0
  547. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/app/autoscaling.py +0 -0
  548. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/app/client.py +0 -0
  549. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/app/events.py +0 -0
  550. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/app/http.py +0 -0
  551. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/app/modal_app.py +0 -0
  552. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/app/render.py +0 -0
  553. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/app/retries.py +0 -0
  554. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/app/rollout.py +0 -0
  555. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/contract/__init__.py +0 -0
  556. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/contract/config.py +0 -0
  557. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/contract/errors.py +0 -0
  558. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/contract/protocol.py +0 -0
  559. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/contract/tokenizer.py +0 -0
  560. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/native/__init__.py +0 -0
  561. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/native/engram_transport.py +0 -0
  562. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/native/image.py +0 -0
  563. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/native/patches.py +0 -0
  564. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/native/transport.py +0 -0
  565. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/runtime/__init__.py +0 -0
  566. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/runtime/bridge.py +0 -0
  567. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/runtime/kernel_cache.py +0 -0
  568. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/runtime/prefill_scheduler.py +0 -0
  569. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/runtime/prefix_cache.py +0 -0
  570. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/runtime/provenance.py +0 -0
  571. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/runtime/routing.py +0 -0
  572. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/runtime/snapshots.py +0 -0
  573. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/runtime/tiered_cache.py +0 -0
  574. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/runtime/warmup.py +0 -0
  575. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/deepinfer/runtime/worker.py +0 -0
  576. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/promotion/__init__.py +0 -0
  577. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/promotion/accounting_smoke_test.py +0 -0
  578. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/promotion/canary.py +0 -0
  579. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/promotion/evidence.py +0 -0
  580. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/promotion/gate.py +0 -0
  581. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/__init__.py +0 -0
  582. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/accounting/__init__.py +0 -0
  583. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/accounting/usage.py +0 -0
  584. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/accounting/usage_facts.py +0 -0
  585. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/accounting/usage_outbox.py +0 -0
  586. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/accounting/usage_retry.py +0 -0
  587. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/__init__.py +0 -0
  588. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/boot.py +0 -0
  589. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/errors.py +0 -0
  590. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/generation.py +0 -0
  591. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/hub.py +0 -0
  592. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/lora_entries.py +0 -0
  593. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/model_config.py +0 -0
  594. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/prequant_config.py +0 -0
  595. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/reasoning_usage.py +0 -0
  596. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/support.py +0 -0
  597. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/text_tokenizer.py +0 -0
  598. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/engine/warmup.py +0 -0
  599. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/http/__init__.py +0 -0
  600. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/http/adapter_routes.py +0 -0
  601. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/http/body_limit.py +0 -0
  602. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/http/context.py +0 -0
  603. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/http/headers.py +0 -0
  604. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/http/inference_routes.py +0 -0
  605. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/http/key_rate_limit.py +0 -0
  606. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/http/rate_limit.py +0 -0
  607. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/http/router.py +0 -0
  608. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/http/routing.py +0 -0
  609. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/http/stream_response.py +0 -0
  610. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/io/__init__.py +0 -0
  611. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/io/cache_namespace.py +0 -0
  612. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/io/multimodal.py +0 -0
  613. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/io/openai_request.py +0 -0
  614. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/io/openai_stream.py +0 -0
  615. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/io/provenance.py +0 -0
  616. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/io/requests.py +0 -0
  617. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/io/responses.py +0 -0
  618. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/io/schemas.py +0 -0
  619. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/io/streaming.py +0 -0
  620. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/io/structured_outputs.py +0 -0
  621. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/store/__init__.py +0 -0
  622. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/store/access.py +0 -0
  623. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/store/lookup.py +0 -0
  624. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/store/persisted_columns.py +0 -0
  625. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/store/persistence.py +0 -0
  626. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/store/registration.py +0 -0
  627. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/store/registry.py +0 -0
  628. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/store/settings.py +0 -0
  629. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/store/supabase_rest.py +0 -0
  630. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/store/undeploy.py +0 -0
  631. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/stream_channel/__init__.py +0 -0
  632. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/stream_channel/_tasks.py +0 -0
  633. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/stream_channel/client.py +0 -0
  634. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/stream_channel/engine.py +0 -0
  635. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/serving/src/stream_channel/protocol.py +0 -0
  636. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/snapshot/__init__.py +0 -0
  637. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/flash/snapshot/archive.py +0 -0
  638. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/build_dev_dist.py +0 -0
  639. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/check_dev_release.py +0 -0
  640. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/check_file_size.py +0 -0
  641. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/check_function_size.py +0 -0
  642. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/check_rollout_identity_actor.py +0 -0
  643. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/check_source_layout.py +0 -0
  644. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/check_verl_pin_exists.py +0 -0
  645. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/fixtures/custom_algorithm.py +0 -0
  646. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/fixtures/modal_environment/dataset/train.jsonl +0 -0
  647. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/fixtures/modal_environment/environment.py +0 -0
  648. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/fixtures/modal_environment/evaluations.py +0 -0
  649. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/qualify_serving_profile.py +0 -0
  650. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/smoke_custom_training.py +0 -0
  651. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/smoke_modal_sft.py +0 -0
  652. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/scripts/smoke_modal_training.py +0 -0
  653. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/serve_launch.py +0 -0
  654. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/__init__.py +0 -0
  655. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/__init__.py +0 -0
  656. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/billing_precheck.py +0 -0
  657. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/chat_provenance.py +0 -0
  658. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/chat_transport.py +0 -0
  659. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/deployments.py +0 -0
  660. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/managed_chat.py +0 -0
  661. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/modal.py +0 -0
  662. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/profile.py +0 -0
  663. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/runner.py +0 -0
  664. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/server_api_plugin.py +0 -0
  665. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/source_snapshot.py +0 -0
  666. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/specs.py +0 -0
  667. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/_helpers/wire_headers.py +0 -0
  668. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/capture_image_sft_processor_oracle.py +0 -0
  669. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/capture_qwen38_27b_metadata.py +0 -0
  670. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/conftest.py +0 -0
  671. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  672. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  673. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  674. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  675. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  676. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  677. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/live/__init__.py +0 -0
  678. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/live/conftest.py +0 -0
  679. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/live/test_sft_thinking_render_live.py +0 -0
  680. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/checkpoint_fixtures.py +0 -0
  681. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/conftest.py +0 -0
  682. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_adapter_hub.py +0 -0
  683. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_artifact_protections.py +0 -0
  684. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_base_model_serving.py +0 -0
  685. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_chat_auth.py +0 -0
  686. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_checkpoint_fingerprint_validation.py +0 -0
  687. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  688. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_checkpoint_model_validation.py +0 -0
  689. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_checkpoint_revocation.py +0 -0
  690. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer.py +0 -0
  691. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_autoscaling.py +0 -0
  692. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_deadline.py +0 -0
  693. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_hosted.py +0 -0
  694. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_http_deadline.py +0 -0
  695. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_kernel_cache.py +0 -0
  696. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_latency.py +0 -0
  697. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_optimizations.py +0 -0
  698. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_parallel.py +0 -0
  699. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_prefill_scheduler.py +0 -0
  700. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_provenance.py +0 -0
  701. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_retention.py +0 -0
  702. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_retries.py +0 -0
  703. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_rollout.py +0 -0
  704. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_routing.py +0 -0
  705. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_deepinfer_tiering.py +0 -0
  706. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_engine_error_status.py +0 -0
  707. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_fp8_config.py +0 -0
  708. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_immutable_revisions.py +0 -0
  709. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_immutable_schemas.py +0 -0
  710. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_inference_duration.py +0 -0
  711. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_internal_header_integrity.py +0 -0
  712. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_key_rate_limit.py +0 -0
  713. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_key_rate_limit_review.py +0 -0
  714. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_kv_namespace.py +0 -0
  715. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_latency_admission.py +0 -0
  716. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_mirror_sampling_parity.py +0 -0
  717. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_modal_deploy_identity.py +0 -0
  718. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_modal_image_paths.py +0 -0
  719. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_model_config.py +0 -0
  720. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_multimodal.py +0 -0
  721. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_openai_stream_options.py +0 -0
  722. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_per_model_gpu.py +0 -0
  723. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_persistence.py +0 -0
  724. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_pre_first_disconnect.py +0 -0
  725. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_prequant_config.py +0 -0
  726. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_promotion_accounting_smoke.py +0 -0
  727. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_promotion_canary.py +0 -0
  728. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_promotion_evidence.py +0 -0
  729. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_promotion_gate.py +0 -0
  730. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_qwen_warmup.py +0 -0
  731. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_rate_limit.py +0 -0
  732. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_reasoning_usage.py +0 -0
  733. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_registration_endpoint.py +0 -0
  734. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_registry.py +0 -0
  735. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_registry_coverage.py +0 -0
  736. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_request_body_limit.py +0 -0
  737. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_router.py +0 -0
  738. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_router_coverage.py +0 -0
  739. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_router_edge_coverage.py +0 -0
  740. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_schemas_coverage.py +0 -0
  741. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_serve_reasoning_split.py +0 -0
  742. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_serve_structured_outputs.py +0 -0
  743. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_serve_thinking.py +0 -0
  744. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_settings.py +0 -0
  745. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_stream_channel.py +0 -0
  746. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_stream_response_disconnect.py +0 -0
  747. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_stream_wait_cleanup.py +0 -0
  748. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_structured_outputs.py +0 -0
  749. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_structured_outputs_coverage.py +0 -0
  750. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_supabase_rest_coverage.py +0 -0
  751. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_token_prefix_cache.py +0 -0
  752. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_usage_delivery_concurrency.py +0 -0
  753. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_usage_integrity.py +0 -0
  754. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_usage_outbox.py +0 -0
  755. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving/test_usage_reporter.py +0 -0
  756. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving_conformance/__init__.py +0 -0
  757. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving_conformance/conftest.py +0 -0
  758. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/serving_conformance/test_contract.py +0 -0
  759. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_accounting_coverage.py +0 -0
  760. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_adapter_download.py +0 -0
  761. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_adapter_shard_completeness.py +0 -0
  762. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_agent_flash_cli_contract.py +0 -0
  763. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_algorithms.py +0 -0
  764. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_allocator.py +0 -0
  765. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_authenticated_redirects.py +0 -0
  766. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_azure_environment_registry.py +0 -0
  767. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_backend_common.py +0 -0
  768. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_backend_jobspec_contract.py +0 -0
  769. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_background_supervisor.py +0 -0
  770. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_bake_kernel_cache.py +0 -0
  771. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_bake_sandbox_entry.py +0 -0
  772. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_base_environment_integrity.py +0 -0
  773. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_base_model_provenance.py +0 -0
  774. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_billing_response_integrity.py +0 -0
  775. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_billing_retry.py +0 -0
  776. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_bootstrap_process_groups.py +0 -0
  777. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_bootstrap_reentry.py +0 -0
  778. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_bootstrap_worker_cleanup.py +0 -0
  779. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_build_context_contract.py +0 -0
  780. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cache_admission.py +0 -0
  781. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cache_retention.py +0 -0
  782. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cache_scheduler.py +0 -0
  783. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_capture_qwen38_metadata.py +0 -0
  784. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_catalog_consistency.py +0 -0
  785. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_catalog_only_models.py +0 -0
  786. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_charge_pricing.py +0 -0
  787. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_chat_foundations.py +0 -0
  788. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_chat_stop_tokens.py +0 -0
  789. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_checkpoint_cancellation.py +0 -0
  790. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_checkpoint_deployment_inventory_api.py +0 -0
  791. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_checkpoint_deployments.py +0 -0
  792. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_checkpoint_lifecycle.py +0 -0
  793. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_checkpoint_listing_integrity.py +0 -0
  794. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_checkpoint_storage_overlap.py +0 -0
  795. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_checkpoint_transport.py +0 -0
  796. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_checkpoints.py +0 -0
  797. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_commands.py +0 -0
  798. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_commands_coverage.py +0 -0
  799. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_credential_shadowing.py +0 -0
  800. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_errors.py +0 -0
  801. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_estimate.py +0 -0
  802. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_gpus_flag.py +0 -0
  803. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_help.py +0 -0
  804. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_main_coverage.py +0 -0
  805. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_managed.py +0 -0
  806. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_render_coverage.py +0 -0
  807. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_render_theme.py +0 -0
  808. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_serve_deploy.py +0 -0
  809. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_serve_status.py +0 -0
  810. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_serve_undeploy.py +0 -0
  811. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_traces.py +0 -0
  812. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cli_wandb_warning.py +0 -0
  813. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_client.py +0 -0
  814. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_client_deadline_integrity.py +0 -0
  815. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_client_import_purity.py +0 -0
  816. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_client_server_integration.py +0 -0
  817. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_client_stream_reads.py +0 -0
  818. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_compact_checkpoint.py +0 -0
  819. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_config_env_vars.py +0 -0
  820. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_config_overrides.py +0 -0
  821. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_console_upload.py +0 -0
  822. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_controlled_experiment_repairs.py +0 -0
  823. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cost_analytical.py +0 -0
  824. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cost_currency.py +0 -0
  825. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cost_equation.py +0 -0
  826. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cost_estimate.py +0 -0
  827. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cost_hardware.py +0 -0
  828. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cost_models.py +0 -0
  829. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_cpu_checkpoint_handoff.py +0 -0
  830. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_custom_checkpoints.py +0 -0
  831. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_custom_client.py +0 -0
  832. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_custom_gpu_selection.py +0 -0
  833. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_custom_gradients.py +0 -0
  834. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_custom_session.py +0 -0
  835. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_dataset_profile.py +0 -0
  836. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_deploy_latency.py +0 -0
  837. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_deployment_cleanup_resilience.py +0 -0
  838. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_deployment_generation_completion.py +0 -0
  839. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_deployment_registration_cleanup.py +0 -0
  840. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_dev_channel.py +0 -0
  841. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_dev_publish_decision.py +0 -0
  842. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_disk_gb.py +0 -0
  843. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_cache_evict.py +0 -0
  844. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_delete.py +0 -0
  845. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_download.py +0 -0
  846. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_download_api.py +0 -0
  847. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_evaluations.py +0 -0
  848. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_list_api.py +0 -0
  849. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_list_cli.py +0 -0
  850. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_list_registry.py +0 -0
  851. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_no_install.py +0 -0
  852. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_publish.py +0 -0
  853. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_pull.py +0 -0
  854. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_pull_coverage.py +0 -0
  855. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_pull_loader_coverage.py +0 -0
  856. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_pull_managed_control_plane.py +0 -0
  857. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_push.py +0 -0
  858. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_rate_limit_resolve.py +0 -0
  859. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_ref_pinning.py +0 -0
  860. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_env_test.py +0 -0
  861. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_environment_cache_integrity.py +0 -0
  862. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_environment_publish_integrity.py +0 -0
  863. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_envs_coverage.py +0 -0
  864. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_export.py +0 -0
  865. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_flash_mvp.py +0 -0
  866. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_flash_worker.py +0 -0
  867. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_flashinfer_aot_cache.py +0 -0
  868. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_flashinfer_cache_dirs.py +0 -0
  869. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_freesolo_api_transport.py +0 -0
  870. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_fused_expert_warmstart.py +0 -0
  871. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_generation_eos.py +0 -0
  872. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_github_urlopen_retry.py +0 -0
  873. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_gpu_type_single_field.py +0 -0
  874. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_gpus.py +0 -0
  875. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_grpo_checkpoint_durability.py +0 -0
  876. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_grpo_metric_stream.py +0 -0
  877. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_grpo_params.py +0 -0
  878. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_grpo_resident_sizing.py +0 -0
  879. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_grpo_reward_batching.py +0 -0
  880. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_grpo_reward_context.py +0 -0
  881. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_grpo_rollout_contract.py +0 -0
  882. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_grpo_rollout_identity.py +0 -0
  883. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_health_liveness.py +0 -0
  884. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_heartbeat_startup_cleanup.py +0 -0
  885. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_hf_retry.py +0 -0
  886. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_hosted_adapter_admission.py +0 -0
  887. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_image_environment_capability.py +0 -0
  888. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_image_incremental_processor.py +0 -0
  889. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_image_sft_markers.py +0 -0
  890. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_image_sft_processor_parity.py +0 -0
  891. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_image_tokens.py +0 -0
  892. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_infisical_secrets.py +0 -0
  893. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_instance_bootstrap_coverage.py +0 -0
  894. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_internal_client.py +0 -0
  895. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_kernel_bake_build_contracts.py +0 -0
  896. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_kernel_cache.py +0 -0
  897. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_kernel_fingerprint.py +0 -0
  898. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_kv_util.py +0 -0
  899. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_local_credential_integrity.py +0 -0
  900. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_logging.py +0 -0
  901. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_login_perms.py +0 -0
  902. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_lora_rank_coverage.py +0 -0
  903. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_lora_rank_nested_rung.py +0 -0
  904. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_lora_rank_preflight.py +0 -0
  905. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_lora_targeting.py +0 -0
  906. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_lora_targeting_pinned_verl.py +0 -0
  907. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_managed_config_fields.py +0 -0
  908. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_managed_hf_repo.py +0 -0
  909. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_metrics_schema_agent_contract.py +0 -0
  910. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_mig_guard.py +0 -0
  911. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_mirror_sampling_parity.py +0 -0
  912. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_modal_api_loop.py +0 -0
  913. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_modal_prefetch_snapshot.py +0 -0
  914. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_modal_provider.py +0 -0
  915. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_modal_startup.py +0 -0
  916. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_modal_training_lifecycle.py +0 -0
  917. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_modal_weight_warm.py +0 -0
  918. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_multi_gpu_gate.py +0 -0
  919. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_multimodal_boundary_integrity.py +0 -0
  920. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_multimodal_training.py +0 -0
  921. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_named_reward_metrics.py +0 -0
  922. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_notify_tests_repo.py +0 -0
  923. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_offline_http.py +0 -0
  924. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_oom_escalate_gpu.py +0 -0
  925. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_orchestrator_flash.py +0 -0
  926. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_packing.py +0 -0
  927. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_packing_coverage.py +0 -0
  928. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_persisted_spec_envelope.py +0 -0
  929. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_plane_lease.py +0 -0
  930. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_poll_helpers.py +0 -0
  931. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_preflight.py +0 -0
  932. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_processor_chat_template.py +0 -0
  933. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_projects.py +0 -0
  934. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_prompt_budget.py +0 -0
  935. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_qwen9b_base.py +0 -0
  936. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_removed_algorithms.py +0 -0
  937. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_removed_training_settings.py +0 -0
  938. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_replay_guard.py +0 -0
  939. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_repo_cleanup.py +0 -0
  940. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_resolve_params_b.py +0 -0
  941. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_resume_on_retry.py +0 -0
  942. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_retry_decision.py +0 -0
  943. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_reward_server_cleanup.py +0 -0
  944. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_rl_train.py +0 -0
  945. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_rollout_engine_prompt.py +0 -0
  946. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_rollout_samples.py +0 -0
  947. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_run_log_integrity.py +0 -0
  948. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_run_registry_lifecycle.py +0 -0
  949. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_runmgmt.py +0 -0
  950. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_runtime_capsule.py +0 -0
  951. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_runtime_credentials.py +0 -0
  952. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_runtime_secret_integrity.py +0 -0
  953. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_schema_boundary_integrity.py +0 -0
  954. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve.py +0 -0
  955. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_app_bootstrap_http.py +0 -0
  956. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_app_launch.py +0 -0
  957. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_app_manifest.py +0 -0
  958. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_app_materialize.py +0 -0
  959. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_app_packaging.py +0 -0
  960. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_app_progress.py +0 -0
  961. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_cache_resource_cleanup.py +0 -0
  962. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_chat_transport.py +0 -0
  963. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_control.py +0 -0
  964. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_docs.py +0 -0
  965. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_modal_contract_lock.py +0 -0
  966. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_modal_sdk.py +0 -0
  967. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  968. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_modal_teardown_identity.py +0 -0
  969. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_profile_qualification.py +0 -0
  970. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_profiles.py +0 -0
  971. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_provisioning_common.py +0 -0
  972. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_provisioning_modal.py +0 -0
  973. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_reasoning_content.py +0 -0
  974. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_resolve_provenance.py +0 -0
  975. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_runtime_adapters.py +0 -0
  976. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_runtime_engine.py +0 -0
  977. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_runtime_hub.py +0 -0
  978. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_runtime_package.py +0 -0
  979. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serve_runtime_types.py +0 -0
  980. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_server_api.py +0 -0
  981. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_server_app_coverage.py +0 -0
  982. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_server_auth_singleflight.py +0 -0
  983. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_server_billing.py +0 -0
  984. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_server_checkpoints_coverage.py +0 -0
  985. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_server_db.py +0 -0
  986. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_server_envs_coverage.py +0 -0
  987. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_server_locks_coverage.py +0 -0
  988. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_server_managed_chat_requests.py +0 -0
  989. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_server_serving_resources.py +0 -0
  990. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_server_standalone.py +0 -0
  991. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serving_conformance_gate.py +0 -0
  992. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serving_context_preflight.py +0 -0
  993. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serving_contract.py +0 -0
  994. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serving_input_integrity.py +0 -0
  995. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_serving_schema_coverage.py +0 -0
  996. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_batch_prefetch.py +0 -0
  997. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_cancel_profile_pricing.py +0 -0
  998. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_chunked_nll.py +0 -0
  999. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_cost_reduction.py +0 -0
  1000. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_dataset_lazy_images.py +0 -0
  1001. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_dataset_nulls.py +0 -0
  1002. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_example_selection.py +0 -0
  1003. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_gc_off.py +0 -0
  1004. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_max_context.py +0 -0
  1005. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_memory_policy.py +0 -0
  1006. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_step_floor.py +0 -0
  1007. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_tools.py +0 -0
  1008. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_train.py +0 -0
  1009. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_warmup_schedule.py +0 -0
  1010. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_sft_workload.py +0 -0
  1011. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_smoke_content_integrity.py +0 -0
  1012. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_source_attestation_flow.py +0 -0
  1013. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_source_layout.py +0 -0
  1014. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_source_snapshot.py +0 -0
  1015. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_spec_and_validation.py +0 -0
  1016. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_spec_contract_bytes.py +0 -0
  1017. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_staged_environment.py +0 -0
  1018. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_status_reporting.py +0 -0
  1019. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_status_updates.py +0 -0
  1020. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_step_floor.py +0 -0
  1021. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_step_metrics.py +0 -0
  1022. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_step_timing.py +0 -0
  1023. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_structured_option_safety.py +0 -0
  1024. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_structured_outputs.py +0 -0
  1025. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_structured_runtime_options.py +0 -0
  1026. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_submission_outcome.py +0 -0
  1027. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_terminal_artifacts.py +0 -0
  1028. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_thinking_config.py +0 -0
  1029. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_thinking_tool_calls.py +0 -0
  1030. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_tool_call_exact_parsing.py +0 -0
  1031. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_tool_scalar_unions.py +0 -0
  1032. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_train_context_preflight.py +0 -0
  1033. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_training_controls.py +0 -0
  1034. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_training_phases.py +0 -0
  1035. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_transfer_queue_init.py +0 -0
  1036. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_type_comment_prose.py +0 -0
  1037. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_upload_concurrency.py +0 -0
  1038. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_upstream_rollout_contract.py +0 -0
  1039. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_upstream_runtime_policy.py +0 -0
  1040. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_upstream_verl_contract.py +0 -0
  1041. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_verifiers.py +0 -0
  1042. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_verl_checkpoint_export.py +0 -0
  1043. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_verl_child_plugins.py +0 -0
  1044. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_verl_silence_watchdog.py +0 -0
  1045. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_version.py +0 -0
  1046. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_versioned_rollout_contract.py +0 -0
  1047. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  1048. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_vllm_moe_lora_backport.py +0 -0
  1049. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_vram_architecture.py +0 -0
  1050. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_wandb_link.py +0 -0
  1051. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_wandb_naming.py +0 -0
  1052. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_warmstart_adapter_download.py +0 -0
  1053. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_warmstart_cross_repo.py +0 -0
  1054. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_warmstart_error_attribution.py +0 -0
  1055. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_warmstart_image_adapters.py +0 -0
  1056. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_watchdog_startup_cleanup.py +0 -0
  1057. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_weight_cache.py +0 -0
  1058. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_worker_dryrun.py +0 -0
  1059. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_worker_hardexit.py +0 -0
  1060. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_worker_init_heartbeat.py +0 -0
  1061. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_worker_stack.py +0 -0
  1062. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_worker_thinking.py +0 -0
  1063. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_workflow_contracts.py +0 -0
  1064. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_workload_profile.py +0 -0
  1065. {freesolo_flash_dev-1.4.8 → freesolo_flash_dev-1.4.9}/tests/test_zero2_sharding_gate.py +0 -0
@@ -0,0 +1,59 @@
1
+ """partition collected tests by whole file without changing pytest discovery."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Iterable
6
+
7
+ import pytest
8
+
9
+ # slow-file weights come from offline junit timings; unmeasured files still participate.
10
+ FILE_SECONDS = {
11
+ "tests/test_client.py": 23,
12
+ "tests/test_instance_bootstrap_coverage.py": 6,
13
+ "tests/test_repo_cleanup.py": 24,
14
+ "tests/test_runmgmt.py": 16,
15
+ "tests/test_server_api.py": 39,
16
+ "tests/test_server_envs_coverage.py": 15,
17
+ "tests/test_weight_cache.py": 7,
18
+ "tests/test_worker_init_heartbeat.py": 4,
19
+ }
20
+
21
+
22
+ def assign_files(paths: Iterable[str], count: int) -> dict[str, int]:
23
+ loads = [0.0] * count
24
+ assignments = {}
25
+ for path in sorted(paths, key=lambda path: (-FILE_SECONDS.get(path, 1.0), path)):
26
+ shard = min(range(count), key=lambda index: (loads[index], index))
27
+ assignments[path] = shard
28
+ loads[shard] += FILE_SECONDS.get(path, 1.0)
29
+ return assignments
30
+
31
+
32
+ def pytest_addoption(parser):
33
+ group = parser.getgroup("ci sharding")
34
+ group.addoption("--ci-shard", type=int, default=None)
35
+ group.addoption("--ci-shard-count", type=int, default=2)
36
+
37
+
38
+ def pytest_configure(config):
39
+ shard = config.getoption("--ci-shard")
40
+ count = config.getoption("--ci-shard-count")
41
+ if shard is None or count < 1 or not 0 <= shard < count:
42
+ raise pytest.UsageError("ci shard must satisfy 0 <= --ci-shard < --ci-shard-count")
43
+
44
+
45
+ @pytest.hookimpl(wrapper=True)
46
+ def pytest_collection_modifyitems(config, items):
47
+ # partition after marker selection so every worker assigns the same eligible file set.
48
+ result = yield
49
+ count = config.getoption("--ci-shard-count")
50
+ shard = config.getoption("--ci-shard")
51
+ paths = {item.path.relative_to(config.rootpath).as_posix() for item in items}
52
+ assignments = assign_files(paths, count)
53
+ kept, removed = [], []
54
+ for item in items:
55
+ path = item.path.relative_to(config.rootpath).as_posix()
56
+ (kept if assignments[path] == shard else removed).append(item)
57
+ config.hook.pytest_deselected(items=removed)
58
+ items[:] = kept
59
+ return result
@@ -16,19 +16,10 @@ concurrency:
16
16
  cancel-in-progress: true
17
17
 
18
18
  jobs:
19
- test:
20
- name: lint + offline tests (py${{ matrix.python-version }})
19
+ lint:
20
+ name: lint
21
21
  runs-on: ubuntu-latest
22
- # The suite is CPU-only and finishes well inside this; the cap is here so a wedged run
23
- # releases its runner instead of holding it for the 6-hour default.
24
- timeout-minutes: 30
25
- strategy:
26
- fail-fast: false
27
- matrix:
28
- # pyproject declares `requires-python = ">=3.11,<3.13"`, so both supported interpreters
29
- # are tested. Testing only 3.11 let a 3.12-only failure reach a user the project claims
30
- # to support.
31
- python-version: ["3.11", "3.12"]
22
+ timeout-minutes: 10
32
23
  steps:
33
24
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
34
25
 
@@ -37,7 +28,7 @@ jobs:
37
28
  with:
38
29
  # pin the installed binary as well as the action implementation.
39
30
  version: "0.12.5"
40
- python-version: ${{ matrix.python-version }}
31
+ python-version: "3.11"
41
32
 
42
33
  - name: Sync (server extra + dev)
43
34
  run: uv sync --extra server --extra serving --dev --locked
@@ -64,69 +55,68 @@ jobs:
64
55
  - name: Source layout check
65
56
  run: uv run python scripts/check_source_layout.py
66
57
 
67
- # The job has always been NAMED offline (tests/conftest.py stubs the network boundaries in
68
- # Python), but nothing enforced it, so a test that reached hf.co passed on a connected
69
- # runner and would go red on a blip. Setting these makes the name true: an unstubbed call
70
- # fails locally and deterministically instead of intermittently in CI.
71
- #
72
- # Sharding: this step is ~300s of the job's ~305s, and almost all of it is waiting rather
73
- # than computing (the offline tests exercise retry/backoff/watchdog paths, so 125 sleep call
74
- # sites sit idle holding a core). One process left the runner's second core idle for five
75
- # minutes; `-n 2` cuts the step roughly in half.
76
- #
77
- # `loadfile` (not the default `load`, and not `loadscope`) is required, not a preference:
78
- # tests in the same FILE share module-level import state -- several re-import
79
- # `flash.engine.worker` to re-run its import scope, and others patch dotted targets under it.
80
- # Splitting a file across workers breaks that sharing; `loadscope` splits at class/module
81
- # granularity and fails tests/test_warmstart_cross_repo.py for exactly this reason. `loadfile`
82
- # keeps every file whole on one worker, which is the boundary the suite already assumes.
83
- #
84
- # `-n 2` is pinned deliberately instead of `-n auto`. `auto` does NOT mean "the cores this
85
- # process may use": xdist prefers psutil.cpu_count() when psutil is importable (it is, via a
86
- # transitive dep) and that ignores CPU affinity and cgroup limits. So `auto` silently couples
87
- # the worker count to a transitive dependency and to whatever tier the runner pool hands out.
88
- # A standard GitHub runner is 2-core, which is what this suite was measured against; pinning
89
- # keeps the sharding identical on every run instead of changing under us.
58
+ # The offline suite can only compare the pin against a hardcoded copy of itself, so a
59
+ # mis-transcribed sha passes every pin test while naming a commit that was never pushed --
60
+ # which then fails EVERY worker install at provisioning time. This is the one pin check that
61
+ # asks upstream instead of asking the repo about itself, so it needs the network.
90
62
  #
91
- # Oversubscription is not free here: at 48 workers on 2 cores, three timing-sensitive tests in
92
- # tests/test_server_envs_coverage.py fail, because they assert on a schema-validation timeout
93
- # budget that CPU starvation blows through. Raise this only alongside the runner's core count.
63
+ # Offline environment variables are scoped to pytest steps; this check needs the network.
64
+ - name: verl pin exists upstream
65
+ run: uv run python scripts/check_verl_pin_exists.py
66
+
67
+ test:
68
+ name: offline tests (py${{ matrix.python-version }}, shard ${{ matrix.shard }})
69
+ runs-on: ubuntu-latest
70
+ timeout-minutes: 30
71
+ strategy:
72
+ fail-fast: false
73
+ matrix:
74
+ python-version: ["3.11", "3.12"]
75
+ shard: [0, 1]
76
+ steps:
77
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
78
+
79
+ - name: Install uv
80
+ uses: astral-sh/setup-uv@1c37ad07a6a961277cf70c0d37d6f313000f5884 # v10.3.0
81
+ with:
82
+ # pin the installed binary as well as the action implementation.
83
+ version: "0.12.5"
84
+ python-version: ${{ matrix.python-version }}
85
+
86
+ - name: Sync (server extra + dev)
87
+ run: uv sync --extra server --extra serving --dev --locked
88
+
89
+ # Keep each file whole and each shard single-process for shared module state.
94
90
  - name: Tests (CPU, offline)
95
91
  env:
96
92
  HF_HUB_OFFLINE: "1"
97
93
  TRANSFORMERS_OFFLINE: "1"
98
94
  HF_HUB_DISABLE_TELEMETRY: "1"
99
- run: uv run pytest -q -n 2 --dist loadfile -m "not wallclock"
100
-
101
- # The `wallclock` tests assert on real elapsed time with tens-of-milliseconds margins, so a
102
- # second worker competing for the core fails them for reasons unrelated to the code. They are
103
- # deselected above and run here alone, single-process: ~5s, which is why isolating them is
104
- # cheaper than the scaled-up timing budgets that would be needed to survive contention.
105
- - name: Tests (CPU, offline, wall-clock sensitive)
95
+ PYTHONPATH: .github/scripts
96
+ run: >-
97
+ uv run pytest -q -p ci_sharding --ci-shard ${{ matrix.shard }}
98
+ --ci-shard-count 2 -m "not wallclock" --durations=20
99
+
100
+ # Run timing-sensitive tests separately and exactly once per Python version.
101
+ # Shard zero also retains the real CPU tensor regressions after dependency installation.
102
+ - if: matrix.shard == 0
103
+ name: Tests (CPU, offline, wall-clock sensitive)
106
104
  env:
107
105
  HF_HUB_OFFLINE: "1"
108
106
  TRANSFORMERS_OFFLINE: "1"
109
107
  HF_HUB_DISABLE_TELEMETRY: "1"
110
108
  run: uv run pytest -q -m wallclock
111
109
 
112
- # The offline suite can only compare the pin against a hardcoded copy of itself, so a
113
- # mis-transcribed sha passes every pin test while naming a commit that was never pushed --
114
- # which then fails EVERY worker install at provisioning time. This is the one pin check that
115
- # asks upstream instead of asking the repo about itself, so it needs the network.
116
- #
117
- # Deliberately NOT covered by the offline env above: those vars are scoped to the pytest step,
118
- # so this step still reaches github as it must.
119
- - name: verl pin exists upstream
120
- run: uv run python scripts/check_verl_pin_exists.py
121
-
122
110
  # The ordinary offline environment omits torch/PEFT, so its adapter tests skip.
123
111
  # Exercise real meta tensors and frozen references with the worker's versions.
124
- - name: Install CPU adapter-test dependencies
112
+ - if: matrix.shard == 0
113
+ name: Install CPU adapter-test dependencies
125
114
  run: |
126
115
  uv pip install torch==2.10.0 --index-url https://download.pytorch.org/whl/cpu
127
116
  uv pip install peft==0.20.0 transformers==5.12.1
128
117
 
129
- - name: Warm-start KL reference regression (real torch and PEFT)
118
+ - if: matrix.shard == 0
119
+ name: Warm-start KL reference regression (real torch and PEFT)
130
120
  env:
131
121
  HF_HUB_OFFLINE: "1"
132
122
  TRANSFORMERS_OFFLINE: "1"
@@ -135,32 +125,13 @@ jobs:
135
125
  .venv/bin/python -c "import torch, peft"
136
126
  .venv/bin/pytest -q tests/test_rl_train.py -k kl_ref_adapter
137
127
 
138
- - name: Custom training gradient and session regressions (real CPU torch)
128
+ - if: matrix.shard == 0
129
+ name: Custom training gradient and session regressions (real CPU torch)
139
130
  env:
140
131
  HF_HUB_OFFLINE: "1"
141
132
  TRANSFORMERS_OFFLINE: "1"
142
133
  run: .venv/bin/pytest -q tests/test_custom_gradients.py tests/test_custom_session.py tests/test_custom_client.py tests/test_custom_managed.py
143
134
 
144
- # `lint + offline tests` is the required status check, and the matrix above turned that one
145
- # check into two per-version checks. This aggregate keeps a single stable name for branch
146
- # protection to require, and fails if either matrix leg failed or was cancelled.
147
- test-result:
148
- name: lint + offline tests
149
- runs-on: ubuntu-latest
150
- needs: test
151
- if: always()
152
- timeout-minutes: 5
153
- steps:
154
- - name: Require every matrix leg to have succeeded
155
- env:
156
- RESULT: ${{ needs.test.result }}
157
- run: |
158
- if [ "$RESULT" != "success" ]; then
159
- echo "::error::matrix job 'test' finished with result '$RESULT'."
160
- exit 1
161
- fi
162
- echo "All matrix legs passed."
163
-
164
135
  typecheck:
165
136
  name: mypy (advisory)
166
137
  runs-on: ubuntu-latest
@@ -222,3 +193,23 @@ jobs:
222
193
  } >> "$GITHUB_STEP_SUMMARY"
223
194
  echo "::warning::mypy stopped early; the reported error count is not the real total."
224
195
  fi
196
+
197
+ test-result:
198
+ name: lint + offline tests
199
+ runs-on: ubuntu-latest
200
+ timeout-minutes: 5
201
+ needs: [lint, test]
202
+ if: always()
203
+ steps:
204
+ - name: Require every test group to have succeeded
205
+ env:
206
+ LINT: ${{ needs.lint.result }}
207
+ TEST: ${{ needs.test.result }}
208
+ run: |
209
+ for result in "$LINT" "$TEST"; do
210
+ if [ "$result" != "success" ]; then
211
+ echo "::error::required ci group finished with result '$result'."
212
+ exit 1
213
+ fi
214
+ done
215
+ echo "all required ci groups passed"
@@ -18,11 +18,9 @@
18
18
  FROM python:3.12-slim@sha256:2c941e860699f878900b0edc2403613c234d4b32eda3cc9fa7036991a2a63c4a
19
19
 
20
20
  WORKDIR /app
21
- COPY . .
22
21
  RUN apt-get update \
23
22
  && apt-get install -y --no-install-recommends ca-certificates git curl \
24
23
  && rm -rf /var/lib/apt/lists/*
25
- RUN pip install --no-cache-dir ".[server]"
26
24
 
27
25
  # Optional Infisical CLI, for deployments that pull secrets from a vault at container start
28
26
  # instead of receiving them as environment variables. OFF by default: a plain `docker build .`
@@ -67,6 +65,10 @@ RUN if [ "${INSTALL_INFISICAL}" = "true" ]; then \
67
65
  infisical --version; \
68
66
  fi
69
67
 
68
+ # Source changes reuse the operating-system and optional Infisical layers.
69
+ COPY . .
70
+ RUN pip install --no-cache-dir ".[server]"
71
+
70
72
  VOLUME /root/.flash
71
73
  EXPOSE 8080
72
74
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.4.8
3
+ Version: 1.4.9
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
@@ -308,6 +308,7 @@ def load_backend(
308
308
  seed=42,
309
309
  checkpoint_dir,
310
310
  max_tokens=2048,
311
+ init_adapter=None,
311
312
  ):
312
313
  import torch
313
314
  from peft import LoraConfig, get_peft_model
@@ -342,17 +343,47 @@ def load_backend(
342
343
  torch_dtype=torch.bfloat16,
343
344
  attn_implementation="sdpa",
344
345
  ).to("cuda")
345
- model = get_peft_model(
346
- model,
347
- LoraConfig(
348
- r=lora_rank,
349
- lora_alpha=lora_alpha or 2 * lora_rank,
350
- lora_dropout=0,
351
- target_modules="all-linear",
352
- task_type="CAUSAL_LM",
353
- revision=revision,
354
- **targeting,
355
- ),
356
- )
346
+ if init_adapter:
347
+ model = _warm_start(model, init_adapter, lora_rank, lora_alpha)
348
+ else:
349
+ model = get_peft_model(
350
+ model,
351
+ LoraConfig(
352
+ r=lora_rank,
353
+ lora_alpha=lora_alpha or 2 * lora_rank,
354
+ lora_dropout=0,
355
+ target_modules="all-linear",
356
+ task_type="CAUSAL_LM",
357
+ revision=revision,
358
+ **targeting,
359
+ ),
360
+ )
357
361
  model.config._commit_hash = revision
358
362
  return TorchBackend(model, tokenizer, checkpoint_dir=checkpoint_dir, max_tokens=max_tokens)
363
+
364
+
365
+ def _warm_start(model, adapter_dir, lora_rank, lora_alpha):
366
+ """Continue a verified source LoRA: its exact modules and weights, with fresh optimizer state.
367
+
368
+ The source config keeps its target modules; dropout is disabled like every custom adapter so
369
+ gradient checkpointing stays exact. Every source tensor must land on a trainable parameter:
370
+ peft only warns about unmatched keys, which would silently restart from zero.
371
+ """
372
+ from peft import LoraConfig, get_peft_model, load_peft_weights, set_peft_model_state_dict
373
+
374
+ config = LoraConfig.from_pretrained(adapter_dir)
375
+ if (config.r, config.lora_alpha) != (lora_rank, lora_alpha or 2 * lora_rank):
376
+ raise ValueError("warm-start adapter rank or alpha differs from the prepared run")
377
+ config.lora_dropout = 0
378
+ config.inference_mode = False
379
+ model = get_peft_model(model, config)
380
+ weights = load_peft_weights(adapter_dir, device="cuda")
381
+ result = set_peft_model_state_dict(model, weights)
382
+ trainable = [name for name, p in model.named_parameters() if p.requires_grad]
383
+ if result.unexpected_keys or len(weights) != len(trainable):
384
+ raise ValueError(
385
+ "warm-start adapter weights do not match the model's LoRA parameters "
386
+ f"({len(weights)} source tensors, {len(trainable)} trainable, "
387
+ f"{len(result.unexpected_keys)} unmatched)"
388
+ )
389
+ return model
@@ -13,10 +13,34 @@ from flash.engine.worker.io import hf
13
13
  from flash.engine.worker.io.heartbeat import heartbeat, liveness_heartbeat
14
14
 
15
15
 
16
+ def _custom_targeting(model_id):
17
+ """Custom runs adapt only text modules; a warm-start source must have the same modality."""
18
+ from flash.core.catalog import supports_image_training
19
+
20
+ if not supports_image_training(model_id):
21
+ return None
22
+ from flash.adapters.targets import resolve_lora_targeting
23
+
24
+ return resolve_lora_targeting(model_id, algorithm="custom", multimodal=False)
25
+
26
+
16
27
  def run(*, context):
17
28
  spec = context.config.spec
18
29
  heartbeat("custom_model_load", context=context)
19
30
  with liveness_heartbeat("custom_model_load", context=context):
31
+ init_adapter = None
32
+ if spec.train.init_from_adapter:
33
+ from flash.engine.worker.train.entry.sft_train import _warmstart_adapter_path
34
+
35
+ # downloads the prepared source and checks its rank, alpha, modules and base model.
36
+ init_adapter = _warmstart_adapter_path(
37
+ spec.model,
38
+ spec.model_revision,
39
+ spec.train.lora_rank,
40
+ spec.train.lora_alpha,
41
+ _custom_targeting(spec.model),
42
+ context=context,
43
+ )
20
44
  backend = load_backend(
21
45
  spec.model,
22
46
  revision=spec.model_revision,
@@ -25,6 +49,7 @@ def run(*, context):
25
49
  seed=spec.seed,
26
50
  checkpoint_dir="/tmp/flash-custom-checkpoints",
27
51
  max_tokens=spec.train.max_context_tokens,
52
+ init_adapter=init_adapter,
28
53
  )
29
54
  checkpoints = RunCheckpoints(context)
30
55
  backend.checkpoints = checkpoints
@@ -412,7 +412,11 @@ def _validate_train_section(raw: dict[str, Any], algorithm: str) -> dict[str, An
412
412
 
413
413
  if set(train_raw) - TRAIN_KEYS:
414
414
  raise ConfigError(f"[train] custom mode accepts only: {', '.join(sorted(TRAIN_KEYS))}")
415
- return {**TRAIN_DEFAULTS, **train_raw}
415
+ defaults = dict(TRAIN_DEFAULTS)
416
+ if train_raw.get("init_from_adapter"):
417
+ # a warm start inherits the source adapter's rank and alpha.
418
+ defaults.pop("lora_rank")
419
+ return {**defaults, **train_raw}
416
420
  validate_train_keys_for_algorithm(train_raw, algorithm)
417
421
  return train_raw
418
422
 
@@ -10,6 +10,7 @@ TRAIN_KEYS = {
10
10
  "lora_alpha",
11
11
  "save_every",
12
12
  "save_at_steps",
13
+ "init_from_adapter",
13
14
  }
14
15
  TRAIN_DEFAULTS = {"max_steps": 1000, "max_context_tokens": 2048, "lora_rank": 16, "save_every": 10}
15
16
  CUSTOM_KEYS = {"file", "resume_from", "idle_seconds", "max_wall_seconds", "controller_id"}
@@ -70,3 +71,8 @@ def validate_custom_spec(spec):
70
71
  integer(spec.train.save_every, "train.save_every", 1, 1_000_000)
71
72
  except ValueError as exc:
72
73
  raise ConfigError(str(exc)) from exc
74
+ if spec.train.init_from_adapter and spec.custom.get("resume_from"):
75
+ raise ConfigError(
76
+ "train.init_from_adapter starts fresh optimizer state from any adapter; "
77
+ "custom.resume_from continues a custom checkpoint. Set only one"
78
+ )
@@ -711,7 +711,11 @@ def _build_chat_authorizer(settings: Any) -> Any:
711
711
  import time
712
712
 
713
713
  import httpx
714
- from fastapi import HTTPException, status
714
+
715
+ from flash.serving.src.http.authorization_transport import (
716
+ TransientAuthorizationError,
717
+ post_authorization,
718
+ )
715
719
 
716
720
  _client = httpx.AsyncClient(timeout=10.0, headers={"Authorization": f"Bearer {key}"})
717
721
 
@@ -720,43 +724,44 @@ def _build_chat_authorizer(settings: Any) -> Any:
720
724
  _cache: dict[tuple[str, str, str], tuple[float, AuthorizedTraffic]] = {}
721
725
  # In-flight single-flight tasks so concurrent identical misses share ONE backend call.
722
726
  _inflight: dict[tuple[str, str, str], asyncio.Task[AuthorizedTraffic]] = {}
727
+ _refresh_after: dict[tuple[str, str, str], float] = {}
723
728
 
724
729
  async def _authorize_backend(
725
730
  api_key: str, model_id: str, scope: "dict[str, str]"
726
731
  ) -> "AuthorizedTraffic":
727
- try:
728
- resp = await _client.post(
729
- url,
730
- json={"apiKey": api_key, "modelId": model_id},
731
- # A training container authenticates with the platform internal key rather
732
- # than a customer key, so the backend cannot resolve it via
733
- # authenticate_api_key. It identifies the calling job from these headers and
734
- # re-checks them against the live job row. Dropping them here is
735
- # indistinguishable, to the backend, from a request that never had them: it
736
- # refuses with missing_training_context and catalog sampling fails closed.
737
- headers=scope or None,
738
- )
739
- except Exception as exc: # backend unreachable -> fail closed, never serve unauthorized
740
- raise HTTPException(
741
- status.HTTP_503_SERVICE_UNAVAILABLE, "serving auth backend unreachable"
742
- ) from exc
732
+ resp = await post_authorization(
733
+ _client, url, api_key=api_key, model_id=model_id, scope=scope
734
+ )
743
735
  return _authorize_response(resp, model_id, require_api_key_id=api_key.startswith("fslo_"))
744
736
 
745
737
  def _prune(now: float) -> None:
746
738
  for expired in [k for k, (exp, _) in _cache.items() if exp <= now]:
747
739
  _cache.pop(expired, None)
740
+ _refresh_after.pop(expired, None)
748
741
  if len(_cache) > _AUTH_CACHE_MAX_ENTRIES:
749
742
  n_drop = len(_cache) - _AUTH_CACHE_MAX_ENTRIES
750
743
  for k in sorted(_cache, key=lambda c: _cache[c][0])[:n_drop]:
751
744
  _cache.pop(k, None)
745
+ _refresh_after.pop(k, None)
752
746
 
753
747
  async def _authorize_and_cache(
754
748
  ck: tuple[str, str, str], api_key: str, model_id: str, scope: "dict[str, str]"
755
749
  ) -> "AuthorizedTraffic":
756
750
  try:
757
751
  authorization = await _authorize_backend(api_key, model_id, scope)
752
+ except TransientAuthorizationError:
753
+ # Keep the original approval only until its existing expiry; never renew it on error.
754
+ cached = _cache.get(ck)
755
+ now = time.monotonic()
756
+ if cached is not None and cached[0] > now:
757
+ _refresh_after[ck] = min(cached[0], now + 1.0)
758
+ else:
759
+ _cache.pop(ck, None)
760
+ _refresh_after.pop(ck, None)
761
+ raise
758
762
  except BaseException:
759
763
  _cache.pop(ck, None)
764
+ _refresh_after.pop(ck, None)
760
765
  raise
761
766
  finally:
762
767
  # Drop the single-flight slot regardless of outcome so a failed lookup re-checks next
@@ -764,6 +769,7 @@ def _build_chat_authorizer(settings: Any) -> Any:
764
769
  _inflight.pop(ck, None)
765
770
  now = time.monotonic()
766
771
  # Cache the ALLOW only — reached iff _authorize_backend did not raise above.
772
+ _refresh_after.pop(ck, None)
767
773
  _cache[ck] = (now + _AUTH_CACHE_TTL_SECONDS, authorization)
768
774
  _prune(now)
769
775
  return authorization
@@ -799,11 +805,14 @@ def _build_chat_authorizer(settings: Any) -> Any:
799
805
  if cached is not None:
800
806
  if cached[0] > now:
801
807
  # Refresh active keys before expiry, but never serve past the original TTL
802
- # unless the backend has approved them again. Failures evict the old ALLOW.
803
- if cached[0] - now <= _AUTH_CACHE_REFRESH_SECONDS:
808
+ # unless approved again. Denials evict immediately; transient failures do not.
809
+ if cached[0] - now <= _AUTH_CACHE_REFRESH_SECONDS and now >= _refresh_after.get(
810
+ ck, 0
811
+ ):
804
812
  refresh(ck, api_key, model_id, scope)
805
813
  return cached[1]
806
814
  _cache.pop(ck, None)
815
+ _refresh_after.pop(ck, None)
807
816
  return await asyncio.shield(refresh(ck, api_key, model_id, scope))
808
817
 
809
818
  async def close():
@@ -362,6 +362,28 @@ class _LoraEngineImpl(TextPromptTokenizer):
362
362
  def _cached_lora_request_locked(self, record: Any, path: Path) -> Any:
363
363
  return cached_lora_request(self, record, path)
364
364
 
365
+ def _loaded_lora_request_locked(self, record: Any) -> Any | None:
366
+ """Steady-state hit: vLLM already holds exactly this adapter source.
367
+
368
+ Every checkpoint request runs under the per-adapter lock, and the full path re-verifies the
369
+ adapter directory with stat/iterdir calls on a network-backed Modal Volume. Repeating that
370
+ scan per request serialized concurrent requests for one checkpoint behind filesystem
371
+ latency (~3.5 s per queued request under load), while base-model requests never take this
372
+ lock. Once the entry is loaded from the same source and the registry's local path is still
373
+ current, the scan cannot change the answer. Any other state, including a changed source,
374
+ an unconfirmed removal, or a stale or missing local path, takes the full path.
375
+ """
376
+ entry = self._entries().get(record_key(record))
377
+ if (
378
+ entry is None
379
+ or entry.state != "loaded"
380
+ or entry.source_ident != _adapter_source_ident(record)
381
+ or self.registry.local_path_is_stale(record)
382
+ or self.registry.local_path(record) is None
383
+ ):
384
+ return None
385
+ return entry.lora_request
386
+
365
387
  async def _lora_request(
366
388
  self, model_id: str, record_dict: dict[str, Any] | None = None
367
389
  ) -> tuple[Any, Any]:
@@ -392,6 +414,9 @@ class _LoraEngineImpl(TextPromptTokenizer):
392
414
  raise ValueError(f"Unknown adapter id on {self.base_model}: {model_id}")
393
415
  if not record.serve_base_model and not record.is_checkpoint:
394
416
  raise ValueError(f"Unknown adapter id on {self.base_model}: {model_id}")
417
+ loaded = self._loaded_lora_request_locked(record)
418
+ if loaded is not None:
419
+ return loaded, record
395
420
  path = await self._ensure_adapter_local_locked(record)
396
421
  lora_request = self._cached_lora_request_locked(record, path)
397
422
  # first-use loading must enter the same lifecycle as explicit registration so
@@ -0,0 +1,59 @@
1
+ """Bounded retries for read-only authorization lookups, without logging credentials."""
2
+
3
+ import asyncio
4
+ import logging
5
+ import random
6
+ import time
7
+
8
+ import httpx
9
+ from fastapi import HTTPException
10
+
11
+ logger = logging.getLogger(__name__)
12
+ AUTHORIZATION_BUDGET_SECONDS = 20.0
13
+ _ATTEMPTS = 2
14
+ _TRANSIENT_STATUS = {500, 502, 503, 504}
15
+ _TRANSIENT_ERRORS = (httpx.TimeoutException, httpx.NetworkError, httpx.RemoteProtocolError)
16
+
17
+
18
+ class TransientAuthorizationError(HTTPException):
19
+ """The backend gave no authorization decision because its transport was unavailable."""
20
+
21
+ def __init__(self, detail: str) -> None:
22
+ super().__init__(503, detail, headers={"Retry-After": "1"})
23
+
24
+
25
+ async def post_authorization(client, url, *, api_key, model_id, scope):
26
+ started = time.monotonic()
27
+ detail = "serving auth backend unreachable"
28
+ try:
29
+ async with asyncio.timeout(AUTHORIZATION_BUDGET_SECONDS):
30
+ for attempt in range(1, _ATTEMPTS + 1):
31
+ try:
32
+ response = await client.post(
33
+ url, json={"apiKey": api_key, "modelId": model_id}, headers=scope or None
34
+ )
35
+ except _TRANSIENT_ERRORS as error:
36
+ # Exception messages/URLs can contain credentials. Log only the type.
37
+ kind = type(error).__name__
38
+ detail = "serving auth backend unreachable"
39
+ except Exception as error:
40
+ logger.warning("serving_auth_transport_error kind=%s", type(error).__name__)
41
+ raise HTTPException(503, "serving auth backend unreachable") from error
42
+ else:
43
+ if response.status_code not in _TRANSIENT_STATUS:
44
+ return response
45
+ kind = f"http_{response.status_code}"
46
+ detail = "serving auth backend unavailable"
47
+ logger.warning(
48
+ "serving_auth_transient_failure kind=%s attempt=%d elapsed_ms=%d",
49
+ kind,
50
+ attempt,
51
+ int((time.monotonic() - started) * 1000),
52
+ )
53
+ if attempt < _ATTEMPTS:
54
+ await asyncio.sleep(random.uniform(0.2, 0.4))
55
+ except TimeoutError:
56
+ logger.warning(
57
+ "serving_auth_deadline_exceeded budget_seconds=%s", AUTHORIZATION_BUDGET_SECONDS
58
+ )
59
+ raise TransientAuthorizationError(detail)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "freesolo-flash-dev"
3
- version = "1.4.8"
3
+ version = "1.4.9"
4
4
  description ="Flash — managed LoRA post-training (SFT/GRPO) for Freesolo environments, driven by the `flash` CLI"
5
5
  readme = "README.md"
6
6
  # The training and serving stack is validated on Python 3.11 and 3.12.
@@ -209,7 +209,7 @@ artifacts = ["flash/py.typed"]
209
209
  # auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
210
210
  # PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
211
211
  # dev-channel release = bump this (and [project].version) and merge to `dev`.
212
- version = "1.4.8"
212
+ version = "1.4.9"
213
213
 
214
214
  [tool.pytest.ini_options]
215
215
  pythonpath = ["."]