freesolo-flash-dev 1.4.7__tar.gz → 1.4.8__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 (1061) hide show
  1. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/publish-dev.yml +2 -18
  2. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/PKG-INFO +20 -6
  3. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/README.md +19 -5
  4. freesolo_flash_dev-1.4.8/flash/content/processor.py +17 -0
  5. freesolo_flash_dev-1.4.8/flash/content/stop_tokens.py +13 -0
  6. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/core/catalog.py +28 -0
  7. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/plan/vram.py +1 -0
  8. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/sft_workload.py +5 -4
  9. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/launch/inputs.py +6 -2
  10. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/profiles.py +28 -0
  11. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/request/tool_calls.py +11 -4
  12. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/request/tool_template.py +7 -4
  13. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/engine.py +20 -9
  14. freesolo_flash_dev-1.4.8/flash/serve/runtime/reasoning_tools.py +60 -0
  15. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/app/GPU_QUALIFICATION.md +45 -0
  16. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/app/README.md +2 -1
  17. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/accounting/usage.py +2 -0
  18. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/boot.py +2 -0
  19. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/generation.py +11 -3
  20. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/model_config.py +22 -1
  21. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/pyproject.toml +2 -2
  22. freesolo_flash_dev-1.4.8/scripts/check_dev_release.py +44 -0
  23. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/smoke_modal_sft.py +8 -6
  24. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_inference_duration.py +1 -0
  25. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_model_config.py +2 -0
  26. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_per_model_gpu.py +1 -0
  27. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_prequant_config.py +1 -0
  28. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_serve_structured_outputs.py +28 -0
  29. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_usage_outbox.py +5 -0
  30. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_catalog_consistency.py +1 -0
  31. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_chat_foundations.py +3 -7
  32. freesolo_flash_dev-1.4.8/tests/test_chat_stop_tokens.py +12 -0
  33. freesolo_flash_dev-1.4.8/tests/test_dev_publish_decision.py +101 -0
  34. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_disk_gb.py +1 -0
  35. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_instance_bootstrap_coverage.py +32 -7
  36. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_modal_weight_warm.py +1 -1
  37. freesolo_flash_dev-1.4.8/tests/test_processor_chat_template.py +69 -0
  38. freesolo_flash_dev-1.4.8/tests/test_qwen9b_base.py +52 -0
  39. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_rl_train.py +56 -1
  40. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_bootstrap_http.py +106 -2
  41. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_profiles.py +2 -0
  42. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_runtime_engine.py +84 -7
  43. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_train.py +1 -1
  44. freesolo_flash_dev-1.4.8/tests/test_thinking_tool_calls.py +102 -0
  45. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_tool_call_exact_parsing.py +10 -7
  46. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/uv.lock +1 -1
  47. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.dockerignore +0 -0
  48. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.env.example +0 -0
  49. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/CODEOWNERS +0 -0
  50. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  51. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  52. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  53. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  54. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/dependabot.yml +0 -0
  55. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/scripts/notify_tests_repo.py +0 -0
  56. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/auto-rebake.yml +0 -0
  57. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/bake-kernel-cache.yml +0 -0
  58. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/ci.yml +0 -0
  59. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/deploy-deepinfer.yml +0 -0
  60. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/deploy-modal-dev.yml +0 -0
  61. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/deploy-modal.yml +0 -0
  62. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/dev-kernel-cache.yml +0 -0
  63. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/main-source-guard.yml +0 -0
  64. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/notify-tests-repo.yml +0 -0
  65. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  66. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/publish-image.yml +0 -0
  67. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/publish-serving-image.yml +0 -0
  68. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/publish.yml +0 -0
  69. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/version-parity.yml +0 -0
  70. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.github/workflows/worker-image.yml +0 -0
  71. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/.gitignore +0 -0
  72. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/CHANGELOG.md +0 -0
  73. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/CODE_OF_CONDUCT.md +0 -0
  74. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/CONTRIBUTING.md +0 -0
  75. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/Dockerfile +0 -0
  76. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/Dockerfile.serve +0 -0
  77. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/Dockerfile.worker +0 -0
  78. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/LICENSE +0 -0
  79. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/NOTICE +0 -0
  80. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/SECURITY.md +0 -0
  81. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/SELF_HOSTING.md +0 -0
  82. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/build/kernel_cache/.gitignore +0 -0
  83. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/build/kernel_cache/.keep +0 -0
  84. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/deploy/infisical/README.md +0 -0
  85. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/deploy/infisical/entrypoint.sh +0 -0
  86. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/docker/Dockerfile.kernelcache +0 -0
  87. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/docker/Dockerfile.kernelcache.relayer +0 -0
  88. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/docker/bake_kernel_cache.py +0 -0
  89. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/docker/bake_sandbox_entry.py +0 -0
  90. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/docker/extract_cudart_fix.py +0 -0
  91. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/docker/kernel_fingerprint.py +0 -0
  92. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/docker/patch_vllm_moe_lora.py +0 -0
  93. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/__init__.py +0 -0
  94. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/_internal/__init__.py +0 -0
  95. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/_internal/background.py +0 -0
  96. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/_internal/channel.py +0 -0
  97. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/_internal/diagnostics.py +0 -0
  98. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/_internal/fileio.py +0 -0
  99. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/_internal/http.py +0 -0
  100. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/_internal/http_deadline.py +0 -0
  101. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/_internal/logging.py +0 -0
  102. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/_internal/openai_sse.py +0 -0
  103. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/_internal/paths.py +0 -0
  104. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/_internal/version.py +0 -0
  105. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/adapters/__init__.py +0 -0
  106. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/adapters/artifacts.py +0 -0
  107. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/adapters/config.py +0 -0
  108. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/adapters/fused_experts.py +0 -0
  109. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/adapters/lora_rank.py +0 -0
  110. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/adapters/targets.py +0 -0
  111. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/__init__.py +0 -0
  112. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/__main__.py +0 -0
  113. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/__init__.py +0 -0
  114. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/__init__.py +0 -0
  115. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/__init__.py +0 -0
  116. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/imports.py +0 -0
  117. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/list.py +0 -0
  118. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/push.py +0 -0
  119. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/retained.py +0 -0
  120. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/setup.py +0 -0
  121. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  122. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/__init__.py +0 -0
  123. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/episode.py +0 -0
  124. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/eval.py +0 -0
  125. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/eval_args.py +0 -0
  126. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/evaluations.py +0 -0
  127. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/params.py +0 -0
  128. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/test.py +0 -0
  129. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/warnings.py +0 -0
  130. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/__init__.py +0 -0
  131. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/account.py +0 -0
  132. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/catalog.py +0 -0
  133. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/deploy.py +0 -0
  134. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/log_follow.py +0 -0
  135. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/prompt_budget.py +0 -0
  136. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/runs.py +0 -0
  137. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/traces.py +0 -0
  138. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/train.py +0 -0
  139. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/worker_output.py +0 -0
  140. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/serving/__init__.py +0 -0
  141. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/serving/deploy.py +0 -0
  142. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/serving/identity.py +0 -0
  143. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/serving/status.py +0 -0
  144. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/commands/serving/undeploy.py +0 -0
  145. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/__init__.py +0 -0
  146. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/account.py +0 -0
  147. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/custom.py +0 -0
  148. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/env.py +0 -0
  149. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/errors.py +0 -0
  150. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/main.py +0 -0
  151. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/models.py +0 -0
  152. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/serve_parser.py +0 -0
  153. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/traces.py +0 -0
  154. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/training.py +0 -0
  155. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/scaffold/TRAINING.md +0 -0
  156. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/scaffold/__init__.py +0 -0
  157. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/ui/__init__.py +0 -0
  158. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/ui/cost.py +0 -0
  159. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/ui/env_panels.py +0 -0
  160. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/ui/heartbeat.py +0 -0
  161. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/ui/render.py +0 -0
  162. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/ui/tables.py +0 -0
  163. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cli/ui/tty.py +0 -0
  164. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/client/__init__.py +0 -0
  165. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/client/config.py +0 -0
  166. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/client/freesolo_api.py +0 -0
  167. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/client/http.py +0 -0
  168. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/client/runtime_secrets.py +0 -0
  169. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/client/shapes.py +0 -0
  170. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/client/specs.py +0 -0
  171. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/client/streaming.py +0 -0
  172. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/content/__init__.py +0 -0
  173. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/content/image_descriptors.py +0 -0
  174. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/content/multimodal.py +0 -0
  175. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/content/reasoning_normalization.py +0 -0
  176. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/content/structured_options.py +0 -0
  177. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/content/structured_outputs.py +0 -0
  178. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/content/thinking.py +0 -0
  179. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/core/__init__.py +0 -0
  180. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/core/grpo.py +0 -0
  181. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/core/spec.py +0 -0
  182. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/core/spec_persistence.py +0 -0
  183. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cost/__init__.py +0 -0
  184. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cost/analytical.py +0 -0
  185. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cost/currency.py +0 -0
  186. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cost/facts.py +0 -0
  187. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cost/spec.py +0 -0
  188. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/cost/types.py +0 -0
  189. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/__init__.py +0 -0
  190. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/async_client.py +0 -0
  191. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/backend.py +0 -0
  192. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/billing.py +0 -0
  193. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/checkpoints.py +0 -0
  194. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/client.py +0 -0
  195. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/controller.py +0 -0
  196. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/managed.py +0 -0
  197. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/server.py +0 -0
  198. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/session.py +0 -0
  199. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/starter.py +0 -0
  200. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/types.py +0 -0
  201. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/validation.py +0 -0
  202. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/custom/worker.py +0 -0
  203. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/__init__.py +0 -0
  204. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/plan/__init__.py +0 -0
  205. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/plan/kv_sizing.py +0 -0
  206. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/plan/model_config_probe.py +0 -0
  207. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/plan/prompt_budget.py +0 -0
  208. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/plan/recipe.py +0 -0
  209. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/plan/steps.py +0 -0
  210. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/__init__.py +0 -0
  211. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/dataset_profile.py +0 -0
  212. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/image_tokens.py +0 -0
  213. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/reasoning_render.py +0 -0
  214. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/sft_image_rows.py +0 -0
  215. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/sft_rows.py +0 -0
  216. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/sft_tools.py +0 -0
  217. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/tokenizer.py +0 -0
  218. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/workload_profile.py +0 -0
  219. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/result/__init__.py +0 -0
  220. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/result/accounting.py +0 -0
  221. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/result/rollout_samples.py +0 -0
  222. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/support/__init__.py +0 -0
  223. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/support/checkpoint_transport.py +0 -0
  224. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/support/huggingface.py +0 -0
  225. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/support/model_snapshot.py +0 -0
  226. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/support/verl_checkpoint.py +0 -0
  227. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/support/worker_entrypoint.py +0 -0
  228. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/__init__.py +0 -0
  229. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/__main__.py +0 -0
  230. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/entry/__init__.py +0 -0
  231. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/entry/rl.py +0 -0
  232. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/entry/worker.py +0 -0
  233. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/__init__.py +0 -0
  234. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/cpu_handoff.py +0 -0
  235. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/heartbeat.py +0 -0
  236. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/hf.py +0 -0
  237. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/prefetch.py +0 -0
  238. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/transfer.py +0 -0
  239. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/wandb_log.py +0 -0
  240. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/__init__.py +0 -0
  241. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/adapter.py +0 -0
  242. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/chatml_mask.py +0 -0
  243. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/decoding.py +0 -0
  244. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/lora.py +0 -0
  245. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/packing.py +0 -0
  246. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/perf/__init__.py +0 -0
  247. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/perf/diagnostics.py +0 -0
  248. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/perf/lifecycle.py +0 -0
  249. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/perf/memory.py +0 -0
  250. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/perf/model_size.py +0 -0
  251. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/runtime/__init__.py +0 -0
  252. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  253. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/runtime/phases.py +0 -0
  254. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/runtime/rng.py +0 -0
  255. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/runtime/state.py +0 -0
  256. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/__init__.py +0 -0
  257. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/__init__.py +0 -0
  258. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/__init__.py +0 -0
  259. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/agents.yaml +0 -0
  260. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/batch.py +0 -0
  261. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/compact_checkpoint.py +0 -0
  262. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/configuration.py +0 -0
  263. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/engine.py +0 -0
  264. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/flashinfer_cache.py +0 -0
  265. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/glue.py +0 -0
  266. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/launch.py +0 -0
  267. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/model.py +0 -0
  268. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/observations.py +0 -0
  269. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/options.py +0 -0
  270. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/prompt_media.py +0 -0
  271. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/queue.py +0 -0
  272. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/readiness.py +0 -0
  273. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/reference.py +0 -0
  274. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/registration.py +0 -0
  275. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/replay.py +0 -0
  276. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/replay_guard.py +0 -0
  277. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/rollout.py +0 -0
  278. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/rollout_contract.py +0 -0
  279. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/startup.py +0 -0
  280. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/tracking.py +0 -0
  281. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/trainer.py +0 -0
  282. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/upstream.py +0 -0
  283. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/vllm_worker.py +0 -0
  284. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/worker.py +0 -0
  285. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  286. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  287. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  288. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/persistence.py +0 -0
  289. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  290. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/timing.py +0 -0
  291. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/__init__.py +0 -0
  292. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/contract.py +0 -0
  293. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/episode.py +0 -0
  294. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/generation.py +0 -0
  295. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/identity.py +0 -0
  296. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/lifecycle.py +0 -0
  297. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/__init__.py +0 -0
  298. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/backend_common.py +0 -0
  299. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  300. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/rl_train.py +0 -0
  301. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  302. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/score_batcher.py +0 -0
  303. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/sft_train.py +0 -0
  304. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  305. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/__init__.py +0 -0
  306. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  307. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/contract.py +0 -0
  308. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/credit.py +0 -0
  309. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/entry.py +0 -0
  310. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/identity.py +0 -0
  311. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/metrics.py +0 -0
  312. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  313. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/reward.py +0 -0
  314. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/rollout.py +0 -0
  315. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/trainer.py +0 -0
  316. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/transport.py +0 -0
  317. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  318. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  319. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/launch/config.py +0 -0
  320. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  321. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  322. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  323. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  324. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  325. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  326. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/__init__.py +0 -0
  327. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/child/dataset.py +0 -0
  328. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/child/entry.py +0 -0
  329. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/child/loop.py +0 -0
  330. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/child/schedule.py +0 -0
  331. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/child/trainer.py +0 -0
  332. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  333. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  334. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/setup/config.py +0 -0
  335. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/__init__.py +0 -0
  336. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/adapter_merger.py +0 -0
  337. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/capabilities.py +0 -0
  338. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/checkpoints.py +0 -0
  339. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/child_io.py +0 -0
  340. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/diagnostics.py +0 -0
  341. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/parallelism.py +0 -0
  342. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/parent_work.py +0 -0
  343. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/__init__.py +0 -0
  344. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/loading/__init__.py +0 -0
  345. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/loading/adapter.py +0 -0
  346. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/loading/base.py +0 -0
  347. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/loading/loader.py +0 -0
  348. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/loading/pull.py +0 -0
  349. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/loading/staged.py +0 -0
  350. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/meta/__init__.py +0 -0
  351. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/meta/cache_security.py +0 -0
  352. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/meta/cache_storage.py +0 -0
  353. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/meta/dataset_selection.py +0 -0
  354. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/meta/evaluations.py +0 -0
  355. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/meta/identity.py +0 -0
  356. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/meta/namespace_listing.py +0 -0
  357. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/package/__init__.py +0 -0
  358. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/package/direct_tokens.py +0 -0
  359. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/package/limits.py +0 -0
  360. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/package/unpack.py +0 -0
  361. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/registry/__init__.py +0 -0
  362. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/registry/azure.py +0 -0
  363. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/registry/packages.py +0 -0
  364. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/scoring/__init__.py +0 -0
  365. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/scoring/context.py +0 -0
  366. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/envs/scoring/response.py +0 -0
  367. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/__init__.py +0 -0
  368. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/__init__.py +0 -0
  369. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  370. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/attempt.py +0 -0
  371. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
  372. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  373. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  374. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/processes.py +0 -0
  375. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  376. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  377. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/instances/instance.py +0 -0
  378. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/instances/poll.py +0 -0
  379. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  380. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  381. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/net/__init__.py +0 -0
  382. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/net/auth.py +0 -0
  383. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/net/deadline.py +0 -0
  384. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/net/http.py +0 -0
  385. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/net/worker.py +0 -0
  386. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/artifacts/__init__.py +0 -0
  387. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/artifacts/hf.py +0 -0
  388. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/artifacts/weight_cache.py +0 -0
  389. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/core/__init__.py +0 -0
  390. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/core/allocator.py +0 -0
  391. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/core/base.py +0 -0
  392. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/core/fit_errors.py +0 -0
  393. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/core/preflight.py +0 -0
  394. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/core/registry.py +0 -0
  395. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/core/sharding.py +0 -0
  396. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/modal/__init__.py +0 -0
  397. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/modal/api.py +0 -0
  398. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/modal/auth.py +0 -0
  399. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/modal/checkpoint_upload.py +0 -0
  400. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/modal/handles.py +0 -0
  401. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/modal/jobs.py +0 -0
  402. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/modal/prefetch.py +0 -0
  403. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/modal/pricing.py +0 -0
  404. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/modal/provider.py +0 -0
  405. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/providers/modal/startup.py +0 -0
  406. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/py.typed +0 -0
  407. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/__init__.py +0 -0
  408. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/accounting/__init__.py +0 -0
  409. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/accounting/artifacts.py +0 -0
  410. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/accounting/costs.py +0 -0
  411. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/accounting/weight_cache.py +0 -0
  412. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/__init__.py +0 -0
  413. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/attempts.py +0 -0
  414. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/claim_lock.py +0 -0
  415. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/cleanup.py +0 -0
  416. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/deadlines.py +0 -0
  417. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/preparation.py +0 -0
  418. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/reporting.py +0 -0
  419. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/runtime_credentials.py +0 -0
  420. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/state.py +0 -0
  421. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/status.py +0 -0
  422. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/submit.py +0 -0
  423. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/results/__init__.py +0 -0
  424. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/results/checkpoints.py +0 -0
  425. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/results/deployments.py +0 -0
  426. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/__init__.py +0 -0
  427. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/attach.py +0 -0
  428. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/deploy.py +0 -0
  429. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/errors.py +0 -0
  430. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/execution.py +0 -0
  431. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/lifecycle.py +0 -0
  432. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/recovery.py +0 -0
  433. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/retry_decision.py +0 -0
  434. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/transitions.py +0 -0
  435. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runtime_capsule/__init__.py +0 -0
  436. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runtime_capsule/build.py +0 -0
  437. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runtime_capsule/manifest.py +0 -0
  438. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/runtime_capsule/profiles.py +0 -0
  439. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/schema/__init__.py +0 -0
  440. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/schema/custom.py +0 -0
  441. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/schema/fields.py +0 -0
  442. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/__init__.py +0 -0
  443. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/app/__init__.py +0 -0
  444. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/app/__main__.py +0 -0
  445. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/app/bootstrap.py +0 -0
  446. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/app/chat_stream.py +0 -0
  447. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/app/http.py +0 -0
  448. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/app/launch.py +0 -0
  449. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/app/manifest.py +0 -0
  450. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/app/materialize.py +0 -0
  451. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/app/openai.py +0 -0
  452. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/app/progress.py +0 -0
  453. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/contract/__init__.py +0 -0
  454. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/contract/errors.py +0 -0
  455. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/contract/protocol.py +0 -0
  456. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/contract/provenance.py +0 -0
  457. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/contract/responses.py +0 -0
  458. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/contract/urls.py +0 -0
  459. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/control/__init__.py +0 -0
  460. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/control/_canonical.py +0 -0
  461. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/control/_serialization.py +0 -0
  462. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/control/_urls.py +0 -0
  463. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/control/credentials.py +0 -0
  464. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/control/planning.py +0 -0
  465. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/control/types.py +0 -0
  466. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/__init__.py +0 -0
  467. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/adapter_check.py +0 -0
  468. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/deploy.py +0 -0
  469. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/download.py +0 -0
  470. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/export.py +0 -0
  471. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/preflight.py +0 -0
  472. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/readiness.py +0 -0
  473. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/resolve.py +0 -0
  474. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/__init__.py +0 -0
  475. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/common/__init__.py +0 -0
  476. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/common/records.py +0 -0
  477. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/__init__.py +0 -0
  478. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  479. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  480. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  481. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  482. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  483. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  484. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  485. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  486. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  487. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  488. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  489. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  490. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  491. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/request/__init__.py +0 -0
  492. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/request/openai.py +0 -0
  493. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/request/runtime_support.py +0 -0
  494. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/request/schema_types.py +0 -0
  495. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/request/streaming.py +0 -0
  496. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/request/text_scan.py +0 -0
  497. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/request/thinking.py +0 -0
  498. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/request/transport.py +0 -0
  499. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/request/validation.py +0 -0
  500. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/__init__.py +0 -0
  501. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/adapters.py +0 -0
  502. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/cache_admission.py +0 -0
  503. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/cache_retention.py +0 -0
  504. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/cache_scheduler.py +0 -0
  505. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/errors.py +0 -0
  506. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/hub.py +0 -0
  507. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/multimodal.py +0 -0
  508. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/prompt.py +0 -0
  509. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/prompt_cache.py +0 -0
  510. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/sampling.py +0 -0
  511. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/structured_outputs.py +0 -0
  512. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/token_batch.py +0 -0
  513. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/token_prefix_cache.py +0 -0
  514. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/tool_calls.py +0 -0
  515. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/types.py +0 -0
  516. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/__init__.py +0 -0
  517. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/__main__.py +0 -0
  518. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/asgi/__init__.py +0 -0
  519. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/asgi/app.py +0 -0
  520. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/asgi/cli.py +0 -0
  521. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/billing/__init__.py +0 -0
  522. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/billing/charges.py +0 -0
  523. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/billing/retry.py +0 -0
  524. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/__init__.py +0 -0
  525. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/ops/__init__.py +0 -0
  526. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/ops/repo_cleanup.py +0 -0
  527. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/ops/serving_resources.py +0 -0
  528. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/__init__.py +0 -0
  529. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/blob_envs.py +0 -0
  530. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/checkpoints.py +0 -0
  531. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/env_files.py +0 -0
  532. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/environment_registry.py +0 -0
  533. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/envs.py +0 -0
  534. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/projects.py +0 -0
  535. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/runs.py +0 -0
  536. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/platform/__init__.py +0 -0
  537. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/platform/auth.py +0 -0
  538. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/platform/db.py +0 -0
  539. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/platform/deployment_jobs.py +0 -0
  540. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/platform/deployment_state.py +0 -0
  541. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/platform/deps.py +0 -0
  542. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/platform/internal_client.py +0 -0
  543. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/platform/locks.py +0 -0
  544. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/platform/plane_lease.py +0 -0
  545. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/platform/runtime.py +0 -0
  546. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/__init__.py +0 -0
  547. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/adapter_download.py +0 -0
  548. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/custom.py +0 -0
  549. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/env_files.py +0 -0
  550. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/envs.py +0 -0
  551. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/meta.py +0 -0
  552. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/runs.py +0 -0
  553. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/serving.py +0 -0
  554. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/serving_chat.py +0 -0
  555. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/serving_completion.py +0 -0
  556. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/serving_revisions.py +0 -0
  557. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/server/routes/serving_smoke.py +0 -0
  558. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/__init__.py +0 -0
  559. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/app/__init__.py +0 -0
  560. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/app/modal_app.py +0 -0
  561. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/app/timeouts.py +0 -0
  562. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/__init__.py +0 -0
  563. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/README.md +0 -0
  564. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/__init__.py +0 -0
  565. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/autoscaling.py +0 -0
  566. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/client.py +0 -0
  567. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/events.py +0 -0
  568. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/http.py +0 -0
  569. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/modal_app.py +0 -0
  570. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/render.py +0 -0
  571. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/retries.py +0 -0
  572. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/rollout.py +0 -0
  573. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/contract/__init__.py +0 -0
  574. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/contract/config.py +0 -0
  575. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/contract/errors.py +0 -0
  576. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/contract/protocol.py +0 -0
  577. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/contract/tokenizer.py +0 -0
  578. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/native/__init__.py +0 -0
  579. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/native/engram_transport.py +0 -0
  580. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/native/image.py +0 -0
  581. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/native/patches.py +0 -0
  582. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/native/transport.py +0 -0
  583. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/__init__.py +0 -0
  584. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/bridge.py +0 -0
  585. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/kernel_cache.py +0 -0
  586. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/prefill_scheduler.py +0 -0
  587. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/prefix_cache.py +0 -0
  588. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/provenance.py +0 -0
  589. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/routing.py +0 -0
  590. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/snapshots.py +0 -0
  591. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/tiered_cache.py +0 -0
  592. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/warmup.py +0 -0
  593. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/worker.py +0 -0
  594. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/promotion/__init__.py +0 -0
  595. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/promotion/accounting_smoke_test.py +0 -0
  596. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/promotion/canary.py +0 -0
  597. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/promotion/evidence.py +0 -0
  598. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/promotion/gate.py +0 -0
  599. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/__init__.py +0 -0
  600. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/accounting/__init__.py +0 -0
  601. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/accounting/usage_facts.py +0 -0
  602. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/accounting/usage_outbox.py +0 -0
  603. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/accounting/usage_retry.py +0 -0
  604. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/__init__.py +0 -0
  605. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/errors.py +0 -0
  606. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/hub.py +0 -0
  607. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/lora_engine.py +0 -0
  608. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/lora_entries.py +0 -0
  609. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/prequant_config.py +0 -0
  610. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/reasoning_usage.py +0 -0
  611. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/support.py +0 -0
  612. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/text_tokenizer.py +0 -0
  613. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/warmup.py +0 -0
  614. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/__init__.py +0 -0
  615. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/adapter_routes.py +0 -0
  616. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/body_limit.py +0 -0
  617. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/context.py +0 -0
  618. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/headers.py +0 -0
  619. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/inference_routes.py +0 -0
  620. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/key_rate_limit.py +0 -0
  621. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/rate_limit.py +0 -0
  622. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/router.py +0 -0
  623. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/routing.py +0 -0
  624. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/stream_response.py +0 -0
  625. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/__init__.py +0 -0
  626. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/cache_namespace.py +0 -0
  627. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/multimodal.py +0 -0
  628. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/openai_request.py +0 -0
  629. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/openai_stream.py +0 -0
  630. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/provenance.py +0 -0
  631. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/requests.py +0 -0
  632. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/responses.py +0 -0
  633. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/schemas.py +0 -0
  634. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/streaming.py +0 -0
  635. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/structured_outputs.py +0 -0
  636. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/__init__.py +0 -0
  637. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/access.py +0 -0
  638. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/lookup.py +0 -0
  639. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/persisted_columns.py +0 -0
  640. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/persistence.py +0 -0
  641. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/registration.py +0 -0
  642. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/registry.py +0 -0
  643. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/settings.py +0 -0
  644. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/supabase_rest.py +0 -0
  645. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/undeploy.py +0 -0
  646. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/stream_channel/__init__.py +0 -0
  647. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/stream_channel/_tasks.py +0 -0
  648. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/stream_channel/client.py +0 -0
  649. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/stream_channel/engine.py +0 -0
  650. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/serving/src/stream_channel/protocol.py +0 -0
  651. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/snapshot/__init__.py +0 -0
  652. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/flash/snapshot/archive.py +0 -0
  653. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/build_dev_dist.py +0 -0
  654. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/check_file_size.py +0 -0
  655. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/check_function_size.py +0 -0
  656. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/check_rollout_identity_actor.py +0 -0
  657. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/check_source_layout.py +0 -0
  658. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/check_verl_pin_exists.py +0 -0
  659. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/fixtures/custom_algorithm.py +0 -0
  660. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/fixtures/modal_environment/dataset/train.jsonl +0 -0
  661. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/fixtures/modal_environment/environment.py +0 -0
  662. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/fixtures/modal_environment/evaluations.py +0 -0
  663. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/qualify_serving_profile.py +0 -0
  664. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/smoke_custom_training.py +0 -0
  665. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/scripts/smoke_modal_training.py +0 -0
  666. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/serve_launch.py +0 -0
  667. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/__init__.py +0 -0
  668. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/__init__.py +0 -0
  669. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/billing_precheck.py +0 -0
  670. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/chat_provenance.py +0 -0
  671. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/chat_transport.py +0 -0
  672. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/deployments.py +0 -0
  673. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/managed_chat.py +0 -0
  674. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/modal.py +0 -0
  675. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/profile.py +0 -0
  676. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/runner.py +0 -0
  677. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/server_api_plugin.py +0 -0
  678. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/source_snapshot.py +0 -0
  679. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/specs.py +0 -0
  680. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/_helpers/wire_headers.py +0 -0
  681. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/capture_image_sft_processor_oracle.py +0 -0
  682. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/capture_qwen38_27b_metadata.py +0 -0
  683. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/conftest.py +0 -0
  684. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  685. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  686. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  687. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  688. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  689. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  690. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/live/__init__.py +0 -0
  691. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/live/conftest.py +0 -0
  692. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/live/test_sft_thinking_render_live.py +0 -0
  693. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/checkpoint_fixtures.py +0 -0
  694. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/conftest.py +0 -0
  695. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_adapter_hub.py +0 -0
  696. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_artifact_protections.py +0 -0
  697. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_base_model_serving.py +0 -0
  698. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_chat_auth.py +0 -0
  699. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_chat_authorizer.py +0 -0
  700. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_checkpoint_fingerprint_validation.py +0 -0
  701. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  702. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_checkpoint_model_validation.py +0 -0
  703. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_checkpoint_revocation.py +0 -0
  704. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer.py +0 -0
  705. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_autoscaling.py +0 -0
  706. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_deadline.py +0 -0
  707. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_hosted.py +0 -0
  708. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_http_deadline.py +0 -0
  709. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_kernel_cache.py +0 -0
  710. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_latency.py +0 -0
  711. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_optimizations.py +0 -0
  712. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_parallel.py +0 -0
  713. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_prefill_scheduler.py +0 -0
  714. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_provenance.py +0 -0
  715. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_retention.py +0 -0
  716. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_retries.py +0 -0
  717. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_rollout.py +0 -0
  718. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_routing.py +0 -0
  719. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_tiering.py +0 -0
  720. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_engine_error_status.py +0 -0
  721. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_fp8_config.py +0 -0
  722. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_immutable_engine.py +0 -0
  723. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_immutable_revisions.py +0 -0
  724. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_immutable_schemas.py +0 -0
  725. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_internal_header_integrity.py +0 -0
  726. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_key_rate_limit.py +0 -0
  727. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_key_rate_limit_review.py +0 -0
  728. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_kv_namespace.py +0 -0
  729. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_latency_admission.py +0 -0
  730. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_mirror_sampling_parity.py +0 -0
  731. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_modal_deploy_identity.py +0 -0
  732. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_modal_image_paths.py +0 -0
  733. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_multimodal.py +0 -0
  734. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_openai_stream_options.py +0 -0
  735. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_persistence.py +0 -0
  736. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_pre_first_disconnect.py +0 -0
  737. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_promotion_accounting_smoke.py +0 -0
  738. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_promotion_canary.py +0 -0
  739. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_promotion_evidence.py +0 -0
  740. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_promotion_gate.py +0 -0
  741. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_qwen_warmup.py +0 -0
  742. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_rate_limit.py +0 -0
  743. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_reasoning_usage.py +0 -0
  744. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_registration_endpoint.py +0 -0
  745. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_registry.py +0 -0
  746. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_registry_coverage.py +0 -0
  747. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_request_body_limit.py +0 -0
  748. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_router.py +0 -0
  749. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_router_coverage.py +0 -0
  750. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_router_edge_coverage.py +0 -0
  751. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_schemas_coverage.py +0 -0
  752. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_serve_reasoning_split.py +0 -0
  753. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_serve_thinking.py +0 -0
  754. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_settings.py +0 -0
  755. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_stream_channel.py +0 -0
  756. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_stream_response_disconnect.py +0 -0
  757. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_stream_wait_cleanup.py +0 -0
  758. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_structured_outputs.py +0 -0
  759. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_structured_outputs_coverage.py +0 -0
  760. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_supabase_rest_coverage.py +0 -0
  761. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_token_prefix_cache.py +0 -0
  762. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_usage_delivery_concurrency.py +0 -0
  763. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_usage_integrity.py +0 -0
  764. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving/test_usage_reporter.py +0 -0
  765. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving_conformance/__init__.py +0 -0
  766. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving_conformance/conftest.py +0 -0
  767. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/serving_conformance/test_contract.py +0 -0
  768. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_accounting_coverage.py +0 -0
  769. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_adapter_download.py +0 -0
  770. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_adapter_shard_completeness.py +0 -0
  771. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_agent_flash_cli_contract.py +0 -0
  772. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_algorithms.py +0 -0
  773. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_allocator.py +0 -0
  774. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_authenticated_redirects.py +0 -0
  775. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_azure_environment_registry.py +0 -0
  776. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_backend_common.py +0 -0
  777. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_backend_jobspec_contract.py +0 -0
  778. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_background_supervisor.py +0 -0
  779. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_bake_kernel_cache.py +0 -0
  780. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_bake_sandbox_entry.py +0 -0
  781. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_base_environment_integrity.py +0 -0
  782. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_base_model_provenance.py +0 -0
  783. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_billing_response_integrity.py +0 -0
  784. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_billing_retry.py +0 -0
  785. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_bootstrap_process_groups.py +0 -0
  786. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_bootstrap_reentry.py +0 -0
  787. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_bootstrap_worker_cleanup.py +0 -0
  788. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_build_context_contract.py +0 -0
  789. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cache_admission.py +0 -0
  790. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cache_retention.py +0 -0
  791. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cache_scheduler.py +0 -0
  792. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_capture_qwen38_metadata.py +0 -0
  793. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_catalog_only_models.py +0 -0
  794. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_charge_pricing.py +0 -0
  795. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_cancellation.py +0 -0
  796. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_deployment_inventory_api.py +0 -0
  797. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_deployments.py +0 -0
  798. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_lifecycle.py +0 -0
  799. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_listing_integrity.py +0 -0
  800. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_storage_overlap.py +0 -0
  801. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_transport.py +0 -0
  802. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_checkpoints.py +0 -0
  803. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_commands.py +0 -0
  804. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_commands_coverage.py +0 -0
  805. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_credential_shadowing.py +0 -0
  806. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_errors.py +0 -0
  807. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_estimate.py +0 -0
  808. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_gpus_flag.py +0 -0
  809. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_help.py +0 -0
  810. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_main_coverage.py +0 -0
  811. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_managed.py +0 -0
  812. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_render_coverage.py +0 -0
  813. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_render_theme.py +0 -0
  814. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_serve_deploy.py +0 -0
  815. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_serve_status.py +0 -0
  816. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_serve_undeploy.py +0 -0
  817. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_traces.py +0 -0
  818. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cli_wandb_warning.py +0 -0
  819. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_client.py +0 -0
  820. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_client_deadline_integrity.py +0 -0
  821. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_client_import_purity.py +0 -0
  822. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_client_server_integration.py +0 -0
  823. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_client_stream_reads.py +0 -0
  824. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_compact_checkpoint.py +0 -0
  825. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_config_env_vars.py +0 -0
  826. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_config_overrides.py +0 -0
  827. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_console_upload.py +0 -0
  828. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_controlled_experiment_repairs.py +0 -0
  829. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cost_analytical.py +0 -0
  830. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cost_currency.py +0 -0
  831. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cost_equation.py +0 -0
  832. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cost_estimate.py +0 -0
  833. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cost_hardware.py +0 -0
  834. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cost_models.py +0 -0
  835. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_cpu_checkpoint_handoff.py +0 -0
  836. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_custom_checkpoints.py +0 -0
  837. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_custom_client.py +0 -0
  838. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_custom_gpu_selection.py +0 -0
  839. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_custom_gradients.py +0 -0
  840. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_custom_managed.py +0 -0
  841. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_custom_session.py +0 -0
  842. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_custom_worker.py +0 -0
  843. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_dataset_profile.py +0 -0
  844. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_deploy_latency.py +0 -0
  845. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_deployment_cleanup_resilience.py +0 -0
  846. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_deployment_generation_completion.py +0 -0
  847. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_deployment_registration_cleanup.py +0 -0
  848. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_dev_channel.py +0 -0
  849. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_cache_evict.py +0 -0
  850. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_delete.py +0 -0
  851. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_download.py +0 -0
  852. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_download_api.py +0 -0
  853. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_evaluations.py +0 -0
  854. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_list_api.py +0 -0
  855. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_list_cli.py +0 -0
  856. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_list_registry.py +0 -0
  857. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_no_install.py +0 -0
  858. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_publish.py +0 -0
  859. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_pull.py +0 -0
  860. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_pull_coverage.py +0 -0
  861. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_pull_loader_coverage.py +0 -0
  862. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_pull_managed_control_plane.py +0 -0
  863. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_push.py +0 -0
  864. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_rate_limit_resolve.py +0 -0
  865. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_ref_pinning.py +0 -0
  866. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_env_test.py +0 -0
  867. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_environment_cache_integrity.py +0 -0
  868. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_environment_publish_integrity.py +0 -0
  869. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_envs_coverage.py +0 -0
  870. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_export.py +0 -0
  871. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_flash_mvp.py +0 -0
  872. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_flash_worker.py +0 -0
  873. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_flashinfer_aot_cache.py +0 -0
  874. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_flashinfer_cache_dirs.py +0 -0
  875. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_freesolo_api_transport.py +0 -0
  876. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_fused_expert_warmstart.py +0 -0
  877. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_generation_eos.py +0 -0
  878. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_github_urlopen_retry.py +0 -0
  879. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_gpu_type_single_field.py +0 -0
  880. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_gpus.py +0 -0
  881. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_grpo_checkpoint_durability.py +0 -0
  882. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_grpo_metric_stream.py +0 -0
  883. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_grpo_params.py +0 -0
  884. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_grpo_resident_sizing.py +0 -0
  885. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_grpo_reward_batching.py +0 -0
  886. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_grpo_reward_context.py +0 -0
  887. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_grpo_rollout_contract.py +0 -0
  888. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_grpo_rollout_identity.py +0 -0
  889. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_health_liveness.py +0 -0
  890. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_heartbeat_startup_cleanup.py +0 -0
  891. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_hf_retry.py +0 -0
  892. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_hosted_adapter_admission.py +0 -0
  893. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_image_environment_capability.py +0 -0
  894. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_image_incremental_processor.py +0 -0
  895. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_image_sft_markers.py +0 -0
  896. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_image_sft_processor_parity.py +0 -0
  897. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_image_tokens.py +0 -0
  898. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_infisical_secrets.py +0 -0
  899. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_internal_client.py +0 -0
  900. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_kernel_bake_build_contracts.py +0 -0
  901. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_kernel_cache.py +0 -0
  902. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_kernel_fingerprint.py +0 -0
  903. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_kv_util.py +0 -0
  904. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_local_credential_integrity.py +0 -0
  905. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_logging.py +0 -0
  906. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_login_perms.py +0 -0
  907. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_lora_rank_coverage.py +0 -0
  908. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_lora_rank_nested_rung.py +0 -0
  909. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_lora_rank_preflight.py +0 -0
  910. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_lora_targeting.py +0 -0
  911. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_lora_targeting_pinned_verl.py +0 -0
  912. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_managed_config_fields.py +0 -0
  913. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_managed_hf_repo.py +0 -0
  914. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_metrics_schema_agent_contract.py +0 -0
  915. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_mig_guard.py +0 -0
  916. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_mirror_sampling_parity.py +0 -0
  917. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_modal_api_loop.py +0 -0
  918. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_modal_prefetch_snapshot.py +0 -0
  919. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_modal_provider.py +0 -0
  920. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_modal_startup.py +0 -0
  921. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_modal_training_lifecycle.py +0 -0
  922. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_multi_gpu_gate.py +0 -0
  923. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_multimodal_boundary_integrity.py +0 -0
  924. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_multimodal_training.py +0 -0
  925. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_named_reward_metrics.py +0 -0
  926. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_notify_tests_repo.py +0 -0
  927. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_offline_http.py +0 -0
  928. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_oom_escalate_gpu.py +0 -0
  929. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_orchestrator_flash.py +0 -0
  930. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_packing.py +0 -0
  931. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_packing_coverage.py +0 -0
  932. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_persisted_spec_envelope.py +0 -0
  933. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_plane_lease.py +0 -0
  934. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_poll_helpers.py +0 -0
  935. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_preflight.py +0 -0
  936. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_projects.py +0 -0
  937. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_prompt_budget.py +0 -0
  938. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_removed_algorithms.py +0 -0
  939. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_removed_training_settings.py +0 -0
  940. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_replay_guard.py +0 -0
  941. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_repo_cleanup.py +0 -0
  942. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_resolve_params_b.py +0 -0
  943. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_resume_on_retry.py +0 -0
  944. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_retry_decision.py +0 -0
  945. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_reward_server_cleanup.py +0 -0
  946. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_rollout_engine_prompt.py +0 -0
  947. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_rollout_samples.py +0 -0
  948. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_run_log_integrity.py +0 -0
  949. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_run_registry_lifecycle.py +0 -0
  950. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_runmgmt.py +0 -0
  951. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_runtime_capsule.py +0 -0
  952. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_runtime_credentials.py +0 -0
  953. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_runtime_secret_integrity.py +0 -0
  954. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_schema_boundary_integrity.py +0 -0
  955. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve.py +0 -0
  956. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_launch.py +0 -0
  957. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_manifest.py +0 -0
  958. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_materialize.py +0 -0
  959. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_packaging.py +0 -0
  960. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_progress.py +0 -0
  961. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_cache_resource_cleanup.py +0 -0
  962. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_chat_transport.py +0 -0
  963. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_control.py +0 -0
  964. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_docs.py +0 -0
  965. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_modal_contract_lock.py +0 -0
  966. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_modal_sdk.py +0 -0
  967. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  968. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_modal_teardown_identity.py +0 -0
  969. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_profile_qualification.py +0 -0
  970. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_provisioning_common.py +0 -0
  971. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_provisioning_modal.py +0 -0
  972. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_reasoning_content.py +0 -0
  973. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_resolve_provenance.py +0 -0
  974. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_runtime_adapters.py +0 -0
  975. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_runtime_hub.py +0 -0
  976. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_runtime_package.py +0 -0
  977. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serve_runtime_types.py +0 -0
  978. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_server_api.py +0 -0
  979. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_server_app_coverage.py +0 -0
  980. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_server_auth_singleflight.py +0 -0
  981. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_server_billing.py +0 -0
  982. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_server_checkpoints_coverage.py +0 -0
  983. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_server_db.py +0 -0
  984. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_server_envs_coverage.py +0 -0
  985. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_server_locks_coverage.py +0 -0
  986. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_server_managed_chat_requests.py +0 -0
  987. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_server_serving_resources.py +0 -0
  988. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_server_standalone.py +0 -0
  989. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serving_conformance_gate.py +0 -0
  990. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serving_context_preflight.py +0 -0
  991. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serving_contract.py +0 -0
  992. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serving_input_integrity.py +0 -0
  993. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_serving_schema_coverage.py +0 -0
  994. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_batch_prefetch.py +0 -0
  995. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_cancel_profile_pricing.py +0 -0
  996. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_chunked_nll.py +0 -0
  997. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_cost_reduction.py +0 -0
  998. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_dataset_lazy_images.py +0 -0
  999. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_dataset_nulls.py +0 -0
  1000. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_example_selection.py +0 -0
  1001. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_gc_off.py +0 -0
  1002. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_max_context.py +0 -0
  1003. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_memory_policy.py +0 -0
  1004. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_step_floor.py +0 -0
  1005. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_tools.py +0 -0
  1006. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_warmup_schedule.py +0 -0
  1007. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_sft_workload.py +0 -0
  1008. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_smoke_content_integrity.py +0 -0
  1009. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_source_attestation_flow.py +0 -0
  1010. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_source_layout.py +0 -0
  1011. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_source_snapshot.py +0 -0
  1012. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_spec_and_validation.py +0 -0
  1013. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_spec_contract_bytes.py +0 -0
  1014. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_staged_environment.py +0 -0
  1015. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_status_reporting.py +0 -0
  1016. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_status_updates.py +0 -0
  1017. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_step_floor.py +0 -0
  1018. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_step_metrics.py +0 -0
  1019. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_step_timing.py +0 -0
  1020. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_structured_option_safety.py +0 -0
  1021. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_structured_outputs.py +0 -0
  1022. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_structured_runtime_options.py +0 -0
  1023. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_submission_outcome.py +0 -0
  1024. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_terminal_artifacts.py +0 -0
  1025. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_thinking_config.py +0 -0
  1026. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_tool_scalar_unions.py +0 -0
  1027. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_train_context_preflight.py +0 -0
  1028. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_training_controls.py +0 -0
  1029. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_training_phases.py +0 -0
  1030. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_transfer_queue_init.py +0 -0
  1031. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_type_comment_prose.py +0 -0
  1032. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_upload_concurrency.py +0 -0
  1033. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_upstream_rollout_contract.py +0 -0
  1034. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_upstream_runtime_policy.py +0 -0
  1035. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_upstream_verl_contract.py +0 -0
  1036. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_verifiers.py +0 -0
  1037. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_verl_checkpoint_export.py +0 -0
  1038. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_verl_child_plugins.py +0 -0
  1039. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_verl_silence_watchdog.py +0 -0
  1040. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_version.py +0 -0
  1041. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_versioned_rollout_contract.py +0 -0
  1042. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  1043. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_vllm_moe_lora_backport.py +0 -0
  1044. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_vram_architecture.py +0 -0
  1045. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_wandb_link.py +0 -0
  1046. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_wandb_naming.py +0 -0
  1047. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_warmstart_adapter_download.py +0 -0
  1048. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_warmstart_cross_repo.py +0 -0
  1049. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_warmstart_error_attribution.py +0 -0
  1050. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_warmstart_image_adapters.py +0 -0
  1051. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_watchdog_startup_cleanup.py +0 -0
  1052. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_weight_cache.py +0 -0
  1053. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_worker_dryrun.py +0 -0
  1054. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_worker_hardexit.py +0 -0
  1055. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_worker_image.py +0 -0
  1056. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_worker_init_heartbeat.py +0 -0
  1057. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_worker_stack.py +0 -0
  1058. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_worker_thinking.py +0 -0
  1059. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_workflow_contracts.py +0 -0
  1060. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_workload_profile.py +0 -0
  1061. {freesolo_flash_dev-1.4.7 → freesolo_flash_dev-1.4.8}/tests/test_zero2_sharding_gate.py +0 -0
@@ -19,6 +19,7 @@ on:
19
19
  - "uv.lock"
20
20
  - "flash/**"
21
21
  - "scripts/build_dev_dist.py"
22
+ - "scripts/check_dev_release.py"
22
23
  - ".github/workflows/publish-dev.yml"
23
24
  workflow_dispatch:
24
25
 
@@ -82,24 +83,7 @@ jobs:
82
83
  id: decide
83
84
  env:
84
85
  VERSION: ${{ steps.meta.outputs.version }}
85
- run: |
86
- python3 - <<'PY' >> "$GITHUB_OUTPUT"
87
- import os
88
- import urllib.error
89
- import urllib.request
90
-
91
- version = os.environ["VERSION"]
92
- url = f"https://pypi.org/pypi/freesolo-flash-dev/{version}/json"
93
- published = False
94
- try:
95
- with urllib.request.urlopen(url, timeout=30) as response:
96
- published = response.status == 200
97
- except urllib.error.HTTPError as error:
98
- if error.code != 404:
99
- raise
100
- # Publish only when the dev version isn't on PyPI yet (i.e. it was just bumped).
101
- print(f"publish={'false' if published else 'true'}")
102
- PY
86
+ run: python3 scripts/check_dev_release.py >> "$GITHUB_OUTPUT"
103
87
 
104
88
  - name: Already published (nothing to do)
105
89
  if: steps.decide.outputs.publish == 'false'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.4.7
3
+ Version: 1.4.8
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
@@ -144,11 +144,19 @@ path is self-hostable end to end — see **[SELF_HOSTING.md](SELF_HOSTING.md)**.
144
144
 
145
145
  ## Using the hosted service
146
146
 
147
- The active training catalog is `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
148
- `Qwen/Qwen3.6-35B-A3B`. The hosted serving catalog routes all three models on B200.
149
- The retired dense Qwen3.6 27B identity is never translated into Qwen3.8. Customer-owned
150
- Modal supports all three active models; 27B and 35B-A3B are bound to the certified serving image
151
- digest. Customer-owned `flash serve` requires explicit `--provider modal`. Training and serving both use Modal.
147
+ The training catalog includes Qwen3.5 0.8B, 4B, 9B, and **9B Base**, Qwen3.8 27B,
148
+ and Qwen3.6 35B-A3B. `Qwen/Qwen3.5-9B` is Qwen's post-trained chat model and remains
149
+ the default. Select `model = "Qwen/Qwen3.5-9B-Base"` to fine-tune the pretrained-only
150
+ checkpoint with SFT or GRPO. It has its own weights, tokenizer revision, adapters,
151
+ and Modal cache entry; it is never mapped to the post-trained model's FP8 weights.
152
+ Its native chat template supports text, images, and tool calls, but the pretrained
153
+ weights have not been tuned for instruction following.
154
+
155
+ Hosted serving uses the [per-model GPU placements](flash/serving/app/README.md#hosted-gpu-configuration).
156
+ The 9B Base checkpoint serves in BF16 on H100 with a 262,144-token context.
157
+ Customer-owned `flash serve` requires explicit `--provider modal` and a live-qualified
158
+ profile. The retired dense Qwen3.6 27B identity is never translated into Qwen3.8.
159
+ Training and serving both use Modal.
152
160
 
153
161
  `flash login` is not interactive. Export `FREESOLO_API_KEY` first so the key does not appear in process listings:
154
162
 
@@ -348,6 +356,12 @@ and unions on top-level function arguments are unsupported. Top-level arguments
348
356
  native parameter text, where a string such as `"12"` and a number would be ambiguous;
349
357
  nested JSON preserves those types during generation, streaming, and history replay.
350
358
 
359
+ Qualified Qwen tool-calling routes support thinking-enabled generation. Tool calls are
360
+ parsed only after the first `</think>`; tool-like text inside reasoning stays in
361
+ `reasoning_content`. A response that ends before that boundary cannot execute tools.
362
+ Streaming preserves the same separation, and saved adapters retain their configured
363
+ thinking mode. Tools still cannot be combined with logprobs or structured outputs.
364
+
351
365
  ### Workload estimates (SFT)
352
366
 
353
367
  `flash train`, `--dry-run`, and `--cost` read the pinned environment's packaged dataset
@@ -44,11 +44,19 @@ path is self-hostable end to end — see **[SELF_HOSTING.md](SELF_HOSTING.md)**.
44
44
 
45
45
  ## Using the hosted service
46
46
 
47
- The active training catalog is `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
48
- `Qwen/Qwen3.6-35B-A3B`. The hosted serving catalog routes all three models on B200.
49
- The retired dense Qwen3.6 27B identity is never translated into Qwen3.8. Customer-owned
50
- Modal supports all three active models; 27B and 35B-A3B are bound to the certified serving image
51
- digest. Customer-owned `flash serve` requires explicit `--provider modal`. Training and serving both use Modal.
47
+ The training catalog includes Qwen3.5 0.8B, 4B, 9B, and **9B Base**, Qwen3.8 27B,
48
+ and Qwen3.6 35B-A3B. `Qwen/Qwen3.5-9B` is Qwen's post-trained chat model and remains
49
+ the default. Select `model = "Qwen/Qwen3.5-9B-Base"` to fine-tune the pretrained-only
50
+ checkpoint with SFT or GRPO. It has its own weights, tokenizer revision, adapters,
51
+ and Modal cache entry; it is never mapped to the post-trained model's FP8 weights.
52
+ Its native chat template supports text, images, and tool calls, but the pretrained
53
+ weights have not been tuned for instruction following.
54
+
55
+ Hosted serving uses the [per-model GPU placements](flash/serving/app/README.md#hosted-gpu-configuration).
56
+ The 9B Base checkpoint serves in BF16 on H100 with a 262,144-token context.
57
+ Customer-owned `flash serve` requires explicit `--provider modal` and a live-qualified
58
+ profile. The retired dense Qwen3.6 27B identity is never translated into Qwen3.8.
59
+ Training and serving both use Modal.
52
60
 
53
61
  `flash login` is not interactive. Export `FREESOLO_API_KEY` first so the key does not appear in process listings:
54
62
 
@@ -248,6 +256,12 @@ and unions on top-level function arguments are unsupported. Top-level arguments
248
256
  native parameter text, where a string such as `"12"` and a number would be ambiguous;
249
257
  nested JSON preserves those types during generation, streaming, and history replay.
250
258
 
259
+ Qualified Qwen tool-calling routes support thinking-enabled generation. Tool calls are
260
+ parsed only after the first `</think>`; tool-like text inside reasoning stays in
261
+ `reasoning_content`. A response that ends before that boundary cannot execute tools.
262
+ Streaming preserves the same separation, and saved adapters retain their configured
263
+ thinking mode. Tools still cannot be combined with logprobs or structured outputs.
264
+
251
265
  ### Workload estimates (SFT)
252
266
 
253
267
  `flash train`, `--dry-run`, and `--cost` read the pinned environment's packaged dataset
@@ -0,0 +1,17 @@
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
@@ -0,0 +1,13 @@
1
+ """Chat-turn boundaries for pretrained checkpoints with document-level EOS metadata."""
2
+
3
+ from typing import Any
4
+
5
+
6
+ def chat_stop_token_ids(model: str, tokenizer: Any, *, is_chat: bool) -> list[int] | None:
7
+ """Stop Base chat at im_end without changing its tokenizer or raw completion EOS."""
8
+ if model != "Qwen/Qwen3.5-9B-Base" or not is_chat:
9
+ return None
10
+ token_id = tokenizer.convert_tokens_to_ids("<|im_end|>")
11
+ if type(token_id) is not int or token_id < 0 or token_id == tokenizer.unk_token_id:
12
+ raise ValueError("Qwen3.5 9B Base tokenizer is missing its chat end token")
13
+ return [token_id]
@@ -16,6 +16,7 @@ _ON_POLICY_ALGORITHMS = frozenset({"grpo"})
16
16
  _IMAGE_TRAINING_MODELS = frozenset(
17
17
  {
18
18
  "Qwen/Qwen3.5-9B",
19
+ "Qwen/Qwen3.5-9B-Base",
19
20
  "Qwen/Qwen3.8-27B",
20
21
  "Qwen/Qwen3.6-35B-A3B",
21
22
  }
@@ -218,6 +219,7 @@ SERVING_MODEL_REPOS: dict[str, str] = {
218
219
  "Qwen/Qwen3.5-0.8B": "Qwen/Qwen3.5-0.8B",
219
220
  "Qwen/Qwen3.5-4B": "Qwen/Qwen3.5-4B",
220
221
  "Qwen/Qwen3.5-9B": "Freesolo-Co/Qwen3.5-9B-FP8",
222
+ "Qwen/Qwen3.5-9B-Base": "Qwen/Qwen3.5-9B-Base",
221
223
  "Qwen/Qwen3.8-27B": "Qwen/Qwen3.8-27B-FP8",
222
224
  "Qwen/Qwen3.6-35B-A3B": "Qwen/Qwen3.6-35B-A3B",
223
225
  }
@@ -532,6 +534,32 @@ MODELS: dict[str, ModelInfo] = {
532
534
  }
533
535
 
534
536
 
537
+ # The pretrained checkpoint has the same architecture and native chat template as 9B,
538
+ # but distinct weights, EOS metadata, and adapter identity. Never serve it via the
539
+ # post-trained model's FP8 repository.
540
+ MODELS["Qwen/Qwen3.5-9B-Base"] = replace(
541
+ MODELS["Qwen/Qwen3.5-9B"],
542
+ id="Qwen/Qwen3.5-9B-Base",
543
+ display_name="Qwen3.5 9B Base (pretrained)",
544
+ managed_revision="68c46c4b3498877f3ef123c856ecfde50c39f404",
545
+ serving=ServingCapacity(
546
+ gpu="H100",
547
+ serve_model_id="Qwen/Qwen3.5-9B-Base",
548
+ max_loras=16,
549
+ max_cpu_loras=16,
550
+ max_lora_rank=128,
551
+ max_model_len=262144,
552
+ max_num_seqs=8,
553
+ tensor_parallel_size=1,
554
+ gpu_memory_utilization=0.90,
555
+ image_limit=MAX_IMAGES_PER_CONVERSATION,
556
+ ),
557
+ notes="Pretrained-only Qwen3.5 9B; bf16 LoRA SFT/GRPO. Uses its own weights and "
558
+ "tokenizer, not the post-trained 9B. Native chat/thinking formatting is available for "
559
+ "fine-tuning; instruction following and reasoning are not post-trained. BF16 serving on H100.",
560
+ )
561
+
562
+
535
563
  def list_models() -> list[ModelInfo]:
536
564
  return sorted(MODELS.values(), key=lambda m: (m.min_vram_gb, m.id))
537
565
 
@@ -138,6 +138,7 @@ _SFT_CHUNKED_NLL_MODELS = frozenset(
138
138
  "Qwen/Qwen3.5-0.8B",
139
139
  "Qwen/Qwen3.5-4B",
140
140
  "Qwen/Qwen3.5-9B",
141
+ "Qwen/Qwen3.5-9B-Base",
141
142
  "Qwen/Qwen3.8-27B",
142
143
  "Qwen/Qwen3.6-35B-A3B",
143
144
  }
@@ -12,6 +12,7 @@ from pathlib import Path
12
12
  from typing import Any, Protocol, TypedDict, cast
13
13
 
14
14
  from flash.content.multimodal import NormalizedImages
15
+ from flash.content.processor import inherit_tokenizer_chat_template
15
16
  from flash.content.thinking import messages_for_chat_template
16
17
  from flash.engine.plan.recipe import RECIPE
17
18
  from flash.engine.plan.steps import resolve_update_horizon, sft_update_steps
@@ -190,11 +191,11 @@ def _default_processor_loader(model_id: str, revision: str):
190
191
 
191
192
  from flash.engine.support.huggingface import model_revision_kwargs
192
193
 
193
- return AutoProcessor.from_pretrained(
194
- model_id,
195
- trust_remote_code=True,
196
- **model_revision_kwargs(revision),
194
+ processor = AutoProcessor.from_pretrained(
195
+ model_id, trust_remote_code=True, **model_revision_kwargs(revision)
197
196
  )
197
+ inherit_tokenizer_chat_template(processor)
198
+ return processor
198
199
 
199
200
 
200
201
  def _packing_mode(
@@ -22,6 +22,8 @@ import flash.engine.worker.model.decoding as _worker_decoding
22
22
  import flash.engine.worker.perf as _worker_perf
23
23
  import flash.engine.worker.train.rl.launch.config as _worker_config
24
24
  from flash.adapters.targets import LoraTargeting, resolve_lora_targeting
25
+ from flash.content.processor import inherit_tokenizer_chat_template
26
+ from flash.content.stop_tokens import chat_stop_token_ids
25
27
  from flash.content.structured_outputs import (
26
28
  describe_structured_outputs,
27
29
  parse_structured_outputs,
@@ -420,10 +422,11 @@ def _assemble_grpo_inputs(
420
422
  "max_turns": int(getattr(env, "max_turns", 0) or 0) if multi_turn else 0,
421
423
  # the child decides whether an assistant turn ended naturally or was cut off, and it has no
422
424
  # access to the model config -- so the full halting set is resolved here and handed over.
423
- # the union of the tokenizer's eos and the model's generation_config eos, because a model can
424
- # stop on a secondary id its tokenizer never exposes.
425
+ # Keep every checkpoint EOS plus any chat-turn boundary the model needs. Base checkpoints
426
+ # can use document EOS while the environment still requires one assistant turn at a time.
425
427
  "eos_token_ids": (
426
428
  generation_eos_from_cached_config(model_id, model_revision, tok)
429
+ | frozenset(chat_stop_token_ids(model_id, tok, is_chat=True) or ())
427
430
  if multi_turn
428
431
  else frozenset()
429
432
  ),
@@ -532,6 +535,7 @@ def _resolve_grpo_inputs(*, context: WorkerContext):
532
535
  processor = AutoProcessor.from_pretrained(
533
536
  model_id, trust_remote_code=True, **_worker_hf.model_revision_kwargs(model_revision)
534
537
  )
538
+ inherit_tokenizer_chat_template(processor)
535
539
  tok = processor.tokenizer
536
540
  image_pad_token_id = resolve_image_pad_token_id(processor, tok)
537
541
  else:
@@ -219,6 +219,34 @@ _PROFILES: dict[str, ServingProfile] = {
219
219
  modal_gpu_request="L40S",
220
220
  modal_live_qualified=True,
221
221
  ),
222
+ "Qwen/Qwen3.5-9B-Base": ServingProfile(
223
+ model_id="Qwen/Qwen3.5-9B-Base",
224
+ modality="multimodal",
225
+ served_model="Qwen/Qwen3.5-9B-Base",
226
+ served_model_revision="68c46c4b3498877f3ef123c856ecfde50c39f404",
227
+ tokenizer_model="Qwen/Qwen3.5-9B-Base",
228
+ dtype="bfloat16",
229
+ quantization=None,
230
+ kv_cache_dtype="fp8",
231
+ max_model_len=262144,
232
+ max_num_seqs=8,
233
+ max_num_batched_tokens=None,
234
+ max_loras=16,
235
+ max_cpu_loras=16,
236
+ max_lora_rank=128,
237
+ gpu_memory_utilization=0.90,
238
+ cpu_offload_gb=0.0,
239
+ image_limit=MAX_IMAGES_PER_CONVERSATION,
240
+ mm_processor_cache_gb=0.0,
241
+ enable_tower_connector_lora=True,
242
+ reasoning_parser="qwen3",
243
+ engine_args={"enforce_eager": False},
244
+ tokenizer_kwargs={},
245
+ processor_kwargs={},
246
+ modal_gpu="H100",
247
+ modal_gpu_request="H100!",
248
+ modal_live_qualified=True,
249
+ ),
222
250
  "Qwen/Qwen3.8-27B": ServingProfile(
223
251
  model_id="Qwen/Qwen3.8-27B",
224
252
  modality="multimodal",
@@ -57,7 +57,8 @@ class FunctionTool:
57
57
 
58
58
 
59
59
  def qualified_tool_parser(base_model: str) -> str | None:
60
- return TOOL_PARSER_QWEN3_CODER if base_model == "Qwen/Qwen3.5-9B" else None
60
+ supported = {"Qwen/Qwen3.5-9B", "Qwen/Qwen3.5-9B-Base"}
61
+ return TOOL_PARSER_QWEN3_CODER if base_model in supported else None
61
62
 
62
63
 
63
64
  def normalize_tools(
@@ -139,8 +140,6 @@ def validate_tool_request_contract(
139
140
 
140
141
  if not tools_active(tools, tool_choice):
141
142
  return
142
- if thinking:
143
- raise error_type("tools are not supported for thinking-enabled generation")
144
143
  if tool_parser != TOOL_PARSER_QWEN3_CODER:
145
144
  raise error_type("this serving engine is not qualified for tool calling")
146
145
 
@@ -255,7 +254,11 @@ def validate_tool_history_replay(
255
254
  # would accept a turn the parser rejects as ambiguous.
256
255
  try:
257
256
  _validate_template_roundtrip(
258
- probe, rendered_turn_prefix(message, message_index > last_query)
257
+ probe,
258
+ rendered_turn_prefix(message, message_index > last_query),
259
+ answer_prefix=rendered_turn_prefix(
260
+ message, message_index > last_query, answer_only=True
261
+ ),
259
262
  )
260
263
  except ValueError as exc:
261
264
  raise error_type(f"message {message_index} {exc}") from exc
@@ -592,6 +595,8 @@ def _historical_replay_type(value: Any) -> str:
592
595
  def _validate_template_roundtrip(
593
596
  probe: Sequence[tuple[FunctionTool, dict[str, Any], dict[str, Any]]],
594
597
  prefix: str = "",
598
+ *,
599
+ answer_prefix: str | None = None,
595
600
  ) -> None:
596
601
  from flash.serve.runtime.tool_calls import parse_qwen3_coder_output
597
602
 
@@ -619,6 +624,8 @@ def _validate_template_roundtrip(
619
624
  size += len(blocks[-1])
620
625
  if size > _MAX_REPLAY_TEMPLATE_CHARS:
621
626
  raise ValueError(failure)
627
+ if prefix and answer_prefix is not None:
628
+ blocks[0] = answer_prefix
622
629
  text = "".join(blocks)
623
630
  replay_tools = _merged_replay_tools(probe)
624
631
  # replay must grant exactly what a generation parse of this same text would grant. restating
@@ -1,8 +1,7 @@
1
1
  """the text the qwen tool template renders around an assistant turn's call blocks.
2
2
 
3
- replay validation has to see the same prefix the model does. the parser selects the first complete
4
- `<tool_call>` marker in the turn, so a marker anywhere ahead of the call blocks steals the parse,
5
- and a marker the template discards must not be validated as though it survived.
3
+ Replay validates the rendered answer prefix. Reasoning is counted toward the full
4
+ rendered size, but only text after its first close can contain executable tools.
6
5
  """
7
6
 
8
7
  from __future__ import annotations
@@ -55,7 +54,9 @@ def last_query_index(messages: Sequence[Mapping[str, Any]]) -> int:
55
54
  return len(messages) - 1
56
55
 
57
56
 
58
- def rendered_turn_prefix(message: Mapping[str, Any], with_reasoning: bool) -> str:
57
+ def rendered_turn_prefix(
58
+ message: Mapping[str, Any], with_reasoning: bool, *, answer_only: bool = False
59
+ ) -> str:
59
60
  """the text the template renders before this turn's call blocks."""
60
61
  # deriving the prefix from the same normalization the prompt path applies is what keeps this
61
62
  # exact. validating the raw request fields instead would reject a turn whose markers the
@@ -84,6 +85,8 @@ def rendered_turn_prefix(message: Mapping[str, Any], with_reasoning: bool) -> st
84
85
  # earlier turn's reasoning is dropped, so including it would reject a replayable turn.
85
86
  if with_reasoning and reasoning:
86
87
  prefix += f"{THINK_START}\n{reasoning}\n{THINK_END}\n\n"
88
+ if answer_only:
89
+ prefix = prefix.partition(THINK_END)[2]
87
90
  if content:
88
91
  prefix += f"{content}\n\n"
89
92
  return prefix
@@ -11,6 +11,8 @@ from contextlib import asynccontextmanager, suppress
11
11
  from dataclasses import dataclass
12
12
  from typing import Any
13
13
 
14
+ from flash.content.processor import inherit_tokenizer_chat_template
15
+ from flash.content.stop_tokens import chat_stop_token_ids
14
16
  from flash.content.structured_options import vllm_structured_kwargs
15
17
  from flash.serve.request.runtime_support import reasoning_compatibility_guard
16
18
  from flash.serve.request.tool_calls import tools_active
@@ -28,8 +30,9 @@ from .prompt import (
28
30
  effective_chat_template_kwargs,
29
31
  resolve_thinking,
30
32
  )
33
+ from .reasoning_tools import ReasoningToolStreamParser, parse_tool_output
31
34
  from .sampling import complete_indexed_outputs, indexed_outputs, normalize_token_logprobs
32
- from .tool_calls import ParsedToolCall, ToolCallStreamParser, parse_qwen3_coder_output
35
+ from .tool_calls import ParsedToolCall
33
36
  from .types import (
34
37
  AdapterSpec,
35
38
  EngineConfig,
@@ -59,7 +62,7 @@ class _StructuredState:
59
62
  class _ChoiceStreamState:
60
63
  token_ids: list[int]
61
64
  logprobs: list[dict[str, Any]]
62
- tool_parser: ToolCallStreamParser | None = None
65
+ tool_parser: ReasoningToolStreamParser | None = None
63
66
  text: str = ""
64
67
  finish_reason: str | None = None
65
68
  tool_calls: tuple[Any, ...] = ()
@@ -76,7 +79,9 @@ class _StreamState:
76
79
  cached_reported: bool = False
77
80
 
78
81
  @classmethod
79
- def create(cls, n: int, top_logprobs: int, tools: Any = None) -> _StreamState:
82
+ def create(
83
+ cls, n: int, top_logprobs: int, tools: Any = None, *, thinking: bool = False
84
+ ) -> _StreamState:
80
85
  return cls(
81
86
  n=n,
82
87
  top_logprobs=top_logprobs,
@@ -84,7 +89,9 @@ class _StreamState:
84
89
  index: _ChoiceStreamState(
85
90
  token_ids=[],
86
91
  logprobs=[],
87
- tool_parser=ToolCallStreamParser(tools) if tools is not None else None,
92
+ tool_parser=ReasoningToolStreamParser(tools, thinking=thinking)
93
+ if tools is not None
94
+ else None,
88
95
  )
89
96
  for index in range(n)
90
97
  },
@@ -157,7 +164,7 @@ class _StreamState:
157
164
 
158
165
 
159
166
  def _generation_choice(
160
- index: int, output: Any, *, top_logprobs: int, tools: Any = None
167
+ index: int, output: Any, *, top_logprobs: int, tools: Any = None, thinking: bool = False
161
168
  ) -> GenerationChoice:
162
169
  token_ids = tuple(int(value) for value in (getattr(output, "token_ids", None) or []))
163
170
  finish_reason = getattr(output, "finish_reason", None)
@@ -166,7 +173,7 @@ def _generation_choice(
166
173
  text = str(getattr(output, "text", "") or "")
167
174
  tool_calls: tuple[ParsedToolCall, ...] = ()
168
175
  if tools is not None:
169
- parsed = parse_qwen3_coder_output(text, tools)
176
+ parsed = parse_tool_output(text, tools, thinking=thinking)
170
177
  if parsed.tools_called:
171
178
  text = parsed.content or ""
172
179
  tool_calls = parsed.calls
@@ -364,6 +371,7 @@ class VllmLoraRuntime:
364
371
  output,
365
372
  top_logprobs=request.top_logprobs,
366
373
  tools=request.tools if tools_active(request.tools, request.tool_choice) else None,
374
+ thinking=bool(thinking),
367
375
  )
368
376
  for index, output in sorted(complete_indexed_outputs(final_output, n=request.n).items())
369
377
  )
@@ -416,6 +424,7 @@ class VllmLoraRuntime:
416
424
  request.n,
417
425
  request.top_logprobs,
418
426
  request.tools if tools_active(request.tools, request.tool_choice) else None,
427
+ thinking=bool(thinking),
419
428
  )
420
429
  output = first_output
421
430
  while True:
@@ -504,6 +513,7 @@ class VllmLoraRuntime:
504
513
  **common,
505
514
  **thaw_mapping(self.config.processor_kwargs, "processor_kwargs"),
506
515
  )
516
+ inherit_tokenizer_chat_template(processor)
507
517
  tokenizer = getattr(processor, "tokenizer", None)
508
518
  if tokenizer is None:
509
519
  raise RuntimeNotReadyError("multimodal processor has no tokenizer")
@@ -580,8 +590,6 @@ class VllmLoraRuntime:
580
590
  def _validate_tools(self, request: GenerationRequest, thinking: bool | None) -> None:
581
591
  if not tools_active(request.tools, request.tool_choice):
582
592
  return
583
- if thinking:
584
- raise PromptError("tools are not supported for thinking-enabled generation")
585
593
  if self.config.tool_parser != "qwen3_coder":
586
594
  raise PromptError("this serving engine is not qualified for tool calling")
587
595
 
@@ -631,8 +639,8 @@ class VllmLoraRuntime:
631
639
  parser_kwargs=parser_kwargs,
632
640
  )
633
641
 
634
- @staticmethod
635
642
  def _sampling_params(
643
+ self,
636
644
  request: GenerationRequest,
637
645
  structured: _StructuredState,
638
646
  *,
@@ -655,6 +663,9 @@ class VllmLoraRuntime:
655
663
  structured_outputs=structured.params,
656
664
  # pass none rather than an empty list so vllm keeps its own default.
657
665
  stop=list(request.stop) or None,
666
+ stop_token_ids=chat_stop_token_ids(
667
+ self.config.model, self._tokenizer, is_chat=request.messages is not None
668
+ ),
658
669
  )
659
670
 
660
671
  async def _prepare_prompt(
@@ -0,0 +1,60 @@
1
+ """Parse executable tools only after the first reasoning close, preserving raw text."""
2
+
3
+ from collections.abc import Callable, Sequence
4
+
5
+ from flash.serve.request.tool_calls import FunctionTool
6
+ from flash.serve.request.tool_template import THINK_END
7
+
8
+ from .tool_calls import ToolCallStreamParser, ToolParseResult, parse_qwen3_coder_output
9
+
10
+
11
+ def parse_tool_output(
12
+ text: str,
13
+ tools: Sequence[FunctionTool],
14
+ *,
15
+ thinking: bool = False,
16
+ id_factory: Callable[[], str] | None = None,
17
+ ) -> ToolParseResult:
18
+ prefix = ""
19
+ if thinking:
20
+ reasoning, close, answer = text.partition(THINK_END)
21
+ if not close:
22
+ return ToolParseResult(content=text, calls=())
23
+ prefix, text = reasoning + close, answer
24
+ result = parse_qwen3_coder_output(text, tools, id_factory=id_factory)
25
+ return ToolParseResult(content=(prefix + (result.content or "")) or None, calls=result.calls)
26
+
27
+
28
+ class ReasoningToolStreamParser:
29
+ """Forward reasoning untouched; give only answer deltas to the strict tool parser."""
30
+
31
+ def __init__(
32
+ self,
33
+ tools: Sequence[FunctionTool],
34
+ *,
35
+ thinking: bool = False,
36
+ id_factory: Callable[[], str] | None = None,
37
+ ) -> None:
38
+ self._closed = not thinking
39
+ self._tail = ""
40
+ self._tools = ToolCallStreamParser(tools, id_factory=id_factory)
41
+
42
+ def feed(self, text: str) -> str:
43
+ if self._closed:
44
+ return self._tools.feed(text)
45
+ pending = self._tail + text
46
+ reasoning, close, answer = pending.partition(THINK_END)
47
+ if close:
48
+ self._tail = ""
49
+ self._closed = True
50
+ return reasoning + close + self._tools.feed(answer)
51
+ # Retain only enough text to recognize a close split across deltas.
52
+ retain = len(THINK_END) - 1
53
+ self._tail = pending[-retain:]
54
+ return pending[:-retain]
55
+
56
+ def finish(self) -> ToolParseResult:
57
+ if self._closed:
58
+ return self._tools.finish()
59
+ tail, self._tail = self._tail, ""
60
+ return ToolParseResult(content=tail or None, calls=())
@@ -1,5 +1,50 @@
1
1
  # Hosted GPU qualification
2
2
 
3
+ ## Pretrained Qwen 9B Base, 2026-11-01
4
+
5
+ `Qwen/Qwen3.5-9B-Base` is a separate pretrained checkpoint, pinned to
6
+ `68c46c4b3498877f3ef123c856ecfde50c39f404`. It uses its own BF16 weights and
7
+ tokenizer, including its EOS metadata. It is never redirected to the post-trained
8
+ 9B FP8 repository. Hosted and customer-owned profiles select H100, 262,144 total
9
+ context tokens, FP8 KV, 16 hot/CPU LoRA slots at maximum rank 128, eight sequences,
10
+ and CUDA graphs.
11
+
12
+ A two-step H100 SFT run (`flash-modal-sft-smoke-2a2996da6a0a`) passed adapter
13
+ publication, artifact recovery, and checkpoint resume. The rank-8 adapter records
14
+ the Base identity and pinned revision; all 496 tensors are finite and all 248 LoRA
15
+ B matrices are nonzero. The Modal training weight cache was warmed at the same pin.
16
+ This checks training execution and recovery, not learning quality or GRPO quality.
17
+
18
+ The [hosted engine qualification](https://modal.com/apps/freesolo/main/ap-bOjg4Q2AbsWHvD6KWvFXEF)
19
+ loaded 31.41 GiB of weights and LoRA buffers and passed:
20
+
21
+ - Eight concurrent short base requests.
22
+ - A 262,112-token prompt with 32 output tokens reserved (17.8 seconds).
23
+ - All 16 synthetic zero-valued rank-128 attention adapters loaded, with eight
24
+ distinct near-limit prompts submitted concurrently (25.5–192.5 seconds).
25
+ - Image generation and rejection of a 262,145-token input.
26
+
27
+ The [customer-owned runtime qualification](https://modal.com/apps/freesolo/main/ap-wWJ3AS4Y2Iggvy470MWK4h)
28
+ used the profile-derived `VllmLoraRuntime` on Modal H100 with the hosted image and
29
+ real rank-8 SFT adapter. It passed base generation, eight concurrent adapted
30
+ requests, an image request, and a parsed tool call with `finish_reason=tool_calls`.
31
+ This qualifies the runtime shape; it is not an OCI digest certification or a full
32
+ provider provisioning/lifecycle test.
33
+
34
+ Live tests exposed two checkpoint metadata differences. AutoProcessor did not
35
+ inherit the template embedded in the Base tokenizer config, so image rendering
36
+ failed. Loaders now inherit that same checkpoint's template only if the processor
37
+ has none. Base also uses document EOS rather than chat-turn EOS: without an
38
+ explicit assistant-turn stop, it continued past a tool call into an invented tool
39
+ response. Buffered and streaming chat now stop at the checkpoint's `im_end` token,
40
+ while raw completions and tokenizer EOS metadata remain unchanged. The final live
41
+ canary verifies a single parsed tool call without a synthetic tool response.
42
+
43
+ These are execution and capacity checks with short outputs. They do not establish
44
+ instruction following, tool-use accuracy, long-context quality, or sustained
45
+ throughput. Queued near-limit requests do not imply eight full contexts fit in KV
46
+ memory simultaneously. No shared production serving app was deployed.
47
+
3
48
  ## Native Qwen context, 2026-10-31
4
49
 
5
50
  All five hosted Qwen models now use their native **262,144-token total context**,
@@ -274,10 +274,11 @@ selection and customer-owned serving profiles are separate.
274
274
  | Qwen3.5-0.8B | official bf16 | L4 | 4 × 64 | 262144 |
275
275
  | Qwen3.5-4B | official bf16 | L40S | 4 × 64 | 262144 |
276
276
  | Qwen3.5-9B | owned FP8 (`Freesolo-Co/*-FP8`) | L40S | 16 × 128 | 262144 |
277
+ | Qwen3.5-9B-Base | official pretrained BF16 | H100 | 16 × 128 | 262144 |
277
278
  | Qwen3.8-27B | official native FP8 (`Qwen/Qwen3.8-27B-FP8`) | H100 | 16 × 64 | 262144 |
278
279
  | Qwen3.6-35B-A3B (MoE, VL) | official bf16 | H200 | 6 × 64 | 262144 |
279
280
 
280
- The context budget includes prompt and generated output. All five Qwen checkpoints use
281
+ The context budget includes prompt and generated output. All six Qwen checkpoints use
281
282
  their native 262,144-token window without RoPE scaling. Eight admitted sequences share
282
283
  GPU KV memory; long requests can queue or be preempted as that memory fills.
283
284
 
@@ -36,6 +36,8 @@ _FREESOLO_USD_PER_MTOK: dict[str, tuple[str, str, str]] = {
36
36
  "Qwen/Qwen3.5-4B": ("0.036", "0.18", "0.0072"),
37
37
  "deepseek-ai/DeepSeek-V4.1-Flash-1017": ("0.15", "0.60", "0.003"),
38
38
  "Qwen/Qwen3.5-9B": ("0.095", "0.1425", "0.0276"),
39
+ # Pretrained 9B uses the same customer token rates as post-trained 9B.
40
+ "Qwen/Qwen3.5-9B-Base": ("0.095", "0.1425", "0.0276"),
39
41
  "Qwen/Qwen3.8-27B": ("0.3325", "2.4225", "0.03325"),
40
42
  "Qwen/Qwen3.6-35B-A3B": ("0.095", "0.9025", "0.0475"),
41
43
  }
@@ -11,6 +11,7 @@ the card they were found on.
11
11
 
12
12
  from typing import Any
13
13
 
14
+ from flash.content.processor import inherit_tokenizer_chat_template
14
15
  from flash.serving.src.engine.model_config import (
15
16
  engine_overrides_for,
16
17
  image_limit_for,
@@ -49,6 +50,7 @@ def load_tokenizer(
49
50
  token=settings.hf_api_key,
50
51
  trust_remote_code=cfg.TRUST_REMOTE_CODE,
51
52
  )
53
+ inherit_tokenizer_chat_template(processor)
52
54
  tokenizer = getattr(processor, "tokenizer", None)
53
55
  if tokenizer is None:
54
56
  raise RuntimeError("image-capable model processor has no tokenizer")