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