freesolo-flash-dev 1.4.19__tar.gz → 1.4.21__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 (1089) hide show
  1. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/PKG-INFO +1 -1
  2. freesolo_flash_dev-1.4.21/flash/content/processor.py +37 -0
  3. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/prompt.py +2 -1
  4. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/app/modal_app.py +4 -26
  5. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/app/rollback.py +1 -4
  6. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/app/rollout.py +5 -17
  7. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/boot.py +4 -0
  8. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/lora_engine.py +2 -1
  9. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/pyproject.toml +2 -2
  10. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_model_config.py +2 -3
  11. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_multimodal.py +44 -0
  12. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_per_model_gpu.py +16 -31
  13. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_rollback_compatibility.py +3 -4
  14. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_rollout_readiness.py +5 -4
  15. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_usage_reporter.py +7 -16
  16. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_processor_chat_template.py +29 -0
  17. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/uv.lock +1 -1
  18. freesolo_flash_dev-1.4.19/flash/content/processor.py +0 -17
  19. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.dockerignore +0 -0
  20. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.env.example +0 -0
  21. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/CODEOWNERS +0 -0
  22. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  23. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  24. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  25. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/dependabot.yml +0 -0
  26. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/scripts/ci_sharding.py +0 -0
  27. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/scripts/notify_tests_repo.py +0 -0
  28. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/auto-rebake.yml +0 -0
  29. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/bake-kernel-cache.yml +0 -0
  30. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/ci.yml +0 -0
  31. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/deploy-deepinfer.yml +0 -0
  32. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/deploy-modal-dev.yml +0 -0
  33. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/deploy-modal.yml +0 -0
  34. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/dev-kernel-cache.yml +0 -0
  35. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/main-source-guard.yml +0 -0
  36. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/notify-tests-repo.yml +0 -0
  37. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  38. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/publish-dev.yml +0 -0
  39. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/publish-image.yml +0 -0
  40. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/publish-serving-image.yml +0 -0
  41. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/publish.yml +0 -0
  42. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/version-parity.yml +0 -0
  43. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.github/workflows/worker-image.yml +0 -0
  44. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/.gitignore +0 -0
  45. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/Dockerfile +0 -0
  46. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/Dockerfile.serve +0 -0
  47. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/Dockerfile.worker +0 -0
  48. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/LICENSE +0 -0
  49. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/NOTICE +0 -0
  50. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/build/kernel_cache/.gitignore +0 -0
  51. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/build/kernel_cache/.keep +0 -0
  52. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/deploy/infisical/entrypoint.sh +0 -0
  53. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/docker/Dockerfile.kernelcache +0 -0
  54. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/docker/Dockerfile.kernelcache.relayer +0 -0
  55. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/docker/bake_kernel_cache.py +0 -0
  56. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/docker/bake_sandbox_entry.py +0 -0
  57. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/docker/extract_cudart_fix.py +0 -0
  58. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/docker/kernel_fingerprint.py +0 -0
  59. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/docker/patch_vllm_moe_lora.py +0 -0
  60. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/__init__.py +0 -0
  61. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/_internal/__init__.py +0 -0
  62. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/_internal/background.py +0 -0
  63. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/_internal/channel.py +0 -0
  64. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/_internal/diagnostics.py +0 -0
  65. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/_internal/fileio.py +0 -0
  66. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/_internal/http.py +0 -0
  67. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/_internal/http_deadline.py +0 -0
  68. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/_internal/logging.py +0 -0
  69. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/_internal/openai_sse.py +0 -0
  70. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/_internal/paths.py +0 -0
  71. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/_internal/version.py +0 -0
  72. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/adapters/__init__.py +0 -0
  73. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/adapters/artifacts.py +0 -0
  74. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/adapters/config.py +0 -0
  75. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/adapters/fused_experts.py +0 -0
  76. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/adapters/lora_rank.py +0 -0
  77. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/adapters/targets.py +0 -0
  78. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/artifacts/__init__.py +0 -0
  79. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/artifacts/api.py +0 -0
  80. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/artifacts/config.py +0 -0
  81. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/artifacts/errors.py +0 -0
  82. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/artifacts/manifest.py +0 -0
  83. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/artifacts/storage.py +0 -0
  84. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/__init__.py +0 -0
  85. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/__main__.py +0 -0
  86. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/__init__.py +0 -0
  87. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/__init__.py +0 -0
  88. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/ops/__init__.py +0 -0
  89. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/ops/imports.py +0 -0
  90. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/ops/list.py +0 -0
  91. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/ops/push.py +0 -0
  92. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/ops/retained.py +0 -0
  93. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/ops/setup.py +0 -0
  94. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  95. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/testing/__init__.py +0 -0
  96. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/testing/episode.py +0 -0
  97. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/testing/eval.py +0 -0
  98. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/testing/eval_args.py +0 -0
  99. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/testing/evaluations.py +0 -0
  100. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/testing/params.py +0 -0
  101. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/testing/test.py +0 -0
  102. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/env/testing/warnings.py +0 -0
  103. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/ops/__init__.py +0 -0
  104. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/ops/account.py +0 -0
  105. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/ops/catalog.py +0 -0
  106. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/ops/deploy.py +0 -0
  107. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/ops/log_follow.py +0 -0
  108. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/ops/prompt_budget.py +0 -0
  109. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/ops/runs.py +0 -0
  110. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/ops/traces.py +0 -0
  111. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/ops/train.py +0 -0
  112. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/ops/worker_output.py +0 -0
  113. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/serving/__init__.py +0 -0
  114. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/serving/deploy.py +0 -0
  115. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/serving/identity.py +0 -0
  116. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/serving/status.py +0 -0
  117. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/commands/serving/undeploy.py +0 -0
  118. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/parsing/__init__.py +0 -0
  119. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/parsing/account.py +0 -0
  120. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/parsing/custom.py +0 -0
  121. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/parsing/env.py +0 -0
  122. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/parsing/errors.py +0 -0
  123. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/parsing/main.py +0 -0
  124. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/parsing/models.py +0 -0
  125. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/parsing/serve_parser.py +0 -0
  126. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/parsing/traces.py +0 -0
  127. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/parsing/training.py +0 -0
  128. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/scaffold/TRAINING.md +0 -0
  129. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/scaffold/__init__.py +0 -0
  130. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/ui/__init__.py +0 -0
  131. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/ui/cost.py +0 -0
  132. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/ui/env_panels.py +0 -0
  133. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/ui/heartbeat.py +0 -0
  134. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/ui/render.py +0 -0
  135. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/ui/tables.py +0 -0
  136. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cli/ui/tty.py +0 -0
  137. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/client/__init__.py +0 -0
  138. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/client/config.py +0 -0
  139. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/client/freesolo_api.py +0 -0
  140. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/client/http.py +0 -0
  141. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/client/runtime_secrets.py +0 -0
  142. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/client/shapes.py +0 -0
  143. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/client/specs.py +0 -0
  144. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/client/streaming.py +0 -0
  145. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/content/__init__.py +0 -0
  146. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/content/image_descriptors.py +0 -0
  147. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/content/multimodal.py +0 -0
  148. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/content/reasoning_normalization.py +0 -0
  149. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/content/stop_tokens.py +0 -0
  150. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/content/structured_options.py +0 -0
  151. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/content/structured_outputs.py +0 -0
  152. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/content/thinking.py +0 -0
  153. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/content/training_template.py +0 -0
  154. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/core/__init__.py +0 -0
  155. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/core/catalog.py +0 -0
  156. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/core/grpo.py +0 -0
  157. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/core/spec.py +0 -0
  158. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/core/spec_persistence.py +0 -0
  159. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cost/__init__.py +0 -0
  160. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cost/analytical.py +0 -0
  161. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cost/currency.py +0 -0
  162. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cost/facts.py +0 -0
  163. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cost/spec.py +0 -0
  164. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/cost/types.py +0 -0
  165. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/__init__.py +0 -0
  166. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/async_client.py +0 -0
  167. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/backend.py +0 -0
  168. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/billing.py +0 -0
  169. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/checkpoints.py +0 -0
  170. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/client.py +0 -0
  171. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/controller.py +0 -0
  172. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/managed.py +0 -0
  173. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/server.py +0 -0
  174. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/session.py +0 -0
  175. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/starter.py +0 -0
  176. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/types.py +0 -0
  177. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/validation.py +0 -0
  178. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/custom/worker.py +0 -0
  179. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/__init__.py +0 -0
  180. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/plan/__init__.py +0 -0
  181. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/plan/kv_sizing.py +0 -0
  182. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/plan/model_config_probe.py +0 -0
  183. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/plan/prompt_budget.py +0 -0
  184. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/plan/recipe.py +0 -0
  185. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/plan/steps.py +0 -0
  186. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/plan/vram.py +0 -0
  187. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/profiling/__init__.py +0 -0
  188. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/profiling/dataset_profile.py +0 -0
  189. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/profiling/image_tokens.py +0 -0
  190. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/profiling/reasoning_render.py +0 -0
  191. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/profiling/sft_image_rows.py +0 -0
  192. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/profiling/sft_rows.py +0 -0
  193. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/profiling/sft_tools.py +0 -0
  194. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/profiling/sft_workload.py +0 -0
  195. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/profiling/tokenizer.py +0 -0
  196. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/profiling/workload_profile.py +0 -0
  197. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/result/__init__.py +0 -0
  198. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/result/accounting.py +0 -0
  199. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/result/rollout_samples.py +0 -0
  200. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/support/__init__.py +0 -0
  201. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/support/checkpoint_transport.py +0 -0
  202. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/support/huggingface.py +0 -0
  203. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/support/model_snapshot.py +0 -0
  204. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/support/verl_checkpoint.py +0 -0
  205. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/support/worker_entrypoint.py +0 -0
  206. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/__init__.py +0 -0
  207. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/__main__.py +0 -0
  208. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/entry/__init__.py +0 -0
  209. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/entry/rl.py +0 -0
  210. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/entry/worker.py +0 -0
  211. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/io/__init__.py +0 -0
  212. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/io/artifacts.py +0 -0
  213. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/io/cpu_handoff.py +0 -0
  214. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/io/heartbeat.py +0 -0
  215. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/io/prefetch.py +0 -0
  216. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/io/transfer.py +0 -0
  217. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/io/wandb_log.py +0 -0
  218. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/model/__init__.py +0 -0
  219. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/model/adapter.py +0 -0
  220. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/model/chatml_mask.py +0 -0
  221. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/model/decoding.py +0 -0
  222. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/model/lora.py +0 -0
  223. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/model/packing.py +0 -0
  224. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/perf/__init__.py +0 -0
  225. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/perf/diagnostics.py +0 -0
  226. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/perf/lifecycle.py +0 -0
  227. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/perf/memory.py +0 -0
  228. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/perf/model_size.py +0 -0
  229. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/runtime/__init__.py +0 -0
  230. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  231. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/runtime/phases.py +0 -0
  232. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/runtime/rng.py +0 -0
  233. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/runtime/state.py +0 -0
  234. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/__init__.py +0 -0
  235. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/__init__.py +0 -0
  236. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/__init__.py +0 -0
  237. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/agents.yaml +0 -0
  238. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/batch.py +0 -0
  239. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/compact_checkpoint.py +0 -0
  240. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/configuration.py +0 -0
  241. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/engine.py +0 -0
  242. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/flashinfer_cache.py +0 -0
  243. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/glue.py +0 -0
  244. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/launch.py +0 -0
  245. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/model.py +0 -0
  246. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/observations.py +0 -0
  247. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/options.py +0 -0
  248. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/prompt_media.py +0 -0
  249. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/queue.py +0 -0
  250. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/readiness.py +0 -0
  251. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/reference.py +0 -0
  252. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/registration.py +0 -0
  253. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/replay.py +0 -0
  254. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/replay_guard.py +0 -0
  255. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/rollout.py +0 -0
  256. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/rollout_contract.py +0 -0
  257. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/startup.py +0 -0
  258. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/tool_messages.py +0 -0
  259. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/tracking.py +0 -0
  260. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/trainer.py +0 -0
  261. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/upstream.py +0 -0
  262. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/vllm_worker.py +0 -0
  263. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/child/worker.py +0 -0
  264. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  265. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  266. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  267. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/lifecycle/persistence.py +0 -0
  268. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  269. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/lifecycle/timing.py +0 -0
  270. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/rollout/__init__.py +0 -0
  271. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/rollout/contract.py +0 -0
  272. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/rollout/episode.py +0 -0
  273. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/rollout/generation.py +0 -0
  274. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/rollout/identity.py +0 -0
  275. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/core/rollout/lifecycle.py +0 -0
  276. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/entry/__init__.py +0 -0
  277. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/entry/backend_common.py +0 -0
  278. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  279. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/entry/rl_train.py +0 -0
  280. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  281. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  282. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/entry/sft_train.py +0 -0
  283. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  284. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/__init__.py +0 -0
  285. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  286. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/child/contract.py +0 -0
  287. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/child/credit.py +0 -0
  288. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/child/entry.py +0 -0
  289. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/child/identity.py +0 -0
  290. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/child/metrics.py +0 -0
  291. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  292. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/child/reward.py +0 -0
  293. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/child/rollout.py +0 -0
  294. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/child/trainer.py +0 -0
  295. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/child/transport.py +0 -0
  296. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  297. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  298. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/launch/config.py +0 -0
  299. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  300. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  301. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  302. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  303. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  304. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  305. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  306. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/sft/__init__.py +0 -0
  307. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/sft/child/dataset.py +0 -0
  308. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/sft/child/entry.py +0 -0
  309. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/sft/child/loop.py +0 -0
  310. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/sft/child/schedule.py +0 -0
  311. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/sft/child/trainer.py +0 -0
  312. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  313. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  314. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/train/sft/setup/config.py +0 -0
  315. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/verl/__init__.py +0 -0
  316. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/verl/adapter_merger.py +0 -0
  317. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/verl/capabilities.py +0 -0
  318. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/verl/checkpoints.py +0 -0
  319. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/verl/child_io.py +0 -0
  320. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/verl/diagnostics.py +0 -0
  321. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/verl/parallelism.py +0 -0
  322. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/engine/worker/verl/parent_work.py +0 -0
  323. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/__init__.py +0 -0
  324. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/loading/__init__.py +0 -0
  325. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/loading/adapter.py +0 -0
  326. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/loading/base.py +0 -0
  327. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/loading/loader.py +0 -0
  328. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/loading/pull.py +0 -0
  329. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/loading/staged.py +0 -0
  330. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/meta/__init__.py +0 -0
  331. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/meta/cache_security.py +0 -0
  332. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/meta/cache_storage.py +0 -0
  333. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/meta/dataset_selection.py +0 -0
  334. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/meta/evaluations.py +0 -0
  335. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/meta/identity.py +0 -0
  336. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/meta/namespace_listing.py +0 -0
  337. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/package/__init__.py +0 -0
  338. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/package/direct_tokens.py +0 -0
  339. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/package/limits.py +0 -0
  340. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/package/unpack.py +0 -0
  341. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/registry/__init__.py +0 -0
  342. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/registry/azure.py +0 -0
  343. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/registry/packages.py +0 -0
  344. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/scoring/__init__.py +0 -0
  345. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/scoring/context.py +0 -0
  346. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/envs/scoring/response.py +0 -0
  347. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/__init__.py +0 -0
  348. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/__init__.py +0 -0
  349. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  350. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/bootstrapping/attempt.py +0 -0
  351. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
  352. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  353. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  354. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/bootstrapping/processes.py +0 -0
  355. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  356. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  357. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/instances/instance.py +0 -0
  358. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/instances/poll.py +0 -0
  359. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  360. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  361. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/net/__init__.py +0 -0
  362. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/net/auth.py +0 -0
  363. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/net/deadline.py +0 -0
  364. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/net/http.py +0 -0
  365. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/_lifecycle/net/worker.py +0 -0
  366. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/artifacts/__init__.py +0 -0
  367. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/artifacts/channel.py +0 -0
  368. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/artifacts/weight_cache.py +0 -0
  369. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/core/__init__.py +0 -0
  370. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/core/allocator.py +0 -0
  371. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/core/base.py +0 -0
  372. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/core/fit_errors.py +0 -0
  373. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/core/preflight.py +0 -0
  374. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/core/registry.py +0 -0
  375. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/core/sharding.py +0 -0
  376. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/modal/__init__.py +0 -0
  377. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/modal/api.py +0 -0
  378. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/modal/auth.py +0 -0
  379. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/modal/checkpoint_upload.py +0 -0
  380. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/modal/handles.py +0 -0
  381. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/modal/jobs.py +0 -0
  382. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/modal/prefetch.py +0 -0
  383. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/modal/pricing.py +0 -0
  384. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/modal/provider.py +0 -0
  385. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/providers/modal/startup.py +0 -0
  386. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/py.typed +0 -0
  387. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/__init__.py +0 -0
  388. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/accounting/__init__.py +0 -0
  389. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/accounting/artifacts.py +0 -0
  390. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/accounting/costs.py +0 -0
  391. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/accounting/weight_cache.py +0 -0
  392. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/lifecycle/__init__.py +0 -0
  393. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/lifecycle/attempts.py +0 -0
  394. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/lifecycle/claim_lock.py +0 -0
  395. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/lifecycle/cleanup.py +0 -0
  396. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/lifecycle/deadlines.py +0 -0
  397. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/lifecycle/preparation.py +0 -0
  398. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/lifecycle/reporting.py +0 -0
  399. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/lifecycle/runtime_credentials.py +0 -0
  400. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/lifecycle/state.py +0 -0
  401. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/lifecycle/status.py +0 -0
  402. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/lifecycle/submit.py +0 -0
  403. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/results/__init__.py +0 -0
  404. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/results/checkpoints.py +0 -0
  405. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/results/deployments.py +0 -0
  406. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/supervise/__init__.py +0 -0
  407. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/supervise/attach.py +0 -0
  408. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/supervise/deploy.py +0 -0
  409. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/supervise/errors.py +0 -0
  410. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/supervise/execution.py +0 -0
  411. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/supervise/lifecycle.py +0 -0
  412. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/supervise/recovery.py +0 -0
  413. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/supervise/retry_decision.py +0 -0
  414. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runner/supervise/transitions.py +0 -0
  415. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runtime_capsule/__init__.py +0 -0
  416. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runtime_capsule/build.py +0 -0
  417. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runtime_capsule/manifest.py +0 -0
  418. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/runtime_capsule/profiles.py +0 -0
  419. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/schema/__init__.py +0 -0
  420. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/schema/custom.py +0 -0
  421. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/schema/fields.py +0 -0
  422. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/__init__.py +0 -0
  423. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/app/__init__.py +0 -0
  424. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/app/__main__.py +0 -0
  425. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/app/bootstrap.py +0 -0
  426. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/app/chat_stream.py +0 -0
  427. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/app/http.py +0 -0
  428. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/app/hydration_credentials.py +0 -0
  429. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/app/launch.py +0 -0
  430. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/app/manifest.py +0 -0
  431. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/app/materialize.py +0 -0
  432. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/app/openai.py +0 -0
  433. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/app/progress.py +0 -0
  434. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/contract/__init__.py +0 -0
  435. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/contract/errors.py +0 -0
  436. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/contract/protocol.py +0 -0
  437. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/contract/provenance.py +0 -0
  438. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/contract/responses.py +0 -0
  439. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/contract/urls.py +0 -0
  440. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/control/__init__.py +0 -0
  441. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/control/_canonical.py +0 -0
  442. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/control/_serialization.py +0 -0
  443. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/control/_urls.py +0 -0
  444. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/control/credentials.py +0 -0
  445. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/control/planning.py +0 -0
  446. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/control/types.py +0 -0
  447. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/deployment/__init__.py +0 -0
  448. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/deployment/adapter_check.py +0 -0
  449. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/deployment/deploy.py +0 -0
  450. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/deployment/download.py +0 -0
  451. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/deployment/export.py +0 -0
  452. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/deployment/preflight.py +0 -0
  453. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/deployment/profiles.py +0 -0
  454. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/deployment/readiness.py +0 -0
  455. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/deployment/resolve.py +0 -0
  456. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/__init__.py +0 -0
  457. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/common/__init__.py +0 -0
  458. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/common/records.py +0 -0
  459. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/__init__.py +0 -0
  460. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  461. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  462. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  463. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  464. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  465. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  466. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  467. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  468. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  469. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  470. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  471. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  472. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  473. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/request/__init__.py +0 -0
  474. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/request/openai.py +0 -0
  475. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/request/runtime_support.py +0 -0
  476. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/request/schema_types.py +0 -0
  477. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/request/streaming.py +0 -0
  478. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/request/text_scan.py +0 -0
  479. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/request/thinking.py +0 -0
  480. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/request/tool_calls.py +0 -0
  481. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/request/tool_template.py +0 -0
  482. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/request/transport.py +0 -0
  483. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/request/validation.py +0 -0
  484. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/__init__.py +0 -0
  485. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/adapters.py +0 -0
  486. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/cache_admission.py +0 -0
  487. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/cache_retention.py +0 -0
  488. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/cache_scheduler.py +0 -0
  489. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/engine.py +0 -0
  490. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/errors.py +0 -0
  491. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/hub.py +0 -0
  492. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/multimodal.py +0 -0
  493. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/prompt_cache.py +0 -0
  494. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/reasoning_tools.py +0 -0
  495. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/sampling.py +0 -0
  496. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/structured_outputs.py +0 -0
  497. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/token_batch.py +0 -0
  498. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/token_prefix_cache.py +0 -0
  499. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/tool_calls.py +0 -0
  500. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serve/runtime/types.py +0 -0
  501. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/__init__.py +0 -0
  502. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/__main__.py +0 -0
  503. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/asgi/__init__.py +0 -0
  504. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/asgi/app.py +0 -0
  505. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/asgi/cli.py +0 -0
  506. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/billing/__init__.py +0 -0
  507. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/billing/charges.py +0 -0
  508. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/billing/retry.py +0 -0
  509. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/__init__.py +0 -0
  510. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/ops/__init__.py +0 -0
  511. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/ops/repo_cleanup.py +0 -0
  512. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/ops/serving_resources.py +0 -0
  513. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/registry/__init__.py +0 -0
  514. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/registry/blob_envs.py +0 -0
  515. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/registry/checkpoints.py +0 -0
  516. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/registry/env_files.py +0 -0
  517. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/registry/environment_registry.py +0 -0
  518. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/registry/envs.py +0 -0
  519. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/registry/projects.py +0 -0
  520. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/domain/registry/runs.py +0 -0
  521. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/platform/__init__.py +0 -0
  522. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/platform/auth.py +0 -0
  523. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/platform/db.py +0 -0
  524. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/platform/deployment_jobs.py +0 -0
  525. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/platform/deployment_state.py +0 -0
  526. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/platform/deps.py +0 -0
  527. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/platform/internal_client.py +0 -0
  528. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/platform/locks.py +0 -0
  529. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/platform/plane_lease.py +0 -0
  530. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/platform/runtime.py +0 -0
  531. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/platform/submission_admission.py +0 -0
  532. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/__init__.py +0 -0
  533. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/adapter_download.py +0 -0
  534. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/custom.py +0 -0
  535. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/env_files.py +0 -0
  536. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/envs.py +0 -0
  537. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/meta.py +0 -0
  538. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/runs.py +0 -0
  539. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/serving.py +0 -0
  540. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/serving_chat.py +0 -0
  541. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/serving_completion.py +0 -0
  542. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/serving_errors.py +0 -0
  543. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/serving_revisions.py +0 -0
  544. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/serving_smoke.py +0 -0
  545. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/server/routes/submissions.py +0 -0
  546. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/__init__.py +0 -0
  547. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/app/__init__.py +0 -0
  548. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/app/timeouts.py +0 -0
  549. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/__init__.py +0 -0
  550. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/app/__init__.py +0 -0
  551. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/app/autoscaling.py +0 -0
  552. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/app/client.py +0 -0
  553. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/app/events.py +0 -0
  554. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/app/http.py +0 -0
  555. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/app/modal_app.py +0 -0
  556. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/app/render.py +0 -0
  557. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/app/retries.py +0 -0
  558. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/app/rollout.py +0 -0
  559. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/contract/__init__.py +0 -0
  560. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/contract/config.py +0 -0
  561. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/contract/errors.py +0 -0
  562. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/contract/protocol.py +0 -0
  563. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/contract/tokenizer.py +0 -0
  564. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/native/__init__.py +0 -0
  565. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/native/engram_transport.py +0 -0
  566. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/native/image.py +0 -0
  567. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/native/patches.py +0 -0
  568. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/native/transport.py +0 -0
  569. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/runtime/__init__.py +0 -0
  570. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/runtime/bridge.py +0 -0
  571. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/runtime/kernel_cache.py +0 -0
  572. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/runtime/prefill_scheduler.py +0 -0
  573. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/runtime/prefix_cache.py +0 -0
  574. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/runtime/provenance.py +0 -0
  575. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/runtime/routing.py +0 -0
  576. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/runtime/snapshots.py +0 -0
  577. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/runtime/tiered_cache.py +0 -0
  578. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/runtime/warmup.py +0 -0
  579. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/deepinfer/runtime/worker.py +0 -0
  580. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/promotion/__init__.py +0 -0
  581. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/promotion/accounting_smoke_test.py +0 -0
  582. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/promotion/canary.py +0 -0
  583. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/promotion/evidence.py +0 -0
  584. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/promotion/gate.py +0 -0
  585. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/__init__.py +0 -0
  586. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/accounting/__init__.py +0 -0
  587. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/accounting/usage.py +0 -0
  588. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/accounting/usage_facts.py +0 -0
  589. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/accounting/usage_outbox.py +0 -0
  590. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/accounting/usage_retry.py +0 -0
  591. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/__init__.py +0 -0
  592. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/errors.py +0 -0
  593. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/generation.py +0 -0
  594. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/hub.py +0 -0
  595. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/lora_entries.py +0 -0
  596. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/model_config.py +0 -0
  597. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/prequant_config.py +0 -0
  598. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/reasoning_usage.py +0 -0
  599. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/support.py +0 -0
  600. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/text_tokenizer.py +0 -0
  601. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/engine/warmup.py +0 -0
  602. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/__init__.py +0 -0
  603. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/adapter_routes.py +0 -0
  604. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/authorization_transport.py +0 -0
  605. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/body_limit.py +0 -0
  606. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/context.py +0 -0
  607. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/headers.py +0 -0
  608. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/inference_routes.py +0 -0
  609. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/key_rate_limit.py +0 -0
  610. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/rate_limit.py +0 -0
  611. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/router.py +0 -0
  612. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/routing.py +0 -0
  613. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/http/stream_response.py +0 -0
  614. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/io/__init__.py +0 -0
  615. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/io/cache_namespace.py +0 -0
  616. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/io/multimodal.py +0 -0
  617. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/io/openai_request.py +0 -0
  618. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/io/openai_stream.py +0 -0
  619. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/io/provenance.py +0 -0
  620. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/io/requests.py +0 -0
  621. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/io/responses.py +0 -0
  622. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/io/schemas.py +0 -0
  623. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/io/streaming.py +0 -0
  624. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/io/structured_outputs.py +0 -0
  625. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/store/__init__.py +0 -0
  626. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/store/access.py +0 -0
  627. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/store/lookup.py +0 -0
  628. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/store/persisted_columns.py +0 -0
  629. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/store/persistence.py +0 -0
  630. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/store/registration.py +0 -0
  631. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/store/registry.py +0 -0
  632. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/store/settings.py +0 -0
  633. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/store/supabase_rest.py +0 -0
  634. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/store/undeploy.py +0 -0
  635. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/stream_channel/__init__.py +0 -0
  636. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/stream_channel/_tasks.py +0 -0
  637. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/stream_channel/client.py +0 -0
  638. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/stream_channel/engine.py +0 -0
  639. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/serving/src/stream_channel/protocol.py +0 -0
  640. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/snapshot/__init__.py +0 -0
  641. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/flash/snapshot/archive.py +0 -0
  642. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/benchmark_qwen_serving.py +0 -0
  643. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/benchmark_router_resources.py +0 -0
  644. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/build_dev_dist.py +0 -0
  645. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/check_dev_release.py +0 -0
  646. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/check_file_size.py +0 -0
  647. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/check_function_size.py +0 -0
  648. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/check_rollout_identity_actor.py +0 -0
  649. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/check_source_layout.py +0 -0
  650. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/check_verl_pin_exists.py +0 -0
  651. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/fixtures/custom_algorithm.py +0 -0
  652. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/fixtures/modal_environment/dataset/train.jsonl +0 -0
  653. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/fixtures/modal_environment/environment.py +0 -0
  654. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/fixtures/modal_environment/evaluations.py +0 -0
  655. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/qualify_serving_profile.py +0 -0
  656. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/qualify_serving_rollout.py +0 -0
  657. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/quantize_qwen35_base.py +0 -0
  658. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/smoke_custom_training.py +0 -0
  659. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/smoke_modal_sft.py +0 -0
  660. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/scripts/smoke_modal_training.py +0 -0
  661. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/serve_launch.py +0 -0
  662. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/__init__.py +0 -0
  663. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/__init__.py +0 -0
  664. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/billing_precheck.py +0 -0
  665. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/chat_provenance.py +0 -0
  666. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/chat_transport.py +0 -0
  667. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/deployments.py +0 -0
  668. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/managed_chat.py +0 -0
  669. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/modal.py +0 -0
  670. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/profile.py +0 -0
  671. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/runner.py +0 -0
  672. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/server_api_plugin.py +0 -0
  673. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/source_snapshot.py +0 -0
  674. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/specs.py +0 -0
  675. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/_helpers/wire_headers.py +0 -0
  676. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/capture_image_sft_processor_oracle.py +0 -0
  677. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/capture_qwen38_27b_metadata.py +0 -0
  678. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/conftest.py +0 -0
  679. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  680. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  681. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  682. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/fixtures/qwen3_5_9b_chat_template.jinja +0 -0
  683. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  684. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  685. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  686. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/live/__init__.py +0 -0
  687. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/live/conftest.py +0 -0
  688. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/live/test_sft_thinking_render_live.py +0 -0
  689. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/checkpoint_fixtures.py +0 -0
  690. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/conftest.py +0 -0
  691. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_adapter_hub.py +0 -0
  692. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_artifact_protections.py +0 -0
  693. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_authorization_rollout.py +0 -0
  694. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_authorization_transport.py +0 -0
  695. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_base_model_serving.py +0 -0
  696. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_chat_auth.py +0 -0
  697. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_chat_authorizer.py +0 -0
  698. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_checkpoint_fingerprint_validation.py +0 -0
  699. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  700. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_checkpoint_model_validation.py +0 -0
  701. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_checkpoint_revocation.py +0 -0
  702. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer.py +0 -0
  703. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_autoscaling.py +0 -0
  704. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_deadline.py +0 -0
  705. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_hosted.py +0 -0
  706. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_http_deadline.py +0 -0
  707. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_kernel_cache.py +0 -0
  708. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_latency.py +0 -0
  709. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_optimizations.py +0 -0
  710. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_parallel.py +0 -0
  711. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_prefill_scheduler.py +0 -0
  712. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_provenance.py +0 -0
  713. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_retention.py +0 -0
  714. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_retries.py +0 -0
  715. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_rollout.py +0 -0
  716. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_routing.py +0 -0
  717. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_deepinfer_tiering.py +0 -0
  718. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_engine_error_status.py +0 -0
  719. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_engine_shutdown.py +0 -0
  720. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_fp8_config.py +0 -0
  721. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_immutable_engine.py +0 -0
  722. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_immutable_revisions.py +0 -0
  723. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_immutable_schemas.py +0 -0
  724. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_inference_duration.py +0 -0
  725. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_internal_header_integrity.py +0 -0
  726. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_key_rate_limit.py +0 -0
  727. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_key_rate_limit_review.py +0 -0
  728. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_kv_namespace.py +0 -0
  729. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_latency_admission.py +0 -0
  730. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_mirror_sampling_parity.py +0 -0
  731. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_modal_deploy_identity.py +0 -0
  732. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_modal_image_paths.py +0 -0
  733. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_openai_stream_options.py +0 -0
  734. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_persistence.py +0 -0
  735. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_pre_first_disconnect.py +0 -0
  736. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_prequant_config.py +0 -0
  737. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_promotion_accounting_smoke.py +0 -0
  738. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_promotion_canary.py +0 -0
  739. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_promotion_evidence.py +0 -0
  740. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_promotion_gate.py +0 -0
  741. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_promotion_release_handoff.py +0 -0
  742. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_qwen_warmup.py +0 -0
  743. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_rate_limit.py +0 -0
  744. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_reasoning_usage.py +0 -0
  745. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_registration_endpoint.py +0 -0
  746. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_registry.py +0 -0
  747. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_registry_coverage.py +0 -0
  748. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_request_body_limit.py +0 -0
  749. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_router.py +0 -0
  750. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_router_coverage.py +0 -0
  751. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_router_edge_coverage.py +0 -0
  752. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_schemas_coverage.py +0 -0
  753. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_serve_reasoning_split.py +0 -0
  754. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_serve_structured_outputs.py +0 -0
  755. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_serve_thinking.py +0 -0
  756. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_settings.py +0 -0
  757. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_stream_channel.py +0 -0
  758. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_stream_response_disconnect.py +0 -0
  759. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_stream_wait_cleanup.py +0 -0
  760. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_structured_outputs.py +0 -0
  761. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_structured_outputs_coverage.py +0 -0
  762. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_supabase_rest_coverage.py +0 -0
  763. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_token_prefix_cache.py +0 -0
  764. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_usage_delivery_concurrency.py +0 -0
  765. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_usage_integrity.py +0 -0
  766. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving/test_usage_outbox.py +0 -0
  767. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving_conformance/__init__.py +0 -0
  768. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving_conformance/conftest.py +0 -0
  769. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/serving_conformance/test_contract.py +0 -0
  770. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_accounting_coverage.py +0 -0
  771. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_adapter_download.py +0 -0
  772. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_adapter_shard_completeness.py +0 -0
  773. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_agent_flash_cli_contract.py +0 -0
  774. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_algorithms.py +0 -0
  775. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_allocator.py +0 -0
  776. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_authenticated_redirects.py +0 -0
  777. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_azure_artifacts.py +0 -0
  778. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_azure_environment_registry.py +0 -0
  779. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_backend_common.py +0 -0
  780. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_backend_jobspec_contract.py +0 -0
  781. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_background_supervisor.py +0 -0
  782. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_bake_kernel_cache.py +0 -0
  783. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_bake_sandbox_entry.py +0 -0
  784. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_base_environment_integrity.py +0 -0
  785. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_base_model_provenance.py +0 -0
  786. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_billing_response_integrity.py +0 -0
  787. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_billing_retry.py +0 -0
  788. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_bootstrap_process_groups.py +0 -0
  789. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_bootstrap_reentry.py +0 -0
  790. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_bootstrap_worker_cleanup.py +0 -0
  791. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_build_context_contract.py +0 -0
  792. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cache_admission.py +0 -0
  793. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cache_retention.py +0 -0
  794. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cache_scheduler.py +0 -0
  795. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_capture_qwen38_metadata.py +0 -0
  796. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_catalog_consistency.py +0 -0
  797. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_catalog_only_models.py +0 -0
  798. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_charge_pricing.py +0 -0
  799. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_chat_foundations.py +0 -0
  800. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_chat_stop_tokens.py +0 -0
  801. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_chat_worker_isolation.py +0 -0
  802. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_checkpoint_cancellation.py +0 -0
  803. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_checkpoint_deployment_inventory_api.py +0 -0
  804. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_checkpoint_deployments.py +0 -0
  805. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_checkpoint_lifecycle.py +0 -0
  806. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_checkpoint_listing_integrity.py +0 -0
  807. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_checkpoint_storage_overlap.py +0 -0
  808. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_checkpoint_transport.py +0 -0
  809. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_checkpoints.py +0 -0
  810. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_ci_sharding.py +0 -0
  811. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_commands.py +0 -0
  812. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_commands_coverage.py +0 -0
  813. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_credential_shadowing.py +0 -0
  814. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_errors.py +0 -0
  815. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_estimate.py +0 -0
  816. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_gpus_flag.py +0 -0
  817. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_help.py +0 -0
  818. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_main_coverage.py +0 -0
  819. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_managed.py +0 -0
  820. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_render_coverage.py +0 -0
  821. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_render_theme.py +0 -0
  822. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_serve_deploy.py +0 -0
  823. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_serve_status.py +0 -0
  824. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_serve_undeploy.py +0 -0
  825. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_traces.py +0 -0
  826. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cli_wandb_warning.py +0 -0
  827. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_client.py +0 -0
  828. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_client_deadline_integrity.py +0 -0
  829. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_client_import_purity.py +0 -0
  830. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_client_server_integration.py +0 -0
  831. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_client_stream_reads.py +0 -0
  832. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_compact_checkpoint.py +0 -0
  833. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_config_env_vars.py +0 -0
  834. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_config_overrides.py +0 -0
  835. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_console_upload.py +0 -0
  836. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_controlled_experiment_repairs.py +0 -0
  837. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cost_analytical.py +0 -0
  838. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cost_currency.py +0 -0
  839. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cost_equation.py +0 -0
  840. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cost_estimate.py +0 -0
  841. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cost_hardware.py +0 -0
  842. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cost_models.py +0 -0
  843. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cpu_checkpoint_handoff.py +0 -0
  844. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_cpu_checkpoint_upload_retry.py +0 -0
  845. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_custom_checkpoints.py +0 -0
  846. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_custom_client.py +0 -0
  847. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_custom_controller_connect.py +0 -0
  848. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_custom_cuda_headroom.py +0 -0
  849. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_custom_gpu_selection.py +0 -0
  850. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_custom_gradients.py +0 -0
  851. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_custom_managed.py +0 -0
  852. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_custom_session.py +0 -0
  853. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_custom_worker.py +0 -0
  854. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_customer_serving_contract.py +0 -0
  855. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_dataset_profile.py +0 -0
  856. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_deploy_latency.py +0 -0
  857. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_deployment_cleanup_resilience.py +0 -0
  858. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_deployment_generation_completion.py +0 -0
  859. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_deployment_registration_cleanup.py +0 -0
  860. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_dev_channel.py +0 -0
  861. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_dev_publish_decision.py +0 -0
  862. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_disk_gb.py +0 -0
  863. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_cache_evict.py +0 -0
  864. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_delete.py +0 -0
  865. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_download.py +0 -0
  866. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_download_api.py +0 -0
  867. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_evaluations.py +0 -0
  868. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_glue_tool_replies.py +0 -0
  869. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_list_api.py +0 -0
  870. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_list_cli.py +0 -0
  871. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_list_registry.py +0 -0
  872. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_no_install.py +0 -0
  873. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_publish.py +0 -0
  874. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_pull.py +0 -0
  875. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_pull_coverage.py +0 -0
  876. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_pull_loader_coverage.py +0 -0
  877. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_pull_managed_control_plane.py +0 -0
  878. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_push.py +0 -0
  879. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_rate_limit_resolve.py +0 -0
  880. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_ref_pinning.py +0 -0
  881. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_env_test.py +0 -0
  882. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_environment_cache_integrity.py +0 -0
  883. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_environment_publish_integrity.py +0 -0
  884. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_envs_coverage.py +0 -0
  885. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_export.py +0 -0
  886. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_flash_mvp.py +0 -0
  887. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_flash_worker.py +0 -0
  888. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_flashinfer_aot_cache.py +0 -0
  889. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_flashinfer_cache_dirs.py +0 -0
  890. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_freesolo_api_transport.py +0 -0
  891. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_fused_expert_warmstart.py +0 -0
  892. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_generation_eos.py +0 -0
  893. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_github_urlopen_retry.py +0 -0
  894. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_gpu_type_single_field.py +0 -0
  895. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_gpus.py +0 -0
  896. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_grpo_checkpoint_durability.py +0 -0
  897. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_grpo_metric_stream.py +0 -0
  898. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_grpo_params.py +0 -0
  899. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_grpo_resident_sizing.py +0 -0
  900. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_grpo_reward_batching.py +0 -0
  901. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_grpo_reward_context.py +0 -0
  902. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_grpo_rollout_contract.py +0 -0
  903. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_grpo_rollout_identity.py +0 -0
  904. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_health_liveness.py +0 -0
  905. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_heartbeat_startup_cleanup.py +0 -0
  906. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_hf_retry.py +0 -0
  907. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_hosted_adapter_admission.py +0 -0
  908. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_idempotent_submissions.py +0 -0
  909. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_image_environment_capability.py +0 -0
  910. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_image_incremental_processor.py +0 -0
  911. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_image_sft_markers.py +0 -0
  912. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_image_sft_processor_parity.py +0 -0
  913. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_image_tokens.py +0 -0
  914. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_infisical_secrets.py +0 -0
  915. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_instance_bootstrap_coverage.py +0 -0
  916. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_internal_client.py +0 -0
  917. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_kernel_bake_build_contracts.py +0 -0
  918. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_kernel_cache.py +0 -0
  919. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_kernel_cache_promotion.py +0 -0
  920. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_kernel_fingerprint.py +0 -0
  921. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_kv_util.py +0 -0
  922. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_local_credential_integrity.py +0 -0
  923. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_logging.py +0 -0
  924. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_login_perms.py +0 -0
  925. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_lora_rank_coverage.py +0 -0
  926. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_lora_rank_nested_rung.py +0 -0
  927. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_lora_rank_preflight.py +0 -0
  928. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_lora_targeting.py +0 -0
  929. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_lora_targeting_pinned_verl.py +0 -0
  930. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_managed_config_fields.py +0 -0
  931. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_managed_hf_repo.py +0 -0
  932. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_metrics_schema_agent_contract.py +0 -0
  933. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_mig_guard.py +0 -0
  934. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_mirror_sampling_parity.py +0 -0
  935. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_modal_api_loop.py +0 -0
  936. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_modal_prefetch_snapshot.py +0 -0
  937. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_modal_provider.py +0 -0
  938. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_modal_startup.py +0 -0
  939. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_modal_training_lifecycle.py +0 -0
  940. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_modal_weight_warm.py +0 -0
  941. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_multi_gpu_gate.py +0 -0
  942. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_multimodal_boundary_integrity.py +0 -0
  943. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_multimodal_training.py +0 -0
  944. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_named_reward_metrics.py +0 -0
  945. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_notify_tests_repo.py +0 -0
  946. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_offline_http.py +0 -0
  947. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_oom_escalate_gpu.py +0 -0
  948. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_orchestrator_flash.py +0 -0
  949. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_packing.py +0 -0
  950. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_packing_coverage.py +0 -0
  951. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_persisted_spec_envelope.py +0 -0
  952. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_plane_lease.py +0 -0
  953. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_poll_helpers.py +0 -0
  954. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_preflight.py +0 -0
  955. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_projects.py +0 -0
  956. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_prompt_budget.py +0 -0
  957. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_qwen9b_base.py +0 -0
  958. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_removed_algorithms.py +0 -0
  959. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_removed_training_settings.py +0 -0
  960. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_replay_guard.py +0 -0
  961. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_repo_cleanup.py +0 -0
  962. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_resolve_params_b.py +0 -0
  963. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_resume_on_retry.py +0 -0
  964. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_retry_decision.py +0 -0
  965. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_reward_server_cleanup.py +0 -0
  966. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_rl_native_tool_calls.py +0 -0
  967. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_rl_tool_validation.py +0 -0
  968. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_rl_train.py +0 -0
  969. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_rollout_engine_prompt.py +0 -0
  970. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_rollout_samples.py +0 -0
  971. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_run_log_integrity.py +0 -0
  972. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_run_registry_lifecycle.py +0 -0
  973. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_runmgmt.py +0 -0
  974. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_runtime_capsule.py +0 -0
  975. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_runtime_credentials.py +0 -0
  976. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_runtime_secret_integrity.py +0 -0
  977. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_schema_boundary_integrity.py +0 -0
  978. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve.py +0 -0
  979. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_app_bootstrap_http.py +0 -0
  980. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_app_launch.py +0 -0
  981. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_app_manifest.py +0 -0
  982. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_app_materialize.py +0 -0
  983. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_app_packaging.py +0 -0
  984. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_app_progress.py +0 -0
  985. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_cache_resource_cleanup.py +0 -0
  986. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_chat_transport.py +0 -0
  987. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_control.py +0 -0
  988. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_modal_contract_lock.py +0 -0
  989. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_modal_sdk.py +0 -0
  990. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  991. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_modal_teardown_identity.py +0 -0
  992. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_profile_qualification.py +0 -0
  993. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_profiles.py +0 -0
  994. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_provisioning_common.py +0 -0
  995. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_provisioning_modal.py +0 -0
  996. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_reasoning_content.py +0 -0
  997. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_resolve_provenance.py +0 -0
  998. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_runtime_adapters.py +0 -0
  999. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_runtime_engine.py +0 -0
  1000. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_runtime_hub.py +0 -0
  1001. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_runtime_package.py +0 -0
  1002. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serve_runtime_types.py +0 -0
  1003. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_server_api.py +0 -0
  1004. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_server_app_coverage.py +0 -0
  1005. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_server_auth_singleflight.py +0 -0
  1006. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_server_billing.py +0 -0
  1007. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_server_checkpoints_coverage.py +0 -0
  1008. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_server_db.py +0 -0
  1009. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_server_envs_coverage.py +0 -0
  1010. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_server_locks_coverage.py +0 -0
  1011. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_server_managed_chat_requests.py +0 -0
  1012. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_server_serving_resources.py +0 -0
  1013. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_server_standalone.py +0 -0
  1014. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serving_conformance_gate.py +0 -0
  1015. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serving_context_preflight.py +0 -0
  1016. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serving_contract.py +0 -0
  1017. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serving_input_integrity.py +0 -0
  1018. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serving_schema_coverage.py +0 -0
  1019. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_serving_unavailable_errors.py +0 -0
  1020. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_batch_prefetch.py +0 -0
  1021. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_cancel_profile_pricing.py +0 -0
  1022. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_chunked_nll.py +0 -0
  1023. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_cost_reduction.py +0 -0
  1024. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_dataset_lazy_images.py +0 -0
  1025. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_dataset_nulls.py +0 -0
  1026. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_example_selection.py +0 -0
  1027. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_gc_off.py +0 -0
  1028. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_max_context.py +0 -0
  1029. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_memory_policy.py +0 -0
  1030. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_step_floor.py +0 -0
  1031. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_tools.py +0 -0
  1032. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_train.py +0 -0
  1033. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_warmup_schedule.py +0 -0
  1034. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_sft_workload.py +0 -0
  1035. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_smoke_content_integrity.py +0 -0
  1036. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_source_attestation_flow.py +0 -0
  1037. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_source_layout.py +0 -0
  1038. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_source_snapshot.py +0 -0
  1039. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_spec_and_validation.py +0 -0
  1040. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_spec_contract_bytes.py +0 -0
  1041. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_staged_environment.py +0 -0
  1042. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_status_reporting.py +0 -0
  1043. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_status_updates.py +0 -0
  1044. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_step_floor.py +0 -0
  1045. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_step_metrics.py +0 -0
  1046. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_step_timing.py +0 -0
  1047. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_structured_option_safety.py +0 -0
  1048. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_structured_outputs.py +0 -0
  1049. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_structured_runtime_options.py +0 -0
  1050. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_submission_outcome.py +0 -0
  1051. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_terminal_artifacts.py +0 -0
  1052. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_thinking_config.py +0 -0
  1053. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_thinking_tool_calls.py +0 -0
  1054. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_tool_call_exact_parsing.py +0 -0
  1055. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_tool_scalar_unions.py +0 -0
  1056. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_train_context_preflight.py +0 -0
  1057. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_training_controls.py +0 -0
  1058. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_training_phases.py +0 -0
  1059. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_transfer_queue_init.py +0 -0
  1060. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_type_comment_prose.py +0 -0
  1061. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_upstream_rollout_contract.py +0 -0
  1062. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_upstream_runtime_policy.py +0 -0
  1063. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_upstream_verl_contract.py +0 -0
  1064. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_verifiers.py +0 -0
  1065. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_verl_checkpoint_export.py +0 -0
  1066. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_verl_child_plugins.py +0 -0
  1067. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_verl_silence_watchdog.py +0 -0
  1068. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_version.py +0 -0
  1069. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_versioned_rollout_contract.py +0 -0
  1070. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  1071. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_vllm_moe_lora_backport.py +0 -0
  1072. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_vram_architecture.py +0 -0
  1073. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_wandb_link.py +0 -0
  1074. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_wandb_naming.py +0 -0
  1075. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_warmstart_adapter_download.py +0 -0
  1076. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_warmstart_cross_repo.py +0 -0
  1077. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_warmstart_error_attribution.py +0 -0
  1078. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_warmstart_image_adapters.py +0 -0
  1079. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_watchdog_startup_cleanup.py +0 -0
  1080. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_weight_cache.py +0 -0
  1081. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_worker_dryrun.py +0 -0
  1082. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_worker_hardexit.py +0 -0
  1083. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_worker_image.py +0 -0
  1084. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_worker_init_heartbeat.py +0 -0
  1085. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_worker_stack.py +0 -0
  1086. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_worker_thinking.py +0 -0
  1087. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_workflow_contracts.py +0 -0
  1088. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_workload_profile.py +0 -0
  1089. {freesolo_flash_dev-1.4.19 → freesolo_flash_dev-1.4.21}/tests/test_zero2_sharding_gate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.4.19
3
+ Version: 1.4.21
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
@@ -0,0 +1,37 @@
1
+ """Normalize chat-template metadata from a checkpoint's own processor and tokenizer."""
2
+
3
+ from typing import Any
4
+
5
+
6
+ def inherit_tokenizer_chat_template(processor: Any) -> None:
7
+ """Support checkpoints that publish their template only in tokenizer_config.json.
8
+
9
+ Transformers loads that template onto the tokenizer but not AutoProcessor.
10
+ Preserve explicit processor templates and never substitute another model's tokenizer.
11
+ Missing templates remain missing so the normal request validation can reject them.
12
+ """
13
+ if getattr(processor, "chat_template", None) is None:
14
+ tokenizer = getattr(processor, "tokenizer", None)
15
+ template = getattr(tokenizer, "chat_template", None)
16
+ if template is not None:
17
+ processor.chat_template = template
18
+
19
+
20
+ def processor_template_kwargs(processor: Any, kwargs: dict[str, Any]) -> dict[str, Any]:
21
+ """Keep rendering options out of Transformers' legacy processor-kwargs path.
22
+
23
+ Serving renders text only: vLLM processes the decoded images separately. Options
24
+ unused by the selected Jinja template (often preserve_thinking) must not be
25
+ interpreted as image/tokenization options. Keep tools, an explicit HF argument.
26
+ Use HF's cached introspection so the classification matches its warning check.
27
+ """
28
+ from transformers.utils.chat_template_utils import _get_template_variables
29
+
30
+ template = getattr(processor, "chat_template", None)
31
+ if isinstance(template, dict):
32
+ template = template.get("default")
33
+ if not isinstance(template, str):
34
+ # Let the processor report missing/ambiguous template metadata as usual.
35
+ return kwargs
36
+ variables = _get_template_variables(template)
37
+ return {key: value for key, value in kwargs.items() if key == "tools" or key in variables}
@@ -9,6 +9,7 @@ from collections import OrderedDict
9
9
  from dataclasses import dataclass
10
10
  from typing import Any
11
11
 
12
+ from flash.content.processor import processor_template_kwargs
12
13
  from flash.content.reasoning_normalization import messages_for_chat_template
13
14
  from flash.serve.request.tool_calls import detached_template_messages, tools_active, tools_wire
14
15
 
@@ -222,7 +223,7 @@ class PromptPreparer:
222
223
  template_messages,
223
224
  tokenize=False,
224
225
  add_generation_prompt=True,
225
- **kwargs,
226
+ **processor_template_kwargs(self._processor, kwargs),
226
227
  )
227
228
  except ServingRuntimeError:
228
229
  raise
@@ -13,7 +13,7 @@ from typing import TYPE_CHECKING, Any
13
13
  import modal
14
14
 
15
15
  from flash.schema import parse_checkpoint_ref
16
- from flash.serving.app.rollout import LEGACY_ENGINE_KEYS, model_engine_name, warm_active_models
16
+ from flash.serving.app.rollout import model_engine_name, warm_active_models
17
17
  from flash.serving.app.timeouts import (
18
18
  REQUEST_TIMEOUT_SECONDS,
19
19
  ROUTER_TIMEOUT_SECONDS,
@@ -350,29 +350,17 @@ def _engine_concurrency(base_model: str) -> tuple[int, int]:
350
350
  return max_inputs, max_inputs
351
351
 
352
352
 
353
- def _engine_class_name(gpu: str, max_inputs: int) -> str:
354
- """Deterministic, Modal-safe class name for a (GPU tier, concurrency) engine — e.g.
355
- ('A100-80GB', 16) -> 'LoraEngine_A100_80GB_c16'. The concurrency is part of the identity because
356
- ``modal.concurrent`` is fixed per class, so tiers sharing a GPU but needing different max_inputs
357
- must be distinct classes."""
358
- base = "LoraEngine_" + "".join(ch if ch.isalnum() else "_" for ch in gpu)
359
- return f"{base}_c{max_inputs}"
360
-
361
-
362
353
  def _build_engine(
363
354
  gpu: str,
364
355
  class_name: str,
365
356
  max_inputs: int,
366
357
  target_inputs: int,
367
- *,
368
- legacy: bool = False,
369
358
  ) -> Any:
370
359
  """Register one Modal ``@app.cls`` LoraEngine pinned to ``gpu``.
371
360
 
372
361
  Modal fixes a class's GPU at decoration time, so the H200 35B model and the L4 models need
373
- distinct classes. Each model now has a stable class; tier classes remain for draining old
374
- routers. The Modal entrypoints are defined fresh here (so each class owns its own method
375
- objects) and forward to the shared ``_``-prefixed impl on ``_LoraEngineImpl``.
362
+ distinct classes. Each model has a stable class. The Modal entrypoints are defined
363
+ fresh here (so each class owns its own method objects) and forward to the shared ``_``-prefixed impl on ``_LoraEngineImpl``.
376
364
 
377
365
  Class identity (name/qualname + module-global binding) is fixed BEFORE the class-level decorators
378
366
  run. With the real Modal SDK ``@modal.concurrent`` returns a wrapper that holds the user class
@@ -467,7 +455,7 @@ def _build_engine(
467
455
  region="us",
468
456
  secrets=engine_secrets,
469
457
  volumes={HOSTING_CACHE_MOUNT: hf_cache_volume},
470
- scaledown_window=60 if legacy else scaledown_window_for(gpu),
458
+ scaledown_window=scaledown_window_for(gpu),
471
459
  startup_timeout=STARTUP_TIMEOUT_SECONDS,
472
460
  timeout=REQUEST_TIMEOUT_SECONDS,
473
461
  min_containers=MIN_CONTAINERS,
@@ -480,15 +468,6 @@ def _build_engine(
480
468
  return engine
481
469
 
482
470
 
483
- # Keep the deployed tier identities callable while pre-migration routers drain.
484
- # These are compatibility pools, never selected for new inference. Their zero floor
485
- # lets them disappear after old traffic stops; do not derive this list from the catalog.
486
- ENGINE_BY_KEY: dict[tuple[str, int], Any] = {
487
- (gpu, mi): _build_engine(gpu, _engine_class_name(gpu, mi), mi, mi, legacy=True)
488
- for (gpu, mi) in dict.fromkeys(LEGACY_ENGINE_KEYS.values())
489
- }
490
-
491
-
492
471
  # GPU and concurrency may change without deleting the identity old routers call.
493
472
  ENGINE_BY_MODEL: dict[str, Any] = {
494
473
  bm: _build_engine(gpu_for(bm), model_engine_name(bm), *_engine_concurrency(bm))
@@ -513,7 +492,6 @@ class _ModalEnginePool:
513
492
  async def start(self):
514
493
  await warm_active_models(
515
494
  {bm: cls(base_model=bm) for bm, cls in ENGINE_BY_MODEL.items()},
516
- {bm: ENGINE_BY_KEY[key](base_model=bm) for bm, key in LEGACY_ENGINE_KEYS.items()},
517
495
  )
518
496
 
519
497
  async def aclose(self):
@@ -18,14 +18,11 @@ from typing import Any
18
18
 
19
19
 
20
20
  def engine_manifest(source_sha: str) -> dict[str, Any]:
21
- from flash.serving.app.rollout import LEGACY_ENGINE_KEYS, model_engine_name
21
+ from flash.serving.app.rollout import model_engine_name
22
22
  from flash.serving.app.timeouts import ROUTER_TIMEOUT_SECONDS
23
23
  from flash.serving.src.engine.model_config import base_models
24
24
 
25
25
  classes: dict[str, list[str]] = {}
26
- for model, (gpu, concurrency) in LEGACY_ENGINE_KEYS.items():
27
- safe_gpu = "".join(ch if ch.isalnum() else "_" for ch in gpu)
28
- classes.setdefault(f"LoraEngine_{safe_gpu}_c{concurrency}", []).append(model)
29
26
  for model in base_models():
30
27
  classes[model_engine_name(model)] = [model]
31
28
  return validate_manifest(
@@ -8,19 +8,6 @@ from typing import Any
8
8
 
9
9
  from flash.serving.app.timeouts import ROUTER_TIMEOUT_SECONDS
10
10
 
11
- # The identities served by main before model-scoped classes were introduced.
12
- # Old router containers retain these handles until their requests finish. Removing
13
- # a class at deployment deletes the handle immediately, even in a rolling deploy.
14
- # Keep this frozen rather than recomputing it when GPU or concurrency settings change.
15
- LEGACY_ENGINE_KEYS: dict[str, tuple[str, int]] = {
16
- "Qwen/Qwen3.5-0.8B": ("L4", 64),
17
- "Qwen/Qwen3.5-4B": ("L40S", 8),
18
- "Qwen/Qwen3.5-9B": ("L40S", 64),
19
- "Qwen/Qwen3.5-9B-Base": ("L40S", 64),
20
- "Qwen/Qwen3.8-27B": ("H100", 8),
21
- "Qwen/Qwen3.6-35B-A3B": ("H200", 8),
22
- }
23
-
24
11
 
25
12
  def model_engine_name(base_model: str) -> str:
26
13
  """Hardware changes must update a function, never replace its dispatch name."""
@@ -47,11 +34,12 @@ async def _warm_model(model: str, engine: Any, legacy: Any | None) -> None:
47
34
  raise RuntimeError(f"Replacement engine is not healthy for {model}")
48
35
 
49
36
 
50
- async def warm_active_models(engines: dict[str, Any], legacy: dict[str, Any]) -> None:
37
+ async def warm_active_models(engines: dict[str, Any], legacy: dict[str, Any] | None = None) -> None:
51
38
  """Finish before ASGI startup succeeds and Modal admits traffic to this router.
52
39
 
53
- Keep old routers serving during first migration to model-scoped pools. Later
54
- deploys keep each pool's identity stable, allowing Modal's rolling strategy to
40
+ Production supplies only model-scoped pools. The isolated rollout qualification
41
+ may supply legacy handles to exercise migration readiness. Deploys keep each
42
+ pool's identity stable, allowing Modal's rolling strategy to
55
43
  drain its old replicas. Health may reach a still-serving old replica during
56
44
  that transition; this is an availability gate, not a release-identity canary.
57
45
  Stats/readiness failures fail startup rather than declaring an unready router
@@ -59,4 +47,4 @@ async def warm_active_models(engines: dict[str, Any], legacy: dict[str, Any]) ->
59
47
  """
60
48
  async with asyncio.timeout(ROUTER_TIMEOUT_SECONDS), asyncio.TaskGroup() as tasks:
61
49
  for model, engine in engines.items():
62
- tasks.create_task(_warm_model(model, engine, legacy.get(model)))
50
+ tasks.create_task(_warm_model(model, engine, (legacy or {}).get(model)))
@@ -73,6 +73,10 @@ def _multimodal_args(
73
73
  ) -> dict[str, Any]:
74
74
  image_limit = image_limit_for(base_model)
75
75
  if image_limit is None:
76
+ # Preserve the qualified vLLM startup path for text-only Qwen tiers.
77
+ # Disabling both modalities switches profiling to input_ids with no
78
+ # inputs_embeds; the current compiled Qwen3Next path crashes on None.size.
79
+ # Request validation still rejects image inputs for these catalog tiers.
76
80
  return {}
77
81
  return {
78
82
  # Hosted requests accept text and images, never video. Leaving video unspecified
@@ -17,6 +17,7 @@ from functools import cached_property
17
17
  from pathlib import Path
18
18
  from typing import Any
19
19
 
20
+ from flash.content.processor import processor_template_kwargs
20
21
  from flash.content.structured_options import vllm_structured_kwargs
21
22
 
22
23
  # Adapter-cache paths and token accounting live in engine_support.py, alongside
@@ -519,7 +520,7 @@ class _LoraEngineImpl(TextPromptTokenizer):
519
520
  messages_for_chat_template(detached_template_messages(template_messages)),
520
521
  tokenize=False,
521
522
  add_generation_prompt=True,
522
- **ctk,
523
+ **processor_template_kwargs(processor, ctk),
523
524
  )
524
525
  )
525
526
  except BaseException:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "freesolo-flash-dev"
3
- version = "1.4.19"
3
+ version = "1.4.21"
4
4
  description ="Flash — managed LoRA post-training (SFT/GRPO) for Freesolo environments, driven by the `flash` CLI"
5
5
  # The training and serving stack is validated on Python 3.11 and 3.12.
6
6
  requires-python = ">=3.11,<3.13"
@@ -210,7 +210,7 @@ artifacts = ["flash/py.typed"]
210
210
  # auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
211
211
  # PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
212
212
  # dev-channel release = bump this (and [project].version) and merge to `dev`.
213
- version = "1.4.19"
213
+ version = "1.4.21"
214
214
 
215
215
  [tool.pytest.ini_options]
216
216
  pythonpath = ["."]
@@ -74,9 +74,8 @@ def test_tool_parser_is_qualified_only_for_exact_qwen35() -> None:
74
74
 
75
75
 
76
76
  def test_no_model_runs_language_model_only() -> None:
77
- # No tier sets language_model_only: flash adapters adapt the FULL multimodal tree, so their
78
- # vision-tower LoRA keys need the vision encoder loaded to bind to. Every base loads the whole
79
- # VL model (the 35B included) — none carries the text-only skip.
77
+ # Retain the qualified multimodal architecture for vLLM startup. The catalog
78
+ # and request validation determine which tiers accept image inputs.
80
79
  assert "language_model_only" not in engine_overrides_for("Qwen/Qwen3.6-35B-A3B")
81
80
  assert "language_model_only" not in engine_overrides_for("Qwen/Qwen3.5-9B")
82
81
 
@@ -1151,3 +1151,47 @@ def test_a_usable_tool_call_history_still_passes() -> None:
1151
1151
  {"role": "tool", "tool_call_id": "call_1", "content": "ok"},
1152
1152
  ]
1153
1153
  assert normalize_chat_messages(messages, supports_images=False, image_limit=4) == messages
1154
+
1155
+
1156
+ @pytest.mark.parametrize("runtime", ["hosted", "packaged"])
1157
+ @pytest.mark.parametrize("thinking", [False, True])
1158
+ @pytest.mark.parametrize("named_template", [False, True])
1159
+ def test_processor_render_does_not_route_unused_template_flags_to_processing(
1160
+ runtime, thinking, named_template, caplog
1161
+ ):
1162
+ from transformers.processing_utils import ProcessorMixin
1163
+
1164
+ from flash.serve.runtime import EngineConfig, GenerationRequest
1165
+ from flash.serve.runtime.prompt import PromptPreparer
1166
+
1167
+ # Use the real HF method: a stub accepting **kwargs cannot catch this warning.
1168
+ # preserve_thinking is deliberately absent, as it is in some served templates.
1169
+ template = (
1170
+ "{{ enable_thinking }}|{{ custom }}|"
1171
+ "{% for m in messages %}{% for c in m.content %}{{ c.type }};{% endfor %}{% endfor %}"
1172
+ )
1173
+ processor = types.SimpleNamespace(
1174
+ chat_template={"default": template} if named_template else template,
1175
+ tokenizer=types.SimpleNamespace(special_tokens_map={}),
1176
+ )
1177
+ processor.apply_chat_template = types.MethodType(ProcessorMixin.apply_chat_template, processor)
1178
+ kwargs = {"custom": "kept", "preserve_thinking": False, "unused": "ignored"}
1179
+ if runtime == "hosted":
1180
+ engine = _engine_impl(processor=processor)
1181
+ payload = types.SimpleNamespace(messages=_messages(), chat_template_kwargs=kwargs)
1182
+ value = asyncio.run(engine._prepare_prompt_input(payload, thinking))
1183
+
1184
+ def close():
1185
+ engine._close_prompt_images(value)
1186
+ else:
1187
+ preparer = PromptPreparer(EngineConfig(model=QWEN, image_limit=4), None, processor)
1188
+ request = GenerationRequest(messages=_messages(), chat_template_kwargs=kwargs)
1189
+ prepared = asyncio.run(preparer.prepare(request, thinking))
1190
+ value, close = prepared.value, prepared.close
1191
+ try:
1192
+ assert value["prompt"].startswith(f"{thinking}|kept|")
1193
+ assert "image;" in value["prompt"]
1194
+ assert isinstance(value["multi_modal_data"]["image"], Image.Image)
1195
+ assert "Kwargs passed to" not in caplog.text
1196
+ finally:
1197
+ close()
@@ -434,22 +434,17 @@ def test_deployed_timeouts_use_the_shared_serving_budget(modal_app_module):
434
434
  )
435
435
 
436
436
 
437
- def test_legacy_engine_keys_are_retained_for_draining_routers(modal_app_module):
438
- """A catalog edit must not delete handles held by pre-migration routers."""
439
- assert set(modal_app_module.ENGINE_BY_KEY) == {
440
- ("L4", 64),
441
- ("L40S", 8),
442
- ("L40S", 64),
443
- ("H100", 8),
444
- ("H200", 8),
445
- }
437
+ def test_only_model_scoped_engines_are_registered(modal_app_module):
438
+ registered = {name for name in vars(modal_app_module) if name.startswith("LoraEngine_")}
439
+ assert registered == {modal_app_module.model_engine_name(model) for model in base_models()}
440
+ assert modal_app_module.app.cls.call_count == len(base_models())
446
441
 
447
442
 
448
443
  def test_rollback_manifest_retains_every_registered_engine(modal_app_module):
449
444
  from flash.serving.app.rollback import engine_manifest
450
445
 
451
446
  manifest = engine_manifest("a" * 40)
452
- classes = [*modal_app_module.ENGINE_BY_KEY.values(), *modal_app_module.ENGINE_BY_MODEL.values()]
447
+ classes = list(modal_app_module.ENGINE_BY_MODEL.values())
453
448
  assert set(manifest["classes"]) == {cls.__name__ for cls in classes}
454
449
  for model, cls in modal_app_module.ENGINE_BY_MODEL.items():
455
450
  assert manifest["classes"][cls.__name__] == [model]
@@ -471,14 +466,6 @@ def test_engine_concurrency_rejects_malformed_catalog_values(modal_app_module, m
471
466
  mod._engine_concurrency("malformed")
472
467
 
473
468
 
474
- def test_class_names_are_distinct_and_modal_safe(modal_app_module):
475
- """Each tier registers under an app-unique, alnum/underscore-only class name that encodes both
476
- the GPU and its concurrency (max_inputs is part of the class identity)."""
477
- assert modal_app_module._engine_class_name("L4", 64) == "LoraEngine_L4_c64"
478
- assert modal_app_module._engine_class_name("L4", 16) == "LoraEngine_L4_c16"
479
- assert modal_app_module._engine_class_name("A100-80GB", 16) == "LoraEngine_A100_80GB_c16"
480
-
481
-
482
469
  @pytest.mark.parametrize(
483
470
  ("model", "gpu", "sequences"),
484
471
  [
@@ -508,7 +495,7 @@ def test_unknown_base_model_is_rejected_before_engine_dispatch(modal_app_module)
508
495
  def test_tier_classes_inherit_the_shared_impl(modal_app_module):
509
496
  """Each tier class subclasses _LoraEngineImpl (so _load/_generate/etc resolve) and defines the
510
497
  public Modal entrypoints itself (so Modal collects them per class)."""
511
- tier = modal_app_module.ENGINE_BY_KEY[("H200", 8)]
498
+ tier = modal_app_module.ENGINE_BY_MODEL["Qwen/Qwen3.6-35B-A3B"]
512
499
  assert issubclass(tier, modal_app_module._LoraEngineImpl)
513
500
  for impl in ("_load", "_register", "_generate", "_stream_generate", "_unregister", "_health"):
514
501
  assert hasattr(tier, impl)
@@ -519,11 +506,8 @@ def test_tier_classes_inherit_the_shared_impl(modal_app_module):
519
506
  def test_each_tier_class_records_its_pinned_gpu(modal_app_module):
520
507
  """Each per-tier class records the GPU it was actually pinned to in _build_engine, so health/ops
521
508
  can detect a base model misrouted onto the wrong tier instead of trusting the derived lookup."""
522
- by_key = modal_app_module.ENGINE_BY_KEY
523
- # Every class records the GPU half of its (gpu, max_inputs) key.
524
- for (gpu, _max_inputs), cls in by_key.items():
525
- assert cls.pinned_gpu == gpu
526
- assert by_key[("H200", 8)].pinned_gpu == "H200"
509
+ for model, cls in modal_app_module.ENGINE_BY_MODEL.items():
510
+ assert cls.pinned_gpu == gpu_for(model)
527
511
 
528
512
 
529
513
  def test_tier_class_identity_is_fixed_before_decoration(modal_app_module):
@@ -532,9 +516,6 @@ def test_tier_class_identity_is_fixed_before_decoration(modal_app_module):
532
516
  REAL class BEFORE ``@modal.concurrent`` wraps it — otherwise (renaming after the decorator) every tier
533
517
  would register under ``_Engine`` and the ``<locals>`` qualname would fail Modal's global-scope check."""
534
518
  classes = [
535
- (modal_app_module._engine_class_name(gpu, mi), cls)
536
- for (gpu, mi), cls in modal_app_module.ENGINE_BY_KEY.items()
537
- ] + [
538
519
  (modal_app_module.model_engine_name(model), cls)
539
520
  for model, cls in modal_app_module.ENGINE_BY_MODEL.items()
540
521
  ]
@@ -899,15 +880,19 @@ def test_every_catalog_model_forwards_its_reasoning_parser(
899
880
 
900
881
 
901
882
  @pytest.mark.parametrize("base_model", base_models())
902
- def test_hosted_multimodal_args_preserve_images_without_reserving_video(
883
+ def test_hosted_multimodal_args_preserve_qualified_startup(
903
884
  modal_app_module, monkeypatch, tmp_path, base_model: str
904
885
  ):
905
886
  from flash.serving.src.engine.model_config import image_limit_for
906
887
 
907
888
  args = _capture_engine_args(modal_app_module, monkeypatch, tmp_path, base_model)
908
889
  image_limit = image_limit_for(base_model)
909
- expected = None if image_limit is None else {"image": image_limit, "video": 0}
910
- assert args.limit_mm_per_prompt == expected
890
+ if image_limit is None:
891
+ assert args.limit_mm_per_prompt is None
892
+ else:
893
+ assert args.limit_mm_per_prompt == {"image": image_limit, "video": 0}
894
+ assert args.enable_lora is True
895
+ assert args.enable_tower_connector_lora is (image_limit is not None)
911
896
 
912
897
 
913
898
  def test_hosted_hot_pools_remain_unpinned(modal_app_module, monkeypatch, tmp_path):
@@ -995,7 +980,7 @@ def test_modal_stream_entrypoint_uses_regular_call(modal_app_module, monkeypatch
995
980
 
996
981
  from flash.serving.src.stream_channel import engine as channel_engine
997
982
 
998
- engine = modal_app_module.ENGINE_BY_KEY[("H200", 8)]()
983
+ engine = modal_app_module.ENGINE_BY_MODEL["Qwen/Qwen3.6-35B-A3B"]()
999
984
  run = AsyncMock(return_value={"terminal_kind": "event"})
1000
985
  monkeypatch.setattr(channel_engine, "stream_generate_call", run)
1001
986
  assert not inspect.isasyncgenfunction(engine.stream_generate_call)
@@ -225,8 +225,8 @@ def test_prepare_refuses_an_unknown_router_before_changing_source(tmp_path):
225
225
  assert not (tmp_path / "flash/serving/_rollback_compat.py").exists()
226
226
 
227
227
 
228
- def test_manifest_captures_current_models_and_all_compatibility_names():
229
- from flash.serving.app.rollout import LEGACY_ENGINE_KEYS, model_engine_name
228
+ def test_manifest_captures_only_current_model_identities():
229
+ from flash.serving.app.rollout import model_engine_name
230
230
  from flash.serving.src.engine.model_config import base_models
231
231
 
232
232
  manifest = json.loads(json.dumps(engine_manifest("b" * 40)))
@@ -235,5 +235,4 @@ def test_manifest_captures_current_models_and_all_compatibility_names():
235
235
  )
236
236
  for model in base_models():
237
237
  assert manifest["classes"][model_engine_name(model)] == [model]
238
- for model, (gpu, cap) in LEGACY_ENGINE_KEYS.items():
239
- assert model in manifest["classes"][f"LoraEngine_{gpu}_c{cap}"]
238
+ assert set(manifest["classes"]) == {model_engine_name(model) for model in base_models()}
@@ -7,6 +7,7 @@ from unittest.mock import AsyncMock
7
7
  import pytest
8
8
 
9
9
  from flash.serving.app import rollout
10
+ from flash.serving.src.engine.model_config import base_models
10
11
  from flash.serving.src.http.router import _lifespan_for
11
12
 
12
13
 
@@ -26,7 +27,7 @@ def _engine(model="base", *, runners=0, running=0, backlog=0):
26
27
 
27
28
 
28
29
  def test_model_identity_is_distinct_and_independent_of_hardware():
29
- names = [rollout.model_engine_name(model) for model in rollout.LEGACY_ENGINE_KEYS]
30
+ names = [rollout.model_engine_name(model) for model in base_models()]
30
31
  assert len(set(names)) == len(names)
31
32
  assert all(name.replace("_", "").isalnum() for name in names)
32
33
  # Normalization must not merge different public model IDs.
@@ -52,7 +53,7 @@ def test_active_or_queued_models_require_readiness(activity, migrating):
52
53
 
53
54
  def test_first_deployment_does_not_need_a_legacy_pool():
54
55
  current = _engine()
55
- asyncio.run(rollout.warm_active_models({"base": current}, {}))
56
+ asyncio.run(rollout.warm_active_models({"base": current}))
56
57
  current.health.remote.aio.assert_not_awaited()
57
58
 
58
59
 
@@ -63,7 +64,7 @@ def test_unhealthy_replacements_cannot_pass_startup(health):
63
64
  current = _engine(runners=1)
64
65
  current.health.remote.aio.return_value = health
65
66
  with pytest.raises(ExceptionGroup, match="TaskGroup") as error:
66
- asyncio.run(rollout.warm_active_models({"base": current}, {}))
67
+ asyncio.run(rollout.warm_active_models({"base": current}))
67
68
  assert isinstance(error.value.exceptions[0], RuntimeError)
68
69
 
69
70
 
@@ -71,7 +72,7 @@ def test_stats_failure_does_not_silently_mark_a_pool_inactive():
71
72
  current = _engine()
72
73
  current.health.get_current_stats.aio.side_effect = RuntimeError("stats unavailable")
73
74
  with pytest.raises(ExceptionGroup) as error:
74
- asyncio.run(rollout.warm_active_models({"base": current}, {}))
75
+ asyncio.run(rollout.warm_active_models({"base": current}))
75
76
  assert str(error.value.exceptions[0]) == "stats unavailable"
76
77
  current.health.remote.aio.assert_not_awaited()
77
78
 
@@ -96,21 +96,15 @@ def test_lora_engine_scales_to_zero_by_default(modal_app_module):
96
96
  assert modal_app_module.MIN_CONTAINERS == 0
97
97
 
98
98
  cls_calls = [call.kwargs for call in modal_app_module.app.cls.call_args_list]
99
- assert len(cls_calls) == (
100
- len(modal_app_module.ENGINE_BY_KEY) + len(modal_app_module.ENGINE_BY_MODEL)
101
- )
99
+ assert len(cls_calls) == len(modal_app_module.ENGINE_BY_MODEL)
102
100
  # asserted on the kwargs modal is actually CALLED with, not on the constant: the floor is only
103
101
  # real if it reaches `app.cls`. `AutoscalerSettings.min_containers` is an `optional` proto field
104
102
  # (has_presence), so omitting it and sending 0 are distinguishable on the wire -- an omitted
105
103
  # field leaves the floor to whatever the server defaults to, which is not ours to assume.
106
104
  assert all(kwargs["min_containers"] == modal_app_module.MIN_CONTAINERS for kwargs in cls_calls)
107
- # Compatibility pools drain promptly; current pools retain the qualified idle window.
108
- legacy_count = len(modal_app_module.ENGINE_BY_KEY)
109
- assert all(kwargs["scaledown_window"] == 60 for kwargs in cls_calls[:legacy_count])
110
- cls_calls = cls_calls[legacy_count:]
111
105
  assert {kwargs["gpu"]: kwargs["scaledown_window"] for kwargs in cls_calls} == {
112
106
  ("H100!" if gpu == "H100" else gpu): modal_app_module.scaledown_window_for(gpu)
113
- for gpu, _mi in modal_app_module.ENGINE_BY_KEY
107
+ for gpu in modal_app_module.SUPPORTED_GPUS
114
108
  }
115
109
 
116
110
  assert modal_app_module.app.function.call_count == 1
@@ -124,9 +118,7 @@ def test_gpu_engines_scale_from_demand_without_a_paid_spare(modal_app_module):
124
118
  assert modal_app_module.ROUTER_BUFFER_CONTAINERS == 1
125
119
 
126
120
  cls_calls = [call.kwargs for call in modal_app_module.app.cls.call_args_list]
127
- assert len(cls_calls) == (
128
- len(modal_app_module.ENGINE_BY_KEY) + len(modal_app_module.ENGINE_BY_MODEL)
129
- )
121
+ assert len(cls_calls) == len(modal_app_module.ENGINE_BY_MODEL)
130
122
  assert all(kwargs["max_containers"] == 2 for kwargs in cls_calls)
131
123
  # An active, lightly loaded model must not reserve a second GPU.
132
124
  assert all(kwargs["buffer_containers"] == 0 for kwargs in cls_calls)
@@ -166,14 +158,13 @@ def test_modal_concurrency_is_per_engine_key(modal_app_module):
166
158
  assert modal_app_module.TARGET_INPUTS == 48
167
159
  # One @modal.concurrent per distinct engine key plus one on the router.
168
160
  calls = [call.kwargs for call in modal_app_module.modal.concurrent.call_args_list]
169
- assert (
170
- len(calls)
171
- == (len(modal_app_module.ENGINE_BY_KEY) + len(modal_app_module.ENGINE_BY_MODEL)) + 1
172
- )
161
+ assert len(calls) == len(modal_app_module.ENGINE_BY_MODEL) + 1
173
162
  seen = {(c["max_inputs"], c["target_inputs"]) for c in calls}
174
163
  # Check the actual decorators: changing only _engine_concurrency must not leave
175
164
  # a second target calculation deploying the old 75% threshold.
176
- expected = {(mi, mi) for (_gpu, mi) in modal_app_module.ENGINE_BY_KEY}
165
+ expected = {
166
+ modal_app_module._engine_concurrency(model) for model in modal_app_module.ENGINE_BY_MODEL
167
+ }
177
168
  expected.add((modal_app_module.MAX_INPUTS, modal_app_module.TARGET_INPUTS))
178
169
  assert seen == expected
179
170
 
@@ -67,3 +67,32 @@ def test_serving_and_training_loaders_accept_inline_tokenizer_template(monkeypat
67
67
  assert loaded_tokenizer.eos_token == "<|endoftext|>"
68
68
  assert calls[0][0] == model
69
69
  assert calls[0][1]["revision"] == revision
70
+
71
+
72
+ def test_referenced_preserve_thinking_remains_a_template_option(caplog):
73
+ from types import MethodType
74
+
75
+ from transformers.processing_utils import ProcessorMixin
76
+
77
+ from flash.content.processor import processor_template_kwargs
78
+
79
+ processor = SimpleNamespace(
80
+ chat_template="{{ enable_thinking }}|{{ preserve_thinking }}|{{ tools[0].function.name }}",
81
+ tokenizer=SimpleNamespace(special_tokens_map={}),
82
+ )
83
+ processor.apply_chat_template = MethodType(ProcessorMixin.apply_chat_template, processor)
84
+ kwargs = {
85
+ "enable_thinking": True,
86
+ "preserve_thinking": False,
87
+ "unused": 1,
88
+ "tools": [{"type": "function", "function": {"name": "lookup"}}],
89
+ }
90
+ messages = [{"role": "user", "content": [{"type": "text", "text": "hello"}]}]
91
+ original = processor.apply_chat_template(messages, tokenize=False, **kwargs)
92
+ assert "Kwargs passed to" in caplog.text
93
+ caplog.clear()
94
+ rendered = processor.apply_chat_template(
95
+ messages, tokenize=False, **processor_template_kwargs(processor, kwargs)
96
+ )
97
+ assert rendered == original == "True|False|lookup"
98
+ assert "Kwargs passed to" not in caplog.text
@@ -1297,7 +1297,7 @@ wheels = [
1297
1297
 
1298
1298
  [[package]]
1299
1299
  name = "freesolo-flash"
1300
- version = "1.4.19"
1300
+ version = "1.4.21"
1301
1301
  source = { editable = "." }
1302
1302
 
1303
1303
  [package.optional-dependencies]
@@ -1,17 +0,0 @@
1
- """Normalize chat-template metadata from a checkpoint's own processor and tokenizer."""
2
-
3
- from typing import Any
4
-
5
-
6
- def inherit_tokenizer_chat_template(processor: Any) -> None:
7
- """Support checkpoints that publish their template only in tokenizer_config.json.
8
-
9
- Transformers loads that template onto the tokenizer but not AutoProcessor.
10
- Preserve explicit processor templates and never substitute another model's tokenizer.
11
- Missing templates remain missing so the normal request validation can reject them.
12
- """
13
- if getattr(processor, "chat_template", None) is None:
14
- tokenizer = getattr(processor, "tokenizer", None)
15
- template = getattr(tokenizer, "chat_template", None)
16
- if template is not None:
17
- processor.chat_template = template