freesolo-flash-dev 0.2.27__tar.gz → 0.2.29__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 (335) hide show
  1. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/Dockerfile.worker +20 -4
  2. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/PKG-INFO +1 -1
  3. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/cli-style/generate.py +3 -16
  4. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/cli-style/index.html +79 -131
  5. freesolo_flash_dev-0.2.29/docs/cli-style/themed-errors.png +0 -0
  6. freesolo_flash_dev-0.2.29/flash/__init__.py +13 -0
  7. freesolo_flash_dev-0.2.29/flash/_channel.py +11 -0
  8. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/_fileio.py +4 -9
  9. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/_logging.py +4 -16
  10. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/_update_check.py +14 -82
  11. freesolo_flash_dev-0.2.29/flash/catalog.py +264 -0
  12. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/cli/__init__.py +105 -23
  13. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/cli/commands.py +9 -58
  14. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/cli/envpush.py +136 -26
  15. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/cli/render.py +35 -75
  16. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/cli/training_doc.py +7 -17
  17. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/client/config.py +3 -11
  18. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/client/http.py +82 -133
  19. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/client/runtime_secrets.py +3 -19
  20. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/client/specs.py +1 -5
  21. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/cost/__init__.py +1 -2
  22. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/cost/analytical.py +8 -13
  23. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/cost/facts.py +9 -32
  24. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/cost/spec.py +5 -7
  25. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/cost/types.py +1 -13
  26. freesolo_flash_dev-0.2.29/flash/engine/__init__.py +1 -0
  27. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/engine/accounting.py +4 -8
  28. freesolo_flash_dev-0.2.29/flash/engine/chalk_kernels.py +65 -0
  29. freesolo_flash_dev-0.2.29/flash/engine/multiturn_rollout.py +598 -0
  30. freesolo_flash_dev-0.2.29/flash/engine/recipe.py +53 -0
  31. freesolo_flash_dev-0.2.29/flash/engine/vram.py +571 -0
  32. freesolo_flash_dev-0.2.29/flash/engine/worker/__init__.py +417 -0
  33. freesolo_flash_dev-0.2.29/flash/engine/worker/_pkg.py +24 -0
  34. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/engine/worker/adapter.py +72 -104
  35. freesolo_flash_dev-0.2.29/flash/engine/worker/decoding.py +69 -0
  36. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/engine/worker/finalize.py +1 -12
  37. freesolo_flash_dev-0.2.29/flash/engine/worker/gpu_setup.py +158 -0
  38. freesolo_flash_dev-0.2.29/flash/engine/worker/grpo.py +225 -0
  39. freesolo_flash_dev-0.2.29/flash/engine/worker/heartbeat.py +240 -0
  40. freesolo_flash_dev-0.2.29/flash/engine/worker/hf.py +477 -0
  41. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/engine/worker/kernel_warmup.py +104 -66
  42. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/engine/worker/lora.py +36 -250
  43. freesolo_flash_dev-0.2.29/flash/engine/worker/packing.py +313 -0
  44. freesolo_flash_dev-0.2.29/flash/engine/worker/perf/__init__.py +363 -0
  45. freesolo_flash_dev-0.2.29/flash/engine/worker/perf/attn.py +107 -0
  46. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/engine/worker/perf/diagnostics.py +6 -20
  47. freesolo_flash_dev-0.2.29/flash/engine/worker/perf/lifecycle.py +240 -0
  48. freesolo_flash_dev-0.2.29/flash/engine/worker/perf/liger.py +49 -0
  49. freesolo_flash_dev-0.2.29/flash/engine/worker/perf/loraplus.py +18 -0
  50. freesolo_flash_dev-0.2.29/flash/engine/worker/perf/memory.py +128 -0
  51. freesolo_flash_dev-0.2.29/flash/engine/worker/rl.py +767 -0
  52. freesolo_flash_dev-0.2.29/flash/engine/worker/sft.py +532 -0
  53. freesolo_flash_dev-0.2.29/flash/engine/worker/wandb_log.py +110 -0
  54. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/envs/adapter.py +244 -238
  55. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/envs/base.py +2 -7
  56. freesolo_flash_dev-0.2.29/flash/envs/pull.py +215 -0
  57. freesolo_flash_dev-0.2.29/flash/envs/registry.py +26 -0
  58. freesolo_flash_dev-0.2.29/flash/providers/__init__.py +37 -0
  59. freesolo_flash_dev-0.2.29/flash/providers/_auth.py +10 -0
  60. freesolo_flash_dev-0.2.29/flash/providers/_http.py +166 -0
  61. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/_instance.py +24 -162
  62. freesolo_flash_dev-0.2.29/flash/providers/_instance_bootstrap.py +384 -0
  63. freesolo_flash_dev-0.2.29/flash/providers/_poll.py +309 -0
  64. freesolo_flash_dev-0.2.29/flash/providers/allocator.py +112 -0
  65. freesolo_flash_dev-0.2.29/flash/providers/base.py +341 -0
  66. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/lambdalabs/__init__.py +5 -36
  67. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/lambdalabs/api.py +12 -73
  68. freesolo_flash_dev-0.2.29/flash/providers/lambdalabs/auth.py +15 -0
  69. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/lambdalabs/gpus.py +1 -6
  70. freesolo_flash_dev-0.2.29/flash/providers/lambdalabs/jobs/__init__.py +617 -0
  71. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/lambdalabs/jobs/builders.py +7 -25
  72. freesolo_flash_dev-0.2.29/flash/providers/lambdalabs/preflight.py +15 -0
  73. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/lambdalabs/pricing.py +2 -9
  74. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/lambdalabs/train.py +1 -8
  75. freesolo_flash_dev-0.2.29/flash/providers/preflight.py +65 -0
  76. freesolo_flash_dev-0.2.29/flash/providers/realized.py +56 -0
  77. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/runpod/__init__.py +12 -32
  78. freesolo_flash_dev-0.2.29/flash/providers/runpod/api.py +212 -0
  79. freesolo_flash_dev-0.2.29/flash/providers/runpod/auth.py +23 -0
  80. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/runpod/cost.py +1 -6
  81. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/runpod/gpus.py +1 -9
  82. freesolo_flash_dev-0.2.29/flash/providers/runpod/jobs.py +801 -0
  83. freesolo_flash_dev-0.2.29/flash/providers/runpod/keys.py +97 -0
  84. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/runpod/preflight.py +1 -7
  85. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/runpod/preload.py +38 -266
  86. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/runpod/slots.py +2 -11
  87. freesolo_flash_dev-0.2.29/flash/providers/runpod/train/__init__.py +62 -0
  88. freesolo_flash_dev-0.2.29/flash/providers/runpod/train/deps.py +239 -0
  89. freesolo_flash_dev-0.2.29/flash/providers/runpod/train/endpoints.py +616 -0
  90. freesolo_flash_dev-0.2.29/flash/runner/__init__.py +525 -0
  91. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/runner/checkpoints.py +6 -6
  92. freesolo_flash_dev-0.2.29/flash/runner/deploy.py +220 -0
  93. freesolo_flash_dev-0.2.29/flash/runner/lifecycle.py +591 -0
  94. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/schema/__init__.py +21 -81
  95. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/schema/fields.py +11 -126
  96. freesolo_flash_dev-0.2.29/flash/serve/deploy.py +309 -0
  97. freesolo_flash_dev-0.2.29/flash/serve/export.py +107 -0
  98. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/serve/pricing.py +2 -7
  99. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/_deps.py +12 -12
  100. freesolo_flash_dev-0.2.29/flash/server/_internal_client.py +58 -0
  101. freesolo_flash_dev-0.2.29/flash/server/_locks.py +55 -0
  102. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/_runtime.py +75 -9
  103. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/app.py +15 -5
  104. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/auth.py +18 -85
  105. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/billing.py +11 -39
  106. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/billing_retry.py +10 -9
  107. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/checkpoints.py +14 -49
  108. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/db.py +5 -31
  109. freesolo_flash_dev-0.2.29/flash/server/environment_registry.py +104 -0
  110. freesolo_flash_dev-0.2.29/flash/server/envs.py +608 -0
  111. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/reconcile.py +3 -4
  112. freesolo_flash_dev-0.2.29/flash/server/repo_cleanup.py +296 -0
  113. freesolo_flash_dev-0.2.29/flash/server/routes/__init__.py +1 -0
  114. freesolo_flash_dev-0.2.29/flash/server/routes/envs.py +67 -0
  115. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/routes/runs.py +6 -38
  116. freesolo_flash_dev-0.2.29/flash/server/routes/serving.py +332 -0
  117. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/run_registry.py +9 -22
  118. freesolo_flash_dev-0.2.29/flash/spec.py +246 -0
  119. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/pyproject.toml +2 -2
  120. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/conftest.py +11 -0
  121. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_agent_flash_cli_contract.py +2 -10
  122. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_algorithms.py +1 -0
  123. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_allocator.py +34 -2
  124. freesolo_flash_dev-0.2.29/tests/test_b200_rollout_opt.py +144 -0
  125. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_backend_jobspec_contract.py +0 -2
  126. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_billing_retry.py +7 -58
  127. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cancel_remote.py +102 -25
  128. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_catalog_consistency.py +9 -0
  129. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_checkpoints.py +60 -15
  130. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cli_errors.py +4 -4
  131. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cli_estimate.py +2 -10
  132. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cli_managed.py +1 -1
  133. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cli_render_theme.py +101 -1
  134. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_client.py +52 -2
  135. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_client_server_integration.py +1 -1
  136. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_config_overrides.py +5 -3
  137. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cost_analytical.py +10 -16
  138. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_disk_gb.py +1 -0
  139. freesolo_flash_dev-0.2.29/tests/test_env_delete.py +116 -0
  140. freesolo_flash_dev-0.2.29/tests/test_env_no_install.py +59 -0
  141. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_env_publish.py +415 -5
  142. freesolo_flash_dev-0.2.29/tests/test_env_pull.py +625 -0
  143. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_env_push.py +29 -0
  144. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_env_rate_limit_resolve.py +1 -1
  145. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_flash_mvp.py +1 -4
  146. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_flash_worker.py +55 -11
  147. freesolo_flash_dev-0.2.29/tests/test_flashinfer_cache_dirs.py +54 -0
  148. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_github_urlopen_retry.py +75 -0
  149. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_gpus.py +3 -3
  150. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_grpo_params.py +122 -23
  151. freesolo_flash_dev-0.2.29/tests/test_grpo_sleep_gate.py +223 -0
  152. freesolo_flash_dev-0.2.29/tests/test_internal_client.py +30 -0
  153. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_jobs.py +276 -87
  154. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_kernel_cache.py +8 -14
  155. freesolo_flash_dev-0.2.29/tests/test_kv_util.py +153 -0
  156. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_lambda_runner.py +93 -13
  157. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_login_perms.py +15 -0
  158. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_mig_guard.py +9 -68
  159. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_multiturn_rollout.py +50 -0
  160. freesolo_flash_dev-0.2.29/tests/test_oom_escalate_gpu.py +121 -0
  161. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_orchestrator_flash.py +5 -5
  162. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_poll_helpers.py +4 -8
  163. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_provider_routing.py +83 -3
  164. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_provider_teardown_robustness.py +0 -18
  165. freesolo_flash_dev-0.2.29/tests/test_repo_cleanup.py +513 -0
  166. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_resolve_params_b.py +8 -6
  167. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_resume_on_retry.py +24 -8
  168. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_runmgmt.py +69 -4
  169. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_runpod_key_waterfall.py +32 -0
  170. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_serve.py +87 -25
  171. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_server_api.py +312 -21
  172. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_server_billing.py +3 -2
  173. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_serving_contract.py +14 -6
  174. freesolo_flash_dev-0.2.29/tests/test_sft_gc_off.py +158 -0
  175. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_spec_and_validation.py +57 -19
  176. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_thinking_config.py +3 -0
  177. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_verifiers.py +85 -39
  178. freesolo_flash_dev-0.2.29/tests/test_vl_warmstart_adapter_keys.py +296 -0
  179. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_vl_warmstart_recombine.py +63 -21
  180. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_wandb_naming.py +2 -3
  181. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_warmstart_cross_repo.py +4 -4
  182. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_weight_cache.py +4 -4
  183. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_worker_hardexit.py +42 -0
  184. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_worker_stack.py +51 -16
  185. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/uv.lock +1 -1
  186. freesolo_flash_dev-0.2.27/flash/__init__.py +0 -29
  187. freesolo_flash_dev-0.2.27/flash/_channel.py +0 -28
  188. freesolo_flash_dev-0.2.27/flash/catalog.py +0 -324
  189. freesolo_flash_dev-0.2.27/flash/engine/__init__.py +0 -6
  190. freesolo_flash_dev-0.2.27/flash/engine/chalk_kernels.py +0 -111
  191. freesolo_flash_dev-0.2.27/flash/engine/multiturn_rollout.py +0 -780
  192. freesolo_flash_dev-0.2.27/flash/engine/recipe.py +0 -74
  193. freesolo_flash_dev-0.2.27/flash/engine/vram.py +0 -636
  194. freesolo_flash_dev-0.2.27/flash/engine/worker/__init__.py +0 -599
  195. freesolo_flash_dev-0.2.27/flash/engine/worker/_pkg.py +0 -30
  196. freesolo_flash_dev-0.2.27/flash/engine/worker/decoding.py +0 -144
  197. freesolo_flash_dev-0.2.27/flash/engine/worker/gpu_setup.py +0 -101
  198. freesolo_flash_dev-0.2.27/flash/engine/worker/grpo.py +0 -297
  199. freesolo_flash_dev-0.2.27/flash/engine/worker/heartbeat.py +0 -322
  200. freesolo_flash_dev-0.2.27/flash/engine/worker/hf.py +0 -563
  201. freesolo_flash_dev-0.2.27/flash/engine/worker/packing.py +0 -486
  202. freesolo_flash_dev-0.2.27/flash/engine/worker/perf/__init__.py +0 -495
  203. freesolo_flash_dev-0.2.27/flash/engine/worker/perf/attn.py +0 -176
  204. freesolo_flash_dev-0.2.27/flash/engine/worker/perf/lifecycle.py +0 -274
  205. freesolo_flash_dev-0.2.27/flash/engine/worker/perf/liger.py +0 -73
  206. freesolo_flash_dev-0.2.27/flash/engine/worker/perf/loraplus.py +0 -40
  207. freesolo_flash_dev-0.2.27/flash/engine/worker/perf/memory.py +0 -84
  208. freesolo_flash_dev-0.2.27/flash/engine/worker/rl.py +0 -930
  209. freesolo_flash_dev-0.2.27/flash/engine/worker/sft.py +0 -683
  210. freesolo_flash_dev-0.2.27/flash/engine/worker/wandb_log.py +0 -145
  211. freesolo_flash_dev-0.2.27/flash/envs/registry.py +0 -62
  212. freesolo_flash_dev-0.2.27/flash/providers/__init__.py +0 -54
  213. freesolo_flash_dev-0.2.27/flash/providers/_auth.py +0 -16
  214. freesolo_flash_dev-0.2.27/flash/providers/_http.py +0 -230
  215. freesolo_flash_dev-0.2.27/flash/providers/_instance_bootstrap.py +0 -515
  216. freesolo_flash_dev-0.2.27/flash/providers/_poll.py +0 -444
  217. freesolo_flash_dev-0.2.27/flash/providers/allocator.py +0 -165
  218. freesolo_flash_dev-0.2.27/flash/providers/base.py +0 -442
  219. freesolo_flash_dev-0.2.27/flash/providers/lambdalabs/auth.py +0 -18
  220. freesolo_flash_dev-0.2.27/flash/providers/lambdalabs/jobs/__init__.py +0 -831
  221. freesolo_flash_dev-0.2.27/flash/providers/lambdalabs/preflight.py +0 -27
  222. freesolo_flash_dev-0.2.27/flash/providers/preflight.py +0 -92
  223. freesolo_flash_dev-0.2.27/flash/providers/realized.py +0 -80
  224. freesolo_flash_dev-0.2.27/flash/providers/runpod/api.py +0 -278
  225. freesolo_flash_dev-0.2.27/flash/providers/runpod/auth.py +0 -37
  226. freesolo_flash_dev-0.2.27/flash/providers/runpod/jobs.py +0 -1064
  227. freesolo_flash_dev-0.2.27/flash/providers/runpod/keys.py +0 -145
  228. freesolo_flash_dev-0.2.27/flash/providers/runpod/train/__init__.py +0 -101
  229. freesolo_flash_dev-0.2.27/flash/providers/runpod/train/deps.py +0 -461
  230. freesolo_flash_dev-0.2.27/flash/providers/runpod/train/endpoints.py +0 -830
  231. freesolo_flash_dev-0.2.27/flash/runner/__init__.py +0 -811
  232. freesolo_flash_dev-0.2.27/flash/runner/deploy.py +0 -422
  233. freesolo_flash_dev-0.2.27/flash/runner/lifecycle.py +0 -682
  234. freesolo_flash_dev-0.2.27/flash/serve/deploy.py +0 -332
  235. freesolo_flash_dev-0.2.27/flash/serve/export.py +0 -176
  236. freesolo_flash_dev-0.2.27/flash/server/_locks.py +0 -54
  237. freesolo_flash_dev-0.2.27/flash/server/environment_registry.py +0 -102
  238. freesolo_flash_dev-0.2.27/flash/server/envs.py +0 -350
  239. freesolo_flash_dev-0.2.27/flash/server/routes/__init__.py +0 -6
  240. freesolo_flash_dev-0.2.27/flash/server/routes/envs.py +0 -48
  241. freesolo_flash_dev-0.2.27/flash/server/routes/serving.py +0 -427
  242. freesolo_flash_dev-0.2.27/flash/spec.py +0 -334
  243. freesolo_flash_dev-0.2.27/tests/test_env_install.py +0 -43
  244. freesolo_flash_dev-0.2.27/tests/test_grpo_sleep_gate.py +0 -97
  245. freesolo_flash_dev-0.2.27/tests/test_kv_util.py +0 -75
  246. freesolo_flash_dev-0.2.27/tests/test_vl_warmstart_adapter_keys.py +0 -581
  247. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.dockerignore +0 -0
  248. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.env.example +0 -0
  249. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.github/workflows/auto-rebake.yml +0 -0
  250. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.github/workflows/bake-kernel-cache.yml +0 -0
  251. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.github/workflows/ci.yml +0 -0
  252. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.github/workflows/main-source-guard.yml +0 -0
  253. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.github/workflows/publish-dev.yml +0 -0
  254. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.github/workflows/publish-image.yml +0 -0
  255. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.github/workflows/publish.yml +0 -0
  256. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.github/workflows/version-parity.yml +0 -0
  257. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.github/workflows/worker-image.yml +0 -0
  258. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/.gitignore +0 -0
  259. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/Dockerfile +0 -0
  260. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/LICENSE +0 -0
  261. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/README.md +0 -0
  262. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/build/kernel_cache/.gitignore +0 -0
  263. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/build/kernel_cache/.keep +0 -0
  264. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docker/Dockerfile.kernelcache +0 -0
  265. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docker/Dockerfile.kernelcache.relayer +0 -0
  266. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docker/bake_kernel_cache.py +0 -0
  267. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docker/bake_pod_entry.py +0 -0
  268. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docker/kernel_fingerprint.py +0 -0
  269. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docker/make_rp_handler.py +0 -0
  270. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/cli-style/README.md +0 -0
  271. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/cli-style/preview.png +0 -0
  272. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/cli-theme/README.md +0 -0
  273. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/cli-theme/before-after-dark.png +0 -0
  274. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/cli-theme/before-after-light.png +0 -0
  275. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/cli-theme/gallery-dark.png +0 -0
  276. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/cli-theme/gallery-light.png +0 -0
  277. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/cli-theme/help-dark.png +0 -0
  278. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/cli-theme/help-light.png +0 -0
  279. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/docs/kernel-cache.md +0 -0
  280. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/cli/__main__.py +0 -0
  281. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/client/__init__.py +0 -0
  282. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/engine/worker/__main__.py +0 -0
  283. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/envs/__init__.py +0 -0
  284. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/providers/runpod/pricing.py +0 -0
  285. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/py.typed +0 -0
  286. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/serve/__init__.py +0 -0
  287. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/__init__.py +0 -0
  288. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/__main__.py +0 -0
  289. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/flash/server/routes/meta.py +0 -0
  290. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/infisical-entrypoint.sh +0 -0
  291. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/scripts/build_dev_dist.py +0 -0
  292. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/__init__.py +0 -0
  293. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/_helpers/__init__.py +0 -0
  294. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/_helpers/runner.py +0 -0
  295. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/_helpers/specs.py +0 -0
  296. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/fixtures/math_eval.jsonl +0 -0
  297. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/fixtures/math_train.jsonl +0 -0
  298. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/live/__init__.py +0 -0
  299. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/live/conftest.py +0 -0
  300. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/live/test_lambda_live.py +0 -0
  301. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/live/test_runpod_live.py +0 -0
  302. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_chalk_kernels.py +0 -0
  303. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cli_commands.py +0 -0
  304. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cli_help.py +0 -0
  305. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cost_equation.py +0 -0
  306. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cost_estimate.py +0 -0
  307. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cost_hardware.py +0 -0
  308. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cost_models.py +0 -0
  309. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_cost_rewards.py +0 -0
  310. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_dev_channel.py +0 -0
  311. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_endpoint_name.py +0 -0
  312. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_envs_coverage.py +0 -0
  313. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_export.py +0 -0
  314. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_grpo_mask_aware.py +0 -0
  315. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_idle_endpoint_reaper.py +0 -0
  316. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_kernel_fingerprint.py +0 -0
  317. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_logging.py +0 -0
  318. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_managed_hf_repo.py +0 -0
  319. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_metrics_schema_agent_contract.py +0 -0
  320. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_open_model_policy.py +0 -0
  321. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_packing.py +0 -0
  322. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_preflight.py +0 -0
  323. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_providers_symmetry.py +0 -0
  324. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_realized_cost.py +0 -0
  325. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_runpod_api_delete.py +0 -0
  326. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_runpod_key_fingerprint.py +0 -0
  327. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_runpod_slots.py +0 -0
  328. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_server_db.py +0 -0
  329. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_update_check.py +0 -0
  330. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_version.py +0 -0
  331. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_vl_weight_sync.py +0 -0
  332. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_worker_dryrun.py +0 -0
  333. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_worker_image.py +0 -0
  334. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_worker_init_heartbeat.py +0 -0
  335. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.29}/tests/test_worker_thinking.py +0 -0
@@ -25,9 +25,22 @@ ENV DEBIAN_FRONTEND=noninteractive \
25
25
  # JIT on a cold worker writes here too. These ENVs are always set (cheap); whether the dir is
26
26
  # pre-populated is what the opt-in bake controls. engine.worker._load_kernel_cache_if_present reads
27
27
  # /opt/flash/kernelcache at boot.
28
+ # FLASHINFER_CUBIN_DIR / FLASHINFER_CACHE_DIR / FLASHINFER_WORKSPACE_BASE: FlashInfer's attention-backend
29
+ # cubins (the Blackwell sm120 / B200 rollout attention backend) are NOT bundled in the wheel — flashinfer
30
+ # downloads them from NVIDIA Artifactory on first use. Bake the cubin store + JIT cache into the same
31
+ # persistent kernelcache tree so
32
+ # a baked/volume cache serves them and a cold worker never re-fetches from Artifactory (kernel_warmup
33
+ # also sets these). FLASHINFER_WORKSPACE_BASE is the var flashinfer 0.6.x actually reads to relocate the
34
+ # JIT host-wrapper cache (FLASHINFER_CACHE_DIR is a DERIVED constant there, not an env knob), so set it
35
+ # too — otherwise a B200 path that touches flashinfer before kernel_warmup runs lands the wrapper under
36
+ # the default home workspace and re-JITs instead of using the baked cache.
28
37
  ENV TRITON_CACHE_DIR=/opt/flash/kernelcache/triton \
29
- TORCHINDUCTOR_CACHE_DIR=/opt/flash/kernelcache/inductor
30
- RUN mkdir -p /opt/flash/kernelcache/triton /opt/flash/kernelcache/inductor
38
+ TORCHINDUCTOR_CACHE_DIR=/opt/flash/kernelcache/inductor \
39
+ FLASHINFER_CUBIN_DIR=/opt/flash/kernelcache/flashinfer_cubin \
40
+ FLASHINFER_CACHE_DIR=/opt/flash/kernelcache/flashinfer \
41
+ FLASHINFER_WORKSPACE_BASE=/opt/flash/kernelcache/flashinfer
42
+ RUN mkdir -p /opt/flash/kernelcache/triton /opt/flash/kernelcache/inductor \
43
+ /opt/flash/kernelcache/flashinfer_cubin /opt/flash/kernelcache/flashinfer
31
44
 
32
45
  # build-essential for Triton/Inductor (Liger) + any source builds; git for pip VCS installs.
33
46
  RUN apt-get update && apt-get install -y --no-install-recommends build-essential git curl \
@@ -39,6 +52,7 @@ RUN pip install --no-cache-dir \
39
52
  "trl>=1.6,<1.7" \
40
53
  "peft>=0.19" \
41
54
  "vllm==0.19.1" \
55
+ "flashinfer-python==0.6.6" \
42
56
  "bitsandbytes>=0.49" \
43
57
  "datasets>=4.7,<6" \
44
58
  "huggingface_hub>=0.25" \
@@ -187,10 +201,12 @@ fa_ok = False; \
187
201
  exec('try:\n import flash_attn\n fa_ok = True\nexcept Exception:\n fa_ok = False'); \
188
202
  fa3_ok = False; \
189
203
  exec('try:\n import flash_attn_interface\n fa3_ok = True\nexcept Exception:\n fa3_ok = False'); \
204
+ fi_ok = False; \
205
+ exec('try:\n import flashinfer\n fi_ok = True\nexcept Exception:\n fi_ok = False'); \
190
206
  cudnn = torch.backends.cudnn.version(); assert cudnn, 'cuDNN not compiled into torch'; \
191
207
  ver = lambda n: M.version(n); \
192
- print('worker stack OK | torch', torch.__version__, '| cudnn', cudnn, '| triton', triton.__version__, '| flash_attn', 'present' if fa_ok else 'ABSENT (SDPA fallback)', '| flash_attn_3', 'present (Hopper FA3)' if fa3_ok else 'ABSENT (SDPA on Hopper)'); \
193
- [print(' ', d, ver(d)) for d in ['transformers','trl','peft','vllm','datasets','huggingface-hub', \
208
+ print('worker stack OK | torch', torch.__version__, '| cudnn', cudnn, '| triton', triton.__version__, '| flash_attn', 'present' if fa_ok else 'ABSENT (SDPA fallback)', '| flash_attn_3', 'present (Hopper FA3)' if fa3_ok else 'ABSENT (SDPA on Hopper)', '| flashinfer', 'present (B200 MoE/attn)' if fi_ok else 'ABSENT (Triton fused-MoE fallback)'); \
209
+ [print(' ', d, ver(d)) for d in ['transformers','trl','peft','vllm','flashinfer-python','datasets','huggingface-hub', \
194
210
  'accelerate','wandb','liger-kernel','flash-linear-attention','bitsandbytes', \
195
211
  'hf-transfer','freesolo','runpod']]"
196
212
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: freesolo-flash-dev
3
- Version: 0.2.27
3
+ Version: 0.2.29
4
4
  Summary: Flash — managed LoRA post-training (SFT/GRPO) for Freesolo environments, driven by the `flash` CLI
5
5
  Project-URL: Homepage, https://github.com/freesolo-co/flash
6
6
  Project-URL: Repository, https://github.com/freesolo-co/flash
@@ -300,20 +300,16 @@ def build_cases(tmp: Path):
300
300
  cost_cfg.write_text(
301
301
  'model = "Qwen/Qwen3.5-4B"\nalgorithm = "grpo"\n'
302
302
  '[environment]\nid = "acme/math-grader"\n'
303
- '[train]\nsteps = 150\nseeds = [0]\n'
303
+ "[train]\nsteps = 150\nseeds = [0]\n"
304
304
  '[gpu]\ntype = "RTX 5090"\n'
305
305
  )
306
306
  dry_cfg = tmp / "sft.toml"
307
307
  dry_cfg.write_text(
308
308
  'model = "Qwen/Qwen3.5-4B"\nalgorithm = "sft"\n'
309
309
  '[environment]\nid = "acme/math-grader"\n'
310
- '[train]\nepochs = 1\nseeds = [0]\n'
310
+ "[train]\nepochs = 1\nseeds = [0]\n"
311
311
  )
312
312
 
313
- install_plain = (
314
- "installed acme/math-grader; recorded in /Users/you/.flash/environments.json\n"
315
- 'use it via: [environment]\\nid = "acme/math-grader"'
316
- )
317
313
  push_plain = (
318
314
  "published acme/math-grader\nreference it in your config:\n\n"
319
315
  ' [environment]\n id = "acme/math-grader"'
@@ -355,13 +351,7 @@ def build_cases(tmp: Path):
355
351
  add_argv("flash models", "supported base models", ["models"])
356
352
  add_argv("flash gpus", "managed GPU classes + $/hr", ["gpus"])
357
353
  add_argv("flash env setup", "scaffold a starter environment", ["env", "setup"], cwd=setup_dir)
358
- add_argv("flash env list", "installed + local environments", ["env", "list"], cwd=list_dir)
359
- add_text(
360
- "flash env install acme/math-grader",
361
- "record a published environment",
362
- lambda: render.env_installed("acme/math-grader", "/Users/you/.flash/environments.json"),
363
- install_plain,
364
- )
354
+ add_argv("flash env list", "local environment sources", ["env", "list"], cwd=list_dir)
365
355
  add_text(
366
356
  "flash env push --name math-grader .",
367
357
  "package + upload a local environment",
@@ -478,9 +468,6 @@ def main():
478
468
  # committed gallery doesn't churn on every regeneration.
479
469
  sys.modules["flash.cli.commands"].new_run_id = lambda: "flash-1718900000-d0cf00ed"
480
470
  with tempfile.TemporaryDirectory() as td:
481
- # Point the installed-env registry at an empty temp manifest so `flash env list` never
482
- # leaks a developer's real installed env slugs (~/.flash/envs.json) into the preview.
483
- os.environ["FLASH_ENVS_MANIFEST"] = str(Path(td) / "empty-envs.json")
484
471
  cases = build_cases(Path(td))
485
472
  blocks = [HEAD]
486
473
  for title, sub, plain, dark, light in cases:
@@ -58,7 +58,7 @@ footer code{color:var(--accent2)}
58
58
  <span><i class="sw" style="background:#4d5470"></i>structure</span>
59
59
  </div>
60
60
  </header>
61
- <section class="card"><div class="head"><code>flash version</code><span class="sub">package version</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>flash 0.2.19</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="opacity:.62">v0.2.19</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="opacity:.62">v0.2.19</span></pre></div></div></section><section class="card"><div class="head"><code>flash login</code><span class="sub">verify + store your freesolo key</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>✓ logged in to flash
61
+ <section class="card"><div class="head"><code>flash version</code><span class="sub">package version</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>flash 0+unknown</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="opacity:.62">v0+unknown</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="opacity:.62">v0+unknown</span></pre></div></div></section><section class="card"><div class="head"><code>flash login</code><span class="sub">verify + store your freesolo key</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>✓ logged in to flash
62
62
 
63
63
  account ml-team@acme.ai
64
64
  org org_acme
@@ -92,13 +92,15 @@ footer code{color:var(--accent2)}
92
92
  openbmb/MiniCPM5-1B
93
93
  Qwen/Qwen3.5-2B
94
94
  Qwen/Qwen3.5-4B
95
- Qwen/Qwen3.5-9B</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">models</span> <span style="color:#8a93a8">supported base models</span>
95
+ Qwen/Qwen3.5-9B
96
+ Qwen/Qwen3.6-35B-A3B</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">models</span> <span style="color:#8a93a8">supported base models</span>
96
97
  <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
97
98
  <span style="color:#4d5470">•</span> <span style="color:#97a3ff">Qwen/Qwen3.5-0.8B</span>
98
99
  <span style="color:#4d5470">•</span> <span style="color:#97a3ff">openbmb/MiniCPM5-1B</span>
99
100
  <span style="color:#4d5470">•</span> <span style="color:#97a3ff">Qwen/Qwen3.5-2B</span>
100
101
  <span style="color:#4d5470">•</span> <span style="color:#97a3ff">Qwen/Qwen3.5-4B</span>
101
102
  <span style="color:#4d5470">•</span> <span style="color:#97a3ff">Qwen/Qwen3.5-9B</span>
103
+ <span style="color:#4d5470">•</span> <span style="color:#97a3ff">Qwen/Qwen3.6-35B-A3B</span>
102
104
 
103
105
  <span style="color:#97a3ff">→</span> <span style="opacity:.62">train one with: flash train configs/rl.toml</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#9aa1b5">›</span> <span style="font-weight:700">models</span> <span style="color:#5b6472">supported base models</span>
104
106
  <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
@@ -107,56 +109,51 @@ Qwen/Qwen3.5-9B</pre></div><div class="col after"><div class="tag"><span class="
107
109
  <span style="color:#9aa1b5">•</span> <span style="color:#3a46c8">Qwen/Qwen3.5-2B</span>
108
110
  <span style="color:#9aa1b5">•</span> <span style="color:#3a46c8">Qwen/Qwen3.5-4B</span>
109
111
  <span style="color:#9aa1b5">•</span> <span style="color:#3a46c8">Qwen/Qwen3.5-9B</span>
112
+ <span style="color:#9aa1b5">•</span> <span style="color:#3a46c8">Qwen/Qwen3.6-35B-A3B</span>
110
113
 
111
114
  <span style="color:#3a46c8">→</span> <span style="opacity:.62">train one with: flash train configs/rl.toml</span></pre></div></div></section><section class="card"><div class="head"><code>flash gpus</code><span class="sub">managed GPU classes + $/hr</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>gpu vram runpod$/hr
112
- L4 24G 0.39
113
- A40 48G 0.44
114
- RTX 3090 24G 0.46
115
115
  RTX A6000 48G 0.49
116
116
  RTX 4090 24G 0.69
117
- RTX 6000 Ada 48G 0.77
118
117
  RTX 5090 32G 0.99
119
118
  A100 PCIe 80G 1.39
120
119
  A100 SXM 80G 1.49
121
120
  RTX Pro 6000 96G 2.09
122
121
  H100 80G 3.29
122
+ H200 141G 4.39
123
+ B200 180G 5.89
123
124
 
124
125
  Tip: GPU class selection is fully automatic — the submit-time allocator always picks the
125
126
  cheapest validated RunPod class that fits the model, so you don&#x27;t pin a GPU type.</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">gpus</span> <span style="color:#8a93a8">managed GPU classes</span>
126
127
  <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
127
- <span style="color:#8a93a8;font-weight:700">GPU </span> <span style="color:#8a93a8;font-weight:700"> VRAM</span> <span style="color:#8a93a8;font-weight:700"> $/HR</span>
128
- <span style="color:#4d5470">──────────── ───── ─────</span>
129
- <span style="color:#97a3ff">L4 </span> <span style="color:#8a93a8">24 GB</span> <span style="color:#24c2a8">$0.39</span>
130
- <span style="color:#97a3ff">A40 </span> <span style="color:#8a93a8">48 GB</span> <span style="color:#24c2a8">$0.44</span>
131
- <span style="color:#97a3ff">RTX 3090 </span> <span style="color:#8a93a8">24 GB</span> <span style="color:#24c2a8">$0.46</span>
132
- <span style="color:#97a3ff">RTX A6000 </span> <span style="color:#8a93a8">48 GB</span> <span style="color:#24c2a8">$0.49</span>
133
- <span style="color:#97a3ff">RTX 4090 </span> <span style="color:#8a93a8">24 GB</span> <span style="color:#24c2a8">$0.69</span>
134
- <span style="color:#97a3ff">RTX 6000 Ada</span> <span style="color:#8a93a8">48 GB</span> <span style="color:#24c2a8">$0.77</span>
135
- <span style="color:#97a3ff">RTX 5090 </span> <span style="color:#8a93a8">32 GB</span> <span style="color:#24c2a8">$0.99</span>
136
- <span style="color:#97a3ff">A100 PCIe </span> <span style="color:#8a93a8">80 GB</span> <span style="color:#24c2a8">$1.39</span>
137
- <span style="color:#97a3ff">A100 SXM </span> <span style="color:#8a93a8">80 GB</span> <span style="color:#24c2a8">$1.49</span>
138
- <span style="color:#97a3ff">RTX Pro 6000</span> <span style="color:#8a93a8">96 GB</span> <span style="color:#24c2a8">$2.09</span>
139
- <span style="color:#97a3ff">H100 </span> <span style="color:#8a93a8">80 GB</span> <span style="color:#24c2a8">$3.29</span>
128
+ <span style="color:#8a93a8;font-weight:700">GPU </span> <span style="color:#8a93a8;font-weight:700"> VRAM</span> <span style="color:#8a93a8;font-weight:700"> $/HR</span>
129
+ <span style="color:#4d5470">──────────── ────── ─────</span>
130
+ <span style="color:#97a3ff">RTX A6000 </span> <span style="color:#8a93a8"> 48 GB</span> <span style="color:#24c2a8">$0.49</span>
131
+ <span style="color:#97a3ff">RTX 4090 </span> <span style="color:#8a93a8"> 24 GB</span> <span style="color:#24c2a8">$0.69</span>
132
+ <span style="color:#97a3ff">RTX 5090 </span> <span style="color:#8a93a8"> 32 GB</span> <span style="color:#24c2a8">$0.99</span>
133
+ <span style="color:#97a3ff">A100 PCIe </span> <span style="color:#8a93a8"> 80 GB</span> <span style="color:#24c2a8">$1.39</span>
134
+ <span style="color:#97a3ff">A100 SXM </span> <span style="color:#8a93a8"> 80 GB</span> <span style="color:#24c2a8">$1.49</span>
135
+ <span style="color:#97a3ff">RTX Pro 6000</span> <span style="color:#8a93a8"> 96 GB</span> <span style="color:#24c2a8">$2.09</span>
136
+ <span style="color:#97a3ff">H100 </span> <span style="color:#8a93a8"> 80 GB</span> <span style="color:#24c2a8">$3.29</span>
137
+ <span style="color:#97a3ff">H200 </span> <span style="color:#8a93a8">141 GB</span> <span style="color:#24c2a8">$4.39</span>
138
+ <span style="color:#97a3ff">B200 </span> <span style="color:#8a93a8">180 GB</span> <span style="color:#24c2a8">$5.89</span>
140
139
 
141
140
  <span style="opacity:.62">Tip: GPU class selection is fully automatic — the submit-time allocator always picks the
142
141
  cheapest validated RunPod class that fits the model, so you don&#x27;t pin a GPU type.</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#9aa1b5">›</span> <span style="font-weight:700">gpus</span> <span style="color:#5b6472">managed GPU classes</span>
143
142
  <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
144
- <span style="color:#5b6472;font-weight:700">GPU </span> <span style="color:#5b6472;font-weight:700"> VRAM</span> <span style="color:#5b6472;font-weight:700"> $/HR</span>
145
- <span style="color:#9aa1b5">──────────── ───── ─────</span>
146
- <span style="color:#3a46c8">L4 </span> <span style="color:#5b6472">24 GB</span> <span style="color:#0e7490">$0.39</span>
147
- <span style="color:#3a46c8">A40 </span> <span style="color:#5b6472">48 GB</span> <span style="color:#0e7490">$0.44</span>
148
- <span style="color:#3a46c8">RTX 3090 </span> <span style="color:#5b6472">24 GB</span> <span style="color:#0e7490">$0.46</span>
149
- <span style="color:#3a46c8">RTX A6000 </span> <span style="color:#5b6472">48 GB</span> <span style="color:#0e7490">$0.49</span>
150
- <span style="color:#3a46c8">RTX 4090 </span> <span style="color:#5b6472">24 GB</span> <span style="color:#0e7490">$0.69</span>
151
- <span style="color:#3a46c8">RTX 6000 Ada</span> <span style="color:#5b6472">48 GB</span> <span style="color:#0e7490">$0.77</span>
152
- <span style="color:#3a46c8">RTX 5090 </span> <span style="color:#5b6472">32 GB</span> <span style="color:#0e7490">$0.99</span>
153
- <span style="color:#3a46c8">A100 PCIe </span> <span style="color:#5b6472">80 GB</span> <span style="color:#0e7490">$1.39</span>
154
- <span style="color:#3a46c8">A100 SXM </span> <span style="color:#5b6472">80 GB</span> <span style="color:#0e7490">$1.49</span>
155
- <span style="color:#3a46c8">RTX Pro 6000</span> <span style="color:#5b6472">96 GB</span> <span style="color:#0e7490">$2.09</span>
156
- <span style="color:#3a46c8">H100 </span> <span style="color:#5b6472">80 GB</span> <span style="color:#0e7490">$3.29</span>
143
+ <span style="color:#5b6472;font-weight:700">GPU </span> <span style="color:#5b6472;font-weight:700"> VRAM</span> <span style="color:#5b6472;font-weight:700"> $/HR</span>
144
+ <span style="color:#9aa1b5">──────────── ────── ─────</span>
145
+ <span style="color:#3a46c8">RTX A6000 </span> <span style="color:#5b6472"> 48 GB</span> <span style="color:#0e7490">$0.49</span>
146
+ <span style="color:#3a46c8">RTX 4090 </span> <span style="color:#5b6472"> 24 GB</span> <span style="color:#0e7490">$0.69</span>
147
+ <span style="color:#3a46c8">RTX 5090 </span> <span style="color:#5b6472"> 32 GB</span> <span style="color:#0e7490">$0.99</span>
148
+ <span style="color:#3a46c8">A100 PCIe </span> <span style="color:#5b6472"> 80 GB</span> <span style="color:#0e7490">$1.39</span>
149
+ <span style="color:#3a46c8">A100 SXM </span> <span style="color:#5b6472"> 80 GB</span> <span style="color:#0e7490">$1.49</span>
150
+ <span style="color:#3a46c8">RTX Pro 6000</span> <span style="color:#5b6472"> 96 GB</span> <span style="color:#0e7490">$2.09</span>
151
+ <span style="color:#3a46c8">H100 </span> <span style="color:#5b6472"> 80 GB</span> <span style="color:#0e7490">$3.29</span>
152
+ <span style="color:#3a46c8">H200 </span> <span style="color:#5b6472">141 GB</span> <span style="color:#0e7490">$4.39</span>
153
+ <span style="color:#3a46c8">B200 </span> <span style="color:#5b6472">180 GB</span> <span style="color:#0e7490">$5.89</span>
157
154
 
158
155
  <span style="opacity:.62">Tip: GPU class selection is fully automatic — the submit-time allocator always picks the
159
- cheapest validated RunPod class that fits the model, so you don&#x27;t pin a GPU type.</span></pre></div></div></section><section class="card"><div class="head"><code>flash env setup</code><span class="sub">scaffold a starter environment</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>ensured environment.py, datasets/train.jsonl, configs/, configs/rl.toml, configs/sft.toml</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">env setup</span> <span style="color:#8a93a8">starter Freesolo environment</span>
156
+ cheapest validated RunPod class that fits the model, so you don&#x27;t pin a GPU type.</span></pre></div></div></section><section class="card"><div class="head"><code>flash env setup</code><span class="sub">scaffold a starter environment</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>ensured environment.py, datasets/train.jsonl, configs/rl.toml, configs/sft.toml, TRAINING.md</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">env setup</span> <span style="color:#8a93a8">starter Freesolo environment</span>
160
157
  <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
161
158
  <span style="color:#57ff8f;font-weight:700">✓</span> scaffold ready
162
159
 
@@ -164,6 +161,7 @@ cheapest validated RunPod class that fits the model, so you don&#x27;t pin a GPU
164
161
  <span style="color:#97a3ff">datasets/train.jsonl</span> <span style="opacity:.62">starter training rows</span>
165
162
  <span style="color:#97a3ff">configs/rl.toml </span> <span style="opacity:.62">GRPO run config</span>
166
163
  <span style="color:#97a3ff">configs/sft.toml </span> <span style="opacity:.62">SFT run config</span>
164
+ <span style="color:#97a3ff">TRAINING.md </span> <span style="opacity:.62">how to train well — read this first</span>
167
165
 
168
166
  <span style="color:#97a3ff">→</span> <span style="opacity:.62">publish it: flash env push --name my-env .</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#9aa1b5">›</span> <span style="font-weight:700">env setup</span> <span style="color:#5b6472">starter Freesolo environment</span>
169
167
  <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
@@ -173,29 +171,19 @@ cheapest validated RunPod class that fits the model, so you don&#x27;t pin a GPU
173
171
  <span style="color:#3a46c8">datasets/train.jsonl</span> <span style="opacity:.62">starter training rows</span>
174
172
  <span style="color:#3a46c8">configs/rl.toml </span> <span style="opacity:.62">GRPO run config</span>
175
173
  <span style="color:#3a46c8">configs/sft.toml </span> <span style="opacity:.62">SFT run config</span>
174
+ <span style="color:#3a46c8">TRAINING.md </span> <span style="opacity:.62">how to train well — read this first</span>
176
175
 
177
- <span style="color:#3a46c8">→</span> <span style="opacity:.62">publish it: flash env push --name my-env .</span></pre></div></div></section><section class="card"><div class="head"><code>flash env list</code><span class="sub">installed + local environments</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>local env sources (publish with `flash env push --name &lt;name&gt; &lt;path&gt;`):
176
+ <span style="color:#3a46c8">→</span> <span style="opacity:.62">publish it: flash env push --name my-env .</span></pre></div></div></section><section class="card"><div class="head"><code>flash env list</code><span class="sub">local environment sources</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>local env sources (publish with `flash env push --name &lt;name&gt; &lt;path&gt;`):
178
177
  .
179
- environments/math-grader</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">env list</span> <span style="color:#8a93a8">installed + local environments</span>
178
+ environments/math-grader</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">env list</span> <span style="color:#8a93a8">local environments</span>
180
179
  <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
181
180
  <span style="color:#8a93a8;font-weight:700">local sources</span><span style="opacity:.62"> (publish with flash env push --name &lt;name&gt; &lt;path&gt;)</span>
182
181
  <span style="color:#4d5470">·</span> <span style="color:#97a3ff">.</span>
183
- <span style="color:#4d5470">·</span> <span style="color:#97a3ff">environments/math-grader</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#9aa1b5">›</span> <span style="font-weight:700">env list</span> <span style="color:#5b6472">installed + local environments</span>
182
+ <span style="color:#4d5470">·</span> <span style="color:#97a3ff">environments/math-grader</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#9aa1b5">›</span> <span style="font-weight:700">env list</span> <span style="color:#5b6472">local environments</span>
184
183
  <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
185
184
  <span style="color:#5b6472;font-weight:700">local sources</span><span style="opacity:.62"> (publish with flash env push --name &lt;name&gt; &lt;path&gt;)</span>
186
185
  <span style="color:#9aa1b5">·</span> <span style="color:#3a46c8">.</span>
187
- <span style="color:#9aa1b5">·</span> <span style="color:#3a46c8">environments/math-grader</span></pre></div></div></section><section class="card"><div class="head"><code>flash env install acme/math-grader</code><span class="sub">record a published environment</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>installed acme/math-grader; recorded in /Users/you/.flash/environments.json
188
- use it via: [environment]\nid = &quot;acme/math-grader&quot;</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#57ff8f;font-weight:700">✓</span> recorded <span style="font-weight:700">acme/math-grader</span>
189
- <span style="opacity:.62"> manifest: /Users/you/.flash/environments.json</span>
190
-
191
- <span style="opacity:.62">use it in your config:</span>
192
- <span style="color:#97a3ff">[environment]</span>
193
- <span style="color:#97a3ff">id = &quot;acme/math-grader&quot;</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#00695c;font-weight:700">✓</span> recorded <span style="font-weight:700">acme/math-grader</span>
194
- <span style="opacity:.62"> manifest: /Users/you/.flash/environments.json</span>
195
-
196
- <span style="opacity:.62">use it in your config:</span>
197
- <span style="color:#3a46c8">[environment]</span>
198
- <span style="color:#3a46c8">id = &quot;acme/math-grader&quot;</span></pre></div></div></section><section class="card"><div class="head"><code>flash env push --name math-grader .</code><span class="sub">package + upload a local environment</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>published acme/math-grader
186
+ <span style="color:#9aa1b5">·</span> <span style="color:#3a46c8">environments/math-grader</span></pre></div></div></section><section class="card"><div class="head"><code>flash env push --name math-grader .</code><span class="sub">package + upload a local environment</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>published acme/math-grader
199
187
  reference it in your config:
200
188
 
201
189
  [environment]
@@ -318,37 +306,37 @@ worker: pushing adapter -&gt; acme/qwen3.5-4b-grpo-runs
318
306
  <span style="color:#3a46c8">&quot;error&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#6d28d9">null</span>,
319
307
  <span style="color:#3a46c8">&quot;artifacts_dir&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;acme/qwen3.5-4b-grpo-runs&quot;</span>
320
308
  }</pre></div></div></section><section class="card"><div class="head"><code>flash train --cost rl.toml</code><span class="sub">pre-flight cost estimate</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>Run : Qwen/Qwen3.5-4B [GRPO, 150 steps]
321
- GPU : A40 on auto (48 GB; run needs &gt;= 35 GB) @ $0.44/hr
309
+ GPU : RTX A6000 on auto (48 GB; run needs &gt;= 35 GB) @ $0.49/hr
322
310
  Setup : 9.8 min (cold start: boot + deps + model load + vLLM init)
323
- Per step : 234.90 s
324
- Train : 587.3 min
325
- Wall clock : 9.95 h
326
- TOTAL : $4.38
311
+ Per step : 228.36 s
312
+ Train : 570.9 min
313
+ Wall clock : 9.68 h
314
+ TOTAL : $4.74
327
315
  Notes :
328
316
  - GRPO step = vLLM rollout of 64x8=512 completions @ 320 tok + reward (1.00s/completion, env acme/math-grader) + policy+reference update
329
317
  - GPU sized with 10% VRAM headroom; static GPU $/hr</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">train</span> <span style="color:#8a93a8">pre-flight cost estimate</span>
330
318
  <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
331
319
  <span style="color:#8a93a8">run </span> <span style="color:#4d5470">·</span> <span style="color:#97a3ff">Qwen/Qwen3.5-4B</span> <span style="opacity:.62">[GRPO, 150 steps]</span>
332
- <span style="color:#8a93a8">gpu </span> <span style="color:#4d5470">·</span> A40 on auto <span style="opacity:.62">(48 GB; needs &gt;= 35 GB)</span> @ <span style="color:#24c2a8">$0.44</span>/hr
320
+ <span style="color:#8a93a8">gpu </span> <span style="color:#4d5470">·</span> RTX A6000 on auto <span style="opacity:.62">(48 GB; needs &gt;= 35 GB)</span> @ <span style="color:#24c2a8">$0.49</span>/hr
333
321
  <span style="color:#8a93a8">setup </span> <span style="color:#4d5470">·</span> 9.8 min <span style="opacity:.62">(cold start: boot + deps + model load + vLLM init)</span>
334
- <span style="color:#8a93a8">per step </span> <span style="color:#4d5470">·</span> 234.90 s
335
- <span style="color:#8a93a8">train </span> <span style="color:#4d5470">·</span> 587.3 min
336
- <span style="color:#8a93a8">wall clock</span> <span style="color:#4d5470">·</span> 9.95 h
322
+ <span style="color:#8a93a8">per step </span> <span style="color:#4d5470">·</span> 228.36 s
323
+ <span style="color:#8a93a8">train </span> <span style="color:#4d5470">·</span> 570.9 min
324
+ <span style="color:#8a93a8">wall clock</span> <span style="color:#4d5470">·</span> 9.68 h
337
325
  <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
338
- <span style="color:#8a93a8;font-weight:700">TOTAL </span> <span style="color:#4d5470">·</span> <span style="color:#24c2a8;font-weight:700">$4.38</span>
326
+ <span style="color:#8a93a8;font-weight:700">TOTAL </span> <span style="color:#4d5470">·</span> <span style="color:#24c2a8;font-weight:700">$4.74</span>
339
327
 
340
328
  <span style="opacity:.62">notes</span>
341
329
  <span style="color:#4d5470">·</span> <span style="opacity:.62">GRPO step = vLLM rollout of 64x8=512 completions @ 320 tok + reward (1.00s/completion, env acme/math-grader) + policy+reference update</span>
342
330
  <span style="color:#4d5470">·</span> <span style="opacity:.62">GPU sized with 10% VRAM headroom; static GPU $/hr</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#9aa1b5">›</span> <span style="font-weight:700">train</span> <span style="color:#5b6472">pre-flight cost estimate</span>
343
331
  <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
344
332
  <span style="color:#5b6472">run </span> <span style="color:#9aa1b5">·</span> <span style="color:#3a46c8">Qwen/Qwen3.5-4B</span> <span style="opacity:.62">[GRPO, 150 steps]</span>
345
- <span style="color:#5b6472">gpu </span> <span style="color:#9aa1b5">·</span> A40 on auto <span style="opacity:.62">(48 GB; needs &gt;= 35 GB)</span> @ <span style="color:#0e7490">$0.44</span>/hr
333
+ <span style="color:#5b6472">gpu </span> <span style="color:#9aa1b5">·</span> RTX A6000 on auto <span style="opacity:.62">(48 GB; needs &gt;= 35 GB)</span> @ <span style="color:#0e7490">$0.49</span>/hr
346
334
  <span style="color:#5b6472">setup </span> <span style="color:#9aa1b5">·</span> 9.8 min <span style="opacity:.62">(cold start: boot + deps + model load + vLLM init)</span>
347
- <span style="color:#5b6472">per step </span> <span style="color:#9aa1b5">·</span> 234.90 s
348
- <span style="color:#5b6472">train </span> <span style="color:#9aa1b5">·</span> 587.3 min
349
- <span style="color:#5b6472">wall clock</span> <span style="color:#9aa1b5">·</span> 9.95 h
335
+ <span style="color:#5b6472">per step </span> <span style="color:#9aa1b5">·</span> 228.36 s
336
+ <span style="color:#5b6472">train </span> <span style="color:#9aa1b5">·</span> 570.9 min
337
+ <span style="color:#5b6472">wall clock</span> <span style="color:#9aa1b5">·</span> 9.68 h
350
338
  <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
351
- <span style="color:#5b6472;font-weight:700">TOTAL </span> <span style="color:#9aa1b5">·</span> <span style="color:#0e7490;font-weight:700">$4.38</span>
339
+ <span style="color:#5b6472;font-weight:700">TOTAL </span> <span style="color:#9aa1b5">·</span> <span style="color:#0e7490;font-weight:700">$4.74</span>
352
340
 
353
341
  <span style="opacity:.62">notes</span>
354
342
  <span style="color:#9aa1b5">·</span> <span style="opacity:.62">GRPO step = vLLM rollout of 64x8=512 completions @ 320 tok + reward (1.00s/completion, env acme/math-grader) + policy+reference update</span>
@@ -362,7 +350,8 @@ Notes :
362
350
  &quot;id&quot;: &quot;acme/math-grader&quot;,
363
351
  &quot;params&quot;: {},
364
352
  &quot;pip&quot;: [],
365
- &quot;secrets&quot;: []
353
+ &quot;secrets&quot;: [],
354
+ &quot;resolved_sha&quot;: &quot;&quot;
366
355
  },
367
356
  &quot;train&quot;: {
368
357
  &quot;steps&quot;: null,
@@ -389,13 +378,12 @@ Notes :
389
378
  &quot;stop_sequences&quot;: []
390
379
  },
391
380
  &quot;gpu&quot;: {
392
- &quot;type&quot;: &quot;RTX 3090&quot;,
381
+ &quot;type&quot;: &quot;RTX A6000&quot;,
393
382
  &quot;disk_gb&quot;: 60,
394
383
  &quot;max_wall_seconds&quot;: 86400,
395
- &quot;max_retries&quot;: 2,
384
+ &quot;max_retries&quot;: 5,
396
385
  &quot;network_volume&quot;: null,
397
- &quot;network_volume_gb&quot;: 100,
398
- &quot;datacenter&quot;: null
386
+ &quot;network_volume_gb&quot;: 100
399
387
  },
400
388
  &quot;run_id&quot;: &quot;flash-1718900000-d0cf00ed&quot;,
401
389
  &quot;worker_env&quot;: {},
@@ -420,7 +408,8 @@ Notes :
420
408
  <span style="color:#97a3ff">&quot;id&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;acme/math-grader&quot;</span>,
421
409
  <span style="color:#97a3ff">&quot;params&quot;</span><span style="color:#4d5470">:</span> {},
422
410
  <span style="color:#97a3ff">&quot;pip&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">[]</span>,
423
- <span style="color:#97a3ff">&quot;secrets&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">[]</span>
411
+ <span style="color:#97a3ff">&quot;secrets&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">[]</span>,
412
+ <span style="color:#97a3ff">&quot;resolved_sha&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;&quot;</span>
424
413
  },
425
414
  <span style="color:#97a3ff">&quot;train&quot;</span><span style="color:#4d5470">:</span> {
426
415
  <span style="color:#97a3ff">&quot;steps&quot;</span><span style="color:#4d5470">:</span> <span style="color:#9a8cff">null</span>,
@@ -445,13 +434,12 @@ Notes :
445
434
  <span style="color:#97a3ff">&quot;stop_sequences&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">[]</span>
446
435
  },
447
436
  <span style="color:#97a3ff">&quot;gpu&quot;</span><span style="color:#4d5470">:</span> {
448
- <span style="color:#97a3ff">&quot;type&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;RTX 3090&quot;</span>,
437
+ <span style="color:#97a3ff">&quot;type&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;RTX A6000&quot;</span>,
449
438
  <span style="color:#97a3ff">&quot;disk_gb&quot;</span><span style="color:#4d5470">:</span> <span style="color:#24c2a8">60</span>,
450
439
  <span style="color:#97a3ff">&quot;max_wall_seconds&quot;</span><span style="color:#4d5470">:</span> <span style="color:#24c2a8">86400</span>,
451
- <span style="color:#97a3ff">&quot;max_retries&quot;</span><span style="color:#4d5470">:</span> <span style="color:#24c2a8">2</span>,
440
+ <span style="color:#97a3ff">&quot;max_retries&quot;</span><span style="color:#4d5470">:</span> <span style="color:#24c2a8">5</span>,
452
441
  <span style="color:#97a3ff">&quot;network_volume&quot;</span><span style="color:#4d5470">:</span> <span style="color:#9a8cff">null</span>,
453
- <span style="color:#97a3ff">&quot;network_volume_gb&quot;</span><span style="color:#4d5470">:</span> <span style="color:#24c2a8">100</span>,
454
- <span style="color:#97a3ff">&quot;datacenter&quot;</span><span style="color:#4d5470">:</span> <span style="color:#9a8cff">null</span>
442
+ <span style="color:#97a3ff">&quot;network_volume_gb&quot;</span><span style="color:#4d5470">:</span> <span style="color:#24c2a8">100</span>
455
443
  },
456
444
  <span style="color:#97a3ff">&quot;run_id&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;flash-1718900000-d0cf00ed&quot;</span>,
457
445
  <span style="color:#97a3ff">&quot;worker_env&quot;</span><span style="color:#4d5470">:</span> {},
@@ -476,7 +464,8 @@ Notes :
476
464
  <span style="color:#3a46c8">&quot;id&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;acme/math-grader&quot;</span>,
477
465
  <span style="color:#3a46c8">&quot;params&quot;</span><span style="color:#9aa1b5">:</span> {},
478
466
  <span style="color:#3a46c8">&quot;pip&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">[]</span>,
479
- <span style="color:#3a46c8">&quot;secrets&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">[]</span>
467
+ <span style="color:#3a46c8">&quot;secrets&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">[]</span>,
468
+ <span style="color:#3a46c8">&quot;resolved_sha&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;&quot;</span>
480
469
  },
481
470
  <span style="color:#3a46c8">&quot;train&quot;</span><span style="color:#9aa1b5">:</span> {
482
471
  <span style="color:#3a46c8">&quot;steps&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#6d28d9">null</span>,
@@ -501,13 +490,12 @@ Notes :
501
490
  <span style="color:#3a46c8">&quot;stop_sequences&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">[]</span>
502
491
  },
503
492
  <span style="color:#3a46c8">&quot;gpu&quot;</span><span style="color:#9aa1b5">:</span> {
504
- <span style="color:#3a46c8">&quot;type&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;RTX 3090&quot;</span>,
493
+ <span style="color:#3a46c8">&quot;type&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;RTX A6000&quot;</span>,
505
494
  <span style="color:#3a46c8">&quot;disk_gb&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#0e7490">60</span>,
506
495
  <span style="color:#3a46c8">&quot;max_wall_seconds&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#0e7490">86400</span>,
507
- <span style="color:#3a46c8">&quot;max_retries&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#0e7490">2</span>,
496
+ <span style="color:#3a46c8">&quot;max_retries&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#0e7490">5</span>,
508
497
  <span style="color:#3a46c8">&quot;network_volume&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#6d28d9">null</span>,
509
- <span style="color:#3a46c8">&quot;network_volume_gb&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#0e7490">100</span>,
510
- <span style="color:#3a46c8">&quot;datacenter&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#6d28d9">null</span>
498
+ <span style="color:#3a46c8">&quot;network_volume_gb&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#0e7490">100</span>
511
499
  },
512
500
  <span style="color:#3a46c8">&quot;run_id&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;flash-1718900000-d0cf00ed&quot;</span>,
513
501
  <span style="color:#3a46c8">&quot;worker_env&quot;</span><span style="color:#9aa1b5">:</span> {},
@@ -629,69 +617,29 @@ flash-1718700000-12ab34cd queued SFT 0.0000
629
617
  <span style="color:#3a46c8">flash-1718700000-12ab34cd</span> <span style="color:#5b6472">○ queued </span> <span style="color:#5b6472">SFT </span> <span style="color:#0e7490">$0.0000</span> <span style="color:#5b6472"> </span> openbmb/MiniCPM5-1B</pre></div></div></section><section class="card"><div class="head"><code>flash cancel &lt;run&gt;</code><span class="sub">cancel a run</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>{
630
618
  &quot;run_id&quot;: &quot;flash-1718903000-e5f6a7b8&quot;,
631
619
  &quot;state&quot;: &quot;cancelled&quot;
632
- }</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">cancel</span>
633
- <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
634
- <span style="color:#8a93a8">● cancelled</span> <span style="color:#97a3ff">flash-1718903000-e5f6a7b8</span>
635
-
636
- {
637
- <span style="color:#97a3ff">&quot;run_id&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;flash-1718903000-e5f6a7b8&quot;</span>,
638
- <span style="color:#97a3ff">&quot;state&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;cancelled&quot;</span>
639
- }</pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#9aa1b5">›</span> <span style="font-weight:700">cancel</span>
640
- <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
641
- <span style="color:#5b6472">● cancelled</span> <span style="color:#3a46c8">flash-1718903000-e5f6a7b8</span>
642
-
643
- {
644
- <span style="color:#3a46c8">&quot;run_id&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;flash-1718903000-e5f6a7b8&quot;</span>,
645
- <span style="color:#3a46c8">&quot;state&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;cancelled&quot;</span>
646
- }</pre></div></div></section><section class="card"><div class="head"><code>flash deploy &lt;run&gt;</code><span class="sub">serve a trained adapter</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>{
620
+ }</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#57ff8f;font-weight:700">✓</span> cancel requested for <span style="color:#97a3ff">flash-1718903000-e5f6a7b8</span>
621
+ <span style="color:#8a93a8">● cancelled</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#00695c;font-weight:700">✓</span> cancel requested for <span style="color:#3a46c8">flash-1718903000-e5f6a7b8</span>
622
+ <span style="color:#5b6472">● cancelled</span></pre></div></div></section><section class="card"><div class="head"><code>flash deploy &lt;run&gt;</code><span class="sub">serve a trained adapter</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>{
647
623
  &quot;run_id&quot;: &quot;flash-1718900000-a1b2c3d4&quot;,
648
624
  &quot;state&quot;: &quot;deployed&quot;,
649
625
  &quot;mode&quot;: &quot;dev&quot;,
650
626
  &quot;openai_model&quot;: &quot;flash-1718900000-a1b2c3d4&quot;,
651
627
  &quot;endpoint_name&quot;: &quot;https://api.freesolo.co/v1&quot;,
652
628
  &quot;gpu&quot;: &quot;RTX 4090&quot;
653
- }</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">deploy</span>
654
- <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
655
- <span style="color:#9a8cff">● deployed</span> <span style="color:#97a3ff">flash-1718900000-a1b2c3d4</span>
656
-
657
- {
658
- <span style="color:#97a3ff">&quot;run_id&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;flash-1718900000-a1b2c3d4&quot;</span>,
659
- <span style="color:#97a3ff">&quot;state&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;deployed&quot;</span>,
660
- <span style="color:#97a3ff">&quot;mode&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;dev&quot;</span>,
661
- <span style="color:#97a3ff">&quot;openai_model&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;flash-1718900000-a1b2c3d4&quot;</span>,
662
- <span style="color:#97a3ff">&quot;endpoint_name&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;https://api.freesolo.co/v1&quot;</span>,
663
- <span style="color:#97a3ff">&quot;gpu&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;RTX 4090&quot;</span>
664
- }</pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#9aa1b5">›</span> <span style="font-weight:700">deploy</span>
665
- <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
666
- <span style="color:#6d28d9">● deployed</span> <span style="color:#3a46c8">flash-1718900000-a1b2c3d4</span>
667
-
668
- {
669
- <span style="color:#3a46c8">&quot;run_id&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;flash-1718900000-a1b2c3d4&quot;</span>,
670
- <span style="color:#3a46c8">&quot;state&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;deployed&quot;</span>,
671
- <span style="color:#3a46c8">&quot;mode&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;dev&quot;</span>,
672
- <span style="color:#3a46c8">&quot;openai_model&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;flash-1718900000-a1b2c3d4&quot;</span>,
673
- <span style="color:#3a46c8">&quot;endpoint_name&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;https://api.freesolo.co/v1&quot;</span>,
674
- <span style="color:#3a46c8">&quot;gpu&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;RTX 4090&quot;</span>
675
- }</pre></div></div></section><section class="card"><div class="head"><code>flash undeploy &lt;run&gt;</code><span class="sub">tear down a serving endpoint</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>{
629
+ }</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#57ff8f;font-weight:700">✓</span> deployed
630
+ <span style="color:#8a93a8">run </span> <span style="color:#4d5470">·</span> <span style="color:#97a3ff">flash-1718900000-a1b2c3d4</span>
631
+ <span style="color:#8a93a8">endpoint</span> <span style="color:#4d5470">·</span> <span style="color:#57ff8f">https://api.freesolo.co/v1</span>
632
+ <span style="color:#8a93a8">gpu </span> <span style="color:#4d5470">·</span> RTX 4090</pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#00695c;font-weight:700">✓</span> deployed
633
+ <span style="color:#5b6472">run </span> <span style="color:#9aa1b5">·</span> <span style="color:#3a46c8">flash-1718900000-a1b2c3d4</span>
634
+ <span style="color:#5b6472">endpoint</span> <span style="color:#9aa1b5">·</span> <span style="color:#00695c">https://api.freesolo.co/v1</span>
635
+ <span style="color:#5b6472">gpu </span> <span style="color:#9aa1b5">·</span> RTX 4090</pre></div></div></section><section class="card"><div class="head"><code>flash undeploy &lt;run&gt;</code><span class="sub">tear down a serving endpoint</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>{
676
636
  &quot;run_id&quot;: &quot;flash-1718900000-a1b2c3d4&quot;,
677
637
  &quot;deleted_endpoints&quot;: [
678
638
  &quot;flash-a1b2c3d4-serve&quot;
679
639
  ]
680
- }</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">undeploy</span>
681
- <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
682
- {
683
- <span style="color:#97a3ff">&quot;run_id&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;flash-1718900000-a1b2c3d4&quot;</span>,
684
- <span style="color:#97a3ff">&quot;deleted_endpoints&quot;</span><span style="color:#4d5470">:</span> [
685
- <span style="color:#57ff8f">&quot;flash-a1b2c3d4-serve&quot;</span>
686
- ]
687
- }</pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#9aa1b5">›</span> <span style="font-weight:700">undeploy</span>
688
- <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
689
- {
690
- <span style="color:#3a46c8">&quot;run_id&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;flash-1718900000-a1b2c3d4&quot;</span>,
691
- <span style="color:#3a46c8">&quot;deleted_endpoints&quot;</span><span style="color:#9aa1b5">:</span> [
692
- <span style="color:#00695c">&quot;flash-a1b2c3d4-serve&quot;</span>
693
- ]
694
- }</pre></div></div></section><section class="card"><div class="head"><code>flash deployments</code><span class="sub">active serving deployments</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>RUN_ID GPU ENDPOINT
640
+ }</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#57ff8f;font-weight:700">✓</span> torn down <span style="color:#97a3ff">flash-1718900000-a1b2c3d4</span>
641
+ <span style="opacity:.62"> deregistered flash-a1b2c3d4-serve</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#00695c;font-weight:700">✓</span> torn down <span style="color:#3a46c8">flash-1718900000-a1b2c3d4</span>
642
+ <span style="opacity:.62"> deregistered flash-a1b2c3d4-serve</span></pre></div></div></section><section class="card"><div class="head"><code>flash deployments</code><span class="sub">active serving deployments</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>RUN_ID GPU ENDPOINT
695
643
  flash-1718900000-a1b2c3d4 RTX 4090 https://api.freesolo.co/v1</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#5f72ff;font-weight:700">flash</span> <span style="color:#4d5470">›</span> <span style="font-weight:700">deployments</span> <span style="color:#8a93a8">1 active</span>
696
644
  <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
697
645
  <span style="color:#8a93a8;font-weight:700">RUN ID </span> <span style="color:#8a93a8;font-weight:700">GPU </span> <span style="color:#8a93a8;font-weight:700">ENDPOINT </span>
@@ -0,0 +1,13 @@
1
+ """Flash — managed LoRA post-training: log in with your freesolo key, train."""
2
+
3
+ from importlib.metadata import version as _dist_version
4
+
5
+ from flash._channel import DIST_NAME as _DIST_NAME
6
+
7
+ __all__ = ["__version__"]
8
+
9
+ # Read from dist metadata so version literal doesn't drift from pyproject (caused a nag loop in 0.2.20).
10
+ try:
11
+ __version__ = _dist_version(_DIST_NAME)
12
+ except Exception:
13
+ __version__ = "0+unknown"
@@ -0,0 +1,11 @@
1
+ """Single switch between prod and dev channels; ``scripts/build_dev_dist.py`` rewrites CHANNEL to "dev"."""
2
+
3
+ from __future__ import annotations
4
+
5
+ CHANNEL = "dev"
6
+
7
+ # Must stay in lockstep with [project.scripts] in pyproject.toml.
8
+ CLI_NAME = "flash-dev" if CHANNEL == "dev" else "flash"
9
+
10
+ # Must stay in lockstep with [project].name in pyproject.toml.
11
+ DIST_NAME = "freesolo-flash-dev" if CHANNEL == "dev" else "freesolo-flash"