freesolo-flash-dev 1.2.127__tar.gz → 1.2.129__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 (927) hide show
  1. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.env.example +3 -0
  2. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/deploy-modal.yml +146 -8
  3. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/CHANGELOG.md +15 -0
  4. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/PKG-INFO +1 -1
  5. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/SELF_HOSTING.md +6 -0
  6. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docs/serving-contract.md +52 -0
  7. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/imports.py +16 -3
  8. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/push.py +62 -12
  9. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/scaffold/TRAINING.md +4 -2
  10. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/heartbeat.py +1 -1
  11. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/http.py +25 -0
  12. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/core/spec.py +0 -12
  13. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/spec.py +1 -1
  14. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/entry/worker.py +11 -2
  15. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/score_batcher.py +47 -24
  16. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/batching.py +3 -3
  17. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/bridge.py +21 -7
  18. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +44 -8
  19. freesolo_flash_dev-1.2.129/flash/providers/_lifecycle/bootstrapping/processes.py +110 -0
  20. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/instance.py +19 -24
  21. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/provider.py +7 -18
  22. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/net/worker.py +4 -4
  23. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/artifacts/weight_cache.py +0 -1
  24. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/base.py +7 -7
  25. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/preflight.py +7 -0
  26. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/execution/provider.py +3 -7
  27. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/jobs/__init__.py +9 -19
  28. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/jobs/builders.py +0 -2
  29. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/jobs/reap.py +2 -2
  30. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/job_execution.py +14 -11
  31. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/provider.py +6 -11
  32. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/resources.py +16 -3
  33. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/serverless/endpoints.py +8 -50
  34. freesolo_flash_dev-1.2.129/flash/providers/runpod/serverless/naming.py +93 -0
  35. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/client/api.py +6 -6
  36. freesolo_flash_dev-1.2.129/flash/providers/vast/client/result.py +125 -0
  37. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/execution/provider.py +4 -8
  38. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/jobs/__init__.py +7 -13
  39. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/jobs/builders.py +0 -2
  40. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/status.py +11 -3
  41. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/attach.py +4 -8
  42. freesolo_flash_dev-1.2.127/flash/runner/supervise/seed_submission.py → freesolo_flash_dev-1.2.129/flash/runner/supervise/attempt_supervision.py +12 -18
  43. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/lifecycle.py +29 -13
  44. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/recovery.py +1 -1
  45. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runtime_capsule/profiles.py +2 -1
  46. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/bootstrap.py +2 -0
  47. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/chat_stream.py +15 -0
  48. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/http.py +15 -2
  49. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/openai.py +19 -2
  50. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/progress.py +7 -1
  51. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/protocol.py +5 -0
  52. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/deploy.py +19 -0
  53. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/profiles.py +1 -1
  54. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/openai.py +91 -4
  55. freesolo_flash_dev-1.2.129/flash/serve/request/text_scan.py +100 -0
  56. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/thinking.py +1 -1
  57. freesolo_flash_dev-1.2.129/flash/serve/request/tool_calls.py +999 -0
  58. freesolo_flash_dev-1.2.129/flash/serve/request/tool_template.py +92 -0
  59. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/transport.py +27 -0
  60. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/validation.py +96 -16
  61. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/engine.py +91 -24
  62. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/prompt.py +13 -1
  63. freesolo_flash_dev-1.2.129/flash/serve/runtime/tool_calls.py +687 -0
  64. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/types.py +96 -3
  65. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/asgi/app.py +25 -24
  66. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/envs.py +153 -67
  67. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/runtime.py +6 -5
  68. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/serving.py +23 -21
  69. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/serving_chat.py +29 -0
  70. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/app/README.md +39 -0
  71. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/app/modal_app.py +38 -14
  72. freesolo_flash_dev-1.2.129/flash/serving/promotion/__init__.py +10 -0
  73. freesolo_flash_dev-1.2.129/flash/serving/promotion/canary.py +194 -0
  74. freesolo_flash_dev-1.2.129/flash/serving/promotion/evidence.py +261 -0
  75. freesolo_flash_dev-1.2.129/flash/serving/promotion/gate.py +329 -0
  76. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/accounting/usage_facts.py +28 -0
  77. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/accounting/usage_outbox.py +19 -0
  78. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/generation.py +238 -37
  79. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/lora_engine.py +89 -19
  80. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/model_config.py +8 -0
  81. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/support.py +3 -0
  82. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/inference_routes.py +8 -0
  83. freesolo_flash_dev-1.2.129/flash/serving/src/io/openai_request.py +119 -0
  84. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/openai_stream.py +11 -2
  85. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/responses.py +14 -1
  86. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/pyproject.toml +2 -2
  87. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/runner.py +1 -1
  88. freesolo_flash_dev-1.2.129/tests/serving/test_mirror_sampling_parity.py +925 -0
  89. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_model_config.py +6 -0
  90. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_multimodal.py +15 -2
  91. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_per_model_gpu.py +16 -16
  92. freesolo_flash_dev-1.2.129/tests/serving/test_promotion_canary.py +243 -0
  93. freesolo_flash_dev-1.2.129/tests/serving/test_promotion_evidence.py +276 -0
  94. freesolo_flash_dev-1.2.129/tests/serving/test_promotion_gate.py +361 -0
  95. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_router.py +54 -1
  96. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_serve_structured_outputs.py +82 -1
  97. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_usage_outbox.py +49 -0
  98. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_usage_reporter.py +67 -4
  99. freesolo_flash_dev-1.2.129/tests/test_bootstrap_process_groups.py +146 -0
  100. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cancel_remote.py +66 -23
  101. freesolo_flash_dev-1.2.129/tests/test_chat_foundations.py +1022 -0
  102. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_serve_deploy.py +5 -1
  103. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_client.py +46 -0
  104. freesolo_flash_dev-1.2.129/tests/test_endpoint_name.py +142 -0
  105. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_download.py +1 -1
  106. freesolo_flash_dev-1.2.129/tests/test_env_git_auth.py +319 -0
  107. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_publish.py +7 -7
  108. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_push.py +270 -5
  109. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_ref_pinning.py +2 -3
  110. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_flash_worker.py +19 -24
  111. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_gpus.py +1 -1
  112. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_resident_sizing.py +1 -1
  113. freesolo_flash_dev-1.2.129/tests/test_grpo_reward_batching.py +719 -0
  114. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_rollout_contract.py +2 -2
  115. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_idle_endpoint_reaper.py +65 -22
  116. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_instance_bootstrap_coverage.py +204 -4
  117. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_jobs.py +51 -63
  118. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lambda_runner.py +105 -130
  119. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_mirror_sampling_parity.py +311 -0
  120. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_multi_gpu_gate.py +4 -8
  121. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_resume_safety.py +11 -12
  122. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_train.py +212 -16
  123. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_orchestrator_flash.py +4 -4
  124. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_preflight.py +39 -1
  125. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_provider_routing.py +68 -79
  126. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_provider_teardown_robustness.py +4 -4
  127. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_providers_symmetry.py +2 -2
  128. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_resume_on_retry.py +36 -36
  129. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_runmgmt.py +153 -53
  130. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_bootstrap_http.py +209 -5
  131. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_progress.py +1 -0
  132. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_chat_transport.py +86 -8
  133. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_reasoning_content.py +9 -0
  134. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_runtime_engine.py +326 -1
  135. freesolo_flash_dev-1.2.129/tests/test_serve_runtime_types.py +1527 -0
  136. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_api.py +127 -40
  137. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_envs_coverage.py +3 -3
  138. freesolo_flash_dev-1.2.129/tests/test_server_managed_chat_requests.py +261 -0
  139. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_standalone.py +2 -1
  140. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serving_contract.py +89 -0
  141. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_staged_environment.py +6 -2
  142. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_teacher_broker.py +4 -7
  143. freesolo_flash_dev-1.2.129/tests/test_tool_call_exact_parsing.py +5021 -0
  144. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_training_controls.py +11 -9
  145. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vast_api_coverage.py +60 -48
  146. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vast_offers.py +3 -3
  147. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vast_provider_coverage.py +1 -1
  148. freesolo_flash_dev-1.2.129/tests/test_vast_result.py +251 -0
  149. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vast_runner.py +115 -135
  150. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_warmstart_cross_repo.py +1 -1
  151. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_weight_cache.py +16 -25
  152. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_hardexit.py +153 -0
  153. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_stack.py +25 -0
  154. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_workflow_contracts.py +301 -0
  155. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/uv.lock +1 -1
  156. freesolo_flash_dev-1.2.127/flash/serving/src/io/openai_request.py +0 -63
  157. freesolo_flash_dev-1.2.127/tests/serving/test_mirror_sampling_parity.py +0 -405
  158. freesolo_flash_dev-1.2.127/tests/test_chat_foundations.py +0 -379
  159. freesolo_flash_dev-1.2.127/tests/test_endpoint_name.py +0 -45
  160. freesolo_flash_dev-1.2.127/tests/test_grpo_reward_batching.py +0 -334
  161. freesolo_flash_dev-1.2.127/tests/test_serve_runtime_types.py +0 -583
  162. freesolo_flash_dev-1.2.127/tests/test_server_managed_chat_requests.py +0 -91
  163. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.dockerignore +0 -0
  164. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/CODEOWNERS +0 -0
  165. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  166. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  167. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  168. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  169. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/dependabot.yml +0 -0
  170. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/auto-rebake.yml +0 -0
  171. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/bake-kernel-cache.yml +0 -0
  172. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/ci.yml +0 -0
  173. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/deploy-modal-dev.yml +0 -0
  174. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/dev-kernel-cache.yml +0 -0
  175. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/main-source-guard.yml +0 -0
  176. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/notify-tests-repo.yml +0 -0
  177. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/production-kernel-cache-ready.yml +0 -0
  178. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/publish-dev.yml +0 -0
  179. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/publish-image.yml +0 -0
  180. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/publish-serving-image.yml +0 -0
  181. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/publish.yml +0 -0
  182. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/version-parity.yml +0 -0
  183. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/worker-image.yml +0 -0
  184. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.gitignore +0 -0
  185. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/CODE_OF_CONDUCT.md +0 -0
  186. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/CONTRIBUTING.md +0 -0
  187. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/Dockerfile +0 -0
  188. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/Dockerfile.serve +0 -0
  189. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/Dockerfile.worker +0 -0
  190. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/LICENSE +0 -0
  191. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/NOTICE +0 -0
  192. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/README.md +0 -0
  193. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/SECURITY.md +0 -0
  194. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/build/kernel_cache/.gitignore +0 -0
  195. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/build/kernel_cache/.keep +0 -0
  196. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/deploy/infisical/README.md +0 -0
  197. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/deploy/infisical/entrypoint.sh +0 -0
  198. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/Dockerfile.kernelcache +0 -0
  199. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/Dockerfile.kernelcache.relayer +0 -0
  200. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/bake_kernel_cache.py +0 -0
  201. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/bake_pod_entry.py +0 -0
  202. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/extract_cudart_fix.py +0 -0
  203. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/kernel_fingerprint.py +0 -0
  204. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/make_rp_handler.py +0 -0
  205. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/patch_vllm_moe_lora.py +0 -0
  206. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docs/hosted-inference-load-testing.md +0 -0
  207. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/__init__.py +0 -0
  208. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/__init__.py +0 -0
  209. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/channel.py +0 -0
  210. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/diagnostics.py +0 -0
  211. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/fileio.py +0 -0
  212. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/http.py +0 -0
  213. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/logging.py +0 -0
  214. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/openai_sse.py +0 -0
  215. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/paths.py +0 -0
  216. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/version.py +0 -0
  217. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/adapters/__init__.py +0 -0
  218. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/adapters/artifacts.py +0 -0
  219. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/adapters/fused_experts.py +0 -0
  220. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/adapters/lora_rank.py +0 -0
  221. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/adapters/targets.py +0 -0
  222. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/__init__.py +0 -0
  223. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/__main__.py +0 -0
  224. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/__init__.py +0 -0
  225. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/__init__.py +0 -0
  226. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/__init__.py +0 -0
  227. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/list.py +0 -0
  228. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/retained.py +0 -0
  229. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/setup.py +0 -0
  230. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
  231. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/__init__.py +0 -0
  232. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/episode.py +0 -0
  233. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/eval.py +0 -0
  234. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/eval_args.py +0 -0
  235. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/evaluations.py +0 -0
  236. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/params.py +0 -0
  237. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/test.py +0 -0
  238. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/warnings.py +0 -0
  239. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/__init__.py +0 -0
  240. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/account.py +0 -0
  241. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/catalog.py +0 -0
  242. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/deploy.py +0 -0
  243. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/log_follow.py +0 -0
  244. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/prompt_budget.py +0 -0
  245. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/runs.py +0 -0
  246. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/traces.py +0 -0
  247. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/train.py +0 -0
  248. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/worker_output.py +0 -0
  249. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/serving/__init__.py +0 -0
  250. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/serving/deploy.py +0 -0
  251. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/serving/identity.py +0 -0
  252. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/serving/status.py +0 -0
  253. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/serving/undeploy.py +0 -0
  254. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/__init__.py +0 -0
  255. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/account.py +0 -0
  256. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/env.py +0 -0
  257. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/errors.py +0 -0
  258. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/main.py +0 -0
  259. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/models.py +0 -0
  260. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/serve_parser.py +0 -0
  261. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/traces.py +0 -0
  262. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/training.py +0 -0
  263. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/scaffold/__init__.py +0 -0
  264. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/__init__.py +0 -0
  265. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/cost.py +0 -0
  266. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/env_panels.py +0 -0
  267. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/render.py +0 -0
  268. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/tables.py +0 -0
  269. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/tty.py +0 -0
  270. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/__init__.py +0 -0
  271. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/config.py +0 -0
  272. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/freesolo_api.py +0 -0
  273. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/runtime_secrets.py +0 -0
  274. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/shapes.py +0 -0
  275. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/specs.py +0 -0
  276. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/streaming.py +0 -0
  277. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/__init__.py +0 -0
  278. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/image_descriptors.py +0 -0
  279. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/multimodal.py +0 -0
  280. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/reasoning_normalization.py +0 -0
  281. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/structured_outputs.py +0 -0
  282. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/thinking.py +0 -0
  283. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/core/__init__.py +0 -0
  284. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/core/catalog.py +0 -0
  285. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/core/grpo.py +0 -0
  286. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/core/spec_persistence.py +0 -0
  287. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/__init__.py +0 -0
  288. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/analytical.py +0 -0
  289. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/currency.py +0 -0
  290. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/facts.py +0 -0
  291. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/types.py +0 -0
  292. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/__init__.py +0 -0
  293. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/__init__.py +0 -0
  294. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/kv_sizing.py +0 -0
  295. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/model_config_probe.py +0 -0
  296. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/prompt_budget.py +0 -0
  297. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/recipe.py +0 -0
  298. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/steps.py +0 -0
  299. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/vram.py +0 -0
  300. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/__init__.py +0 -0
  301. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/dataset_profile.py +0 -0
  302. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/image_tokens.py +0 -0
  303. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/reasoning_render.py +0 -0
  304. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/sft_image_rows.py +0 -0
  305. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/sft_workload.py +0 -0
  306. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/tokenizer.py +0 -0
  307. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/workload_profile.py +0 -0
  308. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/result/__init__.py +0 -0
  309. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/result/accounting.py +0 -0
  310. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/result/rollout_samples.py +0 -0
  311. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/support/__init__.py +0 -0
  312. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/support/huggingface.py +0 -0
  313. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/support/verl_checkpoint.py +0 -0
  314. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/support/verl_policy.py +0 -0
  315. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/support/worker_entrypoint.py +0 -0
  316. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/__init__.py +0 -0
  317. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/__main__.py +0 -0
  318. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/entry/__init__.py +0 -0
  319. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/entry/opd.py +0 -0
  320. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/entry/rl.py +0 -0
  321. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/entry/sft.py +0 -0
  322. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/io/__init__.py +0 -0
  323. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/io/heartbeat.py +0 -0
  324. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/io/hf.py +0 -0
  325. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/io/prefetch.py +0 -0
  326. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/io/wandb_log.py +0 -0
  327. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/__init__.py +0 -0
  328. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/adapter.py +0 -0
  329. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/chatml_mask.py +0 -0
  330. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/decoding.py +0 -0
  331. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/lora.py +0 -0
  332. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/packing.py +0 -0
  333. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/perf/__init__.py +0 -0
  334. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/perf/diagnostics.py +0 -0
  335. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/perf/lifecycle.py +0 -0
  336. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/perf/liger.py +0 -0
  337. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/perf/memory.py +0 -0
  338. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/runtime/__init__.py +0 -0
  339. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
  340. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/runtime/rng.py +0 -0
  341. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/runtime/state.py +0 -0
  342. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/teacher/__init__.py +0 -0
  343. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/teacher/client.py +0 -0
  344. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/teacher/encoding.py +0 -0
  345. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
  346. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/__init__.py +0 -0
  347. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/__init__.py +0 -0
  348. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/child/__init__.py +0 -0
  349. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/child/glue.py +0 -0
  350. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/child/runtime.py +0 -0
  351. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
  352. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
  353. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
  354. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
  355. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/__init__.py +0 -0
  356. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/backend_common.py +0 -0
  357. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/opd_train.py +0 -0
  358. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/opd_train_runner.py +0 -0
  359. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
  360. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/rl_train.py +0 -0
  361. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
  362. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/sft_train.py +0 -0
  363. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
  364. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/__init__.py +0 -0
  365. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
  366. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
  367. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
  368. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
  369. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/__init__.py +0 -0
  370. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/bridge.py +0 -0
  371. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/entry.py +0 -0
  372. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
  373. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/plugin.py +0 -0
  374. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
  375. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/runtime.py +0 -0
  376. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/structured.py +0 -0
  377. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/tensors.py +0 -0
  378. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
  379. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
  380. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
  381. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
  382. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
  383. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
  384. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
  385. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
  386. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
  387. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
  388. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
  389. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
  390. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
  391. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/__init__.py +0 -0
  392. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/child/__init__.py +0 -0
  393. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/child/entry.py +0 -0
  394. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
  395. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/child/patches.py +0 -0
  396. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/child/plugin.py +0 -0
  397. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
  398. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
  399. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/launch/config.py +0 -0
  400. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
  401. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
  402. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
  403. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
  404. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
  405. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
  406. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
  407. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
  408. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/__init__.py +0 -0
  409. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/child/entry.py +0 -0
  410. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/child/plugin.py +0 -0
  411. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
  412. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
  413. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/setup/config.py +0 -0
  414. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/__init__.py +0 -0
  415. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/capabilities.py +0 -0
  416. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/checkpoints.py +0 -0
  417. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/child_io.py +0 -0
  418. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/diagnostics.py +0 -0
  419. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/parallelism.py +0 -0
  420. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/parent_work.py +0 -0
  421. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/process_census.py +0 -0
  422. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/__init__.py +0 -0
  423. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/__init__.py +0 -0
  424. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/adapter.py +0 -0
  425. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/base.py +0 -0
  426. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/loader.py +0 -0
  427. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/pull.py +0 -0
  428. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/staged.py +0 -0
  429. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/__init__.py +0 -0
  430. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/cache_security.py +0 -0
  431. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/dataset_selection.py +0 -0
  432. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/evaluations.py +0 -0
  433. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/identity.py +0 -0
  434. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/namespace_listing.py +0 -0
  435. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/package/__init__.py +0 -0
  436. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/package/direct_tokens.py +0 -0
  437. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/package/limits.py +0 -0
  438. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/package/unpack.py +0 -0
  439. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/__init__.py +0 -0
  440. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/__init__.py +0 -0
  441. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
  442. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
  443. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
  444. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
  445. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/host/__init__.py +0 -0
  446. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
  447. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/host/failmark.py +0 -0
  448. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/host/hostlog.py +0 -0
  449. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/__init__.py +0 -0
  450. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/poll.py +0 -0
  451. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
  452. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
  453. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/net/__init__.py +0 -0
  454. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/net/auth.py +0 -0
  455. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/net/deadline.py +0 -0
  456. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/net/http.py +0 -0
  457. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/artifacts/__init__.py +0 -0
  458. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/artifacts/hf.py +0 -0
  459. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/artifacts/preload_runpod.py +0 -0
  460. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/__init__.py +0 -0
  461. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/allocator.py +0 -0
  462. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/fit_errors.py +0 -0
  463. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/realized.py +0 -0
  464. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/registry.py +0 -0
  465. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/sharding.py +0 -0
  466. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/__init__.py +0 -0
  467. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/__init__.py +0 -0
  468. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/api.py +0 -0
  469. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/auth.py +0 -0
  470. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/gpus.py +0 -0
  471. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/preflight.py +0 -0
  472. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/pricing.py +0 -0
  473. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/execution/__init__.py +0 -0
  474. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/__init__.py +0 -0
  475. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/__init__.py +0 -0
  476. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/api.py +0 -0
  477. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/auth.py +0 -0
  478. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/cost.py +0 -0
  479. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/gpus.py +0 -0
  480. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/preflight.py +0 -0
  481. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/pricing.py +0 -0
  482. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/__init__.py +0 -0
  483. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/jobs.py +0 -0
  484. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/polling.py +0 -0
  485. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/serverless/__init__.py +0 -0
  486. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/__init__.py +0 -0
  487. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/client/__init__.py +0 -0
  488. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/client/auth.py +0 -0
  489. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/client/preflight.py +0 -0
  490. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/client/pricing.py +0 -0
  491. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/execution/__init__.py +0 -0
  492. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/py.typed +0 -0
  493. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/__init__.py +0 -0
  494. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/accounting/__init__.py +0 -0
  495. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/accounting/artifacts.py +0 -0
  496. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/accounting/costs.py +0 -0
  497. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/accounting/reconciliation.py +0 -0
  498. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/accounting/weight_cache.py +0 -0
  499. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/__init__.py +0 -0
  500. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/attempts.py +0 -0
  501. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/claim_lock.py +0 -0
  502. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/deadlines.py +0 -0
  503. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/preparation.py +0 -0
  504. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/reporting.py +0 -0
  505. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/state.py +0 -0
  506. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/submit.py +0 -0
  507. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/results/__init__.py +0 -0
  508. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/results/checkpoints.py +0 -0
  509. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/results/verified_revisions.py +0 -0
  510. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/__init__.py +0 -0
  511. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/attach_reconcile.py +0 -0
  512. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/deploy.py +0 -0
  513. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/errors.py +0 -0
  514. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/retry_decision.py +0 -0
  515. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/transitions.py +0 -0
  516. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runtime_capsule/__init__.py +0 -0
  517. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runtime_capsule/build.py +0 -0
  518. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runtime_capsule/manifest.py +0 -0
  519. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/schema/__init__.py +0 -0
  520. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/schema/fields.py +0 -0
  521. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/__init__.py +0 -0
  522. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/__init__.py +0 -0
  523. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/__main__.py +0 -0
  524. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/launch.py +0 -0
  525. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/manifest.py +0 -0
  526. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/materialize.py +0 -0
  527. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/__init__.py +0 -0
  528. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/errors.py +0 -0
  529. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/provenance.py +0 -0
  530. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/responses.py +0 -0
  531. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/urls.py +0 -0
  532. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/__init__.py +0 -0
  533. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/_canonical.py +0 -0
  534. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/_serialization.py +0 -0
  535. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/_urls.py +0 -0
  536. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/credentials.py +0 -0
  537. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/planning.py +0 -0
  538. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/types.py +0 -0
  539. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/__init__.py +0 -0
  540. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/adapter_check.py +0 -0
  541. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/export.py +0 -0
  542. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/preflight.py +0 -0
  543. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/readiness.py +0 -0
  544. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/resolve.py +0 -0
  545. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/__init__.py +0 -0
  546. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/common/__init__.py +0 -0
  547. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/common/records.py +0 -0
  548. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/__init__.py +0 -0
  549. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
  550. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
  551. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
  552. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/execution/operations.py +0 -0
  553. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
  554. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
  555. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/planning/plan.py +0 -0
  556. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/planning/resources.py +0 -0
  557. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
  558. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
  559. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
  560. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
  561. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
  562. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/__init__.py +0 -0
  563. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/runtime_support.py +0 -0
  564. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/streaming.py +0 -0
  565. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/__init__.py +0 -0
  566. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/adapters.py +0 -0
  567. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/errors.py +0 -0
  568. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/multimodal.py +0 -0
  569. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/sampling.py +0 -0
  570. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/structured_outputs.py +0 -0
  571. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/__init__.py +0 -0
  572. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/__main__.py +0 -0
  573. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/asgi/__init__.py +0 -0
  574. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/asgi/cli.py +0 -0
  575. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/billing/__init__.py +0 -0
  576. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/billing/charges.py +0 -0
  577. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/billing/retry.py +0 -0
  578. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/__init__.py +0 -0
  579. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/ops/__init__.py +0 -0
  580. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/ops/reconcile.py +0 -0
  581. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/ops/repo_cleanup.py +0 -0
  582. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/ops/serving_resources.py +0 -0
  583. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/__init__.py +0 -0
  584. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/checkpoints.py +0 -0
  585. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/environment_registry.py +0 -0
  586. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/projects.py +0 -0
  587. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/runs.py +0 -0
  588. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/teacher/__init__.py +0 -0
  589. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/teacher/broker.py +0 -0
  590. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/teacher/errors.py +0 -0
  591. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/teacher/requests.py +0 -0
  592. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/__init__.py +0 -0
  593. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/auth.py +0 -0
  594. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/db.py +0 -0
  595. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/deps.py +0 -0
  596. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/internal_client.py +0 -0
  597. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/locks.py +0 -0
  598. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/__init__.py +0 -0
  599. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/envs.py +0 -0
  600. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/meta.py +0 -0
  601. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/runs.py +0 -0
  602. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/serving_completion.py +0 -0
  603. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/serving_revisions.py +0 -0
  604. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/serving_smoke.py +0 -0
  605. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/teacher.py +0 -0
  606. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/__init__.py +0 -0
  607. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/app/__init__.py +0 -0
  608. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/__init__.py +0 -0
  609. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/__main__.py +0 -0
  610. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/artifacts.py +0 -0
  611. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/cli.py +0 -0
  612. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/metrics.py +0 -0
  613. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/protocol.py +0 -0
  614. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/runner.py +0 -0
  615. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/schedule.py +0 -0
  616. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/schema.py +0 -0
  617. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/__init__.py +0 -0
  618. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/accounting/__init__.py +0 -0
  619. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/accounting/usage.py +0 -0
  620. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/__init__.py +0 -0
  621. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/boot.py +0 -0
  622. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/errors.py +0 -0
  623. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/lora_entries.py +0 -0
  624. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/prequant_config.py +0 -0
  625. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/__init__.py +0 -0
  626. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/adapter_routes.py +0 -0
  627. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/body_limit.py +0 -0
  628. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/context.py +0 -0
  629. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/headers.py +0 -0
  630. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/router.py +0 -0
  631. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/routing.py +0 -0
  632. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/__init__.py +0 -0
  633. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/multimodal.py +0 -0
  634. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/provenance.py +0 -0
  635. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/requests.py +0 -0
  636. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/schemas.py +0 -0
  637. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/streaming.py +0 -0
  638. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/structured_outputs.py +0 -0
  639. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/__init__.py +0 -0
  640. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/access.py +0 -0
  641. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/lookup.py +0 -0
  642. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/persisted_columns.py +0 -0
  643. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/persistence.py +0 -0
  644. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/registration.py +0 -0
  645. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/registry.py +0 -0
  646. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/settings.py +0 -0
  647. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/supabase_rest.py +0 -0
  648. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/undeploy.py +0 -0
  649. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/snapshot/__init__.py +0 -0
  650. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/snapshot/archive.py +0 -0
  651. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/teacher/__init__.py +0 -0
  652. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/teacher/limits.py +0 -0
  653. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/teacher/provider_status.py +0 -0
  654. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/teacher/retry_contract.py +0 -0
  655. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/build_dev_dist.py +0 -0
  656. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/check_file_size.py +0 -0
  657. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/check_function_size.py +0 -0
  658. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/check_rollout_identity_actor.py +0 -0
  659. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/check_source_layout.py +0 -0
  660. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/check_verl_pin_exists.py +0 -0
  661. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/qualify_serving_profile.py +0 -0
  662. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/scrub_history.sh +0 -0
  663. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/serve_launch.py +0 -0
  664. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/__init__.py +0 -0
  665. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/__init__.py +0 -0
  666. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/chat_provenance.py +0 -0
  667. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/chat_transport.py +0 -0
  668. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/managed_chat.py +0 -0
  669. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/profile.py +0 -0
  670. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/server_api_plugin.py +0 -0
  671. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/source_snapshot.py +0 -0
  672. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/specs.py +0 -0
  673. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/teacher.py +0 -0
  674. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/vast.py +0 -0
  675. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/wire_headers.py +0 -0
  676. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/capture_image_sft_processor_oracle.py +0 -0
  677. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/capture_qwen38_27b_metadata.py +0 -0
  678. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/conftest.py +0 -0
  679. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/image_sft_processor_oracle.json +0 -0
  680. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
  681. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
  682. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
  683. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
  684. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
  685. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/__init__.py +0 -0
  686. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/conftest.py +0 -0
  687. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/test_lambda_live.py +0 -0
  688. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/test_runpod_live.py +0 -0
  689. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/test_sft_thinking_render_live.py +0 -0
  690. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/test_vast_live.py +0 -0
  691. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/checkpoint_fixtures.py +0 -0
  692. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/conftest.py +0 -0
  693. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/hosted_loadtest_fake_scenario.json +0 -0
  694. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_base_model_serving.py +0 -0
  695. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_chat_auth.py +0 -0
  696. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_chat_authorizer.py +0 -0
  697. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
  698. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_checkpoint_model_validation.py +0 -0
  699. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_engine_error_status.py +0 -0
  700. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_fp8_config.py +0 -0
  701. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_immutable_engine.py +0 -0
  702. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_immutable_revisions.py +0 -0
  703. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_immutable_schemas.py +0 -0
  704. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_artifacts.py +0 -0
  705. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_metrics.py +0 -0
  706. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_protocol.py +0 -0
  707. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_runner.py +0 -0
  708. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_schedule.py +0 -0
  709. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_schema.py +0 -0
  710. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_modal_deploy_identity.py +0 -0
  711. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_modal_image_paths.py +0 -0
  712. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_openai_stream_options.py +0 -0
  713. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_persistence.py +0 -0
  714. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_pre_first_disconnect.py +0 -0
  715. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_prequant_config.py +0 -0
  716. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_registry.py +0 -0
  717. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_registry_coverage.py +0 -0
  718. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_request_body_limit.py +0 -0
  719. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_router_coverage.py +0 -0
  720. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_router_edge_coverage.py +0 -0
  721. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_schemas_coverage.py +0 -0
  722. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_serve_reasoning_split.py +0 -0
  723. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_serve_thinking.py +0 -0
  724. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_settings.py +0 -0
  725. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_structured_outputs.py +0 -0
  726. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_structured_outputs_coverage.py +0 -0
  727. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_supabase_rest_coverage.py +0 -0
  728. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving_conformance/__init__.py +0 -0
  729. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving_conformance/conftest.py +0 -0
  730. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving_conformance/test_contract.py +0 -0
  731. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_accounting_coverage.py +0 -0
  732. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_adapter_shard_completeness.py +0 -0
  733. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_agent_flash_cli_contract.py +0 -0
  734. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_algorithms.py +0 -0
  735. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_allocator.py +0 -0
  736. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_authenticated_redirects.py +0 -0
  737. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_backend_common.py +0 -0
  738. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_backend_jobspec_contract.py +0 -0
  739. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_bake_kernel_cache.py +0 -0
  740. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_base_model_provenance.py +0 -0
  741. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_billing_retry.py +0 -0
  742. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_build_context_contract.py +0 -0
  743. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_capture_qwen38_metadata.py +0 -0
  744. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_catalog_consistency.py +0 -0
  745. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_catalog_only_models.py +0 -0
  746. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_charge_pricing.py +0 -0
  747. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_checkpoint_lifecycle.py +0 -0
  748. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_checkpoints.py +0 -0
  749. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_commands.py +0 -0
  750. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_commands_coverage.py +0 -0
  751. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_credential_shadowing.py +0 -0
  752. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_errors.py +0 -0
  753. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_estimate.py +0 -0
  754. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_gpus_flag.py +0 -0
  755. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_help.py +0 -0
  756. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_main_coverage.py +0 -0
  757. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_managed.py +0 -0
  758. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_render_coverage.py +0 -0
  759. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_render_theme.py +0 -0
  760. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_serve_status.py +0 -0
  761. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_serve_undeploy.py +0 -0
  762. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_traces.py +0 -0
  763. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_wandb_warning.py +0 -0
  764. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_client_import_purity.py +0 -0
  765. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_client_server_integration.py +0 -0
  766. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_client_stream_reads.py +0 -0
  767. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_config_env_vars.py +0 -0
  768. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_config_overrides.py +0 -0
  769. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_console_upload.py +0 -0
  770. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_controlled_experiment_repairs.py +0 -0
  771. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_analytical.py +0 -0
  772. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_currency.py +0 -0
  773. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_equation.py +0 -0
  774. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_estimate.py +0 -0
  775. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_hardware.py +0 -0
  776. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_models.py +0 -0
  777. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_dataset_profile.py +0 -0
  778. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_deploy_latency.py +0 -0
  779. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_dev_channel.py +0 -0
  780. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_disk_gb.py +0 -0
  781. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_cache_evict.py +0 -0
  782. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_delete.py +0 -0
  783. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_download_api.py +0 -0
  784. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_evaluations.py +0 -0
  785. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_list_api.py +0 -0
  786. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_list_cli.py +0 -0
  787. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_list_hub.py +0 -0
  788. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_no_install.py +0 -0
  789. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_pull.py +0 -0
  790. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_pull_coverage.py +0 -0
  791. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_pull_loader_coverage.py +0 -0
  792. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_pull_managed_control_plane.py +0 -0
  793. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_rate_limit_resolve.py +0 -0
  794. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_test.py +0 -0
  795. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_envs_coverage.py +0 -0
  796. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_export.py +0 -0
  797. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_flash_mvp.py +0 -0
  798. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_flashinfer_cache_dirs.py +0 -0
  799. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_freesolo_api_transport.py +0 -0
  800. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_fused_expert_warmstart.py +0 -0
  801. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_github_urlopen_retry.py +0 -0
  802. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_gpu_type_single_field.py +0 -0
  803. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_checkpoint_durability.py +0 -0
  804. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_params.py +0 -0
  805. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_process_census.py +0 -0
  806. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_rollout_identity.py +0 -0
  807. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_health_liveness.py +0 -0
  808. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_hf_retry.py +0 -0
  809. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_image_environment_capability.py +0 -0
  810. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_image_incremental_processor.py +0 -0
  811. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_image_sft_markers.py +0 -0
  812. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_image_sft_processor_parity.py +0 -0
  813. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_image_tokens.py +0 -0
  814. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_infisical_secrets.py +0 -0
  815. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_internal_client.py +0 -0
  816. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_kernel_cache.py +0 -0
  817. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_kernel_fingerprint.py +0 -0
  818. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_kv_util.py +0 -0
  819. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lambda_api_coverage.py +0 -0
  820. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_logging.py +0 -0
  821. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_login_perms.py +0 -0
  822. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lora_rank_coverage.py +0 -0
  823. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lora_rank_nested_rung.py +0 -0
  824. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lora_rank_preflight.py +0 -0
  825. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lora_targeting.py +0 -0
  826. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lora_targeting_pinned_verl.py +0 -0
  827. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_managed_config_fields.py +0 -0
  828. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_managed_hf_repo.py +0 -0
  829. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_metrics_schema_agent_contract.py +0 -0
  830. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_mig_guard.py +0 -0
  831. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_multimodal_training.py +0 -0
  832. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_named_reward_metrics.py +0 -0
  833. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_oom_escalate_gpu.py +0 -0
  834. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd.py +0 -0
  835. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_limits.py +0 -0
  836. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_multiturn_eos_boundary.py +0 -0
  837. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_multiturn_failure_exit.py +0 -0
  838. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_replay_guard.py +0 -0
  839. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_packing.py +0 -0
  840. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_packing_coverage.py +0 -0
  841. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_parasail_teacher.py +0 -0
  842. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_persisted_spec_envelope.py +0 -0
  843. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_poll_helpers.py +0 -0
  844. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_projects.py +0 -0
  845. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_prompt_budget.py +0 -0
  846. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_provider_preflight_coverage.py +0 -0
  847. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_realized_cost.py +0 -0
  848. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_repo_cleanup.py +0 -0
  849. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_resolve_params_b.py +0 -0
  850. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_retry_decision.py +0 -0
  851. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_rl_train.py +0 -0
  852. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_rollout_samples.py +0 -0
  853. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_run_registry_lifecycle.py +0 -0
  854. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_runpod_api_delete.py +0 -0
  855. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_runpod_key_fingerprint.py +0 -0
  856. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_runpod_key_waterfall.py +0 -0
  857. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_runtime_capsule.py +0 -0
  858. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve.py +0 -0
  859. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_launch.py +0 -0
  860. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_manifest.py +0 -0
  861. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_materialize.py +0 -0
  862. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_packaging.py +0 -0
  863. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_control.py +0 -0
  864. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_docs.py +0 -0
  865. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_modal_contract_lock.py +0 -0
  866. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_modal_sdk.py +0 -0
  867. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_modal_sdk_deadlines.py +0 -0
  868. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_modal_teardown_identity.py +0 -0
  869. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_profile_qualification.py +0 -0
  870. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_profiles.py +0 -0
  871. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_provisioning_common.py +0 -0
  872. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_provisioning_modal.py +0 -0
  873. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_resolve_provenance.py +0 -0
  874. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_runtime_adapters.py +0 -0
  875. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_runtime_package.py +0 -0
  876. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_app_coverage.py +0 -0
  877. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_auth_singleflight.py +0 -0
  878. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_billing.py +0 -0
  879. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_checkpoints_coverage.py +0 -0
  880. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_db.py +0 -0
  881. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_locks_coverage.py +0 -0
  882. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_serving_resources.py +0 -0
  883. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serving_conformance_gate.py +0 -0
  884. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serving_context_preflight.py +0 -0
  885. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serving_schema_coverage.py +0 -0
  886. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_chunked_nll.py +0 -0
  887. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_example_selection.py +0 -0
  888. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_gc_off.py +0 -0
  889. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_max_context.py +0 -0
  890. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_step_floor.py +0 -0
  891. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_train.py +0 -0
  892. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_workload.py +0 -0
  893. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_source_attestation_flow.py +0 -0
  894. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_source_layout.py +0 -0
  895. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_source_snapshot.py +0 -0
  896. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_spec_and_validation.py +0 -0
  897. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_spec_contract_bytes.py +0 -0
  898. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_step_floor.py +0 -0
  899. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_step_metrics.py +0 -0
  900. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_step_timing.py +0 -0
  901. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_structured_outputs.py +0 -0
  902. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_teacher_encoding_contract.py +0 -0
  903. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_terminal_artifacts.py +0 -0
  904. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_thinking_config.py +0 -0
  905. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_train_context_preflight.py +0 -0
  906. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_type_comment_prose.py +0 -0
  907. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vast_api.py +0 -0
  908. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_verified_revisions.py +0 -0
  909. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_verifiers.py +0 -0
  910. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_verl_checkpoint_export.py +0 -0
  911. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_verl_child_plugins.py +0 -0
  912. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_verl_silence_watchdog.py +0 -0
  913. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_version.py +0 -0
  914. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  915. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vllm_moe_lora_backport.py +0 -0
  916. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vram_architecture.py +0 -0
  917. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_wandb_link.py +0 -0
  918. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_wandb_naming.py +0 -0
  919. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_warmstart_adapter_download.py +0 -0
  920. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_warmstart_error_attribution.py +0 -0
  921. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_warmstart_image_adapters.py +0 -0
  922. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_dryrun.py +0 -0
  923. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_image.py +0 -0
  924. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_init_heartbeat.py +0 -0
  925. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_thinking.py +0 -0
  926. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_workload_profile.py +0 -0
  927. {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_zero2_sharding_gate.py +0 -0
@@ -33,6 +33,9 @@ RUNPOD_API_KEY=
33
33
  LAMBDA_API_KEY=
34
34
  # Vast.ai API key.
35
35
  VAST_API_KEY=
36
+ # exact https origins Vast may return for asynchronous result retrieval. configured values replace
37
+ # the default https://s3.amazonaws.com allowlist. this belongs only on the control-plane host.
38
+ # FLASH_VAST_RESULT_ORIGINS=https://s3.amazonaws.com
36
39
 
37
40
  # --- required: artifacts ---
38
41
  # HuggingFace token with write access to the dataset repos flash creates for artifacts
@@ -39,10 +39,14 @@ jobs:
39
39
  # this only constrains manual dispatches; a non-main dispatch skips without running `modal deploy`.
40
40
  if: github.ref == 'refs/heads/main'
41
41
  runs-on: ubuntu-latest
42
- # the job's own bounded waits are two 300s readiness polls plus the remote image build; 30
43
- # minutes clears that with room while keeping a wedged deploy from holding the runner for
44
- # GitHub's 6-hour default.
45
- timeout-minutes: 30
42
+ # the job's own bounded waits now sum well past the old 30: two 300s readiness polls, the remote
43
+ # image build, a 420s canary that pays a GPU cold start, a 180s accounting deadline, and on the
44
+ # failure path a SECOND `modal deploy` plus a 300s restore poll. 60 minutes clears that worst
45
+ # case with room while keeping a wedged deploy from holding the runner for GitHub's 6-hour
46
+ # default. the headroom is specifically for the rollback: a job killed partway through the
47
+ # restore leaves the broken release live with no second attempt, which is the one outcome this
48
+ # workflow exists to prevent.
49
+ timeout-minutes: 60
46
50
  # serialize serving deploys across runs because each deploy mutates the live app. github can still
47
51
  # replace a pending run, so the gate compares against the sha reported by the deployed app rather
48
52
  # than assuming every push predecessor was deployed.
@@ -87,9 +91,14 @@ jobs:
87
91
  DEPLOYED_HEALTH_URL: https://serve.freesolo.co/healthz
88
92
  run: |
89
93
  deploy=false
90
- if [ "$EVENT" = "workflow_dispatch" ]; then
91
- deploy=true
92
- elif ! last_deployed_sha="$(python3 - <<'PY'
94
+ # the sha reported by the LIVE app is read ONCE, before any decision, because it serves
95
+ # two purposes: it bounds the undeployed diff below, and it is the rollback target for a
96
+ # failed promotion. `modal deploy` overwrites the app in place, so after that point there
97
+ # is no way left to ask what the previous release was. reading it on workflow_dispatch
98
+ # too -- where the deploy decision does not need it -- is what makes a dispatched deploy
99
+ # rollback-capable rather than one-way.
100
+ read_ok=true
101
+ last_deployed_sha="$(python3 - <<'PY'
93
102
  import json
94
103
  import os
95
104
  import re
@@ -107,7 +116,17 @@ jobs:
107
116
  raise ValueError("deployed app returned no valid source revision")
108
117
  print(revision.lower())
109
118
  PY
110
- )"; then
119
+ )" || read_ok=false
120
+ if [ "$read_ok" != "true" ]; then
121
+ last_deployed_sha=""
122
+ fi
123
+ # an empty previous sha means rollback is IMPOSSIBLE for this run. the rollback step below
124
+ # says so out loud rather than reporting a restore it never performed.
125
+ echo "previous_sha=$last_deployed_sha" >> "$GITHUB_OUTPUT"
126
+
127
+ if [ "$EVENT" = "workflow_dispatch" ]; then
128
+ deploy=true
129
+ elif [ "$read_ok" != "true" ]; then
111
130
  # a missing deployment or any health, network, or parsing failure must deploy safely.
112
131
  deploy=true
113
132
  elif ! git merge-base --is-ancestor "$last_deployed_sha" "$CURRENT_SHA" 2>/dev/null; then
@@ -282,6 +301,7 @@ jobs:
282
301
  done
283
302
 
284
303
  - name: Deploy serving
304
+ id: deploy_serving
285
305
  if: steps.gate.outputs.deploy == 'true'
286
306
  env:
287
307
  FREESOLO_DEPLOYMENT_SHA: ${{ github.sha }}
@@ -371,6 +391,124 @@ jobs:
371
391
  sleep "$sleep_seconds"
372
392
  done
373
393
 
394
+ - name: Install promotion gate dependencies
395
+ if: steps.gate.outputs.deploy == 'true'
396
+ working-directory: .
397
+ run: |
398
+ # the gate imports flash.serving.promotion, which needs httpx for the streaming canary and
399
+ # pydantic-settings for the accounting client. this job deliberately does not `uv sync`
400
+ # (see "Install Modal client"), so install exactly what the gate imports and nothing more.
401
+ # these are the exact versions uv.lock resolves, so the gate runs against the same client
402
+ # behaviour the serving tests were validated on rather than whatever pypi ships that day.
403
+ python -m pip install "httpx==0.28.1" "pydantic==2.13.4" "pydantic-settings==2.15.0"
404
+
405
+ - name: Prove the promotion with a real streaming canary
406
+ if: steps.gate.outputs.deploy == 'true'
407
+ working-directory: .
408
+ env:
409
+ # a healthy /healthz proves a ROUTER answered with the expected identity. it does not prove
410
+ # a gpu engine started, that a generation ran, that streaming works, or that usage settled
411
+ # durably. this step is the only thing standing between "the process booted" and "the
412
+ # release can actually serve", so a failure here must not be promoted.
413
+ SERVING_BASE_URL: https://serve.freesolo.co
414
+ FREESOLO_INTERNAL_KEY: ${{ secrets.FREESOLO_INTERNAL_KEY }}
415
+ SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
416
+ SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.SUPABASE_SERVICE_ROLE_KEY }}
417
+ GITHUB_SHA: ${{ github.sha }}
418
+ GITHUB_RUN_ID: ${{ github.run_id }}
419
+ GITHUB_RUN_ATTEMPT: ${{ github.run_attempt }}
420
+ # credentials reach the gate ONLY through the environment above. passing any of them as an
421
+ # argument would put them in the process table and in the step's own command echo.
422
+ run: python -m flash.serving.promotion.gate
423
+
424
+ - name: Restore the previous release
425
+ # `failure()` alone is too broad. It also fires for the steps that run BEFORE any deploy --
426
+ # installing Modal, verifying auth, verifying the runtime secrets, waiting for the adapter
427
+ # schema. Restoring there would `modal deploy` the previous SHA over a live app this run never
428
+ # replaced, using the very secret set whose verification just failed: a healthy release
429
+ # overwritten by a rollback that had nothing to roll back. Gating on the deploy step's own
430
+ # outcome keeps the case the previous comment was right about -- a deploy that half-succeeded
431
+ # and then failed readiness is `failure`, not skipped, so it still restores. Any outcome other
432
+ # than an attempted deploy (empty, `skipped`) means production is untouched and must stay so.
433
+ if: >-
434
+ failure() && steps.gate.outputs.deploy == 'true'
435
+ && (steps.deploy_serving.outcome == 'success' || steps.deploy_serving.outcome == 'failure')
436
+ working-directory: .
437
+ env:
438
+ PREVIOUS_SHA: ${{ steps.gate.outputs.previous_sha }}
439
+ CURRENT_SHA: ${{ github.sha }}
440
+ # a distinct attempt id so /healthz cannot report the FORWARD deploy's identity and be
441
+ # mistaken for a completed rollback.
442
+ ROLLBACK_DEPLOYMENT_ID: ${{ github.run_id }}-${{ github.run_attempt }}-rollback
443
+ HEALTH_URL: https://serve.freesolo.co/healthz
444
+ run: |
445
+ if [ -z "$PREVIOUS_SHA" ]; then
446
+ echo "::error::Promotion failed and NO previous release was recorded, so the broken release is still live. Restore production manually."
447
+ exit 1
448
+ fi
449
+ if ! git merge-base --is-ancestor "$PREVIOUS_SHA" "$CURRENT_SHA" 2>/dev/null; then
450
+ # refusing here is the safe branch: redeploying a sha that is not an ancestor of this
451
+ # head would deploy an unknown tree rather than the release that was actually live.
452
+ echo "::error::Recorded previous release ${PREVIOUS_SHA} is not an ancestor of ${CURRENT_SHA}; refusing to redeploy an unverified tree. Restore production manually."
453
+ exit 1
454
+ fi
455
+
456
+ echo "Promotion failed; restoring ${PREVIOUS_SHA}."
457
+ git checkout --quiet --force "$PREVIOUS_SHA"
458
+
459
+ # the restored app must report the RESTORED sha, deployed from the restored tree.
460
+ FREESOLO_DEPLOYMENT_SHA="$PREVIOUS_SHA" \
461
+ FREESOLO_DEPLOYMENT_ID="$ROLLBACK_DEPLOYMENT_ID" \
462
+ modal deploy flash/serving/app/modal_app.py
463
+
464
+ response_file="$(mktemp)"
465
+ trap 'rm -f "$response_file"' EXIT
466
+ deadline=$((SECONDS + 300))
467
+ restored=false
468
+ while (( SECONDS < deadline )); do
469
+ if curl --silent --show-error --output "$response_file" --fail \
470
+ --connect-timeout 5 --max-time 10 "$HEALTH_URL"; then
471
+ if python3 - "$response_file" "$PREVIOUS_SHA" "$ROLLBACK_DEPLOYMENT_ID" <<'PY'
472
+ import json
473
+ import sys
474
+
475
+
476
+ def reject_constant(_value: str) -> None:
477
+ raise ValueError
478
+
479
+
480
+ try:
481
+ with open(sys.argv[1], encoding="utf-8") as response:
482
+ payload = json.load(response, parse_constant=reject_constant)
483
+ except (OSError, UnicodeDecodeError, ValueError):
484
+ sys.exit(1)
485
+
486
+ restored = (
487
+ isinstance(payload, dict)
488
+ and payload.get("ok") is True
489
+ and payload.get("deployment_sha") == sys.argv[2]
490
+ and payload.get("deployment_id") == sys.argv[3]
491
+ )
492
+ sys.exit(0 if restored else 1)
493
+ PY
494
+ then
495
+ restored=true
496
+ break
497
+ fi
498
+ fi
499
+ sleep 10
500
+ done
501
+
502
+ if [ "$restored" != "true" ]; then
503
+ echo "::error::Rollback to ${PREVIOUS_SHA} was deployed but production never reported the restored release. Production may be serving a broken release; intervene manually."
504
+ exit 1
505
+ fi
506
+ # exit nonzero regardless: a restored predecessor means production is serving again, NOT
507
+ # that this promotion succeeded. reporting green here would mark an unpromotable commit as
508
+ # deployed and let the next push build on a release that never passed its gate.
509
+ echo "::error::Promotion failed; production was restored to ${PREVIOUS_SHA}. This commit is NOT deployed."
510
+ exit 1
511
+
374
512
  - name: Nothing to deploy
375
513
  if: steps.gate.outputs.deploy != 'true'
376
514
  run: echo "No serving changes in this push; skipping deploy."
@@ -13,6 +13,11 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
13
13
 
14
14
  ### Added
15
15
 
16
+ - OpenAI chat serving now implements and offline-validates strict function tool calling for the exact
17
+ Qwen3.5 packaged and hosted paths, including validated tool history, buffered and raw SSE
18
+ `tool_calls`, and managed forwarding. Flash parses schema-valid calls but does not execute them;
19
+ malformed automatic calls remain exact assistant text. Tool calling is not live-qualified pending
20
+ exact model testing.
16
21
  - OpenAI chat serving now preserves mirror sampling controls across packaged, hosted, and managed
17
22
  entry points: up to four indexed choices, signed seeds, frequency and presence penalties, and
18
23
  OpenAI token logprobs. Buffered and raw SSE responses retain independent choice terminals and
@@ -25,6 +30,16 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
25
30
 
26
31
  ### Changed
27
32
 
33
+ - A Flash run is one seed and may execute several attempts. The provider seed argument threaded
34
+ beside `spec.seed` is gone, so the spec is the only seed channel and no caller can supply a
35
+ second one to disagree with it; `Provider.submit_run`/`poll` are now `submit_attempt`/
36
+ `poll_attempt`; and `runner/supervise/seed_submission.py` is `attempt_supervision.py`. Instance
37
+ labels drop the redundant seed field (`<run>-s<seed>-a<n>` becomes `<run>-a<n>`), and every
38
+ RunPod endpoint carries an explicit `-a<n>` ordinal including attempt zero, replacing the `r<n>`
39
+ retry suffix that made a retry ordinal an identity and left the base name ambiguous between a run
40
+ and its first attempt. Names that exceed the provider budget now raise rather than truncate,
41
+ since a clipped ordinal is one two attempts of a run can collide on.
42
+
28
43
  - Run-backed adapters now use only explicit permanent checkpoint identities, `<run_id>/final` and
29
44
  `<run_id>/step-N`. Bare run aliases, composite source-revision identities, activation, implicit
30
45
  checkpoint fallback, and public artifact provenance have been removed across hosted, managed, and
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: freesolo-flash-dev
3
- Version: 1.2.127
3
+ Version: 1.2.129
4
4
  Summary: Flash — managed LoRA post-training (SFT/GRPO/OPD) 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
@@ -235,6 +235,12 @@ placeholder value to set for the ones you skip.
235
235
  | Lambda | `LAMBDA_API_KEY` | |
236
236
  | Vast | `VAST_API_KEY` | |
237
237
 
238
+ Vast log retrieval accepts signed result URLs only from exact HTTPS origins in
239
+ `FLASH_VAST_RESULT_ORIGINS`. The variable is control-plane-only and comma-separated. Leaving it
240
+ unset or blank allows only `https://s3.amazonaws.com`; setting it replaces that default. Origins
241
+ must be canonical HTTPS origins without credentials, explicit ports, paths, queries, fragments,
242
+ wildcards, spaces, or control characters.
243
+
238
244
  The allocator ranks candidate GPU classes only on the substrates you configured, so a
239
245
  plane with just `VAST_API_KEY` set allocates on Vast and never proposes a class it cannot
240
246
  provision. Startup fails only when **all three** are missing.
@@ -75,6 +75,58 @@ The packaged, hosted, and managed OpenAI entry points retain the shared strict s
75
75
  - `logprobs` is a strict boolean and `top_logprobs` is an integer from 0 through 20.
76
76
  - thinking-enabled adapters reject logprobs.
77
77
 
78
+ Function tools are implemented and offline-validated only for the exact qualified Qwen3.5 packaged
79
+ and hosted profile. This path is not live-qualified pending exact model testing. The parser identity
80
+ is `qwen3_coder`; Qwen3.6 and unqualified engines reject tools after authorization and checkpoint
81
+ resolution, before generation. Declarations must be closed function objects with unique nonempty
82
+ names. Parameters use a bounded root-object JSON Schema profile with `properties`, `required`,
83
+ `additionalProperties: false`, recursive scalar, object, and array types, descriptions, enums, and
84
+ array `items`. Numeric enum members must be JSON integers; decimal and exponent numeric enum lexemes
85
+ are rejected because Flash cannot preserve them exactly across every ingress and template boundary.
86
+ Generated and historical JSON numeric literals support at most 1024 significand digits and exponent
87
+ magnitude at most 1,000,000; generated candidates outside either bound remain exact text, while
88
+ history outside either bound is rejected. A historical value within those bounds that no native
89
+ template number carries faithfully, because it
90
+ would overflow, underflow, or lose digits, is rendered as its exact compact text instead of being
91
+ converted or rejected, and a container holding such a value is rendered exactly as a whole. A
92
+ top-level boolean or null argument is likewise pre-rendered as `true`, `false`, or `null`, because the
93
+ template spells a scalar with `string` and would otherwise show the model Python's `True` and `None`;
94
+ inside a container those values stay native, since the template's `tojson` already spells them
95
+ correctly. A response carries at most 408 tool calls, and a longer run of candidates stays exact text. That is
96
+ the most any continuation could carry, not a promise that this batch replays. Replay cost depends on
97
+ the follow-up request as a whole: the prior conversation shares the same message-complexity budget,
98
+ and each result costs four nodes as a plain string, five with the optional `name`, and seven for a
99
+ single text block plus three for each additional block. A long enough history leaves no room for
100
+ even one call. Clients that intend to continue the tool lifecycle must therefore not assume any
101
+ positive call count replays under every history: a follow-up that exceeds the budget is rejected
102
+ with `messages exceed the supported complexity`. The budget counts structure rather than text, so
103
+ the remedies are to send fewer messages or fewer content blocks, drop optional result `name` fields,
104
+ use plain string results rather than text blocks, or request fewer calls; shortening the text inside
105
+ a message does not help, because a string is one node however long it is. These local
106
+ serving-contract bounds do not depend on Python's process-wide integer conversion limit. Unsupported
107
+ keywords and `strict: true` are rejected.
108
+
109
+ `tool_choice` defaults to `auto` and accepts only `auto` or `none`. `parallel_tool_calls` defaults to
110
+ `true` and accepts only exact `true`; either control requires `tools`. Tools cannot be combined with
111
+ thinking, logprobs, structured outputs, a non-text `response_format`, or image messages. Historical
112
+ assistant calls require unique IDs, function type, valid names, and JSON-string object arguments.
113
+ Each immediately following tool-result turn must resolve every declared call exactly once before a
114
+ non-tool turn. External messages remain unchanged; only a detached template copy converts argument
115
+ strings to objects.
116
+
117
+ In `auto` mode, complete schema-valid Qwen3 Coder XML candidates become OpenAI `tool_calls` with
118
+ independent call indexes and `finish_reason: "tool_calls"`. Parsed responses contain no raw Qwen
119
+ tags. Ordinary text and malformed or incomplete candidates remain exact assistant text with the
120
+ native finish reason. Candidate regions are buffered in raw SSE because argument deltas cannot be
121
+ retracted safely. Native prompt, completion, cached, and reasoning token accounting remains
122
+ authoritative and is never recomputed from serialized arguments. Flash parses calls but does not
123
+ execute or resubmit them.
124
+
125
+ The decoded convenience `chat_stream` iterator remains text-only and single-choice. It rejects
126
+ `n != 1`, logprobs, and tools before opening transport; use buffered JSON or raw SSE for those
127
+ features. Raw `/generate` and `/adapters/{id}/generate` remain tool-free. Buffered hosted responses
128
+ and raw hosted SSE are authoritative; managed serving forwards them and never reparses tool calls.
129
+
78
130
  ## Public provenance
79
131
 
80
132
  Successful run-backed responses identify only the permanent checkpoint:
@@ -17,6 +17,7 @@ from pathlib import Path
17
17
 
18
18
  from flash.cli.commands.env.ops.push import (
19
19
  _ENV_EVALUATIONS_SIDECAR,
20
+ _decode_env_entrypoint_source,
20
21
  _ignore_env_push_path,
21
22
  _raise_walk_error,
22
23
  )
@@ -149,6 +150,18 @@ def _imported_module_names(tree, *, relative_names_are_siblings: bool = True) ->
149
150
  return names
150
151
 
151
152
 
153
+ def _read_env_module_source(path: Path) -> str:
154
+ """Read one packaged Python file under the interpreter's own encoding contract.
155
+
156
+ the publish path decodes the entrypoint with `tokenize.detect_encoding`, so a file carrying a
157
+ non-utf-8 encoding cookie is publishable. reading it as utf-8 here raises instead, and every
158
+ caller below treats that as "no imports" -- so the sibling helpers never enter the archive and
159
+ `env push` exits 0 with an environment that only fails once a gpu has been rented. one decoder
160
+ for both paths is what keeps "publishable" and "walked for imports" the same set of files.
161
+ """
162
+ return _decode_env_entrypoint_source(path.read_bytes())[0]
163
+
164
+
152
165
  def _helper_imports(helper: Path, *, env_root: Path) -> set[str]:
153
166
  """Return imports needed by a packaged helper.
154
167
 
@@ -160,7 +173,7 @@ def _helper_imports(helper: Path, *, env_root: Path) -> set[str]:
160
173
  return set()
161
174
  try:
162
175
  return _imported_module_names(
163
- ast.parse(helper.read_text(encoding="utf-8"), filename=str(helper)),
176
+ ast.parse(_read_env_module_source(helper), filename=str(helper)),
164
177
  relative_names_are_siblings=helper.parent == env_root,
165
178
  )
166
179
  except (OSError, SyntaxError, UnicodeDecodeError):
@@ -295,7 +308,7 @@ def _iter_env_sidecar_files(
295
308
  # GPU has been rented and the worker imports the module. parsed with the same reader as
296
309
  # every other module here, so a lazily imported helper (inside load_environment) counts.
297
310
  try:
298
- entry_tree = ast.parse(entrypoint.read_text(encoding="utf-8"), filename=str(entrypoint))
311
+ entry_tree = ast.parse(_read_env_module_source(entrypoint), filename=str(entrypoint))
299
312
  except (OSError, SyntaxError, UnicodeDecodeError):
300
313
  # the entrypoint is validated for syntax on its own path, and a push that cannot read
301
314
  # it fails there with a better message. an unreadable file here just means no closure.
@@ -325,7 +338,7 @@ def _iter_env_sidecar_files(
325
338
  yielded.add(sidecar)
326
339
  yield sidecar, sidecar.relative_to(env_root)
327
340
  try:
328
- tree = ast.parse(sidecar.read_text(encoding="utf-8"), filename=str(sidecar))
341
+ tree = ast.parse(_read_env_module_source(sidecar), filename=str(sidecar))
329
342
  except SyntaxError as exc:
330
343
  raise ValueError(
331
344
  f"{sidecar}: invalid evaluation sidecar syntax: {exc.msg}"
@@ -382,15 +382,40 @@ def _env_name_error(raw: str) -> str:
382
382
  return f"env name invalid: {text!r} has no usable characters"
383
383
 
384
384
 
385
+ def _validate_env_entrypoint_source(source: bytes) -> None:
386
+ """Reject exact Python bytes that cannot execute as an environment module."""
387
+ compile(source, _ENV_ENTRYPOINT, "exec")
388
+
389
+
390
+ def _decode_env_entrypoint_source(source: bytes) -> tuple[str, str]:
391
+ """Decode Python bytes with the interpreter's encoding-cookie and BOM contract."""
392
+ import io
393
+ import tokenize
394
+
395
+ encoding, _ = tokenize.detect_encoding(io.BytesIO(source).readline)
396
+ return source.decode(encoding), encoding
397
+
398
+
399
+ def _python_preamble_lines(lines: list[str]) -> int:
400
+ """Return the shebang and encoding-cookie lines that must remain first."""
401
+ if not lines:
402
+ return 0
403
+ encoding_cookie = re.compile(r"^[ \t\f]*#.*?coding[:=][ \t]*[-\w.]+", re.ASCII)
404
+ blank_or_comment = re.compile(r"^[ \t\f]*(?:#|[\r\n]|$)", re.ASCII)
405
+ if encoding_cookie.match(lines[0]):
406
+ return 1
407
+ if len(lines) > 1 and blank_or_comment.match(lines[0]) and encoding_cookie.match(lines[1]):
408
+ return 2
409
+ return 1 if lines[0].startswith("#!") else 0
410
+
411
+
385
412
  def _with_syspath_bootstrap(env_source: str) -> str:
386
- """Prepend a sys.path bootstrap so a published env can resolve shipped sibling helpers."""
413
+ """Insert the sys.path bootstrap after the Python module preamble."""
387
414
  import ast
388
415
 
389
- try:
390
- tree = ast.parse(env_source)
391
- except SyntaxError:
392
- return _ENV_SYSPATH_BOOTSTRAP + env_source
393
- insert_after = 0
416
+ tree = ast.parse(env_source, filename=_ENV_ENTRYPOINT)
417
+ lines = env_source.splitlines(keepends=True)
418
+ insert_after = _python_preamble_lines(lines)
394
419
  body = tree.body
395
420
  i = 0
396
421
  if (
@@ -399,13 +424,27 @@ def _with_syspath_bootstrap(env_source: str) -> str:
399
424
  and isinstance(getattr(body[0], "value", None), ast.Constant)
400
425
  and isinstance(body[0].value.value, str)
401
426
  ):
402
- insert_after = body[0].end_lineno or 0
427
+ insert_after = max(insert_after, body[0].end_lineno or 0)
403
428
  i = 1
404
429
  while i < len(body) and isinstance(body[i], ast.ImportFrom) and body[i].module == "__future__":
405
- insert_after = body[i].end_lineno or insert_after
430
+ insert_after = max(insert_after, body[i].end_lineno or 0)
406
431
  i += 1
407
- lines = env_source.splitlines(keepends=True)
408
- return "".join(lines[:insert_after]) + _ENV_SYSPATH_BOOTSTRAP + "".join(lines[insert_after:])
432
+ prefix = "".join(lines[:insert_after])
433
+ if prefix and not prefix.endswith(("\n", "\r")):
434
+ prefix += "\n"
435
+ published_source = prefix + _ENV_SYSPATH_BOOTSTRAP + "".join(lines[insert_after:])
436
+ if not env_source.endswith(("\n", "\r")):
437
+ published_source = published_source.removesuffix("\n")
438
+ return published_source
439
+
440
+
441
+ def _prepare_env_entrypoint_source(env_source: bytes) -> bytes:
442
+ """Validate the authored bytes and return the exact validated archive bytes."""
443
+ _validate_env_entrypoint_source(env_source)
444
+ decoded_source, encoding = _decode_env_entrypoint_source(env_source)
445
+ published_source = _with_syspath_bootstrap(decoded_source).encode(encoding)
446
+ _validate_env_entrypoint_source(published_source)
447
+ return published_source
409
448
 
410
449
 
411
450
  def _raise_walk_error(error: OSError) -> None:
@@ -674,6 +713,18 @@ def cmd_env_push(args) -> int:
674
713
  except ValueError as exc:
675
714
  return _err(str(exc))
676
715
 
716
+ try:
717
+ published_source = _prepare_env_entrypoint_source(entrypoint.read_bytes())
718
+ except (SyntaxError, UnicodeError, ValueError) as exc:
719
+ location = (
720
+ f"line {exc.lineno}" if getattr(exc, "lineno", None) is not None else "unknown line"
721
+ )
722
+ return _err(
723
+ f"cannot publish {src}: environment entrypoint has invalid Python syntax ({location})"
724
+ )
725
+ except OSError:
726
+ return _err(f"cannot publish {src}: environment entrypoint could not be read")
727
+
677
728
  try:
678
729
  _check_env_push_limits(
679
730
  env_root,
@@ -686,8 +737,7 @@ def cmd_env_push(args) -> int:
686
737
 
687
738
  with tempfile.TemporaryDirectory(prefix="flash-env-push-") as tmp:
688
739
  pkg = Path(tmp)
689
- module_source = entrypoint.read_text()
690
- (pkg / _ENV_ENTRYPOINT).write_text(_with_syspath_bootstrap(module_source))
740
+ (pkg / _ENV_ENTRYPOINT).write_bytes(published_source)
691
741
  _write_entrypoint_alias(pkg, entrypoint=entrypoint)
692
742
  _copy_env_sidecars(
693
743
  env_root,
@@ -255,7 +255,7 @@ model = "Qwen/Qwen3.5-9B" # see `flash models list`
255
255
  project = "PROJECT_UUID" # required UUID from `flash projects create`
256
256
  algorithm = "sft" # "sft" (supervised), "grpo" (RL), or "opd" (on-policy distillation)
257
257
  # thinking = true # opt-in reasoning mode, for models that support it
258
- # seed = 42 # reproducible per-run seed; omitted defaults to 42
258
+ # seed = 42 # the run's one seed; omitted defaults to 42
259
259
 
260
260
  [environment]
261
261
  id = "your-org/your-project/my-env" # the id printed by `flash env push`
@@ -364,7 +364,9 @@ remove that failover, and cannot be combined with `providers`. An unknown name i
364
364
  time and the error lists the names your plane accepts. `[gpu] type` pins one exact active
365
365
  validated GPU class. Run artifacts are stored in a
366
366
  private environment-scoped repo with content-addressed Flash code snapshots. Set `seed` only at the
367
- top level. Compose or tweak configs without editing files: `--config extra.toml` (deep-merge) and
367
+ top level: a run has exactly one seed, and if a host fails Flash executes another attempt of that
368
+ same run rather than a new one, so every attempt trains on the seed you set here.
369
+ Compose or tweak configs without editing files: `--config extra.toml` (deep-merge) and
368
370
  `--set key=value` (e.g. `--set train.epochs=3`). `--gpus N` is
369
371
  shorthand for `--set gpu.count=N`; both land in one override list, so repeats resolve left to
370
372
  right.
@@ -69,7 +69,7 @@ def live_attempt(obj: dict) -> int | None:
69
69
  def heartbeat_is_current_attempt(obj: dict, heartbeat: dict) -> bool:
70
70
  """False only when the heartbeat provably belongs to a superseded retry attempt.
71
71
 
72
- Retries reuse the seed's heartbeat path, so a recovered run flips back to ``running`` for the
72
+ Every attempt of a run shares one heartbeat path, so a recovered run flips back to ``running`` for the
73
73
  replacement worker while ``last_heartbeat`` can still be the previous attempt's setup ping until
74
74
  the new worker publishes one. ``remote.attempt`` is the live attempt; ``last_heartbeat.attempt``
75
75
  is the one that produced the ping. When the live attempt is known, keep the reassurance only for a
@@ -33,6 +33,7 @@ from flash.client.streaming import (
33
33
  )
34
34
  from flash.core.spec import require_project_id
35
35
  from flash.serve.contract.urls import is_freesolo_hosted_url
36
+ from flash.serve.request.tool_calls import validate_tool_control_presence
36
37
 
37
38
 
38
39
  class ClientError(RuntimeError):
@@ -213,9 +214,18 @@ def _prepare_chat_request(
213
214
  max_tokens: int,
214
215
  *,
215
216
  stream: bool = False,
217
+ tools: list[dict[str, Any]] | None = None,
218
+ tool_choice: str | None = None,
219
+ parallel_tool_calls: bool | None = None,
216
220
  ) -> tuple[str, dict[str, Any]]:
217
221
  base_run_id, checkpoint_id = _parse_chat_target(target)
218
222
  _validate_chat_messages(messages)
223
+ validate_tool_control_presence(
224
+ tools,
225
+ tool_choice,
226
+ parallel_tool_calls,
227
+ error_type=ClientError,
228
+ )
219
229
  body: dict[str, Any] = {
220
230
  "checkpoint_id": checkpoint_id,
221
231
  "messages": messages,
@@ -224,6 +234,10 @@ def _prepare_chat_request(
224
234
  }
225
235
  if stream:
226
236
  body["stream"] = True
237
+ if tools is not None:
238
+ body["tools"] = tools
239
+ body["tool_choice"] = "auto" if tool_choice is None else tool_choice
240
+ body["parallel_tool_calls"] = True if parallel_tool_calls is None else parallel_tool_calls
227
241
  return base_run_id, body
228
242
 
229
243
 
@@ -767,12 +781,19 @@ class ApiClient:
767
781
  temperature: float = 0.0,
768
782
  max_tokens: int = 512,
769
783
  timeout: float | None = None,
784
+ *,
785
+ tools: list[dict[str, Any]] | None = None,
786
+ tool_choice: str | None = None,
787
+ parallel_tool_calls: bool | None = None,
770
788
  ) -> dict:
771
789
  base_run_id, body = _prepare_chat_request(
772
790
  run_id,
773
791
  messages,
774
792
  temperature,
775
793
  max_tokens,
794
+ tools=tools,
795
+ tool_choice=tool_choice,
796
+ parallel_tool_calls=parallel_tool_calls,
776
797
  )
777
798
  return self._request(
778
799
  "POST",
@@ -787,7 +808,11 @@ class ApiClient:
787
808
  messages: list[dict],
788
809
  temperature: float = 0.0,
789
810
  max_tokens: int = 512,
811
+ *,
812
+ tools: list[dict[str, Any]] | None = None,
790
813
  ) -> Iterator[str]:
814
+ if tools is not None:
815
+ raise ValueError("decoded chat_stream does not support tools")
791
816
  base_run_id, body = _prepare_chat_request(
792
817
  run_id,
793
818
  messages,
@@ -268,18 +268,6 @@ CONTROL_PLANE_OWNED_ENV_KEYS = frozenset(
268
268
  TRAINER_BACKEND = "verl"
269
269
 
270
270
 
271
- def require_matching_seed(spec: JobSpec, seed: Any) -> int:
272
- """Require the retained provider seed argument to match the authoritative JobSpec seed."""
273
- provided = parse_seed(seed)
274
- canonical = parse_seed(spec.seed)
275
- if provided != canonical:
276
- raise ValueError(
277
- f"provider seed {provided} does not match JobSpec.seed {canonical}; "
278
- "use spec.seed as the provider seed"
279
- )
280
- return canonical
281
-
282
-
283
271
  def _model_revision(value: Any) -> str:
284
272
  """parse an optional exact model-repository revision."""
285
273
  if not isinstance(value, str):
@@ -134,7 +134,7 @@ def _rollout_batch_for_quote(spec) -> int:
134
134
 
135
135
 
136
136
  def spec_steps(spec) -> int:
137
- """Per-seed optimizer steps implied by a train spec (mirrors the worker).
137
+ """Per-run optimizer steps implied by a train spec (mirrors the worker).
138
138
 
139
139
  sft reads the horizon its workload profile measured: the profile already resolved epochs,
140
140
  retained rows, realized batch, and ``max_steps`` against the exact tokenized dataset, so
@@ -17,6 +17,7 @@ import flash.engine.worker.runtime.kernel_warmup as kernel_warmup
17
17
  import flash.engine.worker.train.entry.backend_common as backend_common
18
18
  from flash._internal.diagnostics import sanitize_diagnostic
19
19
  from flash.core.spec import gpu_count_of
20
+ from flash.engine.support.huggingface import hub_error_transience
20
21
  from flash.engine.worker.runtime import state
21
22
  from flash.envs.loading.staged import (
22
23
  StagedEnvironmentTransientError,
@@ -67,6 +68,7 @@ def _run_worker_mode() -> None:
67
68
  # Idempotency: check DONE before any env-mutating pip install (fla fast path).
68
69
  if state.HF_REPO:
69
70
  from huggingface_hub import hf_hub_download
71
+ from huggingface_hub.errors import RemoteEntryNotFoundError
70
72
 
71
73
  try:
72
74
  hf_hub_download(
@@ -76,8 +78,15 @@ def _run_worker_mode() -> None:
76
78
  token=os.environ.get("HF_TOKEN"),
77
79
  )
78
80
  done = True
79
- except Exception:
80
- done = False
81
+ except Exception as exc:
82
+ if type(exc) is RemoteEntryNotFoundError:
83
+ done = False
84
+ elif hub_error_transience(exc) is True:
85
+ raise worker_perf.RetriableInfraError(
86
+ f"DONE marker read failed transiently ({type(exc).__name__})"
87
+ ) from exc
88
+ else:
89
+ raise
81
90
  remaining = state._remaining_worker_wall_seconds()
82
91
  if remaining is not None and remaining <= 0:
83
92
  raise RuntimeError("worker run wall deadline exceeded")