freesolo-flash-dev 1.4.6__tar.gz → 1.4.7__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 (1052) hide show
  1. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/CHANGELOG.md +6 -0
  2. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/PKG-INFO +8 -1
  3. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/README.md +7 -0
  4. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/scaffold/TRAINING.md +4 -7
  5. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/backend_common.py +1 -4
  6. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +1 -1
  7. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/modal/jobs.py +2 -2
  8. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/retry_decision.py +6 -16
  9. freesolo_flash_dev-1.4.7/flash/serve/request/schema_types.py +36 -0
  10. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/request/tool_calls.py +20 -31
  11. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/tool_calls.py +1 -1
  12. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/platform/auth.py +43 -0
  13. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/modal_app.py +1 -0
  14. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/pyproject.toml +2 -2
  15. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_autoscaling.py +13 -0
  16. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_resume_on_retry.py +3 -14
  17. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_retry_decision.py +29 -23
  18. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_runmgmt.py +6 -2
  19. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_server_auth_singleflight.py +87 -0
  20. freesolo_flash_dev-1.4.7/tests/test_tool_scalar_unions.py +127 -0
  21. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/uv.lock +1 -1
  22. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.dockerignore +0 -0
  23. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.env.example +0 -0
  24. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/CODEOWNERS +0 -0
  25. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  26. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  27. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  28. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  29. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/dependabot.yml +0 -0
  30. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/scripts/notify_tests_repo.py +0 -0
  31. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/auto-rebake.yml +0 -0
  32. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/bake-kernel-cache.yml +0 -0
  33. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/ci.yml +0 -0
  34. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/deploy-deepinfer.yml +0 -0
  35. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/deploy-modal-dev.yml +0 -0
  36. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/deploy-modal.yml +0 -0
  37. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/dev-kernel-cache.yml +0 -0
  38. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/main-source-guard.yml +0 -0
  39. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/notify-tests-repo.yml +0 -0
  40. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  41. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/publish-dev.yml +0 -0
  42. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/publish-image.yml +0 -0
  43. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/publish-serving-image.yml +0 -0
  44. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/publish.yml +0 -0
  45. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/version-parity.yml +0 -0
  46. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.github/workflows/worker-image.yml +0 -0
  47. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/.gitignore +0 -0
  48. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/CODE_OF_CONDUCT.md +0 -0
  49. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/CONTRIBUTING.md +0 -0
  50. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/Dockerfile +0 -0
  51. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/Dockerfile.serve +0 -0
  52. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/Dockerfile.worker +0 -0
  53. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/LICENSE +0 -0
  54. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/NOTICE +0 -0
  55. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/SECURITY.md +0 -0
  56. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/SELF_HOSTING.md +0 -0
  57. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/build/kernel_cache/.gitignore +0 -0
  58. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/build/kernel_cache/.keep +0 -0
  59. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/deploy/infisical/README.md +0 -0
  60. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/deploy/infisical/entrypoint.sh +0 -0
  61. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/docker/Dockerfile.kernelcache +0 -0
  62. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/docker/Dockerfile.kernelcache.relayer +0 -0
  63. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/docker/bake_kernel_cache.py +0 -0
  64. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/docker/bake_sandbox_entry.py +0 -0
  65. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/docker/extract_cudart_fix.py +0 -0
  66. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/docker/kernel_fingerprint.py +0 -0
  67. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/docker/patch_vllm_moe_lora.py +0 -0
  68. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/__init__.py +0 -0
  69. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/_internal/__init__.py +0 -0
  70. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/_internal/background.py +0 -0
  71. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/_internal/channel.py +0 -0
  72. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/_internal/diagnostics.py +0 -0
  73. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/_internal/fileio.py +0 -0
  74. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/_internal/http.py +0 -0
  75. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/_internal/http_deadline.py +0 -0
  76. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/_internal/logging.py +0 -0
  77. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/_internal/openai_sse.py +0 -0
  78. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/_internal/paths.py +0 -0
  79. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/_internal/version.py +0 -0
  80. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/adapters/__init__.py +0 -0
  81. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/adapters/artifacts.py +0 -0
  82. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/adapters/config.py +0 -0
  83. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/adapters/fused_experts.py +0 -0
  84. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/adapters/lora_rank.py +0 -0
  85. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/adapters/targets.py +0 -0
  86. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/__init__.py +0 -0
  87. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/__main__.py +0 -0
  88. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/__init__.py +0 -0
  89. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/__init__.py +0 -0
  90. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/__init__.py +0 -0
  91. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/imports.py +0 -0
  92. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/list.py +0 -0
  93. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/push.py +0 -0
  94. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/retained.py +0 -0
  95. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/setup.py +0 -0
  96. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  97. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/__init__.py +0 -0
  98. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/episode.py +0 -0
  99. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/eval.py +0 -0
  100. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/eval_args.py +0 -0
  101. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/evaluations.py +0 -0
  102. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/params.py +0 -0
  103. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/test.py +0 -0
  104. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/warnings.py +0 -0
  105. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/__init__.py +0 -0
  106. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/account.py +0 -0
  107. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/catalog.py +0 -0
  108. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/deploy.py +0 -0
  109. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/log_follow.py +0 -0
  110. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/prompt_budget.py +0 -0
  111. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/runs.py +0 -0
  112. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/traces.py +0 -0
  113. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/train.py +0 -0
  114. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/worker_output.py +0 -0
  115. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/__init__.py +0 -0
  116. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/deploy.py +0 -0
  117. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/identity.py +0 -0
  118. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/status.py +0 -0
  119. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/undeploy.py +0 -0
  120. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/__init__.py +0 -0
  121. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/account.py +0 -0
  122. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/custom.py +0 -0
  123. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/env.py +0 -0
  124. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/errors.py +0 -0
  125. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/main.py +0 -0
  126. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/models.py +0 -0
  127. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/serve_parser.py +0 -0
  128. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/traces.py +0 -0
  129. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/training.py +0 -0
  130. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/scaffold/__init__.py +0 -0
  131. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/ui/__init__.py +0 -0
  132. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/ui/cost.py +0 -0
  133. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/ui/env_panels.py +0 -0
  134. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/ui/heartbeat.py +0 -0
  135. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/ui/render.py +0 -0
  136. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/ui/tables.py +0 -0
  137. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cli/ui/tty.py +0 -0
  138. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/client/__init__.py +0 -0
  139. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/client/config.py +0 -0
  140. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/client/freesolo_api.py +0 -0
  141. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/client/http.py +0 -0
  142. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/client/runtime_secrets.py +0 -0
  143. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/client/shapes.py +0 -0
  144. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/client/specs.py +0 -0
  145. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/client/streaming.py +0 -0
  146. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/content/__init__.py +0 -0
  147. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/content/image_descriptors.py +0 -0
  148. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/content/multimodal.py +0 -0
  149. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/content/reasoning_normalization.py +0 -0
  150. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/content/structured_options.py +0 -0
  151. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/content/structured_outputs.py +0 -0
  152. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/content/thinking.py +0 -0
  153. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/core/__init__.py +0 -0
  154. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/core/catalog.py +0 -0
  155. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/core/grpo.py +0 -0
  156. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/core/spec.py +0 -0
  157. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/core/spec_persistence.py +0 -0
  158. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cost/__init__.py +0 -0
  159. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cost/analytical.py +0 -0
  160. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cost/currency.py +0 -0
  161. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cost/facts.py +0 -0
  162. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cost/spec.py +0 -0
  163. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/cost/types.py +0 -0
  164. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/__init__.py +0 -0
  165. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/async_client.py +0 -0
  166. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/backend.py +0 -0
  167. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/billing.py +0 -0
  168. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/checkpoints.py +0 -0
  169. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/client.py +0 -0
  170. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/controller.py +0 -0
  171. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/managed.py +0 -0
  172. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/server.py +0 -0
  173. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/session.py +0 -0
  174. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/starter.py +0 -0
  175. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/types.py +0 -0
  176. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/validation.py +0 -0
  177. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/custom/worker.py +0 -0
  178. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/__init__.py +0 -0
  179. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/plan/__init__.py +0 -0
  180. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/plan/kv_sizing.py +0 -0
  181. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/plan/model_config_probe.py +0 -0
  182. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/plan/prompt_budget.py +0 -0
  183. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/plan/recipe.py +0 -0
  184. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/plan/steps.py +0 -0
  185. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/plan/vram.py +0 -0
  186. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/__init__.py +0 -0
  187. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/dataset_profile.py +0 -0
  188. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/image_tokens.py +0 -0
  189. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/reasoning_render.py +0 -0
  190. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/sft_image_rows.py +0 -0
  191. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/sft_rows.py +0 -0
  192. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/sft_tools.py +0 -0
  193. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/sft_workload.py +0 -0
  194. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/tokenizer.py +0 -0
  195. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/workload_profile.py +0 -0
  196. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/result/__init__.py +0 -0
  197. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/result/accounting.py +0 -0
  198. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/result/rollout_samples.py +0 -0
  199. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/support/__init__.py +0 -0
  200. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/support/checkpoint_transport.py +0 -0
  201. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/support/huggingface.py +0 -0
  202. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/support/model_snapshot.py +0 -0
  203. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/support/verl_checkpoint.py +0 -0
  204. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/support/worker_entrypoint.py +0 -0
  205. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/__init__.py +0 -0
  206. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/__main__.py +0 -0
  207. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/entry/__init__.py +0 -0
  208. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/entry/rl.py +0 -0
  209. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/entry/worker.py +0 -0
  210. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/__init__.py +0 -0
  211. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/cpu_handoff.py +0 -0
  212. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/heartbeat.py +0 -0
  213. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/hf.py +0 -0
  214. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/prefetch.py +0 -0
  215. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/transfer.py +0 -0
  216. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/wandb_log.py +0 -0
  217. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/__init__.py +0 -0
  218. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/adapter.py +0 -0
  219. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/chatml_mask.py +0 -0
  220. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/decoding.py +0 -0
  221. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/lora.py +0 -0
  222. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/packing.py +0 -0
  223. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/__init__.py +0 -0
  224. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/diagnostics.py +0 -0
  225. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/lifecycle.py +0 -0
  226. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/memory.py +0 -0
  227. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/model_size.py +0 -0
  228. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/__init__.py +0 -0
  229. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  230. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/phases.py +0 -0
  231. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/rng.py +0 -0
  232. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/state.py +0 -0
  233. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/__init__.py +0 -0
  234. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/__init__.py +0 -0
  235. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/__init__.py +0 -0
  236. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/agents.yaml +0 -0
  237. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/batch.py +0 -0
  238. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/compact_checkpoint.py +0 -0
  239. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/configuration.py +0 -0
  240. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/engine.py +0 -0
  241. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/flashinfer_cache.py +0 -0
  242. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/glue.py +0 -0
  243. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/launch.py +0 -0
  244. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/model.py +0 -0
  245. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/observations.py +0 -0
  246. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/options.py +0 -0
  247. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/prompt_media.py +0 -0
  248. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/queue.py +0 -0
  249. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/readiness.py +0 -0
  250. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/reference.py +0 -0
  251. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/registration.py +0 -0
  252. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/replay.py +0 -0
  253. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/replay_guard.py +0 -0
  254. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/rollout.py +0 -0
  255. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/rollout_contract.py +0 -0
  256. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/startup.py +0 -0
  257. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/tracking.py +0 -0
  258. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/trainer.py +0 -0
  259. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/upstream.py +0 -0
  260. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/vllm_worker.py +0 -0
  261. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/worker.py +0 -0
  262. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  263. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  264. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  265. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/persistence.py +0 -0
  266. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  267. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/timing.py +0 -0
  268. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/__init__.py +0 -0
  269. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/contract.py +0 -0
  270. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/episode.py +0 -0
  271. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/generation.py +0 -0
  272. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/identity.py +0 -0
  273. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/lifecycle.py +0 -0
  274. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/__init__.py +0 -0
  275. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  276. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/rl_train.py +0 -0
  277. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  278. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  279. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/sft_train.py +0 -0
  280. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  281. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/__init__.py +0 -0
  282. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  283. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/contract.py +0 -0
  284. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/credit.py +0 -0
  285. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/entry.py +0 -0
  286. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/identity.py +0 -0
  287. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/metrics.py +0 -0
  288. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  289. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/reward.py +0 -0
  290. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/rollout.py +0 -0
  291. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/trainer.py +0 -0
  292. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/transport.py +0 -0
  293. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  294. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  295. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/config.py +0 -0
  296. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  297. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  298. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  299. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  300. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  301. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  302. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  303. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/__init__.py +0 -0
  304. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/dataset.py +0 -0
  305. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/entry.py +0 -0
  306. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/loop.py +0 -0
  307. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/schedule.py +0 -0
  308. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/trainer.py +0 -0
  309. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  310. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  311. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/setup/config.py +0 -0
  312. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/__init__.py +0 -0
  313. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/adapter_merger.py +0 -0
  314. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/capabilities.py +0 -0
  315. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/checkpoints.py +0 -0
  316. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/child_io.py +0 -0
  317. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/diagnostics.py +0 -0
  318. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/parallelism.py +0 -0
  319. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/parent_work.py +0 -0
  320. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/__init__.py +0 -0
  321. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/loading/__init__.py +0 -0
  322. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/loading/adapter.py +0 -0
  323. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/loading/base.py +0 -0
  324. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/loading/loader.py +0 -0
  325. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/loading/pull.py +0 -0
  326. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/loading/staged.py +0 -0
  327. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/meta/__init__.py +0 -0
  328. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/meta/cache_security.py +0 -0
  329. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/meta/cache_storage.py +0 -0
  330. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/meta/dataset_selection.py +0 -0
  331. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/meta/evaluations.py +0 -0
  332. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/meta/identity.py +0 -0
  333. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/meta/namespace_listing.py +0 -0
  334. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/package/__init__.py +0 -0
  335. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/package/direct_tokens.py +0 -0
  336. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/package/limits.py +0 -0
  337. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/package/unpack.py +0 -0
  338. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/registry/__init__.py +0 -0
  339. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/registry/azure.py +0 -0
  340. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/registry/packages.py +0 -0
  341. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/scoring/__init__.py +0 -0
  342. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/scoring/context.py +0 -0
  343. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/envs/scoring/response.py +0 -0
  344. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/__init__.py +0 -0
  345. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/__init__.py +0 -0
  346. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  347. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/attempt.py +0 -0
  348. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  349. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  350. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/processes.py +0 -0
  351. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  352. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  353. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/instance.py +0 -0
  354. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/poll.py +0 -0
  355. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  356. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  357. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/__init__.py +0 -0
  358. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/auth.py +0 -0
  359. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/deadline.py +0 -0
  360. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/http.py +0 -0
  361. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/worker.py +0 -0
  362. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/artifacts/__init__.py +0 -0
  363. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/artifacts/hf.py +0 -0
  364. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/artifacts/weight_cache.py +0 -0
  365. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/core/__init__.py +0 -0
  366. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/core/allocator.py +0 -0
  367. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/core/base.py +0 -0
  368. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/core/fit_errors.py +0 -0
  369. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/core/preflight.py +0 -0
  370. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/core/registry.py +0 -0
  371. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/core/sharding.py +0 -0
  372. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/modal/__init__.py +0 -0
  373. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/modal/api.py +0 -0
  374. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/modal/auth.py +0 -0
  375. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/modal/checkpoint_upload.py +0 -0
  376. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/modal/handles.py +0 -0
  377. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/modal/prefetch.py +0 -0
  378. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/modal/pricing.py +0 -0
  379. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/modal/provider.py +0 -0
  380. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/providers/modal/startup.py +0 -0
  381. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/py.typed +0 -0
  382. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/__init__.py +0 -0
  383. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/__init__.py +0 -0
  384. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/artifacts.py +0 -0
  385. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/costs.py +0 -0
  386. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/weight_cache.py +0 -0
  387. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/__init__.py +0 -0
  388. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/attempts.py +0 -0
  389. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/claim_lock.py +0 -0
  390. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/cleanup.py +0 -0
  391. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/deadlines.py +0 -0
  392. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/preparation.py +0 -0
  393. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/reporting.py +0 -0
  394. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/runtime_credentials.py +0 -0
  395. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/state.py +0 -0
  396. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/status.py +0 -0
  397. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/submit.py +0 -0
  398. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/results/__init__.py +0 -0
  399. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/results/checkpoints.py +0 -0
  400. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/results/deployments.py +0 -0
  401. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/__init__.py +0 -0
  402. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/attach.py +0 -0
  403. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/deploy.py +0 -0
  404. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/errors.py +0 -0
  405. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/execution.py +0 -0
  406. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/lifecycle.py +0 -0
  407. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/recovery.py +0 -0
  408. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/transitions.py +0 -0
  409. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/__init__.py +0 -0
  410. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/build.py +0 -0
  411. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/manifest.py +0 -0
  412. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/profiles.py +0 -0
  413. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/schema/__init__.py +0 -0
  414. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/schema/custom.py +0 -0
  415. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/schema/fields.py +0 -0
  416. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/__init__.py +0 -0
  417. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/app/__init__.py +0 -0
  418. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/app/__main__.py +0 -0
  419. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/app/bootstrap.py +0 -0
  420. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/app/chat_stream.py +0 -0
  421. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/app/http.py +0 -0
  422. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/app/launch.py +0 -0
  423. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/app/manifest.py +0 -0
  424. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/app/materialize.py +0 -0
  425. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/app/openai.py +0 -0
  426. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/app/progress.py +0 -0
  427. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/contract/__init__.py +0 -0
  428. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/contract/errors.py +0 -0
  429. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/contract/protocol.py +0 -0
  430. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/contract/provenance.py +0 -0
  431. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/contract/responses.py +0 -0
  432. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/contract/urls.py +0 -0
  433. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/control/__init__.py +0 -0
  434. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/control/_canonical.py +0 -0
  435. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/control/_serialization.py +0 -0
  436. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/control/_urls.py +0 -0
  437. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/control/credentials.py +0 -0
  438. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/control/planning.py +0 -0
  439. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/control/types.py +0 -0
  440. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/__init__.py +0 -0
  441. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/adapter_check.py +0 -0
  442. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/deploy.py +0 -0
  443. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/download.py +0 -0
  444. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/export.py +0 -0
  445. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/preflight.py +0 -0
  446. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/profiles.py +0 -0
  447. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/readiness.py +0 -0
  448. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/resolve.py +0 -0
  449. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/__init__.py +0 -0
  450. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/common/__init__.py +0 -0
  451. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/common/records.py +0 -0
  452. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/__init__.py +0 -0
  453. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  454. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  455. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  456. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  457. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  458. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  459. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  460. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  461. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  462. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  463. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  464. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  465. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  466. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/request/__init__.py +0 -0
  467. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/request/openai.py +0 -0
  468. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/request/runtime_support.py +0 -0
  469. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/request/streaming.py +0 -0
  470. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/request/text_scan.py +0 -0
  471. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/request/thinking.py +0 -0
  472. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/request/tool_template.py +0 -0
  473. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/request/transport.py +0 -0
  474. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/request/validation.py +0 -0
  475. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/__init__.py +0 -0
  476. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/adapters.py +0 -0
  477. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/cache_admission.py +0 -0
  478. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/cache_retention.py +0 -0
  479. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/cache_scheduler.py +0 -0
  480. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/engine.py +0 -0
  481. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/errors.py +0 -0
  482. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/hub.py +0 -0
  483. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/multimodal.py +0 -0
  484. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/prompt.py +0 -0
  485. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/prompt_cache.py +0 -0
  486. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/sampling.py +0 -0
  487. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/structured_outputs.py +0 -0
  488. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/token_batch.py +0 -0
  489. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/token_prefix_cache.py +0 -0
  490. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/types.py +0 -0
  491. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/__init__.py +0 -0
  492. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/__main__.py +0 -0
  493. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/asgi/__init__.py +0 -0
  494. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/asgi/app.py +0 -0
  495. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/asgi/cli.py +0 -0
  496. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/billing/__init__.py +0 -0
  497. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/billing/charges.py +0 -0
  498. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/billing/retry.py +0 -0
  499. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/__init__.py +0 -0
  500. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/ops/__init__.py +0 -0
  501. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/ops/repo_cleanup.py +0 -0
  502. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/ops/serving_resources.py +0 -0
  503. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/__init__.py +0 -0
  504. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/blob_envs.py +0 -0
  505. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/checkpoints.py +0 -0
  506. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/env_files.py +0 -0
  507. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/environment_registry.py +0 -0
  508. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/envs.py +0 -0
  509. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/projects.py +0 -0
  510. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/runs.py +0 -0
  511. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/platform/__init__.py +0 -0
  512. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/platform/db.py +0 -0
  513. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/platform/deployment_jobs.py +0 -0
  514. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/platform/deployment_state.py +0 -0
  515. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/platform/deps.py +0 -0
  516. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/platform/internal_client.py +0 -0
  517. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/platform/locks.py +0 -0
  518. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/platform/plane_lease.py +0 -0
  519. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/platform/runtime.py +0 -0
  520. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/__init__.py +0 -0
  521. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/adapter_download.py +0 -0
  522. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/custom.py +0 -0
  523. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/env_files.py +0 -0
  524. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/envs.py +0 -0
  525. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/meta.py +0 -0
  526. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/runs.py +0 -0
  527. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving.py +0 -0
  528. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_chat.py +0 -0
  529. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_completion.py +0 -0
  530. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_revisions.py +0 -0
  531. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_smoke.py +0 -0
  532. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/__init__.py +0 -0
  533. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/app/GPU_QUALIFICATION.md +0 -0
  534. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/app/README.md +0 -0
  535. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/app/__init__.py +0 -0
  536. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/app/modal_app.py +0 -0
  537. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/app/timeouts.py +0 -0
  538. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/__init__.py +0 -0
  539. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/README.md +0 -0
  540. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/__init__.py +0 -0
  541. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/autoscaling.py +0 -0
  542. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/client.py +0 -0
  543. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/events.py +0 -0
  544. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/http.py +0 -0
  545. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/render.py +0 -0
  546. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/retries.py +0 -0
  547. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/rollout.py +0 -0
  548. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/__init__.py +0 -0
  549. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/config.py +0 -0
  550. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/errors.py +0 -0
  551. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/protocol.py +0 -0
  552. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/tokenizer.py +0 -0
  553. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/__init__.py +0 -0
  554. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/engram_transport.py +0 -0
  555. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/image.py +0 -0
  556. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/patches.py +0 -0
  557. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/transport.py +0 -0
  558. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/__init__.py +0 -0
  559. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/bridge.py +0 -0
  560. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/kernel_cache.py +0 -0
  561. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/prefill_scheduler.py +0 -0
  562. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/prefix_cache.py +0 -0
  563. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/provenance.py +0 -0
  564. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/routing.py +0 -0
  565. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/snapshots.py +0 -0
  566. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/tiered_cache.py +0 -0
  567. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/warmup.py +0 -0
  568. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/worker.py +0 -0
  569. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/__init__.py +0 -0
  570. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/accounting_smoke_test.py +0 -0
  571. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/canary.py +0 -0
  572. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/evidence.py +0 -0
  573. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/gate.py +0 -0
  574. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/__init__.py +0 -0
  575. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/__init__.py +0 -0
  576. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage.py +0 -0
  577. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage_facts.py +0 -0
  578. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage_outbox.py +0 -0
  579. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage_retry.py +0 -0
  580. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/__init__.py +0 -0
  581. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/boot.py +0 -0
  582. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/errors.py +0 -0
  583. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/generation.py +0 -0
  584. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/hub.py +0 -0
  585. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/lora_engine.py +0 -0
  586. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/lora_entries.py +0 -0
  587. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/model_config.py +0 -0
  588. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/prequant_config.py +0 -0
  589. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/reasoning_usage.py +0 -0
  590. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/support.py +0 -0
  591. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/text_tokenizer.py +0 -0
  592. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/warmup.py +0 -0
  593. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/__init__.py +0 -0
  594. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/adapter_routes.py +0 -0
  595. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/body_limit.py +0 -0
  596. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/context.py +0 -0
  597. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/headers.py +0 -0
  598. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/inference_routes.py +0 -0
  599. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/key_rate_limit.py +0 -0
  600. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/rate_limit.py +0 -0
  601. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/router.py +0 -0
  602. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/routing.py +0 -0
  603. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/stream_response.py +0 -0
  604. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/__init__.py +0 -0
  605. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/cache_namespace.py +0 -0
  606. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/multimodal.py +0 -0
  607. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/openai_request.py +0 -0
  608. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/openai_stream.py +0 -0
  609. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/provenance.py +0 -0
  610. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/requests.py +0 -0
  611. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/responses.py +0 -0
  612. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/schemas.py +0 -0
  613. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/streaming.py +0 -0
  614. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/structured_outputs.py +0 -0
  615. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/__init__.py +0 -0
  616. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/access.py +0 -0
  617. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/lookup.py +0 -0
  618. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/persisted_columns.py +0 -0
  619. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/persistence.py +0 -0
  620. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/registration.py +0 -0
  621. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/registry.py +0 -0
  622. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/settings.py +0 -0
  623. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/supabase_rest.py +0 -0
  624. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/undeploy.py +0 -0
  625. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/__init__.py +0 -0
  626. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/_tasks.py +0 -0
  627. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/client.py +0 -0
  628. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/engine.py +0 -0
  629. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/protocol.py +0 -0
  630. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/snapshot/__init__.py +0 -0
  631. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/flash/snapshot/archive.py +0 -0
  632. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/build_dev_dist.py +0 -0
  633. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/check_file_size.py +0 -0
  634. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/check_function_size.py +0 -0
  635. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/check_rollout_identity_actor.py +0 -0
  636. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/check_source_layout.py +0 -0
  637. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/check_verl_pin_exists.py +0 -0
  638. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/fixtures/custom_algorithm.py +0 -0
  639. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/fixtures/modal_environment/dataset/train.jsonl +0 -0
  640. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/fixtures/modal_environment/environment.py +0 -0
  641. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/fixtures/modal_environment/evaluations.py +0 -0
  642. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/qualify_serving_profile.py +0 -0
  643. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/smoke_custom_training.py +0 -0
  644. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/smoke_modal_sft.py +0 -0
  645. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/scripts/smoke_modal_training.py +0 -0
  646. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/serve_launch.py +0 -0
  647. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/__init__.py +0 -0
  648. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/__init__.py +0 -0
  649. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/billing_precheck.py +0 -0
  650. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/chat_provenance.py +0 -0
  651. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/chat_transport.py +0 -0
  652. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/deployments.py +0 -0
  653. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/managed_chat.py +0 -0
  654. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/modal.py +0 -0
  655. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/profile.py +0 -0
  656. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/runner.py +0 -0
  657. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/server_api_plugin.py +0 -0
  658. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/source_snapshot.py +0 -0
  659. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/specs.py +0 -0
  660. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/_helpers/wire_headers.py +0 -0
  661. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/capture_image_sft_processor_oracle.py +0 -0
  662. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/capture_qwen38_27b_metadata.py +0 -0
  663. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/conftest.py +0 -0
  664. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  665. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  666. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  667. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  668. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  669. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  670. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/live/__init__.py +0 -0
  671. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/live/conftest.py +0 -0
  672. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/live/test_sft_thinking_render_live.py +0 -0
  673. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/checkpoint_fixtures.py +0 -0
  674. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/conftest.py +0 -0
  675. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_adapter_hub.py +0 -0
  676. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_artifact_protections.py +0 -0
  677. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_base_model_serving.py +0 -0
  678. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_chat_auth.py +0 -0
  679. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_chat_authorizer.py +0 -0
  680. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_fingerprint_validation.py +0 -0
  681. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  682. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_model_validation.py +0 -0
  683. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_revocation.py +0 -0
  684. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer.py +0 -0
  685. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_deadline.py +0 -0
  686. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_hosted.py +0 -0
  687. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_http_deadline.py +0 -0
  688. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_kernel_cache.py +0 -0
  689. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_latency.py +0 -0
  690. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_optimizations.py +0 -0
  691. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_parallel.py +0 -0
  692. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_prefill_scheduler.py +0 -0
  693. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_provenance.py +0 -0
  694. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_retention.py +0 -0
  695. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_retries.py +0 -0
  696. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_rollout.py +0 -0
  697. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_routing.py +0 -0
  698. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_tiering.py +0 -0
  699. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_engine_error_status.py +0 -0
  700. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_fp8_config.py +0 -0
  701. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_immutable_engine.py +0 -0
  702. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_immutable_revisions.py +0 -0
  703. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_immutable_schemas.py +0 -0
  704. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_inference_duration.py +0 -0
  705. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_internal_header_integrity.py +0 -0
  706. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_key_rate_limit.py +0 -0
  707. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_key_rate_limit_review.py +0 -0
  708. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_kv_namespace.py +0 -0
  709. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_latency_admission.py +0 -0
  710. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_mirror_sampling_parity.py +0 -0
  711. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_modal_deploy_identity.py +0 -0
  712. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_modal_image_paths.py +0 -0
  713. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_model_config.py +0 -0
  714. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_multimodal.py +0 -0
  715. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_openai_stream_options.py +0 -0
  716. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_per_model_gpu.py +0 -0
  717. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_persistence.py +0 -0
  718. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_pre_first_disconnect.py +0 -0
  719. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_prequant_config.py +0 -0
  720. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_accounting_smoke.py +0 -0
  721. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_canary.py +0 -0
  722. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_evidence.py +0 -0
  723. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_gate.py +0 -0
  724. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_qwen_warmup.py +0 -0
  725. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_rate_limit.py +0 -0
  726. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_reasoning_usage.py +0 -0
  727. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_registration_endpoint.py +0 -0
  728. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_registry.py +0 -0
  729. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_registry_coverage.py +0 -0
  730. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_request_body_limit.py +0 -0
  731. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_router.py +0 -0
  732. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_router_coverage.py +0 -0
  733. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_router_edge_coverage.py +0 -0
  734. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_schemas_coverage.py +0 -0
  735. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_serve_reasoning_split.py +0 -0
  736. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_serve_structured_outputs.py +0 -0
  737. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_serve_thinking.py +0 -0
  738. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_settings.py +0 -0
  739. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_stream_channel.py +0 -0
  740. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_stream_response_disconnect.py +0 -0
  741. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_stream_wait_cleanup.py +0 -0
  742. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_structured_outputs.py +0 -0
  743. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_structured_outputs_coverage.py +0 -0
  744. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_supabase_rest_coverage.py +0 -0
  745. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_token_prefix_cache.py +0 -0
  746. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_delivery_concurrency.py +0 -0
  747. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_integrity.py +0 -0
  748. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_outbox.py +0 -0
  749. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_reporter.py +0 -0
  750. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving_conformance/__init__.py +0 -0
  751. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving_conformance/conftest.py +0 -0
  752. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/serving_conformance/test_contract.py +0 -0
  753. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_accounting_coverage.py +0 -0
  754. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_adapter_download.py +0 -0
  755. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_adapter_shard_completeness.py +0 -0
  756. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_agent_flash_cli_contract.py +0 -0
  757. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_algorithms.py +0 -0
  758. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_allocator.py +0 -0
  759. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_authenticated_redirects.py +0 -0
  760. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_azure_environment_registry.py +0 -0
  761. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_backend_common.py +0 -0
  762. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_backend_jobspec_contract.py +0 -0
  763. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_background_supervisor.py +0 -0
  764. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_bake_kernel_cache.py +0 -0
  765. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_bake_sandbox_entry.py +0 -0
  766. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_base_environment_integrity.py +0 -0
  767. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_base_model_provenance.py +0 -0
  768. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_billing_response_integrity.py +0 -0
  769. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_billing_retry.py +0 -0
  770. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_bootstrap_process_groups.py +0 -0
  771. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_bootstrap_reentry.py +0 -0
  772. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_bootstrap_worker_cleanup.py +0 -0
  773. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_build_context_contract.py +0 -0
  774. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cache_admission.py +0 -0
  775. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cache_retention.py +0 -0
  776. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cache_scheduler.py +0 -0
  777. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_capture_qwen38_metadata.py +0 -0
  778. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_catalog_consistency.py +0 -0
  779. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_catalog_only_models.py +0 -0
  780. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_charge_pricing.py +0 -0
  781. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_chat_foundations.py +0 -0
  782. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_cancellation.py +0 -0
  783. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_deployment_inventory_api.py +0 -0
  784. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_deployments.py +0 -0
  785. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_lifecycle.py +0 -0
  786. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_listing_integrity.py +0 -0
  787. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_storage_overlap.py +0 -0
  788. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_transport.py +0 -0
  789. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_checkpoints.py +0 -0
  790. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_commands.py +0 -0
  791. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_commands_coverage.py +0 -0
  792. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_credential_shadowing.py +0 -0
  793. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_errors.py +0 -0
  794. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_estimate.py +0 -0
  795. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_gpus_flag.py +0 -0
  796. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_help.py +0 -0
  797. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_main_coverage.py +0 -0
  798. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_managed.py +0 -0
  799. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_render_coverage.py +0 -0
  800. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_render_theme.py +0 -0
  801. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_serve_deploy.py +0 -0
  802. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_serve_status.py +0 -0
  803. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_serve_undeploy.py +0 -0
  804. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_traces.py +0 -0
  805. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cli_wandb_warning.py +0 -0
  806. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_client.py +0 -0
  807. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_client_deadline_integrity.py +0 -0
  808. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_client_import_purity.py +0 -0
  809. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_client_server_integration.py +0 -0
  810. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_client_stream_reads.py +0 -0
  811. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_compact_checkpoint.py +0 -0
  812. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_config_env_vars.py +0 -0
  813. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_config_overrides.py +0 -0
  814. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_console_upload.py +0 -0
  815. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_controlled_experiment_repairs.py +0 -0
  816. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cost_analytical.py +0 -0
  817. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cost_currency.py +0 -0
  818. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cost_equation.py +0 -0
  819. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cost_estimate.py +0 -0
  820. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cost_hardware.py +0 -0
  821. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cost_models.py +0 -0
  822. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_cpu_checkpoint_handoff.py +0 -0
  823. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_custom_checkpoints.py +0 -0
  824. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_custom_client.py +0 -0
  825. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_custom_gpu_selection.py +0 -0
  826. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_custom_gradients.py +0 -0
  827. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_custom_managed.py +0 -0
  828. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_custom_session.py +0 -0
  829. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_custom_worker.py +0 -0
  830. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_dataset_profile.py +0 -0
  831. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_deploy_latency.py +0 -0
  832. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_deployment_cleanup_resilience.py +0 -0
  833. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_deployment_generation_completion.py +0 -0
  834. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_deployment_registration_cleanup.py +0 -0
  835. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_dev_channel.py +0 -0
  836. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_disk_gb.py +0 -0
  837. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_cache_evict.py +0 -0
  838. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_delete.py +0 -0
  839. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_download.py +0 -0
  840. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_download_api.py +0 -0
  841. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_evaluations.py +0 -0
  842. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_list_api.py +0 -0
  843. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_list_cli.py +0 -0
  844. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_list_registry.py +0 -0
  845. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_no_install.py +0 -0
  846. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_publish.py +0 -0
  847. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_pull.py +0 -0
  848. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_pull_coverage.py +0 -0
  849. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_pull_loader_coverage.py +0 -0
  850. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_pull_managed_control_plane.py +0 -0
  851. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_push.py +0 -0
  852. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_rate_limit_resolve.py +0 -0
  853. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_ref_pinning.py +0 -0
  854. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_env_test.py +0 -0
  855. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_environment_cache_integrity.py +0 -0
  856. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_environment_publish_integrity.py +0 -0
  857. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_envs_coverage.py +0 -0
  858. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_export.py +0 -0
  859. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_flash_mvp.py +0 -0
  860. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_flash_worker.py +0 -0
  861. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_flashinfer_aot_cache.py +0 -0
  862. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_flashinfer_cache_dirs.py +0 -0
  863. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_freesolo_api_transport.py +0 -0
  864. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_fused_expert_warmstart.py +0 -0
  865. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_generation_eos.py +0 -0
  866. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_github_urlopen_retry.py +0 -0
  867. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_gpu_type_single_field.py +0 -0
  868. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_gpus.py +0 -0
  869. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_grpo_checkpoint_durability.py +0 -0
  870. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_grpo_metric_stream.py +0 -0
  871. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_grpo_params.py +0 -0
  872. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_grpo_resident_sizing.py +0 -0
  873. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_grpo_reward_batching.py +0 -0
  874. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_grpo_reward_context.py +0 -0
  875. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_grpo_rollout_contract.py +0 -0
  876. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_grpo_rollout_identity.py +0 -0
  877. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_health_liveness.py +0 -0
  878. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_heartbeat_startup_cleanup.py +0 -0
  879. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_hf_retry.py +0 -0
  880. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_hosted_adapter_admission.py +0 -0
  881. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_image_environment_capability.py +0 -0
  882. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_image_incremental_processor.py +0 -0
  883. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_image_sft_markers.py +0 -0
  884. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_image_sft_processor_parity.py +0 -0
  885. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_image_tokens.py +0 -0
  886. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_infisical_secrets.py +0 -0
  887. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_instance_bootstrap_coverage.py +0 -0
  888. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_internal_client.py +0 -0
  889. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_kernel_bake_build_contracts.py +0 -0
  890. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_kernel_cache.py +0 -0
  891. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_kernel_fingerprint.py +0 -0
  892. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_kv_util.py +0 -0
  893. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_local_credential_integrity.py +0 -0
  894. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_logging.py +0 -0
  895. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_login_perms.py +0 -0
  896. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_lora_rank_coverage.py +0 -0
  897. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_lora_rank_nested_rung.py +0 -0
  898. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_lora_rank_preflight.py +0 -0
  899. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_lora_targeting.py +0 -0
  900. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_lora_targeting_pinned_verl.py +0 -0
  901. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_managed_config_fields.py +0 -0
  902. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_managed_hf_repo.py +0 -0
  903. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_metrics_schema_agent_contract.py +0 -0
  904. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_mig_guard.py +0 -0
  905. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_mirror_sampling_parity.py +0 -0
  906. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_modal_api_loop.py +0 -0
  907. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_modal_prefetch_snapshot.py +0 -0
  908. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_modal_provider.py +0 -0
  909. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_modal_startup.py +0 -0
  910. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_modal_training_lifecycle.py +0 -0
  911. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_modal_weight_warm.py +0 -0
  912. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_multi_gpu_gate.py +0 -0
  913. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_multimodal_boundary_integrity.py +0 -0
  914. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_multimodal_training.py +0 -0
  915. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_named_reward_metrics.py +0 -0
  916. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_notify_tests_repo.py +0 -0
  917. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_offline_http.py +0 -0
  918. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_oom_escalate_gpu.py +0 -0
  919. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_orchestrator_flash.py +0 -0
  920. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_packing.py +0 -0
  921. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_packing_coverage.py +0 -0
  922. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_persisted_spec_envelope.py +0 -0
  923. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_plane_lease.py +0 -0
  924. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_poll_helpers.py +0 -0
  925. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_preflight.py +0 -0
  926. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_projects.py +0 -0
  927. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_prompt_budget.py +0 -0
  928. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_removed_algorithms.py +0 -0
  929. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_removed_training_settings.py +0 -0
  930. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_replay_guard.py +0 -0
  931. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_repo_cleanup.py +0 -0
  932. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_resolve_params_b.py +0 -0
  933. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_reward_server_cleanup.py +0 -0
  934. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_rl_train.py +0 -0
  935. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_rollout_engine_prompt.py +0 -0
  936. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_rollout_samples.py +0 -0
  937. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_run_log_integrity.py +0 -0
  938. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_run_registry_lifecycle.py +0 -0
  939. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_runtime_capsule.py +0 -0
  940. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_runtime_credentials.py +0 -0
  941. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_runtime_secret_integrity.py +0 -0
  942. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_schema_boundary_integrity.py +0 -0
  943. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve.py +0 -0
  944. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_bootstrap_http.py +0 -0
  945. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_launch.py +0 -0
  946. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_manifest.py +0 -0
  947. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_materialize.py +0 -0
  948. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_packaging.py +0 -0
  949. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_progress.py +0 -0
  950. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_cache_resource_cleanup.py +0 -0
  951. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_chat_transport.py +0 -0
  952. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_control.py +0 -0
  953. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_docs.py +0 -0
  954. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_contract_lock.py +0 -0
  955. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_sdk.py +0 -0
  956. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  957. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_teardown_identity.py +0 -0
  958. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_profile_qualification.py +0 -0
  959. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_profiles.py +0 -0
  960. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_provisioning_common.py +0 -0
  961. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_provisioning_modal.py +0 -0
  962. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_reasoning_content.py +0 -0
  963. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_resolve_provenance.py +0 -0
  964. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_adapters.py +0 -0
  965. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_engine.py +0 -0
  966. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_hub.py +0 -0
  967. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_package.py +0 -0
  968. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_types.py +0 -0
  969. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_server_api.py +0 -0
  970. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_server_app_coverage.py +0 -0
  971. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_server_billing.py +0 -0
  972. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_server_checkpoints_coverage.py +0 -0
  973. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_server_db.py +0 -0
  974. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_server_envs_coverage.py +0 -0
  975. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_server_locks_coverage.py +0 -0
  976. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_server_managed_chat_requests.py +0 -0
  977. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_server_serving_resources.py +0 -0
  978. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_server_standalone.py +0 -0
  979. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serving_conformance_gate.py +0 -0
  980. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serving_context_preflight.py +0 -0
  981. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serving_contract.py +0 -0
  982. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serving_input_integrity.py +0 -0
  983. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_serving_schema_coverage.py +0 -0
  984. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_batch_prefetch.py +0 -0
  985. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_cancel_profile_pricing.py +0 -0
  986. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_chunked_nll.py +0 -0
  987. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_cost_reduction.py +0 -0
  988. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_dataset_lazy_images.py +0 -0
  989. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_dataset_nulls.py +0 -0
  990. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_example_selection.py +0 -0
  991. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_gc_off.py +0 -0
  992. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_max_context.py +0 -0
  993. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_memory_policy.py +0 -0
  994. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_step_floor.py +0 -0
  995. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_tools.py +0 -0
  996. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_train.py +0 -0
  997. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_warmup_schedule.py +0 -0
  998. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_sft_workload.py +0 -0
  999. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_smoke_content_integrity.py +0 -0
  1000. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_source_attestation_flow.py +0 -0
  1001. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_source_layout.py +0 -0
  1002. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_source_snapshot.py +0 -0
  1003. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_spec_and_validation.py +0 -0
  1004. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_spec_contract_bytes.py +0 -0
  1005. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_staged_environment.py +0 -0
  1006. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_status_reporting.py +0 -0
  1007. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_status_updates.py +0 -0
  1008. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_step_floor.py +0 -0
  1009. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_step_metrics.py +0 -0
  1010. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_step_timing.py +0 -0
  1011. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_structured_option_safety.py +0 -0
  1012. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_structured_outputs.py +0 -0
  1013. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_structured_runtime_options.py +0 -0
  1014. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_submission_outcome.py +0 -0
  1015. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_terminal_artifacts.py +0 -0
  1016. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_thinking_config.py +0 -0
  1017. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_tool_call_exact_parsing.py +0 -0
  1018. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_train_context_preflight.py +0 -0
  1019. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_training_controls.py +0 -0
  1020. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_training_phases.py +0 -0
  1021. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_transfer_queue_init.py +0 -0
  1022. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_type_comment_prose.py +0 -0
  1023. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_upload_concurrency.py +0 -0
  1024. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_upstream_rollout_contract.py +0 -0
  1025. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_upstream_runtime_policy.py +0 -0
  1026. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_upstream_verl_contract.py +0 -0
  1027. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_verifiers.py +0 -0
  1028. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_verl_checkpoint_export.py +0 -0
  1029. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_verl_child_plugins.py +0 -0
  1030. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_verl_silence_watchdog.py +0 -0
  1031. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_version.py +0 -0
  1032. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_versioned_rollout_contract.py +0 -0
  1033. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  1034. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_vllm_moe_lora_backport.py +0 -0
  1035. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_vram_architecture.py +0 -0
  1036. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_wandb_link.py +0 -0
  1037. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_wandb_naming.py +0 -0
  1038. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_adapter_download.py +0 -0
  1039. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_cross_repo.py +0 -0
  1040. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_error_attribution.py +0 -0
  1041. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_image_adapters.py +0 -0
  1042. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_watchdog_startup_cleanup.py +0 -0
  1043. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_weight_cache.py +0 -0
  1044. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_worker_dryrun.py +0 -0
  1045. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_worker_hardexit.py +0 -0
  1046. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_worker_image.py +0 -0
  1047. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_worker_init_heartbeat.py +0 -0
  1048. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_worker_stack.py +0 -0
  1049. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_worker_thinking.py +0 -0
  1050. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_workflow_contracts.py +0 -0
  1051. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_workload_profile.py +0 -0
  1052. {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.7}/tests/test_zero2_sharding_gate.py +0 -0
@@ -162,6 +162,12 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
162
162
 
163
163
  ### Fixed
164
164
 
165
+ - API-key verification bridges brief Freesolo identity-service outages. A key that verified
166
+ successfully within the last 5 minutes is accepted when verification is unavailable (transport
167
+ errors or 5xx), instead of failing the request with `503 Authentication service unavailable`.
168
+ Live verification still runs on every request while the service answers, and a definitive
169
+ rejection forgets the key, so revocation stays immediate. Long multi-turn rollouts previously
170
+ lost about 13% of episodes to these 503s.
165
171
  - Image SFT no longer stores processed pixel tensors in the training parquet. The worker keeps
166
172
  each row's small processor fields (image grid, token types) and its saved image files, and the
167
173
  training dataset rebuilds `pixel_values` per item, checking the stored grid. Before this,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.4.6
3
+ Version: 1.4.7
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
@@ -341,6 +341,13 @@ endpoint returns `409` with a hint to deploy first. Prefer this control-plane en
341
341
  directly: it enforces run ownership and forwards per-run serving options such as
342
342
  thinking-mode parity.
343
343
 
344
+ Tool parameters use a restricted JSON Schema profile. Inside JSON arrays and objects,
345
+ scalar types can be combined explicitly, for example `"type": ["string", "number",
346
+ "boolean", "null"]` for spreadsheet cells. Empty schemas (`{}`), container unions,
347
+ and unions on top-level function arguments are unsupported. Top-level arguments use
348
+ native parameter text, where a string such as `"12"` and a number would be ambiguous;
349
+ nested JSON preserves those types during generation, streaming, and history replay.
350
+
344
351
  ### Workload estimates (SFT)
345
352
 
346
353
  `flash train`, `--dry-run`, and `--cost` read the pinned environment's packaged dataset
@@ -241,6 +241,13 @@ endpoint returns `409` with a hint to deploy first. Prefer this control-plane en
241
241
  directly: it enforces run ownership and forwards per-run serving options such as
242
242
  thinking-mode parity.
243
243
 
244
+ Tool parameters use a restricted JSON Schema profile. Inside JSON arrays and objects,
245
+ scalar types can be combined explicitly, for example `"type": ["string", "number",
246
+ "boolean", "null"]` for spreadsheet cells. Empty schemas (`{}`), container unions,
247
+ and unions on top-level function arguments are unsupported. Top-level arguments use
248
+ native parameter text, where a string such as `"12"` and a number would be ambiguous;
249
+ nested JSON preserves those types during generation, streaming, and history replay.
250
+
244
251
  ### Workload estimates (SFT)
245
252
 
246
253
  `flash train`, `--dry-run`, and `--cost` read the pinned environment's packaged dataset
@@ -461,13 +461,10 @@ described above.
461
461
  Never derive seconds-per-step from total elapsed time (early steps include one-time warmup
462
462
  that can dominate a short run).
463
463
 
464
- > **Even on a genuinely stale heartbeat, do NOT cancel.** Flash **auto-retries a preempted job from its
465
- > last checkpoint**, and the provider's `job_preempted` notice can lag the freeze by ~10
466
- > minutes. Cancelling races that retry and kills a run that was recovering on its own.
467
- > Wait for either the automatic retry or a genuine terminal state. Cancel only when a run
468
- > is confirmed dead with no retry pending, or is burning money on a definite unrecoverable
469
- > fault. An idle GPU during model load is also not evidence of a hang — and it is not
470
- > evidence that your GPU class is unhealthy, so do not "fix" it by pinning another one.
464
+ A stale heartbeat alone does not identify the failure. Check the provider/attempt state and
465
+ wait for a terminal result or a retry decision for a supported failure category. Host preemption
466
+ is terminal: Flash does not automatically restart a preempted job. Preserve any published
467
+ checkpoints for an explicit follow-up run. An idle GPU during model loading can be normal.
471
468
 
472
469
  ### 6. Deploy & chat
473
470
 
@@ -159,10 +159,7 @@ def _install_flash_attn(py: str) -> None:
159
159
  return
160
160
  except subprocess.CalledProcessError as e:
161
161
  if attempt == FLASH_ATTN_INSTALL_ATTEMPTS - 1:
162
- # hand the arm back to the plane as infra-shaped: it retries as job_preempted on a
163
- # fresh worker instead of failing the run. bounded by the plane's own retry budget
164
- # (INFRA_RETRY_FLOOR), so a genuinely broken wheel spec still terminates rather than
165
- # looping -- it just costs a few provisioning attempts to establish that.
162
+ # preserve the infrastructure failure in the terminal record after local retries.
166
163
  raise RetriableInfraError(
167
164
  f"prebuilt flash-attn wheel install failed {FLASH_ATTN_INSTALL_ATTEMPTS}x "
168
165
  f"(exit {e.returncode}): {FLASH_ATTN_SPEC}"
@@ -56,7 +56,7 @@ _MAX_ATTEMPT_ID = (1 << 63) - 1
56
56
 
57
57
 
58
58
  class RetriableBootstrapError(RuntimeError):
59
- """Infra-shaped failure → marker carries retriable=True → poller retries (job_preempted) instead of job_failed."""
59
+ """Infrastructure failure recorded in the attempt's terminal marker."""
60
60
 
61
61
 
62
62
  class WorkerInterrupted(BaseException):
@@ -68,8 +68,8 @@ def poll(handle, spec, *, log=None, deadline_at=None):
68
68
 
69
69
  def process_failure():
70
70
  # the provider exit status survives an artifact-store outage. ordinary process errors
71
- # must not become paid preemption retries merely because their failure upload hit 429.
72
- # signals/unknown status remain host-loss candidates; explicit retriable markers still win.
71
+ # must not be mislabeled as host loss merely because their failure upload hit 429.
72
+ # signals/unknown status remain host-loss candidates; explicit worker markers still win.
73
73
  if type(returncode) is int and 0 < returncode < 128:
74
74
  return f"Modal worker stopped with exit code {returncode} without a terminal record"
75
75
  return None
@@ -8,7 +8,7 @@ from dataclasses import dataclass, replace
8
8
  from flash.core.spec import JobSpec
9
9
 
10
10
  INFRA_RETRY_FLOOR = 5
11
- INFRA_RETRY_FAILURES = frozenset({"stalled", "no_capacity", "poll_error", "job_preempted"})
11
+ INFRA_RETRY_FAILURES = frozenset({"stalled", "no_capacity", "poll_error"})
12
12
  CANDIDATE_RETRY_FAILURES = INFRA_RETRY_FAILURES | {"oom"}
13
13
  CACHE_FALLBACK_FAILURES = frozenset({"no_capacity", "poll_error"})
14
14
  _STATE_KEYS = frozenset(
@@ -185,7 +185,11 @@ def _restore_last_decision(raw: object, counters: dict) -> PersistedRetryDecisio
185
185
  or not failure
186
186
  ):
187
187
  raise ValueError("persisted retry state has an invalid last decision")
188
- return PersistedRetryDecision(attempt, failure, _restore_plan(raw["plan"], counters))
188
+ plan = _restore_plan(raw["plan"], counters)
189
+ # an older saved decision cannot authorize a failure the current policy no longer retries.
190
+ if plan.retry and failure not in CANDIDATE_RETRY_FAILURES:
191
+ plan = RetryPlan(False, "not retrying")
192
+ return PersistedRetryDecision(attempt, failure, plan)
189
193
 
190
194
 
191
195
  def _decision_snapshot(decision: PersistedRetryDecision | None) -> dict | None:
@@ -325,20 +329,6 @@ def transition_failure(
325
329
  observation,
326
330
  attempt,
327
331
  )
328
- if failure == "job_preempted":
329
- # Preemption says nothing about memory demand. Advancing the OOM floor here
330
- # made a healthy worker at the largest allowed shape impossible to resume.
331
- if state.infra_used >= state.infra_retries:
332
- plan = RetryPlan(False, "not retrying: infrastructure retry budget exhausted")
333
- else:
334
- ordinal = state.infra_used + 1
335
- state = replace(state, infra_used=ordinal, cache_retry_shape=None)
336
- plan = RetryPlan(
337
- True,
338
- "retrying after preemption (resume from last checkpoint)",
339
- ordinal,
340
- )
341
- return _finish(state, plan, observation, attempt)
342
332
  floor = max(state.usable_vram_floor, _candidate_usable_vram_gb(chosen))
343
333
  state = replace(state, usable_vram_floor=floor, cache_retry_shape=None)
344
334
  if candidates is not None and not any(
@@ -0,0 +1,36 @@
1
+ """Exact JSON Schema type matching for tool declarations and arguments."""
2
+
3
+ import math
4
+ from decimal import Decimal
5
+ from typing import Any
6
+
7
+
8
+ def _matches_type(value: Any, schema_type: str | list[str]) -> bool:
9
+ if type(schema_type) is list:
10
+ return any(_matches_type(value, member) for member in schema_type)
11
+ if schema_type == "null":
12
+ return value is None
13
+ if schema_type == "boolean":
14
+ return type(value) is bool
15
+ if schema_type == "integer":
16
+ return (
17
+ type(value) is int
18
+ or (type(value) is Decimal and _decimal_is_integral(value))
19
+ or (type(value) is float and math.isfinite(value) and value.is_integer())
20
+ )
21
+ if schema_type == "number":
22
+ if type(value) is Decimal:
23
+ return value.is_finite()
24
+ return type(value) is int or (type(value) is float and math.isfinite(value))
25
+ if schema_type == "string":
26
+ return type(value) is str
27
+ if schema_type == "array":
28
+ return type(value) is list
29
+ return type(value) is dict
30
+
31
+
32
+ def _decimal_is_integral(value: Decimal) -> bool:
33
+ if not value.is_finite():
34
+ return False
35
+ digits, exponent = value.as_tuple().digits, value.as_tuple().exponent
36
+ return exponent >= 0 or all(digit == 0 for digit in digits[exponent:])
@@ -12,6 +12,7 @@ from typing import Any
12
12
 
13
13
  from flash.serve.contract.protocol import MAX_CHAT_REQUEST_BYTES, TEXT_TYPES
14
14
  from flash.serve.request import text_scan
15
+ from flash.serve.request.schema_types import _decimal_is_integral, _matches_type
15
16
  from flash.serve.request.text_scan import TOOL_CALL_END, TOOL_CALL_START
16
17
  from flash.serve.request.text_scan import skip_whitespace as _skip_whitespace
17
18
  from flash.serve.request.tool_template import last_query_index, rendered_turn_prefix
@@ -37,6 +38,7 @@ _MAX_FIXED_DECIMAL_DIGITS = _MAX_NUMERIC_LITERAL_DIGITS = 1024
37
38
  _MAX_NUMERIC_LITERAL_EXPONENT = 1_000_000
38
39
  _MAX_ENUM_INTEGER_MAGNITUDE = 10**_MAX_NUMERIC_LITERAL_DIGITS
39
40
  _SCHEMA_TYPES = frozenset(["array", "boolean", "integer", "null", "number", "object", "string"]) # fmt: skip
41
+ _SCALAR_SCHEMA_TYPES = _SCHEMA_TYPES - {"array", "object"}
40
42
  _SCHEMA_KEYS = frozenset(["additionalProperties", "description", "enum", "items", "properties", "required", "type"]) # fmt: skip
41
43
 
42
44
 
@@ -317,7 +319,22 @@ def _normalize_schema(
317
319
  if unknown:
318
320
  raise error_type(f"{path} uses unsupported schema keyword(s): {', '.join(sorted(unknown))}")
319
321
  schema_type = raw.get("type")
320
- if type(schema_type) is not str or schema_type not in _SCHEMA_TYPES:
322
+ if type(schema_type) is list:
323
+ if (
324
+ not 1 <= len(schema_type) <= len(_SCALAR_SCHEMA_TYPES)
325
+ or any(
326
+ type(member) is not str or member not in _SCALAR_SCHEMA_TYPES
327
+ for member in schema_type
328
+ )
329
+ or len(set(schema_type)) != len(schema_type)
330
+ ):
331
+ raise error_type(
332
+ f"{path}.type must be a nonempty unique list of supported scalar types"
333
+ )
334
+ if root or direct:
335
+ raise error_type(f"{path}.type unions are supported only inside JSON arrays or objects")
336
+ schema_type = list(schema_type)
337
+ elif type(schema_type) is not str or schema_type not in _SCHEMA_TYPES:
321
338
  raise error_type(f"{path}.type must be one supported JSON Schema type")
322
339
  if root and schema_type != "object":
323
340
  raise error_type(f"{path} must be a root object schema")
@@ -498,7 +515,8 @@ def _validate_tool_result(
498
515
 
499
516
  def _canonicalize_integer_values(value: Any, schema: Mapping[str, Any]) -> Any:
500
517
  schema_type = schema["type"]
501
- if schema_type == "integer" and type(value) is Decimal:
518
+ types = schema_type if type(schema_type) is list else [schema_type]
519
+ if "integer" in types and "number" not in types and type(value) is Decimal:
502
520
  return value.to_integral_value()
503
521
  if schema_type == "object":
504
522
  properties = schema["properties"]
@@ -511,35 +529,6 @@ def _canonicalize_integer_values(value: Any, schema: Mapping[str, Any]) -> Any:
511
529
  return value
512
530
 
513
531
 
514
- def _matches_type(value: Any, schema_type: str) -> bool:
515
- if schema_type == "null":
516
- return value is None
517
- if schema_type == "boolean":
518
- return type(value) is bool
519
- if schema_type == "integer":
520
- return (
521
- type(value) is int
522
- or (type(value) is Decimal and _decimal_is_integral(value))
523
- or (type(value) is float and math.isfinite(value) and value.is_integer())
524
- )
525
- if schema_type == "number":
526
- if type(value) is Decimal:
527
- return value.is_finite()
528
- return type(value) is int or (type(value) is float and math.isfinite(value))
529
- if schema_type == "string":
530
- return type(value) is str
531
- if schema_type == "array":
532
- return type(value) is list
533
- return type(value) is dict
534
-
535
-
536
- def _decimal_is_integral(value: Decimal) -> bool:
537
- if not value.is_finite():
538
- return False
539
- digits, exponent = value.as_tuple().digits, value.as_tuple().exponent
540
- return exponent >= 0 or all(digit == 0 for digit in digits[exponent:])
541
-
542
-
543
532
  def _load_exact_json(value: str) -> Any:
544
533
  try:
545
534
  decoded = json.loads(
@@ -660,7 +660,7 @@ def _validate_value(value: Any, schema: Mapping[str, Any]) -> bool:
660
660
  return type(value) in {dict, list}
661
661
  if not _matches_type(value, schema_type):
662
662
  return False
663
- if schema_type == "string" and _contains_unpaired_surrogate(value):
663
+ if type(value) is str and _contains_unpaired_surrogate(value):
664
664
  return False
665
665
  if "enum" in schema and not any(_json_values_equal(value, item) for item in schema["enum"]):
666
666
  return False
@@ -31,6 +31,12 @@ _verify_cache: dict[str, float] = {}
31
31
  _verify_cache_lock = threading.Lock()
32
32
  _verify_inflight: dict[str, Future[dict[str, Any] | None]] = {}
33
33
  _VERIFY_CACHE_MAX = 1024
34
+ # token digest -> (monotonic verified-at, identity) of the last successful verification. it is never
35
+ # served while the identity service answers, so revocation stays immediate; it only bridges brief
36
+ # identity-service outages for keys verified moments ago, which otherwise fail every request with a
37
+ # 503 (e.g. thousands of rollout chat calls). a definitive rejection forgets it.
38
+ _VERIFY_STALE_GRACE_S = 300.0
39
+ _verify_last_good: dict[str, tuple[float, dict[str, Any]]] = {}
34
40
 
35
41
 
36
42
  class AuthVerificationUnavailable(RuntimeError):
@@ -53,6 +59,27 @@ def _prune_verify_cache_locked(now: float) -> None:
53
59
  del _verify_cache[digest]
54
60
 
55
61
 
62
+ def _remember_good_locked(digest: str, identity: dict[str, Any], now: float) -> None:
63
+ """Record a successful verification. Caller must hold ``_verify_cache_lock``."""
64
+ for stale in [
65
+ d for d, (at, _) in _verify_last_good.items() if now - at > _VERIFY_STALE_GRACE_S
66
+ ]:
67
+ del _verify_last_good[stale]
68
+ if digest not in _verify_last_good and len(_verify_last_good) >= _VERIFY_CACHE_MAX:
69
+ oldest = min(_verify_last_good, key=lambda d: _verify_last_good[d][0])
70
+ del _verify_last_good[oldest]
71
+ _verify_last_good[digest] = (now, dict(identity))
72
+
73
+
74
+ def _recent_good_identity(digest: str) -> dict[str, Any] | None:
75
+ """Identity verified within the grace window, for use only when verification is unavailable."""
76
+ with _verify_cache_lock:
77
+ entry = _verify_last_good.get(digest)
78
+ if entry is None or time.monotonic() - entry[0] > _VERIFY_STALE_GRACE_S:
79
+ return None
80
+ return dict(entry[1])
81
+
82
+
56
83
  def _freesolo_key_prefix(token: str) -> str:
57
84
  """Non-secret preview of a Freesolo API key, matching the dashboard-style public prefix."""
58
85
  parts = token.split("_", 2)
@@ -232,6 +259,22 @@ def _freesolo_verify(token: str) -> dict[str, Any] | None:
232
259
  now = time.monotonic()
233
260
  _prune_verify_cache_locked(now)
234
261
  _verify_cache[digest] = now + _VERIFY_CACHE_NEG_TTL_S
262
+ _verify_last_good.pop(digest, None)
263
+ elif identity is not None:
264
+ with _verify_cache_lock:
265
+ _remember_good_locked(digest, identity, time.monotonic())
266
+ except AuthVerificationUnavailable as exc:
267
+ fallback = _recent_good_identity(digest)
268
+ with _verify_cache_lock:
269
+ if _verify_inflight.get(digest) is pending:
270
+ del _verify_inflight[digest]
271
+ if fallback is None:
272
+ pending.set_exception(exc)
273
+ else:
274
+ pending.set_result(fallback)
275
+ if fallback is None:
276
+ raise
277
+ return fallback
235
278
  except BaseException as exc:
236
279
  with _verify_cache_lock:
237
280
  if _verify_inflight.get(digest) is pending:
@@ -68,6 +68,7 @@ if main_environment:
68
68
  schedule=modal.Period(seconds=POOL_SAMPLE_SECONDS),
69
69
  cpu=0.25,
70
70
  memory=256,
71
+ nonpreemptible=True,
71
72
  min_containers=1,
72
73
  max_containers=1,
73
74
  timeout=15,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "freesolo-flash-dev"
3
- version = "1.4.6"
3
+ version = "1.4.7"
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.6"
212
+ version = "1.4.7"
213
213
 
214
214
  [tool.pytest.ini_options]
215
215
  pythonpath = ["."]
@@ -1,6 +1,8 @@
1
1
  """Pool thresholds, telemetry failures, and complete streaming request lifetimes."""
2
2
 
3
3
  import asyncio
4
+ import runpy
5
+ from pathlib import Path
4
6
  from types import SimpleNamespace
5
7
 
6
8
  import pytest
@@ -235,3 +237,14 @@ def test_counter_covers_preparation_and_stream_lifetime(path, finish):
235
237
  assert counts["active"] == 0
236
238
 
237
239
  asyncio.run(run())
240
+
241
+
242
+ def test_deployed_pool_controller_uses_nonpreemptible_cpu_capacity(monkeypatch):
243
+ monkeypatch.setenv("MODAL_ENVIRONMENT", "main")
244
+ module = runpy.run_path(
245
+ str(Path(__file__).parents[2] / "flash/serving/deepinfer/app/modal_app.py")
246
+ )
247
+ info = module["scale_pool"].info()
248
+ assert info.nonpreemptible
249
+ assert not info.gpus
250
+ assert info.schedule is not None
@@ -1,15 +1,7 @@
1
- """Resume-from-latest-checkpoint on crash/preemption retry (CPU-only).
1
+ """Checkpoint resume for supported infrastructure retries; all network/GPU boundaries are stubbed.
2
2
 
3
- A crash- or preemption-killed run is relaunched on a fresh worker by the control-plane
4
- retry loop, and that fresh worker continues training from the latest streamed checkpoint
5
- rather than restarting from scratch. This file locks in the two live load-bearing pieces:
6
-
7
- 1. worker resume: ``hf_resume_checkpoint`` pulls the stream and returns the highest-step
8
- checkpoint directory used by the training backend.
9
- 2. control plane: ``_run_attempts_supervised`` relaunches on the same run id and seed for every
10
- infra-shaped failure; a genuine worker error fails fast instead.
11
-
12
- All HF/provider/network boundaries are stubbed; nothing here touches a GPU or the network.
3
+ Host preemption is terminal. Checkpoint loading remains necessary for the supervisor's other
4
+ retry categories and explicit checkpoint-based training.
13
5
  """
14
6
 
15
7
  from __future__ import annotations
@@ -30,9 +22,6 @@ from flash.core.spec import JobSpec
30
22
  from tests._helpers.profile import attach_sft_profile, stub_revision_geometry
31
23
  from tests._helpers.source_snapshot import valid_source_snapshot
32
24
 
33
- # Infra-shaped failure categories the retry loop resumes on (see lifecycle._run_attempts_supervised).
34
- # Mirrors the literal tuple in the source; this test is the guard that the set doesn't silently drift.
35
- INFRA_SHAPED = ("stalled", "no_capacity", "poll_error", "job_preempted")
36
25
  _SOURCE_SNAPSHOT = valid_source_snapshot()
37
26
 
38
27
 
@@ -221,28 +221,34 @@ def test_atomic_retry_cas_has_one_owner_and_reuses_persisted_plan(monkeypatch, t
221
221
  assert persisted.last_decision.failure == "stalled"
222
222
 
223
223
 
224
- def test_preemption_resumes_at_the_largest_shape_without_raising_the_oom_floor():
225
- chosen = _candidate("modal", "H100", 80, 8)
226
- original = replace(RetryState.initial_for_spec(_spec()), usable_vram_floor=40)
224
+ @pytest.mark.parametrize("budget", [0, 2, 5])
225
+ def test_preemption_is_terminal_without_spending_retry_budget(budget):
226
+ chosen = _candidate("modal", "L4", 24)
227
+ larger = _candidate("modal", "H100", 80)
228
+ original = replace(RetryState(budget, 2, 1), usable_vram_floor=12)
227
229
  updated, plan = transition_failure(
228
- original, _observe("job_preempted", chosen, (chosen,)), attempt=0
230
+ original, _observe("job_preempted", chosen, (chosen, larger)), attempt=0
229
231
  )
230
- restored = RetryState.from_snapshot(_spec(), updated.to_snapshot())
231
- assert plan.retry
232
- assert plan.infra_retry_ordinal == 1
233
- assert restored.usable_vram_floor == 40
234
- assert restored.oom_used == 0
235
- assert restored.select_candidate((chosen,)) == ((chosen,), chosen)
236
-
237
-
238
- @pytest.mark.parametrize("budget", [0, 2])
239
- def test_preemption_retries_are_bounded_even_when_the_same_shape_is_available(budget):
240
- chosen = _candidate("modal", "H100", 80, 8)
241
- retry_state = RetryState(budget, 2, 1)
242
- for attempt in range(budget + 1):
243
- retry_state, plan = transition_failure(
244
- retry_state, _observe("job_preempted", chosen, (chosen,)), attempt=attempt
245
- )
246
- assert plan.retry is (attempt < budget)
247
- assert retry_state.infra_used == budget
248
- assert "budget exhausted" in plan.action
232
+ assert not plan.retry
233
+ assert updated.infra_used == original.infra_used
234
+ assert updated.oom_used == original.oom_used
235
+ assert updated.usable_vram_floor == original.usable_vram_floor
236
+ assert updated.last_decision.failure == "job_preempted"
237
+
238
+
239
+ def test_saved_preemption_retry_cannot_authorize_a_replacement_worker():
240
+ from flash.runner.supervise.retry_decision import require_retry_authorization_from_raw
241
+
242
+ spec = _spec()
243
+ old_state = replace(
244
+ RetryState.initial_for_spec(spec),
245
+ infra_used=1,
246
+ last_decision=PersistedRetryDecision(
247
+ 0, "job_preempted", RetryPlan(True, "retrying after preemption", 1)
248
+ ),
249
+ ).to_snapshot()
250
+ restored = RetryState.from_snapshot(spec, old_state)
251
+ assert not restored.persisted_plan(0).retry
252
+ assert restored.infra_used == 1
253
+ with pytest.raises(RuntimeError, match="lacks exact persisted retry authorization"):
254
+ require_retry_authorization_from_raw(spec, {state._RETRY_STATE_KEY: old_state}, 1)
@@ -2476,7 +2476,10 @@ def test_attach_cache_fallback_restores_exact_shape_and_drops_managed_cache(monk
2476
2476
  assert retry["cache_retry_shape"] == ["modal", "H100", 2]
2477
2477
 
2478
2478
 
2479
- def test_nonretryable_attached_failure_tears_down_without_resubmitting(monkeypatch, tmp_path):
2479
+ @pytest.mark.parametrize("failure", ["job_failed", "job_preempted"])
2480
+ def test_nonretryable_attached_failure_tears_down_without_resubmitting(
2481
+ monkeypatch, tmp_path, failure
2482
+ ):
2480
2483
  import io
2481
2484
 
2482
2485
  from flash.core.spec import GpuSpec, JobSpec
@@ -2504,7 +2507,7 @@ def test_nonretryable_attached_failure_tears_down_without_resubmitting(monkeypat
2504
2507
 
2505
2508
  class Provider:
2506
2509
  def poll_attempt(self, *_args, **_kwargs):
2507
- return PollResult(False, failure="job_failed", detail="worker assertion")
2510
+ return PollResult(False, failure=failure, detail="worker stopped")
2508
2511
 
2509
2512
  def cancel(self, _handle):
2510
2513
  teardown.append("cancel")
@@ -2513,6 +2516,7 @@ def test_nonretryable_attached_failure_tears_down_without_resubmitting(monkeypat
2513
2516
  teardown.append("destroy")
2514
2517
 
2515
2518
  monkeypatch.setattr(providers, "get_provider", lambda _name: Provider())
2519
+ monkeypatch.setattr(runner_recovery, "_completed_worker_metrics", lambda *_a, **_k: None)
2516
2520
  monkeypatch.setattr(runner_recovery, "_gc_run_sandboxes", lambda _spec: None)
2517
2521
  monkeypatch.setattr(
2518
2522
  runner_lifecycle,
@@ -40,10 +40,12 @@ def _clear_verify_state():
40
40
  with auth._verify_cache_lock:
41
41
  auth._verify_cache.clear()
42
42
  auth._verify_inflight.clear()
43
+ auth._verify_last_good.clear()
43
44
  yield
44
45
  with auth._verify_cache_lock:
45
46
  auth._verify_cache.clear()
46
47
  auth._verify_inflight.clear()
48
+ auth._verify_last_good.clear()
47
49
 
48
50
 
49
51
  def _http_error(code: int) -> urllib.error.HTTPError:
@@ -289,3 +291,88 @@ def test_local_disabled_key_stays_rejected_after_upstream_allow(monkeypatch, tmp
289
291
  )
290
292
 
291
293
  assert auth.authenticate("Bearer fslo-disabled") is None
294
+
295
+
296
+ def _scripted_urlopen(monkeypatch, outcomes: list[object]) -> list[object]:
297
+ def fake_urlopen(req, timeout=None):
298
+ outcome = outcomes.pop(0)
299
+ if isinstance(outcome, BaseException):
300
+ raise outcome
301
+ return outcome
302
+
303
+ monkeypatch.setattr(auth.urllib.request, "urlopen", fake_urlopen)
304
+ return outcomes
305
+
306
+
307
+ @pytest.mark.parametrize(
308
+ "outage",
309
+ [urllib.error.URLError("connection reset"), _http_error(503)],
310
+ ids=["transport", "server-error"],
311
+ )
312
+ def test_recently_verified_key_survives_identity_service_outage(monkeypatch, outage) -> None:
313
+ outcomes = _scripted_urlopen(monkeypatch, [_Response(), outage, _Response()])
314
+
315
+ assert auth._freesolo_verify("rollout-key") == _IDENTITY
316
+ # the outage is bridged by the identity verified moments ago, and nothing is negatively cached.
317
+ assert auth._freesolo_verify("rollout-key") == _IDENTITY
318
+ assert auth._verify_key_digest("rollout-key") not in auth._verify_cache
319
+ assert auth._verify_key_digest("rollout-key") not in auth._verify_inflight
320
+ # once the service answers again every request is verified live as before.
321
+ assert auth._freesolo_verify("rollout-key") == _IDENTITY
322
+ assert outcomes == []
323
+
324
+
325
+ def test_outage_after_the_grace_window_still_fails(monkeypatch) -> None:
326
+ clock = [1000.0]
327
+ monkeypatch.setattr(auth.time, "monotonic", lambda: clock[0])
328
+ _scripted_urlopen(monkeypatch, [_Response(), _http_error(503)])
329
+
330
+ assert auth._freesolo_verify("old-key") == _IDENTITY
331
+ clock[0] += auth._VERIFY_STALE_GRACE_S + 1
332
+ with pytest.raises(auth.AuthVerificationUnavailable):
333
+ auth._freesolo_verify("old-key")
334
+
335
+
336
+ def test_definitive_rejection_is_never_bridged_by_an_earlier_success(monkeypatch) -> None:
337
+ clock = [1000.0]
338
+ monkeypatch.setattr(auth.time, "monotonic", lambda: clock[0])
339
+ _scripted_urlopen(monkeypatch, [_Response(), _http_error(401), _http_error(503)])
340
+
341
+ assert auth._freesolo_verify("revoked-key") == _IDENTITY
342
+ assert auth._freesolo_verify("revoked-key") is None
343
+ assert auth._verify_key_digest("revoked-key") not in auth._verify_last_good
344
+ # after the negative cache expires, an outage must not resurrect the revoked key.
345
+ clock[0] += auth._VERIFY_CACHE_NEG_TTL_S + 1
346
+ with pytest.raises(auth.AuthVerificationUnavailable):
347
+ auth._freesolo_verify("revoked-key")
348
+
349
+
350
+ def test_concurrent_waiters_share_the_bridged_identity(monkeypatch) -> None:
351
+ worker_count = 8
352
+ start = threading.Barrier(worker_count)
353
+
354
+ def fake_urlopen(req, timeout=None):
355
+ time.sleep(0.1)
356
+ raise urllib.error.URLError("connection reset")
357
+
358
+ with auth._verify_cache_lock:
359
+ auth._remember_good_locked(auth._verify_key_digest("shared"), _IDENTITY, time.monotonic())
360
+ monkeypatch.setattr(auth.urllib.request, "urlopen", fake_urlopen)
361
+
362
+ def verify() -> dict[str, object] | None:
363
+ start.wait()
364
+ return auth._freesolo_verify("shared")
365
+
366
+ with ThreadPoolExecutor(max_workers=worker_count) as pool:
367
+ results = list(pool.map(lambda _: verify(), range(worker_count)))
368
+ assert results == [_IDENTITY] * worker_count
369
+
370
+
371
+ def test_last_good_identities_are_bounded_and_keep_no_token(monkeypatch) -> None:
372
+ monkeypatch.setattr(auth, "_VERIFY_CACHE_MAX", 3)
373
+ monkeypatch.setattr(auth.urllib.request, "urlopen", lambda req, timeout=None: _Response())
374
+
375
+ for index in range(5):
376
+ assert auth._freesolo_verify(f"key-{index}") == _IDENTITY
377
+ assert len(auth._verify_last_good) == 3
378
+ assert b"key-4" not in repr(auth._verify_last_good).encode()