freesolo-flash-dev 1.4.5__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.5 → freesolo_flash_dev-1.4.7}/CHANGELOG.md +13 -0
  2. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/PKG-INFO +16 -3
  3. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/README.md +15 -2
  4. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/scaffold/TRAINING.md +4 -7
  5. freesolo_flash_dev-1.4.7/flash/engine/profiling/sft_tools.py +49 -0
  6. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/sft_workload.py +15 -8
  7. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/backend_common.py +1 -4
  8. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +1 -1
  9. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/jobs.py +2 -2
  10. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/retry_decision.py +6 -16
  11. freesolo_flash_dev-1.4.7/flash/serve/request/schema_types.py +36 -0
  12. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/tool_calls.py +20 -31
  13. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/tool_calls.py +1 -1
  14. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/asgi/app.py +6 -4
  15. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/auth.py +43 -0
  16. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/modal_app.py +1 -0
  17. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/pyproject.toml +2 -2
  18. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_autoscaling.py +13 -0
  19. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_plane_lease.py +22 -0
  20. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_resume_on_retry.py +3 -14
  21. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_retry_decision.py +29 -23
  22. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_runmgmt.py +6 -2
  23. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_auth_singleflight.py +87 -0
  24. freesolo_flash_dev-1.4.7/tests/test_sft_tools.py +264 -0
  25. freesolo_flash_dev-1.4.7/tests/test_tool_scalar_unions.py +127 -0
  26. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/uv.lock +1 -1
  27. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.dockerignore +0 -0
  28. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.env.example +0 -0
  29. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/CODEOWNERS +0 -0
  30. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  31. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  32. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  33. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  34. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/dependabot.yml +0 -0
  35. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/scripts/notify_tests_repo.py +0 -0
  36. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/auto-rebake.yml +0 -0
  37. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/bake-kernel-cache.yml +0 -0
  38. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/ci.yml +0 -0
  39. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/deploy-deepinfer.yml +0 -0
  40. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/deploy-modal-dev.yml +0 -0
  41. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/deploy-modal.yml +0 -0
  42. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/dev-kernel-cache.yml +0 -0
  43. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/main-source-guard.yml +0 -0
  44. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/notify-tests-repo.yml +0 -0
  45. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  46. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/publish-dev.yml +0 -0
  47. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/publish-image.yml +0 -0
  48. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/publish-serving-image.yml +0 -0
  49. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/publish.yml +0 -0
  50. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/version-parity.yml +0 -0
  51. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/worker-image.yml +0 -0
  52. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.gitignore +0 -0
  53. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/CODE_OF_CONDUCT.md +0 -0
  54. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/CONTRIBUTING.md +0 -0
  55. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/Dockerfile +0 -0
  56. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/Dockerfile.serve +0 -0
  57. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/Dockerfile.worker +0 -0
  58. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/LICENSE +0 -0
  59. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/NOTICE +0 -0
  60. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/SECURITY.md +0 -0
  61. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/SELF_HOSTING.md +0 -0
  62. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/build/kernel_cache/.gitignore +0 -0
  63. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/build/kernel_cache/.keep +0 -0
  64. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/deploy/infisical/README.md +0 -0
  65. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/deploy/infisical/entrypoint.sh +0 -0
  66. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/Dockerfile.kernelcache +0 -0
  67. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/Dockerfile.kernelcache.relayer +0 -0
  68. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/bake_kernel_cache.py +0 -0
  69. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/bake_sandbox_entry.py +0 -0
  70. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/extract_cudart_fix.py +0 -0
  71. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/kernel_fingerprint.py +0 -0
  72. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/patch_vllm_moe_lora.py +0 -0
  73. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/__init__.py +0 -0
  74. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/__init__.py +0 -0
  75. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/background.py +0 -0
  76. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/channel.py +0 -0
  77. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/diagnostics.py +0 -0
  78. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/fileio.py +0 -0
  79. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/http.py +0 -0
  80. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/http_deadline.py +0 -0
  81. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/logging.py +0 -0
  82. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/openai_sse.py +0 -0
  83. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/paths.py +0 -0
  84. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/version.py +0 -0
  85. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/__init__.py +0 -0
  86. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/artifacts.py +0 -0
  87. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/config.py +0 -0
  88. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/fused_experts.py +0 -0
  89. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/lora_rank.py +0 -0
  90. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/targets.py +0 -0
  91. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/__init__.py +0 -0
  92. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/__main__.py +0 -0
  93. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/__init__.py +0 -0
  94. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/__init__.py +0 -0
  95. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/__init__.py +0 -0
  96. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/imports.py +0 -0
  97. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/list.py +0 -0
  98. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/push.py +0 -0
  99. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/retained.py +0 -0
  100. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/setup.py +0 -0
  101. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  102. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/__init__.py +0 -0
  103. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/episode.py +0 -0
  104. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/eval.py +0 -0
  105. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/eval_args.py +0 -0
  106. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/evaluations.py +0 -0
  107. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/params.py +0 -0
  108. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/test.py +0 -0
  109. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/warnings.py +0 -0
  110. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/__init__.py +0 -0
  111. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/account.py +0 -0
  112. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/catalog.py +0 -0
  113. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/deploy.py +0 -0
  114. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/log_follow.py +0 -0
  115. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/prompt_budget.py +0 -0
  116. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/runs.py +0 -0
  117. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/traces.py +0 -0
  118. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/train.py +0 -0
  119. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/worker_output.py +0 -0
  120. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/__init__.py +0 -0
  121. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/deploy.py +0 -0
  122. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/identity.py +0 -0
  123. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/status.py +0 -0
  124. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/undeploy.py +0 -0
  125. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/__init__.py +0 -0
  126. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/account.py +0 -0
  127. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/custom.py +0 -0
  128. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/env.py +0 -0
  129. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/errors.py +0 -0
  130. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/main.py +0 -0
  131. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/models.py +0 -0
  132. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/serve_parser.py +0 -0
  133. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/traces.py +0 -0
  134. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/training.py +0 -0
  135. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/scaffold/__init__.py +0 -0
  136. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/__init__.py +0 -0
  137. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/cost.py +0 -0
  138. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/env_panels.py +0 -0
  139. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/heartbeat.py +0 -0
  140. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/render.py +0 -0
  141. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/tables.py +0 -0
  142. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/tty.py +0 -0
  143. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/__init__.py +0 -0
  144. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/config.py +0 -0
  145. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/freesolo_api.py +0 -0
  146. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/http.py +0 -0
  147. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/runtime_secrets.py +0 -0
  148. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/shapes.py +0 -0
  149. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/specs.py +0 -0
  150. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/streaming.py +0 -0
  151. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/__init__.py +0 -0
  152. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/image_descriptors.py +0 -0
  153. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/multimodal.py +0 -0
  154. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/reasoning_normalization.py +0 -0
  155. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/structured_options.py +0 -0
  156. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/structured_outputs.py +0 -0
  157. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/thinking.py +0 -0
  158. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/core/__init__.py +0 -0
  159. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/core/catalog.py +0 -0
  160. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/core/grpo.py +0 -0
  161. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/core/spec.py +0 -0
  162. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/core/spec_persistence.py +0 -0
  163. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/__init__.py +0 -0
  164. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/analytical.py +0 -0
  165. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/currency.py +0 -0
  166. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/facts.py +0 -0
  167. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/spec.py +0 -0
  168. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/types.py +0 -0
  169. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/__init__.py +0 -0
  170. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/async_client.py +0 -0
  171. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/backend.py +0 -0
  172. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/billing.py +0 -0
  173. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/checkpoints.py +0 -0
  174. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/client.py +0 -0
  175. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/controller.py +0 -0
  176. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/managed.py +0 -0
  177. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/server.py +0 -0
  178. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/session.py +0 -0
  179. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/starter.py +0 -0
  180. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/types.py +0 -0
  181. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/validation.py +0 -0
  182. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/worker.py +0 -0
  183. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/__init__.py +0 -0
  184. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/__init__.py +0 -0
  185. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/kv_sizing.py +0 -0
  186. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/model_config_probe.py +0 -0
  187. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/prompt_budget.py +0 -0
  188. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/recipe.py +0 -0
  189. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/steps.py +0 -0
  190. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/vram.py +0 -0
  191. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/__init__.py +0 -0
  192. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/dataset_profile.py +0 -0
  193. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/image_tokens.py +0 -0
  194. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/reasoning_render.py +0 -0
  195. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/sft_image_rows.py +0 -0
  196. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/sft_rows.py +0 -0
  197. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/tokenizer.py +0 -0
  198. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/workload_profile.py +0 -0
  199. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/result/__init__.py +0 -0
  200. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/result/accounting.py +0 -0
  201. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/result/rollout_samples.py +0 -0
  202. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/__init__.py +0 -0
  203. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/checkpoint_transport.py +0 -0
  204. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/huggingface.py +0 -0
  205. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/model_snapshot.py +0 -0
  206. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/verl_checkpoint.py +0 -0
  207. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/worker_entrypoint.py +0 -0
  208. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/__init__.py +0 -0
  209. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/__main__.py +0 -0
  210. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/entry/__init__.py +0 -0
  211. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/entry/rl.py +0 -0
  212. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/entry/worker.py +0 -0
  213. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/__init__.py +0 -0
  214. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/cpu_handoff.py +0 -0
  215. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/heartbeat.py +0 -0
  216. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/hf.py +0 -0
  217. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/prefetch.py +0 -0
  218. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/transfer.py +0 -0
  219. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/wandb_log.py +0 -0
  220. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/__init__.py +0 -0
  221. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/adapter.py +0 -0
  222. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/chatml_mask.py +0 -0
  223. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/decoding.py +0 -0
  224. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/lora.py +0 -0
  225. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/packing.py +0 -0
  226. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/__init__.py +0 -0
  227. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/diagnostics.py +0 -0
  228. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/lifecycle.py +0 -0
  229. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/memory.py +0 -0
  230. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/model_size.py +0 -0
  231. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/__init__.py +0 -0
  232. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  233. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/phases.py +0 -0
  234. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/rng.py +0 -0
  235. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/state.py +0 -0
  236. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/__init__.py +0 -0
  237. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/__init__.py +0 -0
  238. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/__init__.py +0 -0
  239. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/agents.yaml +0 -0
  240. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/batch.py +0 -0
  241. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/compact_checkpoint.py +0 -0
  242. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/configuration.py +0 -0
  243. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/engine.py +0 -0
  244. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/flashinfer_cache.py +0 -0
  245. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/glue.py +0 -0
  246. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/launch.py +0 -0
  247. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/model.py +0 -0
  248. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/observations.py +0 -0
  249. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/options.py +0 -0
  250. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/prompt_media.py +0 -0
  251. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/queue.py +0 -0
  252. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/readiness.py +0 -0
  253. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/reference.py +0 -0
  254. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/registration.py +0 -0
  255. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/replay.py +0 -0
  256. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/replay_guard.py +0 -0
  257. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/rollout.py +0 -0
  258. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/rollout_contract.py +0 -0
  259. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/startup.py +0 -0
  260. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/tracking.py +0 -0
  261. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/trainer.py +0 -0
  262. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/upstream.py +0 -0
  263. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/vllm_worker.py +0 -0
  264. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/worker.py +0 -0
  265. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  266. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  267. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  268. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/persistence.py +0 -0
  269. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  270. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/timing.py +0 -0
  271. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/__init__.py +0 -0
  272. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/contract.py +0 -0
  273. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/episode.py +0 -0
  274. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/generation.py +0 -0
  275. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/identity.py +0 -0
  276. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/lifecycle.py +0 -0
  277. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/__init__.py +0 -0
  278. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  279. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/rl_train.py +0 -0
  280. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  281. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  282. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/sft_train.py +0 -0
  283. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  284. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/__init__.py +0 -0
  285. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  286. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/contract.py +0 -0
  287. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/credit.py +0 -0
  288. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/entry.py +0 -0
  289. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/identity.py +0 -0
  290. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/metrics.py +0 -0
  291. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  292. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/reward.py +0 -0
  293. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/rollout.py +0 -0
  294. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/trainer.py +0 -0
  295. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/transport.py +0 -0
  296. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  297. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  298. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/config.py +0 -0
  299. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  300. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  301. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  302. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  303. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  304. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  305. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  306. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/__init__.py +0 -0
  307. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/dataset.py +0 -0
  308. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/entry.py +0 -0
  309. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/loop.py +0 -0
  310. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/schedule.py +0 -0
  311. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/trainer.py +0 -0
  312. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  313. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  314. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/setup/config.py +0 -0
  315. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/__init__.py +0 -0
  316. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/adapter_merger.py +0 -0
  317. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/capabilities.py +0 -0
  318. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/checkpoints.py +0 -0
  319. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/child_io.py +0 -0
  320. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/diagnostics.py +0 -0
  321. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/parallelism.py +0 -0
  322. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/parent_work.py +0 -0
  323. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/__init__.py +0 -0
  324. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/__init__.py +0 -0
  325. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/adapter.py +0 -0
  326. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/base.py +0 -0
  327. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/loader.py +0 -0
  328. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/pull.py +0 -0
  329. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/staged.py +0 -0
  330. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/__init__.py +0 -0
  331. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/cache_security.py +0 -0
  332. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/cache_storage.py +0 -0
  333. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/dataset_selection.py +0 -0
  334. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/evaluations.py +0 -0
  335. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/identity.py +0 -0
  336. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/namespace_listing.py +0 -0
  337. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/package/__init__.py +0 -0
  338. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/package/direct_tokens.py +0 -0
  339. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/package/limits.py +0 -0
  340. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/package/unpack.py +0 -0
  341. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/registry/__init__.py +0 -0
  342. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/registry/azure.py +0 -0
  343. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/registry/packages.py +0 -0
  344. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/scoring/__init__.py +0 -0
  345. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/scoring/context.py +0 -0
  346. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/scoring/response.py +0 -0
  347. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/__init__.py +0 -0
  348. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/__init__.py +0 -0
  349. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  350. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/attempt.py +0 -0
  351. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  352. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  353. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/processes.py +0 -0
  354. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  355. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  356. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/instance.py +0 -0
  357. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/poll.py +0 -0
  358. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  359. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  360. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/__init__.py +0 -0
  361. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/auth.py +0 -0
  362. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/deadline.py +0 -0
  363. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/http.py +0 -0
  364. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/worker.py +0 -0
  365. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/artifacts/__init__.py +0 -0
  366. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/artifacts/hf.py +0 -0
  367. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/artifacts/weight_cache.py +0 -0
  368. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/__init__.py +0 -0
  369. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/allocator.py +0 -0
  370. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/base.py +0 -0
  371. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/fit_errors.py +0 -0
  372. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/preflight.py +0 -0
  373. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/registry.py +0 -0
  374. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/sharding.py +0 -0
  375. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/__init__.py +0 -0
  376. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/api.py +0 -0
  377. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/auth.py +0 -0
  378. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/checkpoint_upload.py +0 -0
  379. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/handles.py +0 -0
  380. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/prefetch.py +0 -0
  381. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/pricing.py +0 -0
  382. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/provider.py +0 -0
  383. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/startup.py +0 -0
  384. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/py.typed +0 -0
  385. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/__init__.py +0 -0
  386. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/__init__.py +0 -0
  387. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/artifacts.py +0 -0
  388. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/costs.py +0 -0
  389. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/weight_cache.py +0 -0
  390. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/__init__.py +0 -0
  391. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/attempts.py +0 -0
  392. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/claim_lock.py +0 -0
  393. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/cleanup.py +0 -0
  394. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/deadlines.py +0 -0
  395. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/preparation.py +0 -0
  396. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/reporting.py +0 -0
  397. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/runtime_credentials.py +0 -0
  398. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/state.py +0 -0
  399. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/status.py +0 -0
  400. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/submit.py +0 -0
  401. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/results/__init__.py +0 -0
  402. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/results/checkpoints.py +0 -0
  403. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/results/deployments.py +0 -0
  404. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/__init__.py +0 -0
  405. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/attach.py +0 -0
  406. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/deploy.py +0 -0
  407. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/errors.py +0 -0
  408. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/execution.py +0 -0
  409. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/lifecycle.py +0 -0
  410. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/recovery.py +0 -0
  411. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/transitions.py +0 -0
  412. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/__init__.py +0 -0
  413. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/build.py +0 -0
  414. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/manifest.py +0 -0
  415. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/profiles.py +0 -0
  416. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/schema/__init__.py +0 -0
  417. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/schema/custom.py +0 -0
  418. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/schema/fields.py +0 -0
  419. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/__init__.py +0 -0
  420. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/__init__.py +0 -0
  421. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/__main__.py +0 -0
  422. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/bootstrap.py +0 -0
  423. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/chat_stream.py +0 -0
  424. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/http.py +0 -0
  425. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/launch.py +0 -0
  426. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/manifest.py +0 -0
  427. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/materialize.py +0 -0
  428. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/openai.py +0 -0
  429. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/progress.py +0 -0
  430. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/__init__.py +0 -0
  431. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/errors.py +0 -0
  432. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/protocol.py +0 -0
  433. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/provenance.py +0 -0
  434. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/responses.py +0 -0
  435. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/urls.py +0 -0
  436. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/__init__.py +0 -0
  437. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/_canonical.py +0 -0
  438. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/_serialization.py +0 -0
  439. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/_urls.py +0 -0
  440. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/credentials.py +0 -0
  441. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/planning.py +0 -0
  442. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/types.py +0 -0
  443. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/__init__.py +0 -0
  444. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/adapter_check.py +0 -0
  445. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/deploy.py +0 -0
  446. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/download.py +0 -0
  447. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/export.py +0 -0
  448. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/preflight.py +0 -0
  449. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/profiles.py +0 -0
  450. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/readiness.py +0 -0
  451. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/resolve.py +0 -0
  452. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/__init__.py +0 -0
  453. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/common/__init__.py +0 -0
  454. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/common/records.py +0 -0
  455. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/__init__.py +0 -0
  456. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  457. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  458. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  459. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  460. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  461. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  462. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  463. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  464. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  465. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  466. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  467. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  468. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  469. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/__init__.py +0 -0
  470. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/openai.py +0 -0
  471. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/runtime_support.py +0 -0
  472. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/streaming.py +0 -0
  473. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/text_scan.py +0 -0
  474. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/thinking.py +0 -0
  475. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/tool_template.py +0 -0
  476. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/transport.py +0 -0
  477. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/validation.py +0 -0
  478. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/__init__.py +0 -0
  479. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/adapters.py +0 -0
  480. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/cache_admission.py +0 -0
  481. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/cache_retention.py +0 -0
  482. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/cache_scheduler.py +0 -0
  483. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/engine.py +0 -0
  484. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/errors.py +0 -0
  485. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/hub.py +0 -0
  486. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/multimodal.py +0 -0
  487. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/prompt.py +0 -0
  488. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/prompt_cache.py +0 -0
  489. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/sampling.py +0 -0
  490. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/structured_outputs.py +0 -0
  491. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/token_batch.py +0 -0
  492. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/token_prefix_cache.py +0 -0
  493. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/types.py +0 -0
  494. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/__init__.py +0 -0
  495. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/__main__.py +0 -0
  496. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/asgi/__init__.py +0 -0
  497. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/asgi/cli.py +0 -0
  498. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/billing/__init__.py +0 -0
  499. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/billing/charges.py +0 -0
  500. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/billing/retry.py +0 -0
  501. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/__init__.py +0 -0
  502. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/ops/__init__.py +0 -0
  503. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/ops/repo_cleanup.py +0 -0
  504. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/ops/serving_resources.py +0 -0
  505. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/__init__.py +0 -0
  506. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/blob_envs.py +0 -0
  507. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/checkpoints.py +0 -0
  508. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/env_files.py +0 -0
  509. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/environment_registry.py +0 -0
  510. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/envs.py +0 -0
  511. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/projects.py +0 -0
  512. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/runs.py +0 -0
  513. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/__init__.py +0 -0
  514. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/db.py +0 -0
  515. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/deployment_jobs.py +0 -0
  516. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/deployment_state.py +0 -0
  517. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/deps.py +0 -0
  518. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/internal_client.py +0 -0
  519. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/locks.py +0 -0
  520. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/plane_lease.py +0 -0
  521. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/runtime.py +0 -0
  522. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/__init__.py +0 -0
  523. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/adapter_download.py +0 -0
  524. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/custom.py +0 -0
  525. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/env_files.py +0 -0
  526. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/envs.py +0 -0
  527. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/meta.py +0 -0
  528. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/runs.py +0 -0
  529. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving.py +0 -0
  530. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_chat.py +0 -0
  531. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_completion.py +0 -0
  532. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_revisions.py +0 -0
  533. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_smoke.py +0 -0
  534. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/__init__.py +0 -0
  535. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/app/GPU_QUALIFICATION.md +0 -0
  536. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/app/README.md +0 -0
  537. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/app/__init__.py +0 -0
  538. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/app/modal_app.py +0 -0
  539. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/app/timeouts.py +0 -0
  540. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/__init__.py +0 -0
  541. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/README.md +0 -0
  542. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/__init__.py +0 -0
  543. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/autoscaling.py +0 -0
  544. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/client.py +0 -0
  545. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/events.py +0 -0
  546. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/http.py +0 -0
  547. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/render.py +0 -0
  548. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/retries.py +0 -0
  549. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/rollout.py +0 -0
  550. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/__init__.py +0 -0
  551. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/config.py +0 -0
  552. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/errors.py +0 -0
  553. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/protocol.py +0 -0
  554. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/tokenizer.py +0 -0
  555. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/__init__.py +0 -0
  556. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/engram_transport.py +0 -0
  557. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/image.py +0 -0
  558. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/patches.py +0 -0
  559. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/transport.py +0 -0
  560. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/__init__.py +0 -0
  561. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/bridge.py +0 -0
  562. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/kernel_cache.py +0 -0
  563. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/prefill_scheduler.py +0 -0
  564. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/prefix_cache.py +0 -0
  565. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/provenance.py +0 -0
  566. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/routing.py +0 -0
  567. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/snapshots.py +0 -0
  568. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/tiered_cache.py +0 -0
  569. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/warmup.py +0 -0
  570. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/worker.py +0 -0
  571. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/__init__.py +0 -0
  572. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/accounting_smoke_test.py +0 -0
  573. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/canary.py +0 -0
  574. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/evidence.py +0 -0
  575. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/gate.py +0 -0
  576. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/__init__.py +0 -0
  577. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/__init__.py +0 -0
  578. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage.py +0 -0
  579. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage_facts.py +0 -0
  580. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage_outbox.py +0 -0
  581. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage_retry.py +0 -0
  582. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/__init__.py +0 -0
  583. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/boot.py +0 -0
  584. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/errors.py +0 -0
  585. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/generation.py +0 -0
  586. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/hub.py +0 -0
  587. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/lora_engine.py +0 -0
  588. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/lora_entries.py +0 -0
  589. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/model_config.py +0 -0
  590. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/prequant_config.py +0 -0
  591. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/reasoning_usage.py +0 -0
  592. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/support.py +0 -0
  593. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/text_tokenizer.py +0 -0
  594. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/warmup.py +0 -0
  595. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/__init__.py +0 -0
  596. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/adapter_routes.py +0 -0
  597. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/body_limit.py +0 -0
  598. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/context.py +0 -0
  599. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/headers.py +0 -0
  600. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/inference_routes.py +0 -0
  601. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/key_rate_limit.py +0 -0
  602. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/rate_limit.py +0 -0
  603. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/router.py +0 -0
  604. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/routing.py +0 -0
  605. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/stream_response.py +0 -0
  606. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/__init__.py +0 -0
  607. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/cache_namespace.py +0 -0
  608. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/multimodal.py +0 -0
  609. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/openai_request.py +0 -0
  610. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/openai_stream.py +0 -0
  611. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/provenance.py +0 -0
  612. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/requests.py +0 -0
  613. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/responses.py +0 -0
  614. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/schemas.py +0 -0
  615. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/streaming.py +0 -0
  616. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/structured_outputs.py +0 -0
  617. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/__init__.py +0 -0
  618. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/access.py +0 -0
  619. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/lookup.py +0 -0
  620. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/persisted_columns.py +0 -0
  621. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/persistence.py +0 -0
  622. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/registration.py +0 -0
  623. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/registry.py +0 -0
  624. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/settings.py +0 -0
  625. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/supabase_rest.py +0 -0
  626. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/undeploy.py +0 -0
  627. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/__init__.py +0 -0
  628. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/_tasks.py +0 -0
  629. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/client.py +0 -0
  630. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/engine.py +0 -0
  631. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/protocol.py +0 -0
  632. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/snapshot/__init__.py +0 -0
  633. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/snapshot/archive.py +0 -0
  634. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/build_dev_dist.py +0 -0
  635. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/check_file_size.py +0 -0
  636. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/check_function_size.py +0 -0
  637. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/check_rollout_identity_actor.py +0 -0
  638. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/check_source_layout.py +0 -0
  639. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/check_verl_pin_exists.py +0 -0
  640. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/fixtures/custom_algorithm.py +0 -0
  641. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/fixtures/modal_environment/dataset/train.jsonl +0 -0
  642. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/fixtures/modal_environment/environment.py +0 -0
  643. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/fixtures/modal_environment/evaluations.py +0 -0
  644. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/qualify_serving_profile.py +0 -0
  645. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/smoke_custom_training.py +0 -0
  646. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/smoke_modal_sft.py +0 -0
  647. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/smoke_modal_training.py +0 -0
  648. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/serve_launch.py +0 -0
  649. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/__init__.py +0 -0
  650. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/__init__.py +0 -0
  651. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/billing_precheck.py +0 -0
  652. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/chat_provenance.py +0 -0
  653. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/chat_transport.py +0 -0
  654. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/deployments.py +0 -0
  655. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/managed_chat.py +0 -0
  656. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/modal.py +0 -0
  657. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/profile.py +0 -0
  658. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/runner.py +0 -0
  659. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/server_api_plugin.py +0 -0
  660. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/source_snapshot.py +0 -0
  661. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/specs.py +0 -0
  662. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/wire_headers.py +0 -0
  663. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/capture_image_sft_processor_oracle.py +0 -0
  664. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/capture_qwen38_27b_metadata.py +0 -0
  665. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/conftest.py +0 -0
  666. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  667. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  668. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  669. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  670. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  671. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  672. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/live/__init__.py +0 -0
  673. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/live/conftest.py +0 -0
  674. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/live/test_sft_thinking_render_live.py +0 -0
  675. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/checkpoint_fixtures.py +0 -0
  676. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/conftest.py +0 -0
  677. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_adapter_hub.py +0 -0
  678. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_artifact_protections.py +0 -0
  679. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_base_model_serving.py +0 -0
  680. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_chat_auth.py +0 -0
  681. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_chat_authorizer.py +0 -0
  682. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_fingerprint_validation.py +0 -0
  683. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  684. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_model_validation.py +0 -0
  685. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_revocation.py +0 -0
  686. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer.py +0 -0
  687. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_deadline.py +0 -0
  688. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_hosted.py +0 -0
  689. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_http_deadline.py +0 -0
  690. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_kernel_cache.py +0 -0
  691. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_latency.py +0 -0
  692. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_optimizations.py +0 -0
  693. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_parallel.py +0 -0
  694. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_prefill_scheduler.py +0 -0
  695. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_provenance.py +0 -0
  696. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_retention.py +0 -0
  697. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_retries.py +0 -0
  698. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_rollout.py +0 -0
  699. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_routing.py +0 -0
  700. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_tiering.py +0 -0
  701. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_engine_error_status.py +0 -0
  702. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_fp8_config.py +0 -0
  703. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_immutable_engine.py +0 -0
  704. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_immutable_revisions.py +0 -0
  705. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_immutable_schemas.py +0 -0
  706. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_inference_duration.py +0 -0
  707. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_internal_header_integrity.py +0 -0
  708. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_key_rate_limit.py +0 -0
  709. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_key_rate_limit_review.py +0 -0
  710. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_kv_namespace.py +0 -0
  711. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_latency_admission.py +0 -0
  712. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_mirror_sampling_parity.py +0 -0
  713. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_modal_deploy_identity.py +0 -0
  714. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_modal_image_paths.py +0 -0
  715. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_model_config.py +0 -0
  716. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_multimodal.py +0 -0
  717. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_openai_stream_options.py +0 -0
  718. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_per_model_gpu.py +0 -0
  719. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_persistence.py +0 -0
  720. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_pre_first_disconnect.py +0 -0
  721. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_prequant_config.py +0 -0
  722. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_accounting_smoke.py +0 -0
  723. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_canary.py +0 -0
  724. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_evidence.py +0 -0
  725. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_gate.py +0 -0
  726. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_qwen_warmup.py +0 -0
  727. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_rate_limit.py +0 -0
  728. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_reasoning_usage.py +0 -0
  729. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_registration_endpoint.py +0 -0
  730. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_registry.py +0 -0
  731. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_registry_coverage.py +0 -0
  732. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_request_body_limit.py +0 -0
  733. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_router.py +0 -0
  734. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_router_coverage.py +0 -0
  735. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_router_edge_coverage.py +0 -0
  736. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_schemas_coverage.py +0 -0
  737. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_serve_reasoning_split.py +0 -0
  738. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_serve_structured_outputs.py +0 -0
  739. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_serve_thinking.py +0 -0
  740. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_settings.py +0 -0
  741. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_stream_channel.py +0 -0
  742. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_stream_response_disconnect.py +0 -0
  743. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_stream_wait_cleanup.py +0 -0
  744. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_structured_outputs.py +0 -0
  745. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_structured_outputs_coverage.py +0 -0
  746. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_supabase_rest_coverage.py +0 -0
  747. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_token_prefix_cache.py +0 -0
  748. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_delivery_concurrency.py +0 -0
  749. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_integrity.py +0 -0
  750. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_outbox.py +0 -0
  751. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_reporter.py +0 -0
  752. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving_conformance/__init__.py +0 -0
  753. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving_conformance/conftest.py +0 -0
  754. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving_conformance/test_contract.py +0 -0
  755. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_accounting_coverage.py +0 -0
  756. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_adapter_download.py +0 -0
  757. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_adapter_shard_completeness.py +0 -0
  758. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_agent_flash_cli_contract.py +0 -0
  759. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_algorithms.py +0 -0
  760. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_allocator.py +0 -0
  761. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_authenticated_redirects.py +0 -0
  762. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_azure_environment_registry.py +0 -0
  763. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_backend_common.py +0 -0
  764. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_backend_jobspec_contract.py +0 -0
  765. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_background_supervisor.py +0 -0
  766. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_bake_kernel_cache.py +0 -0
  767. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_bake_sandbox_entry.py +0 -0
  768. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_base_environment_integrity.py +0 -0
  769. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_base_model_provenance.py +0 -0
  770. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_billing_response_integrity.py +0 -0
  771. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_billing_retry.py +0 -0
  772. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_bootstrap_process_groups.py +0 -0
  773. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_bootstrap_reentry.py +0 -0
  774. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_bootstrap_worker_cleanup.py +0 -0
  775. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_build_context_contract.py +0 -0
  776. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cache_admission.py +0 -0
  777. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cache_retention.py +0 -0
  778. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cache_scheduler.py +0 -0
  779. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_capture_qwen38_metadata.py +0 -0
  780. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_catalog_consistency.py +0 -0
  781. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_catalog_only_models.py +0 -0
  782. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_charge_pricing.py +0 -0
  783. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_chat_foundations.py +0 -0
  784. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_cancellation.py +0 -0
  785. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_deployment_inventory_api.py +0 -0
  786. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_deployments.py +0 -0
  787. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_lifecycle.py +0 -0
  788. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_listing_integrity.py +0 -0
  789. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_storage_overlap.py +0 -0
  790. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_transport.py +0 -0
  791. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoints.py +0 -0
  792. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_commands.py +0 -0
  793. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_commands_coverage.py +0 -0
  794. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_credential_shadowing.py +0 -0
  795. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_errors.py +0 -0
  796. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_estimate.py +0 -0
  797. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_gpus_flag.py +0 -0
  798. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_help.py +0 -0
  799. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_main_coverage.py +0 -0
  800. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_managed.py +0 -0
  801. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_render_coverage.py +0 -0
  802. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_render_theme.py +0 -0
  803. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_serve_deploy.py +0 -0
  804. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_serve_status.py +0 -0
  805. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_serve_undeploy.py +0 -0
  806. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_traces.py +0 -0
  807. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_wandb_warning.py +0 -0
  808. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_client.py +0 -0
  809. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_client_deadline_integrity.py +0 -0
  810. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_client_import_purity.py +0 -0
  811. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_client_server_integration.py +0 -0
  812. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_client_stream_reads.py +0 -0
  813. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_compact_checkpoint.py +0 -0
  814. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_config_env_vars.py +0 -0
  815. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_config_overrides.py +0 -0
  816. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_console_upload.py +0 -0
  817. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_controlled_experiment_repairs.py +0 -0
  818. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_analytical.py +0 -0
  819. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_currency.py +0 -0
  820. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_equation.py +0 -0
  821. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_estimate.py +0 -0
  822. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_hardware.py +0 -0
  823. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_models.py +0 -0
  824. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cpu_checkpoint_handoff.py +0 -0
  825. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_checkpoints.py +0 -0
  826. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_client.py +0 -0
  827. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_gpu_selection.py +0 -0
  828. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_gradients.py +0 -0
  829. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_managed.py +0 -0
  830. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_session.py +0 -0
  831. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_worker.py +0 -0
  832. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_dataset_profile.py +0 -0
  833. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_deploy_latency.py +0 -0
  834. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_deployment_cleanup_resilience.py +0 -0
  835. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_deployment_generation_completion.py +0 -0
  836. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_deployment_registration_cleanup.py +0 -0
  837. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_dev_channel.py +0 -0
  838. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_disk_gb.py +0 -0
  839. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_cache_evict.py +0 -0
  840. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_delete.py +0 -0
  841. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_download.py +0 -0
  842. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_download_api.py +0 -0
  843. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_evaluations.py +0 -0
  844. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_list_api.py +0 -0
  845. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_list_cli.py +0 -0
  846. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_list_registry.py +0 -0
  847. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_no_install.py +0 -0
  848. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_publish.py +0 -0
  849. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_pull.py +0 -0
  850. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_pull_coverage.py +0 -0
  851. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_pull_loader_coverage.py +0 -0
  852. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_pull_managed_control_plane.py +0 -0
  853. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_push.py +0 -0
  854. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_rate_limit_resolve.py +0 -0
  855. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_ref_pinning.py +0 -0
  856. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_test.py +0 -0
  857. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_environment_cache_integrity.py +0 -0
  858. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_environment_publish_integrity.py +0 -0
  859. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_envs_coverage.py +0 -0
  860. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_export.py +0 -0
  861. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_flash_mvp.py +0 -0
  862. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_flash_worker.py +0 -0
  863. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_flashinfer_aot_cache.py +0 -0
  864. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_flashinfer_cache_dirs.py +0 -0
  865. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_freesolo_api_transport.py +0 -0
  866. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_fused_expert_warmstart.py +0 -0
  867. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_generation_eos.py +0 -0
  868. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_github_urlopen_retry.py +0 -0
  869. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_gpu_type_single_field.py +0 -0
  870. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_gpus.py +0 -0
  871. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_checkpoint_durability.py +0 -0
  872. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_metric_stream.py +0 -0
  873. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_params.py +0 -0
  874. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_resident_sizing.py +0 -0
  875. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_reward_batching.py +0 -0
  876. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_reward_context.py +0 -0
  877. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_rollout_contract.py +0 -0
  878. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_rollout_identity.py +0 -0
  879. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_health_liveness.py +0 -0
  880. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_heartbeat_startup_cleanup.py +0 -0
  881. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_hf_retry.py +0 -0
  882. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_hosted_adapter_admission.py +0 -0
  883. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_image_environment_capability.py +0 -0
  884. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_image_incremental_processor.py +0 -0
  885. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_image_sft_markers.py +0 -0
  886. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_image_sft_processor_parity.py +0 -0
  887. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_image_tokens.py +0 -0
  888. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_infisical_secrets.py +0 -0
  889. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_instance_bootstrap_coverage.py +0 -0
  890. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_internal_client.py +0 -0
  891. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_kernel_bake_build_contracts.py +0 -0
  892. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_kernel_cache.py +0 -0
  893. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_kernel_fingerprint.py +0 -0
  894. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_kv_util.py +0 -0
  895. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_local_credential_integrity.py +0 -0
  896. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_logging.py +0 -0
  897. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_login_perms.py +0 -0
  898. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_lora_rank_coverage.py +0 -0
  899. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_lora_rank_nested_rung.py +0 -0
  900. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_lora_rank_preflight.py +0 -0
  901. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_lora_targeting.py +0 -0
  902. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_lora_targeting_pinned_verl.py +0 -0
  903. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_managed_config_fields.py +0 -0
  904. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_managed_hf_repo.py +0 -0
  905. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_metrics_schema_agent_contract.py +0 -0
  906. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_mig_guard.py +0 -0
  907. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_mirror_sampling_parity.py +0 -0
  908. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_api_loop.py +0 -0
  909. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_prefetch_snapshot.py +0 -0
  910. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_provider.py +0 -0
  911. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_startup.py +0 -0
  912. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_training_lifecycle.py +0 -0
  913. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_weight_warm.py +0 -0
  914. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_multi_gpu_gate.py +0 -0
  915. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_multimodal_boundary_integrity.py +0 -0
  916. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_multimodal_training.py +0 -0
  917. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_named_reward_metrics.py +0 -0
  918. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_notify_tests_repo.py +0 -0
  919. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_offline_http.py +0 -0
  920. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_oom_escalate_gpu.py +0 -0
  921. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_orchestrator_flash.py +0 -0
  922. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_packing.py +0 -0
  923. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_packing_coverage.py +0 -0
  924. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_persisted_spec_envelope.py +0 -0
  925. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_poll_helpers.py +0 -0
  926. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_preflight.py +0 -0
  927. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_projects.py +0 -0
  928. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_prompt_budget.py +0 -0
  929. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_removed_algorithms.py +0 -0
  930. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_removed_training_settings.py +0 -0
  931. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_replay_guard.py +0 -0
  932. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_repo_cleanup.py +0 -0
  933. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_resolve_params_b.py +0 -0
  934. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_reward_server_cleanup.py +0 -0
  935. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_rl_train.py +0 -0
  936. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_rollout_engine_prompt.py +0 -0
  937. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_rollout_samples.py +0 -0
  938. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_run_log_integrity.py +0 -0
  939. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_run_registry_lifecycle.py +0 -0
  940. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_runtime_capsule.py +0 -0
  941. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_runtime_credentials.py +0 -0
  942. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_runtime_secret_integrity.py +0 -0
  943. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_schema_boundary_integrity.py +0 -0
  944. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve.py +0 -0
  945. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_bootstrap_http.py +0 -0
  946. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_launch.py +0 -0
  947. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_manifest.py +0 -0
  948. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_materialize.py +0 -0
  949. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_packaging.py +0 -0
  950. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_progress.py +0 -0
  951. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_cache_resource_cleanup.py +0 -0
  952. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_chat_transport.py +0 -0
  953. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_control.py +0 -0
  954. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_docs.py +0 -0
  955. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_contract_lock.py +0 -0
  956. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_sdk.py +0 -0
  957. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  958. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_teardown_identity.py +0 -0
  959. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_profile_qualification.py +0 -0
  960. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_profiles.py +0 -0
  961. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_provisioning_common.py +0 -0
  962. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_provisioning_modal.py +0 -0
  963. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_reasoning_content.py +0 -0
  964. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_resolve_provenance.py +0 -0
  965. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_adapters.py +0 -0
  966. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_engine.py +0 -0
  967. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_hub.py +0 -0
  968. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_package.py +0 -0
  969. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_types.py +0 -0
  970. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_api.py +0 -0
  971. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_app_coverage.py +0 -0
  972. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_billing.py +0 -0
  973. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_checkpoints_coverage.py +0 -0
  974. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_db.py +0 -0
  975. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_envs_coverage.py +0 -0
  976. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_locks_coverage.py +0 -0
  977. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_managed_chat_requests.py +0 -0
  978. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_serving_resources.py +0 -0
  979. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_standalone.py +0 -0
  980. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serving_conformance_gate.py +0 -0
  981. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serving_context_preflight.py +0 -0
  982. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serving_contract.py +0 -0
  983. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serving_input_integrity.py +0 -0
  984. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serving_schema_coverage.py +0 -0
  985. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_batch_prefetch.py +0 -0
  986. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_cancel_profile_pricing.py +0 -0
  987. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_chunked_nll.py +0 -0
  988. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_cost_reduction.py +0 -0
  989. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_dataset_lazy_images.py +0 -0
  990. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_dataset_nulls.py +0 -0
  991. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_example_selection.py +0 -0
  992. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_gc_off.py +0 -0
  993. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_max_context.py +0 -0
  994. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_memory_policy.py +0 -0
  995. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_step_floor.py +0 -0
  996. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_train.py +0 -0
  997. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_warmup_schedule.py +0 -0
  998. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_workload.py +0 -0
  999. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_smoke_content_integrity.py +0 -0
  1000. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_source_attestation_flow.py +0 -0
  1001. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_source_layout.py +0 -0
  1002. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_source_snapshot.py +0 -0
  1003. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_spec_and_validation.py +0 -0
  1004. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_spec_contract_bytes.py +0 -0
  1005. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_staged_environment.py +0 -0
  1006. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_status_reporting.py +0 -0
  1007. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_status_updates.py +0 -0
  1008. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_step_floor.py +0 -0
  1009. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_step_metrics.py +0 -0
  1010. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_step_timing.py +0 -0
  1011. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_structured_option_safety.py +0 -0
  1012. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_structured_outputs.py +0 -0
  1013. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_structured_runtime_options.py +0 -0
  1014. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_submission_outcome.py +0 -0
  1015. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_terminal_artifacts.py +0 -0
  1016. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_thinking_config.py +0 -0
  1017. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_tool_call_exact_parsing.py +0 -0
  1018. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_train_context_preflight.py +0 -0
  1019. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_training_controls.py +0 -0
  1020. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_training_phases.py +0 -0
  1021. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_transfer_queue_init.py +0 -0
  1022. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_type_comment_prose.py +0 -0
  1023. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_upload_concurrency.py +0 -0
  1024. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_upstream_rollout_contract.py +0 -0
  1025. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_upstream_runtime_policy.py +0 -0
  1026. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_upstream_verl_contract.py +0 -0
  1027. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_verifiers.py +0 -0
  1028. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_verl_checkpoint_export.py +0 -0
  1029. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_verl_child_plugins.py +0 -0
  1030. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_verl_silence_watchdog.py +0 -0
  1031. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_version.py +0 -0
  1032. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_versioned_rollout_contract.py +0 -0
  1033. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  1034. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_vllm_moe_lora_backport.py +0 -0
  1035. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_vram_architecture.py +0 -0
  1036. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_wandb_link.py +0 -0
  1037. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_wandb_naming.py +0 -0
  1038. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_adapter_download.py +0 -0
  1039. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_cross_repo.py +0 -0
  1040. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_error_attribution.py +0 -0
  1041. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_image_adapters.py +0 -0
  1042. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_watchdog_startup_cleanup.py +0 -0
  1043. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_weight_cache.py +0 -0
  1044. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_dryrun.py +0 -0
  1045. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_hardexit.py +0 -0
  1046. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_image.py +0 -0
  1047. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_init_heartbeat.py +0 -0
  1048. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_stack.py +0 -0
  1049. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_thinking.py +0 -0
  1050. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_workflow_contracts.py +0 -0
  1051. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_workload_profile.py +0 -0
  1052. {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_zero2_sharding_gate.py +0 -0
@@ -35,6 +35,13 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
35
35
  run recovery, deployment recovery and the background loops; a plane started beside it serves
36
36
  HTTP and leaves new runs queued for the holder until the old plane exits.
37
37
 
38
+ - SFT rows accept `tools`: OpenAI-style function declarations, validated and normalized exactly
39
+ as a chat request's `tools`. They are rendered through the chat template into every training
40
+ view of the row (transcript, prompt boundary and loss-mask probe), so a tool-calling adapter
41
+ trains on the prompt it is served with. Previously every SFT row rendered without tools, so for
42
+ Qwen3.5 the `# Tools` block that serving prepends to the system turn never appeared in
43
+ training. The block is prompt only, so supervised tokens are unchanged. Rows without `tools`
44
+ render as before; `tools` on an image-bearing row is refused.
38
45
  - Custom training rows accept a rectangular `target_tokens` matrix, `[len(tokens)-1, K]`
39
46
  with K up to 64, scoring K tokens at every position instead of the next token. `weights`
40
47
  then has the same shape and logprobs come back with it, so `forward_backward` computes
@@ -155,6 +162,12 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
155
162
 
156
163
  ### Fixed
157
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.
158
171
  - Image SFT no longer stores processed pixel tensors in the training parquet. The worker keeps
159
172
  each row's small processor fields (image grid, token types) and its saved image files, and the
160
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.5
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
@@ -352,8 +359,14 @@ The estimate tokenizes raw `input`/`output` fields plus the statically readable
352
359
  contract. SFT rows can instead supply `prompt_messages`, a nonempty chat-message list
353
360
  that is authoritative for both profiling and training. This preserves stored multi-turn
354
361
  histories and screenshot blocks; image-bearing transcripts use unpacked execution.
355
- The row still requires `input` for dataset identity. Environment-added prompts, few-shot
356
- examples, tool schemas, filters, and transformations are **not** executed, so real training
362
+ The row still requires `input` for dataset identity. A row for a tool-calling agent can also
363
+ supply `tools`, the same OpenAI-style function declarations a chat request sends. Flash
364
+ validates them as serving does and renders them into the row's prompt through the chat template,
365
+ so the adapter trains on the prompt it is served with: Qwen3.5, for example, prepends a
366
+ `# Tools` block to the system turn. The block is prompt, not target, so it lengthens rows
367
+ without adding supervised tokens. Without `tools`, a row trained for a tool-calling deployment
368
+ never sees that block. Environment-added prompts, few-shot
369
+ examples, environment-built tool schemas, filters, and transformations are **not** executed, so real training
357
370
  can retain fewer rows, truncate more often, and cost more than the estimate. If no readable dataset exists, cost, dry-run, and
358
371
  submit all fail before GPU allocation rather than billing a profiling run.
359
372
 
@@ -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
@@ -252,8 +259,14 @@ The estimate tokenizes raw `input`/`output` fields plus the statically readable
252
259
  contract. SFT rows can instead supply `prompt_messages`, a nonempty chat-message list
253
260
  that is authoritative for both profiling and training. This preserves stored multi-turn
254
261
  histories and screenshot blocks; image-bearing transcripts use unpacked execution.
255
- The row still requires `input` for dataset identity. Environment-added prompts, few-shot
256
- examples, tool schemas, filters, and transformations are **not** executed, so real training
262
+ The row still requires `input` for dataset identity. A row for a tool-calling agent can also
263
+ supply `tools`, the same OpenAI-style function declarations a chat request sends. Flash
264
+ validates them as serving does and renders them into the row's prompt through the chat template,
265
+ so the adapter trains on the prompt it is served with: Qwen3.5, for example, prepends a
266
+ `# Tools` block to the system turn. The block is prompt, not target, so it lengthens rows
267
+ without adding supervised tokens. Without `tools`, a row trained for a tool-calling deployment
268
+ never sees that block. Environment-added prompts, few-shot
269
+ examples, environment-built tool schemas, filters, and transformations are **not** executed, so real training
257
270
  can retain fewer rows, truncate more often, and cost more than the estimate. If no readable dataset exists, cost, dry-run, and
258
271
  submit all fail before GPU allocation rather than billing a profiling run.
259
272
 
@@ -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
 
@@ -0,0 +1,49 @@
1
+ """tool declarations an SFT row trains against.
2
+
3
+ A tool-calling agent is served with ``tools=``, and the chat template renders those declarations
4
+ into the prompt (Qwen3.5 prepends a ``# Tools`` block to the system turn). A row rendered without
5
+ them trains on a prompt the deployed adapter never sees. A row may therefore carry ``tools`` -- the
6
+ same per-example field as OpenAI fine-tuning data -- which is validated and normalized exactly as a
7
+ chat request's ``tools`` are (``text_tokenizer`` renders ``tools_wire(normalize_tools(...))``), then
8
+ rendered into every training view of the row. A row without ``tools`` renders as before.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from typing import Any
14
+
15
+ from flash.serve.request.tool_calls import normalize_tools, tools_wire
16
+
17
+
18
+ def sft_row_tools(example) -> list[dict[str, Any]] | None:
19
+ """The row's tools in the form serving renders them, or None when it declares none."""
20
+ if not isinstance(example, dict) or example.get("tools") is None:
21
+ return None
22
+ try:
23
+ return tools_wire(normalize_tools(example["tools"]))
24
+ except ValueError as exc:
25
+ raise ValueError(f"sft tools: {exc}") from exc
26
+
27
+
28
+ def sft_template_kwargs(thinking: bool, tools: list[dict[str, Any]] | None) -> dict[str, Any]:
29
+ """Chat-template kwargs for every training view of a row.
30
+
31
+ The transcript, the prompt boundary, the reasoning probe and the loss mask's field probe all
32
+ render with these, so the supervised tokens are located in exactly the text that is trained on.
33
+ Without tools this is the pre-existing thinking-only render.
34
+ """
35
+ kwargs: dict[str, Any] = {"enable_thinking": thinking, "preserve_thinking": False}
36
+ if tools is not None:
37
+ kwargs["tools"] = tools
38
+ return kwargs
39
+
40
+
41
+ def reject_image_row_tools(example, *, image_bearing: bool) -> None:
42
+ """Refuse tools on an image row before any tokenizer or processor is resolved.
43
+
44
+ The image pipeline tokenizes through the processor's own render, so accepting them would silently
45
+ train the row without the declarations it was given. Validating here, while rows are collected,
46
+ also makes a malformed declaration fail with its own message rather than as a capability error.
47
+ """
48
+ if sft_row_tools(example) is not None and image_bearing:
49
+ raise ValueError("sft tools are not supported on image-bearing rows")
@@ -15,6 +15,7 @@ from flash.content.multimodal import NormalizedImages
15
15
  from flash.content.thinking import messages_for_chat_template
16
16
  from flash.engine.plan.recipe import RECIPE
17
17
  from flash.engine.plan.steps import resolve_update_horizon, sft_update_steps
18
+ from flash.engine.profiling import sft_tools
18
19
  from flash.engine.profiling.sft_image_rows import (
19
20
  estimate_sft_image_row,
20
21
  process_sft_image_row,
@@ -417,22 +418,24 @@ def _text_sft_row_spec(
417
418
  max_length: int,
418
419
  row_index: int,
419
420
  multiturn: bool,
421
+ tools: list[dict[str, Any]] | None = None,
420
422
  ) -> tuple[str, _RowReasoning, dict[str, Any]]:
421
423
  normalized_prompt = messages_for_chat_template(prompt_messages)
422
424
  normalized_completion = messages_for_chat_template(completion_messages)
423
425
  normalized_source = [*normalized_prompt, *normalized_completion]
424
- text = render_transcript(normalized_source)
426
+ template_kwargs = sft_tools.sft_template_kwargs(spec.thinking, tools)
427
+ render = partial(render_transcript, tools=tools)
428
+ text = render(normalized_source)
425
429
  prompt_text = tokenizer.apply_chat_template(
426
430
  normalized_prompt,
427
431
  tokenize=False,
428
432
  add_generation_prompt=True,
429
- enable_thinking=spec.thinking,
430
- preserve_thinking=False,
433
+ **template_kwargs,
431
434
  )
432
435
  reasoning = _row_reasoning(
433
436
  prompt_messages,
434
437
  completion_messages,
435
- render=render_transcript,
438
+ render=render,
436
439
  tokenizer=tokenizer,
437
440
  max_length=max_length,
438
441
  )
@@ -444,7 +447,7 @@ def _text_sft_row_spec(
444
447
  "prompt_text": prompt_text,
445
448
  "target_messages": normalized_completion,
446
449
  "source_messages": normalized_source,
447
- "template_kwargs": {"enable_thinking": spec.thinking, "preserve_thinking": False},
450
+ "template_kwargs": template_kwargs,
448
451
  # measurement carried alongside the row rather than in it: the parquet row is built from
449
452
  # an explicit key list below, so neither key reaches verl.
450
453
  "row_index": row_index,
@@ -481,13 +484,12 @@ def _tokenize_prompt_rows(
481
484
  # denominator. summed after filtering instead.
482
485
  reasoning_by_index: dict[int, _RowReasoning] = {}
483
486
 
484
- def render_transcript(messages: list[dict]) -> str:
487
+ def render_transcript(messages: list[dict], tools: list[dict[str, Any]] | None = None) -> str:
485
488
  return tokenizer.apply_chat_template(
486
489
  messages_for_chat_template(messages),
487
490
  tokenize=False,
488
491
  add_generation_prompt=False,
489
- enable_thinking=spec.thinking,
490
- preserve_thinking=False,
492
+ **sft_tools.sft_template_kwargs(spec.thinking, tools),
491
493
  )
492
494
 
493
495
  for row_index, (
@@ -498,6 +500,7 @@ def _tokenize_prompt_rows(
498
500
  ) in enumerate(prompt_rows):
499
501
  has_images = record_has_images(example, prompt_messages)
500
502
  _reject_image_completion(completion_messages, image_bearing=has_images)
503
+ tools = sft_tools.sft_row_tools(example)
501
504
  # read before the image branch rewrites `completion_messages` to its text-only form.
502
505
  multiturn = len(completion_messages) > 1
503
506
  if multiturn:
@@ -561,6 +564,7 @@ def _tokenize_prompt_rows(
561
564
  max_length=max_length,
562
565
  row_index=row_index,
563
566
  multiturn=multiturn,
567
+ tools=tools,
564
568
  )
565
569
  sampled_texts.append(text)
566
570
  reasoning_by_index[row_index] = reasoning
@@ -913,6 +917,9 @@ def prepare_sft_workload(
913
917
  else:
914
918
  prompt_messages = env.prompt_messages(example)
915
919
  completion_messages, coerced_scalar_output = _sft_completion_with_provenance(env, example)
920
+ sft_tools.reject_image_row_tools(
921
+ example, image_bearing=record_has_images(example, prompt_messages)
922
+ )
916
923
  prompt_rows.append((example, prompt_messages, completion_messages, coerced_scalar_output))
917
924
  package_root = getattr(env, "package_root", None)
918
925
  multimodal = any(
@@ -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
@@ -198,16 +198,18 @@ async def _lead_when_free(work: _LeaderWork) -> None:
198
198
  work.recovery = asyncio.ensure_future(asyncio.to_thread(work.recover))
199
199
  try:
200
200
  await asyncio.shield(work.recovery)
201
+ # Starting the loops can fail too, e.g. the deployment-job pool is full of jobs the plane
202
+ # accepted in standby. Leave standby only once the holder's work is actually running.
203
+ work.start()
201
204
  except asyncio.CancelledError:
202
205
  raise
203
206
  except Exception:
204
- # A lone plane fails startup when recovery fails; a takeover must not keep serving as if
205
- # it led. Stop, and let the restart recover from a clean start.
206
- _log.critical("control-plane recovery failed after lease takeover; stopping", exc_info=True)
207
+ # A lone plane fails startup when recovery or its loops fail; a takeover must not keep
208
+ # serving as if it led. Stop, and let the restart recover from a clean start.
209
+ _log.critical("control-plane takeover failed; stopping", exc_info=True)
207
210
  _stop_plane()
208
211
  return
209
212
  work.app.state.plane_standby = False
210
- work.start()
211
213
 
212
214
 
213
215
  def create_app():
@@ -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.5"
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.5"
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
@@ -192,6 +192,28 @@ def test_takeover_recovery_failure_stops_the_plane_instead_of_serving_as_leader(
192
192
  assert loops == []
193
193
 
194
194
 
195
+ def test_takeover_that_cannot_start_its_loops_stops_the_plane(monkeypatch):
196
+ """Recovery succeeding is not enough: e.g. a full deployment-job pool fails the loops' start."""
197
+ import flash.server.asgi.app as app_mod
198
+
199
+ recovered, stopped = [], threading.Event()
200
+ _stub_lifespan(monkeypatch, recovered)
201
+
202
+ def pool_full(self):
203
+ raise RuntimeError("deployment job capacity reached")
204
+
205
+ monkeypatch.setattr(app_mod, "_stop_plane", stopped.set)
206
+ monkeypatch.setattr(app_mod._LeaderWork, "start", pool_full)
207
+ old_plane = _hold_elsewhere()
208
+
209
+ with TestClient(app_mod.create_app()) as client:
210
+ _release_elsewhere(old_plane)
211
+ assert stopped.wait(10)
212
+ assert recovered == ["runs", "deployments"]
213
+ # never leaves standby, so submissions are not launched by a plane without its loops.
214
+ assert client.app.state.plane_standby is True
215
+
216
+
195
217
  def test_shutdown_waits_for_takeover_recovery_before_releasing_the_lease(monkeypatch):
196
218
  import flash.server.asgi.app as app_mod
197
219
  import flash.server.platform.runtime as server_runtime