freesolo-flash-dev 0.2.27__tar.gz → 0.2.28__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 (264) hide show
  1. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/PKG-INFO +1 -1
  2. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/cli-style/generate.py +3 -16
  3. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/cli-style/index.html +79 -131
  4. freesolo_flash_dev-0.2.28/docs/cli-style/themed-errors.png +0 -0
  5. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/catalog.py +11 -4
  6. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/cli/__init__.py +71 -14
  7. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/cli/commands.py +4 -13
  8. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/cli/envpush.py +14 -24
  9. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/cli/render.py +11 -20
  10. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/cli/training_doc.py +6 -6
  11. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/cost/spec.py +5 -6
  12. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/accounting.py +1 -1
  13. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/vram.py +22 -19
  14. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/__init__.py +2 -2
  15. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/adapter.py +5 -5
  16. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/hf.py +1 -1
  17. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/rl.py +10 -1
  18. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/wandb_log.py +2 -2
  19. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/envs/registry.py +0 -25
  20. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/_instance.py +1 -1
  21. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/lambdalabs/__init__.py +1 -1
  22. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/lambdalabs/jobs/__init__.py +2 -2
  23. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/__init__.py +1 -1
  24. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/jobs.py +1 -1
  25. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/preload.py +2 -2
  26. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/train/endpoints.py +2 -2
  27. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/runner/__init__.py +28 -22
  28. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/runner/checkpoints.py +5 -5
  29. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/runner/deploy.py +17 -113
  30. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/runner/lifecycle.py +35 -64
  31. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/schema/__init__.py +3 -7
  32. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/_runtime.py +0 -5
  33. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/app.py +1 -1
  34. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/run_registry.py +2 -4
  35. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/spec.py +7 -3
  36. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/pyproject.toml +2 -2
  37. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_agent_flash_cli_contract.py +2 -10
  38. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_algorithms.py +1 -0
  39. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_allocator.py +34 -2
  40. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_backend_jobspec_contract.py +0 -2
  41. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_billing_retry.py +7 -58
  42. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cancel_remote.py +23 -25
  43. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_catalog_consistency.py +9 -0
  44. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_checkpoints.py +14 -14
  45. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cli_errors.py +4 -4
  46. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cli_estimate.py +2 -10
  47. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cli_managed.py +1 -1
  48. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cli_render_theme.py +77 -1
  49. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_client_server_integration.py +1 -1
  50. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_config_overrides.py +5 -3
  51. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cost_analytical.py +0 -8
  52. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_disk_gb.py +1 -0
  53. freesolo_flash_dev-0.2.28/tests/test_env_no_install.py +59 -0
  54. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_env_publish.py +4 -5
  55. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_env_push.py +29 -0
  56. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_env_rate_limit_resolve.py +1 -1
  57. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_flash_mvp.py +1 -4
  58. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_flash_worker.py +6 -6
  59. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_gpus.py +3 -3
  60. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_grpo_params.py +18 -23
  61. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_grpo_sleep_gate.py +32 -0
  62. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_jobs.py +22 -69
  63. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_kv_util.py +36 -0
  64. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_lambda_runner.py +9 -9
  65. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_orchestrator_flash.py +5 -5
  66. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_provider_routing.py +2 -3
  67. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_resolve_params_b.py +8 -6
  68. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_resume_on_retry.py +3 -3
  69. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_runmgmt.py +66 -4
  70. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_server_api.py +12 -12
  71. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_server_billing.py +1 -1
  72. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_spec_and_validation.py +8 -8
  73. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_thinking_config.py +3 -0
  74. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_verifiers.py +13 -23
  75. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_wandb_naming.py +2 -3
  76. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_warmstart_cross_repo.py +4 -4
  77. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_weight_cache.py +4 -4
  78. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/uv.lock +1 -1
  79. freesolo_flash_dev-0.2.27/tests/test_env_install.py +0 -43
  80. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.dockerignore +0 -0
  81. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.env.example +0 -0
  82. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.github/workflows/auto-rebake.yml +0 -0
  83. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.github/workflows/bake-kernel-cache.yml +0 -0
  84. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.github/workflows/ci.yml +0 -0
  85. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.github/workflows/main-source-guard.yml +0 -0
  86. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.github/workflows/publish-dev.yml +0 -0
  87. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.github/workflows/publish-image.yml +0 -0
  88. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.github/workflows/publish.yml +0 -0
  89. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.github/workflows/version-parity.yml +0 -0
  90. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.github/workflows/worker-image.yml +0 -0
  91. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/.gitignore +0 -0
  92. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/Dockerfile +0 -0
  93. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/Dockerfile.worker +0 -0
  94. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/LICENSE +0 -0
  95. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/README.md +0 -0
  96. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/build/kernel_cache/.gitignore +0 -0
  97. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/build/kernel_cache/.keep +0 -0
  98. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docker/Dockerfile.kernelcache +0 -0
  99. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docker/Dockerfile.kernelcache.relayer +0 -0
  100. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docker/bake_kernel_cache.py +0 -0
  101. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docker/bake_pod_entry.py +0 -0
  102. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docker/kernel_fingerprint.py +0 -0
  103. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docker/make_rp_handler.py +0 -0
  104. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/cli-style/README.md +0 -0
  105. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/cli-style/preview.png +0 -0
  106. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/cli-theme/README.md +0 -0
  107. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/cli-theme/before-after-dark.png +0 -0
  108. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/cli-theme/before-after-light.png +0 -0
  109. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/cli-theme/gallery-dark.png +0 -0
  110. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/cli-theme/gallery-light.png +0 -0
  111. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/cli-theme/help-dark.png +0 -0
  112. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/cli-theme/help-light.png +0 -0
  113. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/docs/kernel-cache.md +0 -0
  114. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/__init__.py +0 -0
  115. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/_channel.py +0 -0
  116. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/_fileio.py +0 -0
  117. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/_logging.py +0 -0
  118. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/_update_check.py +0 -0
  119. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/cli/__main__.py +0 -0
  120. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/client/__init__.py +0 -0
  121. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/client/config.py +0 -0
  122. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/client/http.py +0 -0
  123. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/client/runtime_secrets.py +0 -0
  124. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/client/specs.py +0 -0
  125. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/cost/__init__.py +0 -0
  126. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/cost/analytical.py +0 -0
  127. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/cost/facts.py +0 -0
  128. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/cost/types.py +0 -0
  129. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/__init__.py +0 -0
  130. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/chalk_kernels.py +0 -0
  131. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/multiturn_rollout.py +0 -0
  132. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/recipe.py +0 -0
  133. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/__main__.py +0 -0
  134. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/_pkg.py +0 -0
  135. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/decoding.py +0 -0
  136. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/finalize.py +0 -0
  137. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/gpu_setup.py +0 -0
  138. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/grpo.py +0 -0
  139. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/heartbeat.py +0 -0
  140. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/kernel_warmup.py +0 -0
  141. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/lora.py +0 -0
  142. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/packing.py +0 -0
  143. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/perf/__init__.py +0 -0
  144. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/perf/attn.py +0 -0
  145. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/perf/diagnostics.py +0 -0
  146. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/perf/lifecycle.py +0 -0
  147. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/perf/liger.py +0 -0
  148. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/perf/loraplus.py +0 -0
  149. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/perf/memory.py +0 -0
  150. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/engine/worker/sft.py +0 -0
  151. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/envs/__init__.py +0 -0
  152. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/envs/adapter.py +0 -0
  153. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/envs/base.py +0 -0
  154. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/__init__.py +0 -0
  155. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/_auth.py +0 -0
  156. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/_http.py +0 -0
  157. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/_instance_bootstrap.py +0 -0
  158. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/_poll.py +0 -0
  159. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/allocator.py +0 -0
  160. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/base.py +0 -0
  161. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/lambdalabs/api.py +0 -0
  162. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/lambdalabs/auth.py +0 -0
  163. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/lambdalabs/gpus.py +0 -0
  164. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/lambdalabs/jobs/builders.py +0 -0
  165. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/lambdalabs/preflight.py +0 -0
  166. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/lambdalabs/pricing.py +0 -0
  167. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/lambdalabs/train.py +0 -0
  168. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/preflight.py +0 -0
  169. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/realized.py +0 -0
  170. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/api.py +0 -0
  171. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/auth.py +0 -0
  172. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/cost.py +0 -0
  173. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/gpus.py +0 -0
  174. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/keys.py +0 -0
  175. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/preflight.py +0 -0
  176. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/pricing.py +0 -0
  177. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/slots.py +0 -0
  178. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/train/__init__.py +0 -0
  179. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/providers/runpod/train/deps.py +0 -0
  180. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/py.typed +0 -0
  181. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/schema/fields.py +0 -0
  182. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/serve/__init__.py +0 -0
  183. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/serve/deploy.py +0 -0
  184. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/serve/export.py +0 -0
  185. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/serve/pricing.py +0 -0
  186. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/__init__.py +0 -0
  187. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/__main__.py +0 -0
  188. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/_deps.py +0 -0
  189. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/_locks.py +0 -0
  190. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/auth.py +0 -0
  191. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/billing.py +0 -0
  192. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/billing_retry.py +0 -0
  193. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/checkpoints.py +0 -0
  194. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/db.py +0 -0
  195. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/environment_registry.py +0 -0
  196. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/envs.py +0 -0
  197. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/reconcile.py +0 -0
  198. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/routes/__init__.py +0 -0
  199. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/routes/envs.py +0 -0
  200. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/routes/meta.py +0 -0
  201. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/routes/runs.py +0 -0
  202. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/flash/server/routes/serving.py +0 -0
  203. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/infisical-entrypoint.sh +0 -0
  204. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/scripts/build_dev_dist.py +0 -0
  205. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/__init__.py +0 -0
  206. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/_helpers/__init__.py +0 -0
  207. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/_helpers/runner.py +0 -0
  208. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/_helpers/specs.py +0 -0
  209. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/conftest.py +0 -0
  210. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/fixtures/math_eval.jsonl +0 -0
  211. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/fixtures/math_train.jsonl +0 -0
  212. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/live/__init__.py +0 -0
  213. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/live/conftest.py +0 -0
  214. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/live/test_lambda_live.py +0 -0
  215. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/live/test_runpod_live.py +0 -0
  216. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_chalk_kernels.py +0 -0
  217. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cli_commands.py +0 -0
  218. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cli_help.py +0 -0
  219. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_client.py +0 -0
  220. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cost_equation.py +0 -0
  221. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cost_estimate.py +0 -0
  222. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cost_hardware.py +0 -0
  223. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cost_models.py +0 -0
  224. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_cost_rewards.py +0 -0
  225. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_dev_channel.py +0 -0
  226. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_endpoint_name.py +0 -0
  227. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_envs_coverage.py +0 -0
  228. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_export.py +0 -0
  229. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_github_urlopen_retry.py +0 -0
  230. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_grpo_mask_aware.py +0 -0
  231. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_idle_endpoint_reaper.py +0 -0
  232. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_kernel_cache.py +0 -0
  233. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_kernel_fingerprint.py +0 -0
  234. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_logging.py +0 -0
  235. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_login_perms.py +0 -0
  236. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_managed_hf_repo.py +0 -0
  237. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_metrics_schema_agent_contract.py +0 -0
  238. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_mig_guard.py +0 -0
  239. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_multiturn_rollout.py +0 -0
  240. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_open_model_policy.py +0 -0
  241. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_packing.py +0 -0
  242. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_poll_helpers.py +0 -0
  243. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_preflight.py +0 -0
  244. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_provider_teardown_robustness.py +0 -0
  245. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_providers_symmetry.py +0 -0
  246. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_realized_cost.py +0 -0
  247. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_runpod_api_delete.py +0 -0
  248. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_runpod_key_fingerprint.py +0 -0
  249. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_runpod_key_waterfall.py +0 -0
  250. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_runpod_slots.py +0 -0
  251. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_serve.py +0 -0
  252. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_server_db.py +0 -0
  253. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_serving_contract.py +0 -0
  254. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_update_check.py +0 -0
  255. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_version.py +0 -0
  256. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  257. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_vl_warmstart_recombine.py +0 -0
  258. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_vl_weight_sync.py +0 -0
  259. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_worker_dryrun.py +0 -0
  260. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_worker_hardexit.py +0 -0
  261. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_worker_image.py +0 -0
  262. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_worker_init_heartbeat.py +0 -0
  263. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_worker_stack.py +0 -0
  264. {freesolo_flash_dev-0.2.27 → freesolo_flash_dev-0.2.28}/tests/test_worker_thinking.py +0 -0
@@ -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.28
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>
@@ -39,6 +39,14 @@ class ModelInfo:
39
39
  params: str
40
40
  algos: tuple[str, ...]
41
41
  min_vram_gb: int
42
+ # Total parameters in billions — the numeric model size the cost estimator + VRAM equations read
43
+ # DIRECTLY (no parsing of the ``params`` display string). Drives the memory/size terms (VRAM, disk,
44
+ # download), which always size the FULL checkpoint. REQUIRED: every ModelInfo must state it — a
45
+ # curated catalog model sets its true count, and the open-model policy passes the HF/estimated count
46
+ # (or 0.0 when the size is genuinely "unknown size"). ``test_every_catalog_entry_sets_params_b``
47
+ # asserts every curated MODELS entry sets it > 0, so a new entry can never silently fall back to a
48
+ # parsed string again.
49
+ params_b: float
42
50
  quant: str = "bf16"
43
51
  recommended_gpu: str = DEFAULT_GPU
44
52
  # GRPO needs more VRAM than SFT (a colocated vLLM rollout engine holds a second copy of
@@ -70,10 +78,6 @@ class ModelInfo:
70
78
  # the raw tokenizer count). Drives the GRPO fp32-logits memory term and the per-device
71
79
  # completion cap. Curated per model below; defaults to the open-model fallback.
72
80
  vocab_size: int = _DEFAULT_VOCAB_SIZE
73
- # Total parameters in billions — the numeric model size the cost estimator reads directly
74
- # (no parsing of the ``params`` display string). Drives the memory/size terms (VRAM, disk,
75
- # download), which always size the FULL checkpoint. Curated per catalog model below.
76
- params_b: float = 0.0
77
81
  # Parameters ACTIVE per token in billions — only meaningful for an MoE, where a token routes
78
82
  # through a small subset of experts. The cost estimator's per-token FLOPs/step-time term reads
79
83
  # this (a token exercises only the active params), while VRAM/disk/download keep using the total
@@ -299,6 +303,9 @@ def _resolve_open_model(model_id: str, algo: str, gpu: str | None) -> ModelInfo:
299
303
  id=model_id,
300
304
  display_name=model_id,
301
305
  params=params,
306
+ # Carry the estimated/HF param count straight through (0.0 when size is unknown) so downstream
307
+ # sizing reads ``params_b`` directly — no re-parsing the display string.
308
+ params_b=est.params_b or 0.0,
302
309
  algos=ALGORITHMS,
303
310
  min_vram_gb=math.ceil(est.est_gb) if est.est_gb else 24,
304
311
  min_disk_gb=min_disk,