freesolo-flash-dev 0.2.36__tar.gz → 0.2.37__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 (281) hide show
  1. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/PKG-INFO +3 -3
  2. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/README.md +2 -2
  3. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/docs/cli-style/generate.py +4 -2
  4. freesolo_flash_dev-0.2.37/docs/cli-style/index.html +343 -0
  5. freesolo_flash_dev-0.2.37/flash/adapter_artifacts.py +7 -0
  6. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/cli/__init__.py +1 -1
  7. freesolo_flash_dev-0.2.37/flash/cli/_tty.py +32 -0
  8. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/cli/commands.py +52 -38
  9. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/cli/envpush.py +58 -41
  10. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/cli/render.py +3 -5
  11. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/cli/training_doc.py +14 -4
  12. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/client/__init__.py +9 -1
  13. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/client/http.py +92 -4
  14. freesolo_flash_dev-0.2.37/flash/cost/spec.py +109 -0
  15. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/__init__.py +6 -0
  16. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/adapter.py +2 -1
  17. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/heartbeat.py +12 -1
  18. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/hf.py +5 -6
  19. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/lora.py +67 -14
  20. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/envs/adapter.py +3 -31
  21. freesolo_flash_dev-0.2.37/flash/envs/archive_policy.py +52 -0
  22. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/envs/loader.py +39 -36
  23. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/envs/pull.py +154 -28
  24. freesolo_flash_dev-0.2.37/flash/providers/_hf_retry.py +76 -0
  25. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/_poll.py +13 -4
  26. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/lambdalabs/__init__.py +10 -11
  27. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/lambdalabs/jobs/__init__.py +4 -3
  28. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/jobs.py +23 -22
  29. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/train/__init__.py +3 -54
  30. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/runner/__init__.py +25 -0
  31. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/runner/checkpoints.py +6 -9
  32. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/runner/deploy.py +4 -4
  33. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/runner/lifecycle.py +4 -4
  34. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/schema/__init__.py +5 -0
  35. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/serve/deploy.py +1 -22
  36. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/_internal_client.py +79 -3
  37. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/environment_registry.py +19 -47
  38. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/envs.py +149 -62
  39. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/routes/envs.py +21 -1
  40. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/routes/meta.py +7 -1
  41. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/routes/serving.py +0 -2
  42. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/run_registry.py +8 -18
  43. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/pyproject.toml +4 -6
  44. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/_helpers/specs.py +1 -1
  45. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_agent_flash_cli_contract.py +1 -0
  46. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_algorithms.py +1 -1
  47. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_backend_jobspec_contract.py +2 -1
  48. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_checkpoints.py +119 -24
  49. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cli_commands.py +62 -3
  50. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cli_estimate.py +13 -145
  51. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cli_render_theme.py +4 -8
  52. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_client.py +77 -2
  53. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_disk_gb.py +2 -0
  54. freesolo_flash_dev-0.2.37/tests/test_env_download.py +101 -0
  55. freesolo_flash_dev-0.2.37/tests/test_env_download_api.py +99 -0
  56. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_env_pull.py +6 -1
  57. freesolo_flash_dev-0.2.37/tests/test_env_pull_managed_control_plane.py +165 -0
  58. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_env_push.py +7 -7
  59. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_envs_coverage.py +3 -2
  60. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_gpus.py +2 -2
  61. freesolo_flash_dev-0.2.37/tests/test_health_liveness.py +44 -0
  62. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_jobs.py +34 -0
  63. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_lora_rank_preflight.py +7 -4
  64. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_managed_hf_repo.py +2 -2
  65. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_provider_routing.py +2 -2
  66. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_runmgmt.py +88 -2
  67. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_serve.py +4 -32
  68. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_server_api.py +42 -10
  69. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_serving_contract.py +14 -14
  70. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_spec_and_validation.py +22 -1
  71. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_thinking_config.py +2 -1
  72. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_verifiers.py +93 -46
  73. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_vl_warmstart_adapter_keys.py +48 -3
  74. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_vl_warmstart_recombine.py +29 -1
  75. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_wandb_naming.py +2 -1
  76. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_weight_cache.py +3 -3
  77. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_worker_init_heartbeat.py +54 -5
  78. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/uv.lock +1 -1
  79. freesolo_flash_dev-0.2.36/docs/cli-style/index.html +0 -657
  80. freesolo_flash_dev-0.2.36/flash/cost/spec.py +0 -248
  81. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.dockerignore +0 -0
  82. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.env.example +0 -0
  83. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.github/workflows/auto-rebake.yml +0 -0
  84. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.github/workflows/bake-kernel-cache.yml +0 -0
  85. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.github/workflows/ci.yml +0 -0
  86. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.github/workflows/main-source-guard.yml +0 -0
  87. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.github/workflows/notify-tests-repo.yml +0 -0
  88. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.github/workflows/publish-dev.yml +0 -0
  89. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.github/workflows/publish-image.yml +0 -0
  90. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.github/workflows/publish.yml +0 -0
  91. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.github/workflows/version-parity.yml +0 -0
  92. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.github/workflows/worker-image.yml +0 -0
  93. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/.gitignore +0 -0
  94. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/Dockerfile +0 -0
  95. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/Dockerfile.worker +0 -0
  96. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/LICENSE +0 -0
  97. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/build/kernel_cache/.gitignore +0 -0
  98. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/build/kernel_cache/.keep +0 -0
  99. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/docker/Dockerfile.kernelcache +0 -0
  100. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/docker/Dockerfile.kernelcache.relayer +0 -0
  101. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/docker/bake_kernel_cache.py +0 -0
  102. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/docker/bake_pod_entry.py +0 -0
  103. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/docker/kernel_fingerprint.py +0 -0
  104. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/docker/make_rp_handler.py +0 -0
  105. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/docs/cli-style/README.md +0 -0
  106. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/docs/cli-style/preview.png +0 -0
  107. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/docs/cli-style/themed-errors.png +0 -0
  108. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/docs/kernel-cache.md +0 -0
  109. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/__init__.py +0 -0
  110. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/_channel.py +0 -0
  111. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/_fileio.py +0 -0
  112. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/_logging.py +0 -0
  113. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/_update_check.py +0 -0
  114. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/catalog.py +0 -0
  115. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/cli/__main__.py +0 -0
  116. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/client/config.py +0 -0
  117. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/client/runtime_secrets.py +0 -0
  118. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/client/specs.py +0 -0
  119. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/cost/__init__.py +0 -0
  120. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/cost/analytical.py +0 -0
  121. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/cost/facts.py +0 -0
  122. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/cost/types.py +0 -0
  123. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/__init__.py +0 -0
  124. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/accounting.py +0 -0
  125. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/chalk_kernels.py +0 -0
  126. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/multiturn_rollout.py +0 -0
  127. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/recipe.py +0 -0
  128. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/vram.py +0 -0
  129. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/__main__.py +0 -0
  130. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/_pkg.py +0 -0
  131. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/decoding.py +0 -0
  132. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/finalize.py +0 -0
  133. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/gpu_setup.py +0 -0
  134. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/grpo.py +0 -0
  135. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/kernel_warmup.py +0 -0
  136. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/packing.py +0 -0
  137. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/perf/__init__.py +0 -0
  138. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/perf/attn.py +0 -0
  139. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/perf/diagnostics.py +0 -0
  140. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/perf/lifecycle.py +0 -0
  141. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/perf/liger.py +0 -0
  142. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/perf/loraplus.py +0 -0
  143. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/perf/memory.py +0 -0
  144. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/rl.py +0 -0
  145. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/sft.py +0 -0
  146. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/engine/worker/wandb_log.py +0 -0
  147. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/envs/__init__.py +0 -0
  148. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/envs/base.py +0 -0
  149. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/envs/registry.py +0 -0
  150. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/lora_rank.py +0 -0
  151. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/__init__.py +0 -0
  152. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/_auth.py +0 -0
  153. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/_http.py +0 -0
  154. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/_instance.py +0 -0
  155. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/_instance_bootstrap.py +0 -0
  156. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/allocator.py +0 -0
  157. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/base.py +0 -0
  158. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/lambdalabs/api.py +0 -0
  159. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/lambdalabs/auth.py +0 -0
  160. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/lambdalabs/gpus.py +0 -0
  161. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/lambdalabs/jobs/builders.py +0 -0
  162. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/lambdalabs/preflight.py +0 -0
  163. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/lambdalabs/pricing.py +0 -0
  164. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/lambdalabs/train.py +0 -0
  165. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/preflight.py +0 -0
  166. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/realized.py +0 -0
  167. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/__init__.py +0 -0
  168. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/api.py +0 -0
  169. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/auth.py +0 -0
  170. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/cost.py +0 -0
  171. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/gpus.py +0 -0
  172. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/keys.py +0 -0
  173. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/preflight.py +0 -0
  174. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/preload.py +0 -0
  175. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/pricing.py +0 -0
  176. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/slots.py +0 -0
  177. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/train/deps.py +0 -0
  178. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/providers/runpod/train/endpoints.py +0 -0
  179. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/py.typed +0 -0
  180. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/schema/fields.py +0 -0
  181. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/serve/__init__.py +0 -0
  182. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/serve/export.py +0 -0
  183. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/serve/pricing.py +0 -0
  184. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/__init__.py +0 -0
  185. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/__main__.py +0 -0
  186. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/_deps.py +0 -0
  187. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/_locks.py +0 -0
  188. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/_runtime.py +0 -0
  189. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/app.py +0 -0
  190. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/auth.py +0 -0
  191. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/billing.py +0 -0
  192. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/billing_retry.py +0 -0
  193. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/checkpoints.py +0 -0
  194. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/db.py +0 -0
  195. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/reconcile.py +0 -0
  196. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/routes/__init__.py +0 -0
  197. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/server/routes/runs.py +0 -0
  198. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/flash/spec.py +0 -0
  199. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/infisical-entrypoint.sh +0 -0
  200. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/scripts/build_dev_dist.py +0 -0
  201. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/__init__.py +0 -0
  202. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/_helpers/__init__.py +0 -0
  203. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/_helpers/runner.py +0 -0
  204. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/conftest.py +0 -0
  205. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/fixtures/math_eval.jsonl +0 -0
  206. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/fixtures/math_train.jsonl +0 -0
  207. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/live/__init__.py +0 -0
  208. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/live/conftest.py +0 -0
  209. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/live/test_lambda_live.py +0 -0
  210. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/live/test_runpod_live.py +0 -0
  211. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_allocator.py +0 -0
  212. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_b200_rollout_opt.py +0 -0
  213. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_billing_retry.py +0 -0
  214. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cancel_remote.py +0 -0
  215. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_catalog_consistency.py +0 -0
  216. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_chalk_kernels.py +0 -0
  217. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_charge_pricing.py +0 -0
  218. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cli_errors.py +0 -0
  219. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cli_help.py +0 -0
  220. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cli_managed.py +0 -0
  221. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_client_server_integration.py +0 -0
  222. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_config_overrides.py +0 -0
  223. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cost_analytical.py +0 -0
  224. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cost_equation.py +0 -0
  225. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cost_estimate.py +0 -0
  226. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cost_hardware.py +0 -0
  227. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cost_models.py +0 -0
  228. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_cost_rewards.py +0 -0
  229. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_dev_channel.py +0 -0
  230. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_endpoint_name.py +0 -0
  231. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_env_cache_evict.py +0 -0
  232. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_env_delete.py +0 -0
  233. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_env_no_install.py +0 -0
  234. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_env_publish.py +0 -0
  235. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_env_rate_limit_resolve.py +0 -0
  236. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_export.py +0 -0
  237. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_flash_mvp.py +0 -0
  238. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_flash_worker.py +0 -0
  239. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_flashinfer_cache_dirs.py +0 -0
  240. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_github_urlopen_retry.py +0 -0
  241. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_grpo_mask_aware.py +0 -0
  242. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_grpo_params.py +0 -0
  243. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_grpo_sleep_gate.py +0 -0
  244. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_idle_endpoint_reaper.py +0 -0
  245. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_internal_client.py +0 -0
  246. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_kernel_cache.py +0 -0
  247. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_kernel_fingerprint.py +0 -0
  248. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_kv_util.py +0 -0
  249. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_lambda_runner.py +0 -0
  250. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_logging.py +0 -0
  251. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_login_perms.py +0 -0
  252. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_metrics_schema_agent_contract.py +0 -0
  253. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_mig_guard.py +0 -0
  254. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_multiturn_rollout.py +0 -0
  255. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_oom_escalate_gpu.py +0 -0
  256. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_open_model_policy.py +0 -0
  257. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_orchestrator_flash.py +0 -0
  258. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_packing.py +0 -0
  259. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_poll_helpers.py +0 -0
  260. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_preflight.py +0 -0
  261. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_provider_teardown_robustness.py +0 -0
  262. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_providers_symmetry.py +0 -0
  263. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_realized_cost.py +0 -0
  264. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_resolve_params_b.py +0 -0
  265. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_resume_on_retry.py +0 -0
  266. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_runpod_api_delete.py +0 -0
  267. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_runpod_key_fingerprint.py +0 -0
  268. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_runpod_key_waterfall.py +0 -0
  269. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_runpod_slots.py +0 -0
  270. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_server_billing.py +0 -0
  271. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_server_db.py +0 -0
  272. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_sft_gc_off.py +0 -0
  273. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_update_check.py +0 -0
  274. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_version.py +0 -0
  275. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_vl_weight_sync.py +0 -0
  276. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_warmstart_cross_repo.py +0 -0
  277. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_worker_dryrun.py +0 -0
  278. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_worker_hardexit.py +0 -0
  279. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_worker_image.py +0 -0
  280. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/tests/test_worker_stack.py +0 -0
  281. {freesolo_flash_dev-0.2.36 → freesolo_flash_dev-0.2.37}/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.36
3
+ Version: 0.2.37
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
@@ -62,7 +62,7 @@ The allocator picks the cheapest validated managed GPU class that fits the run.
62
62
  - `flash checkpoints`, `flash deploy`, `flash chat` — serving for trained adapters,
63
63
  including deployable intermediate RL checkpoints.
64
64
  - **Freesolo SDK environments.** Every run names a Freesolo environment id.
65
- Scaffold `environment.py` plus `datasets/train.jsonl`, upload `.` or another
65
+ Scaffold `environment.py` plus `dataset/train.jsonl`, upload `.` or another
66
66
  folder with `flash env push --name <name> <folder>`, then reference the
67
67
  returned id. The worker loads it through `freesolo.environments`. There are no
68
68
  built-in task environments. Single-turn and bounded multi-turn environments are
@@ -84,7 +84,7 @@ The allocator picks the cheapest validated managed GPU class that fits the run.
84
84
  (task-specific grading lives with its example, not in the engine)
85
85
  - `flash/envs/` — environment machinery: registry and the adapter that loads
86
86
  Freesolo SDK environments onto the worker's interface
87
- - `flash env setup` — scaffold a starter local Freesolo env, `datasets/train.jsonl`,
87
+ - `flash env setup` — scaffold a starter local Freesolo env, `dataset/train.jsonl`,
88
88
  ready-to-run configs, and a `TRAINING.md` playbook with common failure modes and
89
89
  mitigations
90
90
  - `flash/serve/`, `flash/server/` — adapter serving and the FastAPI control
@@ -11,7 +11,7 @@ The allocator picks the cheapest validated managed GPU class that fits the run.
11
11
  - `flash checkpoints`, `flash deploy`, `flash chat` — serving for trained adapters,
12
12
  including deployable intermediate RL checkpoints.
13
13
  - **Freesolo SDK environments.** Every run names a Freesolo environment id.
14
- Scaffold `environment.py` plus `datasets/train.jsonl`, upload `.` or another
14
+ Scaffold `environment.py` plus `dataset/train.jsonl`, upload `.` or another
15
15
  folder with `flash env push --name <name> <folder>`, then reference the
16
16
  returned id. The worker loads it through `freesolo.environments`. There are no
17
17
  built-in task environments. Single-turn and bounded multi-turn environments are
@@ -33,7 +33,7 @@ The allocator picks the cheapest validated managed GPU class that fits the run.
33
33
  (task-specific grading lives with its example, not in the engine)
34
34
  - `flash/envs/` — environment machinery: registry and the adapter that loads
35
35
  Freesolo SDK environments onto the worker's interface
36
- - `flash env setup` — scaffold a starter local Freesolo env, `datasets/train.jsonl`,
36
+ - `flash env setup` — scaffold a starter local Freesolo env, `dataset/train.jsonl`,
37
37
  ready-to-run configs, and a `TRAINING.md` playbook with common failure modes and
38
38
  mitigations
39
39
  - `flash/serve/`, `flash/server/` — adapter serving and the FastAPI control
@@ -127,7 +127,6 @@ class FakeClient:
127
127
  "mode": "dev",
128
128
  "openai_model": run_id,
129
129
  "endpoint_name": "https://api.freesolo.co/v1",
130
- "gpu": "RTX 4090",
131
130
  }
132
131
 
133
132
  def undeploy(self, run_id):
@@ -137,7 +136,10 @@ class FakeClient:
137
136
  return [
138
137
  {
139
138
  "run_id": "flash-1718900000-a1b2c3d4",
140
- "deployment": {"gpu": "RTX 4090", "endpoint_name": "https://api.freesolo.co/v1"},
139
+ "deployment": {
140
+ "state": "ready",
141
+ "endpoint_name": "https://api.freesolo.co/v1",
142
+ },
141
143
  }
142
144
  ]
143
145
 
@@ -0,0 +1,343 @@
1
+ <!doctype html>
2
+ <html lang="en"><head><meta charset="utf-8">
3
+ <meta name="viewport" content="width=device-width, initial-scale=1">
4
+ <title>Flash CLI - output style</title>
5
+ <style>
6
+ :root{--navy:#1b1b4b;--bg:#0a0a16;--ink:#cdd2e6;--mut:#8a93a8;--line:#23244a;--accent:#5f72ff;--accent2:#97a3ff;--green:#57ff8f}
7
+ *{box-sizing:border-box}
8
+ body{margin:0;background:radial-gradient(1200px 600px at 50% -10%,#5f72ff22,transparent),var(--bg);
9
+ color:var(--ink);font:15px/1.55 ui-sans-serif,-apple-system,"Segoe UI",Roboto,Inter,sans-serif}
10
+ .wrap{max-width:1320px;margin:0 auto;padding:56px 24px 80px}
11
+ .brand{display:inline-flex;align-items:center;gap:10px;font-weight:700}
12
+ .brand .dot{width:9px;height:9px;border-radius:50%;background:var(--accent);box-shadow:0 0 14px var(--accent)}
13
+ .brand b{color:var(--accent)}
14
+ h1{font-size:30px;margin:18px 0 8px;letter-spacing:-.4px}
15
+ .lede{color:var(--mut);max-width:760px}
16
+ .legend{display:flex;gap:18px;flex-wrap:wrap;margin-top:22px;color:var(--mut);font-size:13px}
17
+ .legend span{display:inline-flex;align-items:center;gap:7px}
18
+ .sw{width:11px;height:11px;border-radius:3px;display:inline-block}
19
+ .card{border:1px solid var(--line);border-radius:14px;margin:22px 0;overflow:hidden;
20
+ box-shadow:0 1px 0 #ffffff0a inset,0 18px 40px -28px #000}
21
+ .card>.head{display:flex;align-items:baseline;gap:12px;padding:15px 18px;border-bottom:1px solid var(--line)}
22
+ .card>.head code{font:600 14px/1 ui-monospace,SFMono-Regular,Menlo,monospace}
23
+ .card>.head .sub{color:var(--mut);font-size:13px}
24
+ .cols{display:grid;grid-template-columns:1fr 1fr 1fr}
25
+ .col+.col{border-left:1px solid var(--line)}
26
+ .col .tag{display:flex;align-items:center;gap:8px;padding:9px 16px;color:var(--mut);font-size:11px;
27
+ letter-spacing:.14em;text-transform:uppercase;border-bottom:1px solid var(--line);background:#0d0d22}
28
+ .col .tag .pill{width:7px;height:7px;border-radius:50%}
29
+ .before .pill{background:#3a3c63}
30
+ .after .pill{background:var(--green);box-shadow:0 0 10px #57ff8f88}
31
+ pre{margin:0;padding:18px;overflow-x:auto;font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,"Cascadia Code",monospace;
32
+ color:#aeb6cf;background:#0d0d22}
33
+ .after pre{background:#09091a}
34
+ .before pre{color:#868eaa}
35
+ /* the light column previews how the theme looks on a light terminal */
36
+ .light .tag{background:#eef0f7;color:#5b6472;border-bottom-color:#e2e5f0}
37
+ .light pre{background:#ffffff;color:#1b1b4b}
38
+ @media(max-width:900px){.cols{grid-template-columns:1fr}.col+.col{border-left:0;border-top:1px solid var(--line)}}
39
+ footer{color:var(--mut);font-size:13px;margin-top:48px;border-top:1px solid var(--line);padding-top:20px}
40
+ footer code{color:var(--accent2)}
41
+ </style></head><body><div class="wrap">
42
+ <header>
43
+ <div class="brand"><span class="dot"></span><span><b>flash</b> cli</span></div>
44
+ <h1>A standardized output theme for every command</h1>
45
+ <p class="lede">One visual language across the whole CLI, in the Freesolo website palette
46
+ (navy <code>#1b1b4b</code>, periwinkle <code>#5f72ff</code>, green <code>#57ff8f</code>): a brand
47
+ header, colored status badges, aligned tables, key/value panels, and syntax-highlighted JSON. Like
48
+ the website, it ships <b>light and dark</b> variants (auto-detected from the terminal background,
49
+ or forced with <code>FLASH_THEME</code>) &mdash; each command below shows both. The themed view
50
+ renders on an interactive terminal; piped or scripted output stays byte-for-byte plain, so
51
+ <code>jq</code>, scripts, and the agent contract are untouched.</p>
52
+ <div class="legend">
53
+ <span><i class="sw" style="background:#5f72ff"></i>periwinkle &mdash; accent / links</span>
54
+ <span><i class="sw" style="background:#57ff8f"></i>green &mdash; success / done</span>
55
+ <span><i class="sw" style="background:#24c2a8"></i>teal &mdash; amounts</span>
56
+ <span><i class="sw" style="background:#9a8cff"></i>indigo &mdash; literals</span>
57
+ <span><i class="sw" style="background:#ff6b6b"></i>red &mdash; failure</span>
58
+ <span><i class="sw" style="background:#4d5470"></i>structure</span>
59
+ </div>
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.36</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.36</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.36</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
+
63
+ account ml-team@acme.ai
64
+ org org_acme
65
+ user usr_4192
66
+ key fs_live_8Kd2… (freesolo key)</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> <span style="font-weight:700">logged in to flash</span>
67
+
68
+ <span style="opacity:.62">account</span> ml-team@acme.ai
69
+ <span style="opacity:.62">org </span> org_acme
70
+ <span style="opacity:.62">user </span> usr_4192
71
+ <span style="opacity:.62">key </span> fs_live_8Kd2… <span style="opacity:.62">(freesolo key)</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> <span style="font-weight:700">logged in to flash</span>
72
+
73
+ <span style="opacity:.62">account</span> ml-team@acme.ai
74
+ <span style="opacity:.62">org </span> org_acme
75
+ <span style="opacity:.62">user </span> usr_4192
76
+ <span style="opacity:.62">key </span> fs_live_8Kd2… <span style="opacity:.62">(freesolo key)</span></pre></div></div></section><section class="card"><div class="head"><code>flash whoami</code><span class="sub">identity behind the stored key</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>logged in to flash
77
+
78
+ account ml-team@acme.ai
79
+ org org_acme
80
+ user usr_4192
81
+ key fs_live_8Kd2… (freesolo key)</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="font-weight:700">logged in to flash</span>
82
+
83
+ <span style="opacity:.62">account</span> ml-team@acme.ai
84
+ <span style="opacity:.62">org </span> org_acme
85
+ <span style="opacity:.62">user </span> usr_4192
86
+ <span style="opacity:.62">key </span> fs_live_8Kd2… <span style="opacity:.62">(freesolo key)</span></pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="font-weight:700">logged in to flash</span>
87
+
88
+ <span style="opacity:.62">account</span> ml-team@acme.ai
89
+ <span style="opacity:.62">org </span> org_acme
90
+ <span style="opacity:.62">user </span> usr_4192
91
+ <span style="opacity:.62">key </span> fs_live_8Kd2… <span style="opacity:.62">(freesolo key)</span></pre></div></div></section><section class="card"><div class="head"><code>flash models</code><span class="sub">supported base models</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>Qwen/Qwen3.5-0.8B
92
+ openbmb/MiniCPM5-1B
93
+ Qwen/Qwen3.5-2B
94
+ Qwen/Qwen3.5-4B
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>
97
+ <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
98
+ <span style="color:#4d5470">•</span> <span style="color:#97a3ff">Qwen/Qwen3.5-0.8B</span>
99
+ <span style="color:#4d5470">•</span> <span style="color:#97a3ff">openbmb/MiniCPM5-1B</span>
100
+ <span style="color:#4d5470">•</span> <span style="color:#97a3ff">Qwen/Qwen3.5-2B</span>
101
+ <span style="color:#4d5470">•</span> <span style="color:#97a3ff">Qwen/Qwen3.5-4B</span>
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>
104
+
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>
106
+ <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
107
+ <span style="color:#9aa1b5">•</span> <span style="color:#3a46c8">Qwen/Qwen3.5-0.8B</span>
108
+ <span style="color:#9aa1b5">•</span> <span style="color:#3a46c8">openbmb/MiniCPM5-1B</span>
109
+ <span style="color:#9aa1b5">•</span> <span style="color:#3a46c8">Qwen/Qwen3.5-2B</span>
110
+ <span style="color:#9aa1b5">•</span> <span style="color:#3a46c8">Qwen/Qwen3.5-4B</span>
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>
113
+
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 $/hr
115
+ RTX 4090 24G 0.69
116
+ RTX 5090 32G 0.99
117
+ A100 PCIe 80G 1.39
118
+ A100 SXM 80G 1.49
119
+ RTX Pro 6000 96G 2.09
120
+ H100 80G 3.29
121
+ H200 141G 4.39
122
+ B200 180G 5.89
123
+
124
+ Tip: GPU class selection is fully automatic — the submit-time allocator always picks the
125
+ cheapest validated managed 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
+ <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">RTX 4090 </span> <span style="color:#8a93a8"> 24 GB</span> <span style="color:#24c2a8">$0.69</span>
130
+ <span style="color:#97a3ff">RTX 5090 </span> <span style="color:#8a93a8"> 32 GB</span> <span style="color:#24c2a8">$0.99</span>
131
+ <span style="color:#97a3ff">A100 PCIe </span> <span style="color:#8a93a8"> 80 GB</span> <span style="color:#24c2a8">$1.39</span>
132
+ <span style="color:#97a3ff">A100 SXM </span> <span style="color:#8a93a8"> 80 GB</span> <span style="color:#24c2a8">$1.49</span>
133
+ <span style="color:#97a3ff">RTX Pro 6000</span> <span style="color:#8a93a8"> 96 GB</span> <span style="color:#24c2a8">$2.09</span>
134
+ <span style="color:#97a3ff">H100 </span> <span style="color:#8a93a8"> 80 GB</span> <span style="color:#24c2a8">$3.29</span>
135
+ <span style="color:#97a3ff">H200 </span> <span style="color:#8a93a8">141 GB</span> <span style="color:#24c2a8">$4.39</span>
136
+ <span style="color:#97a3ff">B200 </span> <span style="color:#8a93a8">180 GB</span> <span style="color:#24c2a8">$5.89</span>
137
+
138
+ <span style="opacity:.62">Tip: GPU class selection is fully automatic — the submit-time allocator always picks the
139
+ cheapest validated managed 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>
140
+ <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
141
+ <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>
142
+ <span style="color:#9aa1b5">──────────── ────── ─────</span>
143
+ <span style="color:#3a46c8">RTX 4090 </span> <span style="color:#5b6472"> 24 GB</span> <span style="color:#0e7490">$0.69</span>
144
+ <span style="color:#3a46c8">RTX 5090 </span> <span style="color:#5b6472"> 32 GB</span> <span style="color:#0e7490">$0.99</span>
145
+ <span style="color:#3a46c8">A100 PCIe </span> <span style="color:#5b6472"> 80 GB</span> <span style="color:#0e7490">$1.39</span>
146
+ <span style="color:#3a46c8">A100 SXM </span> <span style="color:#5b6472"> 80 GB</span> <span style="color:#0e7490">$1.49</span>
147
+ <span style="color:#3a46c8">RTX Pro 6000</span> <span style="color:#5b6472"> 96 GB</span> <span style="color:#0e7490">$2.09</span>
148
+ <span style="color:#3a46c8">H100 </span> <span style="color:#5b6472"> 80 GB</span> <span style="color:#0e7490">$3.29</span>
149
+ <span style="color:#3a46c8">H200 </span> <span style="color:#5b6472">141 GB</span> <span style="color:#0e7490">$4.39</span>
150
+ <span style="color:#3a46c8">B200 </span> <span style="color:#5b6472">180 GB</span> <span style="color:#0e7490">$5.89</span>
151
+
152
+ <span style="opacity:.62">Tip: GPU class selection is fully automatic — the submit-time allocator always picks the
153
+ cheapest validated managed 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, dataset/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>
154
+ <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
155
+ <span style="color:#57ff8f;font-weight:700">✓</span> scaffold ready
156
+
157
+ <span style="color:#97a3ff">environment.py </span> <span style="opacity:.62">env entrypoint — edit the reward + prompt</span>
158
+ <span style="color:#97a3ff">dataset/train.jsonl</span> <span style="opacity:.62">starter training rows</span>
159
+ <span style="color:#97a3ff">configs/rl.toml </span> <span style="opacity:.62">GRPO run config</span>
160
+ <span style="color:#97a3ff">configs/sft.toml </span> <span style="opacity:.62">SFT run config</span>
161
+ <span style="color:#97a3ff">TRAINING.md </span> <span style="opacity:.62">how to train well — read this first</span>
162
+
163
+ <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>
164
+ <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
165
+ <span style="color:#00695c;font-weight:700">✓</span> scaffold ready
166
+
167
+ <span style="color:#3a46c8">environment.py </span> <span style="opacity:.62">env entrypoint — edit the reward + prompt</span>
168
+ <span style="color:#3a46c8">dataset/train.jsonl</span> <span style="opacity:.62">starter training rows</span>
169
+ <span style="color:#3a46c8">configs/rl.toml </span> <span style="opacity:.62">GRPO run config</span>
170
+ <span style="color:#3a46c8">configs/sft.toml </span> <span style="opacity:.62">SFT run config</span>
171
+ <span style="color:#3a46c8">TRAINING.md </span> <span style="opacity:.62">how to train well — read this first</span>
172
+
173
+ <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;`):
174
+ .
175
+ 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>
176
+ <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
177
+ <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>
178
+ <span style="color:#4d5470">·</span> <span style="color:#97a3ff">.</span>
179
+ <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>
180
+ <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
181
+ <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>
182
+ <span style="color:#9aa1b5">·</span> <span style="color:#3a46c8">.</span>
183
+ <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
184
+ reference it in your config:
185
+
186
+ [environment]
187
+ id = &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> published <span style="font-weight:700">acme/math-grader</span>
188
+
189
+ <span style="opacity:.62">reference it in your config:</span>
190
+ <span style="color:#97a3ff">[environment]</span>
191
+ <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> published <span style="font-weight:700">acme/math-grader</span>
192
+
193
+ <span style="opacity:.62">reference it in your config:</span>
194
+ <span style="color:#3a46c8">[environment]</span>
195
+ <span style="color:#3a46c8">id = &quot;acme/math-grader&quot;</span></pre></div></div></section><section class="card"><div class="head"><code>flash train rl.toml</code><span class="sub">submit a run and follow its logs</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>error: [train] unknown key(s): seeds (allowed: advantage_clip, batch_size, epochs, group_size, hf_repo, init_from_adapter, kl_penalty_coef, learning_rate, lora_alpha, lora_rank, max_examples, max_length, max_steps, max_tokens, save_every, steps, stop_sequences, temperature, thinking_length_penalty_coef)
196
+ </pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#ff6b6b;font-weight:700">✗</span> <span style="color:#ff6b6b;font-weight:700">error:</span> [train] unknown key(s): seeds (allowed: advantage_clip, batch_size, epochs, group_size, hf_repo, init_from_adapter, kl_penalty_coef, learning_rate, lora_alpha, lora_rank, max_examples, max_length, max_steps, max_tokens, save_every, steps, stop_sequences, temperature, thinking_length_penalty_coef)
197
+ </pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#cc3b3b;font-weight:700">✗</span> <span style="color:#cc3b3b;font-weight:700">error:</span> [train] unknown key(s): seeds (allowed: advantage_clip, batch_size, epochs, group_size, hf_repo, init_from_adapter, kl_penalty_coef, learning_rate, lora_alpha, lora_rank, max_examples, max_length, max_steps, max_tokens, save_every, steps, stop_sequences, temperature, thinking_length_penalty_coef)
198
+ </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>&nbsp;</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre>&nbsp;</pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre>&nbsp;</pre></div></div></section><section class="card"><div class="head"><code>flash train --dry-run sft.toml</code><span class="sub">validate a config locally</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>&nbsp;</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre>&nbsp;</pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre>&nbsp;</pre></div></div></section><section class="card"><div class="head"><code>flash status &lt;run&gt;</code><span class="sub">a run&#x27;s full status</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>{
199
+ &quot;run_id&quot;: &quot;flash-1718900000-a1b2c3d4&quot;,
200
+ &quot;state&quot;: &quot;done&quot;,
201
+ &quot;spec&quot;: {
202
+ &quot;model&quot;: &quot;Qwen/Qwen3.5-4B&quot;,
203
+ &quot;algorithm&quot;: &quot;grpo&quot;,
204
+ &quot;gpu&quot;: {
205
+ &quot;type&quot;: &quot;RTX 5090&quot;
206
+ }
207
+ },
208
+ &quot;remote&quot;: {
209
+ &quot;provider&quot;: &quot;runpod&quot;,
210
+ &quot;gpu&quot;: &quot;RTX 5090&quot;
211
+ },
212
+ &quot;cost_usd&quot;: 1.8421,
213
+ &quot;realized_cost_usd&quot;: 1.774,
214
+ &quot;created_at&quot;: 1718896400.0,
215
+ &quot;updated_at&quot;: 1718900000.0,
216
+ &quot;error&quot;: null,
217
+ &quot;artifacts_dir&quot;: &quot;acme/qwen3.5-4b-grpo-runs&quot;
218
+ }</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">status</span>
219
+ <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
220
+ <span style="color:#57ff8f">● done</span>
221
+
222
+ <span style="color:#8a93a8">run id </span> <span style="color:#4d5470">·</span> <span style="color:#97a3ff">flash-1718900000-a1b2c3d4</span>
223
+ <span style="color:#8a93a8">model </span> <span style="color:#4d5470">·</span> Qwen/Qwen3.5-4B
224
+ <span style="color:#8a93a8">algorithm</span> <span style="color:#4d5470">·</span> GRPO
225
+ <span style="color:#8a93a8">gpu </span> <span style="color:#4d5470">·</span> RTX 5090
226
+ <span style="color:#8a93a8">cost </span> <span style="color:#4d5470">·</span> <span style="color:#24c2a8">$1.8421</span>
227
+ <span style="color:#8a93a8">realized </span> <span style="color:#4d5470">·</span> <span style="color:#24c2a8">$1.7740</span>
228
+ <span style="color:#8a93a8">created </span> <span style="color:#4d5470">·</span> 2024-06-20 15:13 UTC
229
+ <span style="color:#8a93a8">updated </span> <span style="color:#4d5470">·</span> 2024-06-20 16:13 UTC
230
+ <span style="color:#8a93a8">artifacts</span> <span style="color:#4d5470">·</span> acme/qwen3.5-4b-grpo-runs
231
+
232
+ <span style="opacity:.62">details</span>
233
+ {
234
+ <span style="color:#97a3ff">&quot;run_id&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;flash-1718900000-a1b2c3d4&quot;</span>,
235
+ <span style="color:#97a3ff">&quot;state&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;done&quot;</span>,
236
+ <span style="color:#97a3ff">&quot;spec&quot;</span><span style="color:#4d5470">:</span> {
237
+ <span style="color:#97a3ff">&quot;model&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;Qwen/Qwen3.5-4B&quot;</span>,
238
+ <span style="color:#97a3ff">&quot;algorithm&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;grpo&quot;</span>,
239
+ <span style="color:#97a3ff">&quot;gpu&quot;</span><span style="color:#4d5470">:</span> {
240
+ <span style="color:#97a3ff">&quot;type&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;RTX 5090&quot;</span>
241
+ }
242
+ },
243
+ <span style="color:#97a3ff">&quot;remote&quot;</span><span style="color:#4d5470">:</span> {
244
+ <span style="color:#97a3ff">&quot;gpu&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;RTX 5090&quot;</span>
245
+ },
246
+ <span style="color:#97a3ff">&quot;cost_usd&quot;</span><span style="color:#4d5470">:</span> <span style="color:#24c2a8">1.8421</span>,
247
+ <span style="color:#97a3ff">&quot;realized_cost_usd&quot;</span><span style="color:#4d5470">:</span> <span style="color:#24c2a8">1.774</span>,
248
+ <span style="color:#97a3ff">&quot;created_at&quot;</span><span style="color:#4d5470">:</span> <span style="color:#24c2a8">1718896400.0</span>,
249
+ <span style="color:#97a3ff">&quot;updated_at&quot;</span><span style="color:#4d5470">:</span> <span style="color:#24c2a8">1718900000.0</span>,
250
+ <span style="color:#97a3ff">&quot;error&quot;</span><span style="color:#4d5470">:</span> <span style="color:#9a8cff">null</span>,
251
+ <span style="color:#97a3ff">&quot;artifacts_dir&quot;</span><span style="color:#4d5470">:</span> <span style="color:#57ff8f">&quot;acme/qwen3.5-4b-grpo-runs&quot;</span>
252
+ }</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">status</span>
253
+ <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
254
+ <span style="color:#00695c">● done</span>
255
+
256
+ <span style="color:#5b6472">run id </span> <span style="color:#9aa1b5">·</span> <span style="color:#3a46c8">flash-1718900000-a1b2c3d4</span>
257
+ <span style="color:#5b6472">model </span> <span style="color:#9aa1b5">·</span> Qwen/Qwen3.5-4B
258
+ <span style="color:#5b6472">algorithm</span> <span style="color:#9aa1b5">·</span> GRPO
259
+ <span style="color:#5b6472">gpu </span> <span style="color:#9aa1b5">·</span> RTX 5090
260
+ <span style="color:#5b6472">cost </span> <span style="color:#9aa1b5">·</span> <span style="color:#0e7490">$1.8421</span>
261
+ <span style="color:#5b6472">realized </span> <span style="color:#9aa1b5">·</span> <span style="color:#0e7490">$1.7740</span>
262
+ <span style="color:#5b6472">created </span> <span style="color:#9aa1b5">·</span> 2024-06-20 15:13 UTC
263
+ <span style="color:#5b6472">updated </span> <span style="color:#9aa1b5">·</span> 2024-06-20 16:13 UTC
264
+ <span style="color:#5b6472">artifacts</span> <span style="color:#9aa1b5">·</span> acme/qwen3.5-4b-grpo-runs
265
+
266
+ <span style="opacity:.62">details</span>
267
+ {
268
+ <span style="color:#3a46c8">&quot;run_id&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;flash-1718900000-a1b2c3d4&quot;</span>,
269
+ <span style="color:#3a46c8">&quot;state&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;done&quot;</span>,
270
+ <span style="color:#3a46c8">&quot;spec&quot;</span><span style="color:#9aa1b5">:</span> {
271
+ <span style="color:#3a46c8">&quot;model&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;Qwen/Qwen3.5-4B&quot;</span>,
272
+ <span style="color:#3a46c8">&quot;algorithm&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;grpo&quot;</span>,
273
+ <span style="color:#3a46c8">&quot;gpu&quot;</span><span style="color:#9aa1b5">:</span> {
274
+ <span style="color:#3a46c8">&quot;type&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;RTX 5090&quot;</span>
275
+ }
276
+ },
277
+ <span style="color:#3a46c8">&quot;remote&quot;</span><span style="color:#9aa1b5">:</span> {
278
+ <span style="color:#3a46c8">&quot;gpu&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#00695c">&quot;RTX 5090&quot;</span>
279
+ },
280
+ <span style="color:#3a46c8">&quot;cost_usd&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#0e7490">1.8421</span>,
281
+ <span style="color:#3a46c8">&quot;realized_cost_usd&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#0e7490">1.774</span>,
282
+ <span style="color:#3a46c8">&quot;created_at&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#0e7490">1718896400.0</span>,
283
+ <span style="color:#3a46c8">&quot;updated_at&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#0e7490">1718900000.0</span>,
284
+ <span style="color:#3a46c8">&quot;error&quot;</span><span style="color:#9aa1b5">:</span> <span style="color:#6d28d9">null</span>,
285
+ <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>
286
+ }</pre></div></div></section><section class="card"><div class="head"><code>flash runs</code><span class="sub">all runs and their state/cost</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>RUN_ID STATE ALGO COST($) GPU MODEL
287
+ flash-1718903000-e5f6a7b8 running SFT 0.4210 L40S Qwen/Qwen3.5-9B
288
+ flash-1718900000-a1b2c3d4 done GRPO 1.8421 RTX 5090 Qwen/Qwen3.5-4B
289
+ flash-1718800000-99887766 failed GRPO 0.0712 Qwen/Qwen3.5-2B
290
+ flash-1718700000-12ab34cd queued SFT 0.0000 openbmb/MiniCPM5-1B</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">runs</span> <span style="color:#8a93a8">4 run(s)</span>
291
+ <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
292
+ <span style="color:#8a93a8;font-weight:700">RUN ID </span> <span style="color:#8a93a8;font-weight:700">STATE </span> <span style="color:#8a93a8;font-weight:700">ALGO</span> <span style="color:#8a93a8;font-weight:700"> COST</span> <span style="color:#8a93a8;font-weight:700">GPU </span> <span style="color:#8a93a8;font-weight:700">MODEL </span>
293
+ <span style="color:#4d5470">───────────────────────── ───────── ──── ─────── ──────── ───────────────────</span>
294
+ <span style="color:#97a3ff">flash-1718903000-e5f6a7b8</span> <span style="color:#5f72ff">● running</span> <span style="color:#8a93a8">SFT </span> <span style="color:#24c2a8">$0.4210</span> <span style="color:#8a93a8">L40S </span> Qwen/Qwen3.5-9B
295
+ <span style="color:#97a3ff">flash-1718900000-a1b2c3d4</span> <span style="color:#57ff8f">● done </span> <span style="color:#8a93a8">GRPO</span> <span style="color:#24c2a8">$1.8421</span> <span style="color:#8a93a8">RTX 5090</span> Qwen/Qwen3.5-4B
296
+ <span style="color:#97a3ff">flash-1718800000-99887766</span> <span style="color:#ff6b6b">● failed </span> <span style="color:#8a93a8">GRPO</span> <span style="color:#24c2a8">$0.0712</span> <span style="color:#8a93a8"> </span> Qwen/Qwen3.5-2B
297
+ <span style="color:#97a3ff">flash-1718700000-12ab34cd</span> <span style="color:#8a93a8">○ queued </span> <span style="color:#8a93a8">SFT </span> <span style="color:#24c2a8">$0.0000</span> <span style="color:#8a93a8"> </span> openbmb/MiniCPM5-1B</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">runs</span> <span style="color:#5b6472">4 run(s)</span>
298
+ <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
299
+ <span style="color:#5b6472;font-weight:700">RUN ID </span> <span style="color:#5b6472;font-weight:700">STATE </span> <span style="color:#5b6472;font-weight:700">ALGO</span> <span style="color:#5b6472;font-weight:700"> COST</span> <span style="color:#5b6472;font-weight:700">GPU </span> <span style="color:#5b6472;font-weight:700">MODEL </span>
300
+ <span style="color:#9aa1b5">───────────────────────── ───────── ──── ─────── ──────── ───────────────────</span>
301
+ <span style="color:#3a46c8">flash-1718903000-e5f6a7b8</span> <span style="color:#5f72ff">● running</span> <span style="color:#5b6472">SFT </span> <span style="color:#0e7490">$0.4210</span> <span style="color:#5b6472">L40S </span> Qwen/Qwen3.5-9B
302
+ <span style="color:#3a46c8">flash-1718900000-a1b2c3d4</span> <span style="color:#00695c">● done </span> <span style="color:#5b6472">GRPO</span> <span style="color:#0e7490">$1.8421</span> <span style="color:#5b6472">RTX 5090</span> Qwen/Qwen3.5-4B
303
+ <span style="color:#3a46c8">flash-1718800000-99887766</span> <span style="color:#cc3b3b">● failed </span> <span style="color:#5b6472">GRPO</span> <span style="color:#0e7490">$0.0712</span> <span style="color:#5b6472"> </span> Qwen/Qwen3.5-2B
304
+ <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>{
305
+ &quot;run_id&quot;: &quot;flash-1718903000-e5f6a7b8&quot;,
306
+ &quot;state&quot;: &quot;cancelled&quot;
307
+ }</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>
308
+ <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>
309
+ <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>{
310
+ &quot;run_id&quot;: &quot;flash-1718900000-a1b2c3d4&quot;,
311
+ &quot;state&quot;: &quot;deployed&quot;,
312
+ &quot;mode&quot;: &quot;dev&quot;,
313
+ &quot;openai_model&quot;: &quot;flash-1718900000-a1b2c3d4&quot;,
314
+ &quot;endpoint_name&quot;: &quot;https://api.freesolo.co/v1&quot;
315
+ }</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
316
+ <span style="color:#8a93a8">run </span> <span style="color:#4d5470">·</span> <span style="color:#97a3ff">flash-1718900000-a1b2c3d4</span>
317
+ <span style="color:#8a93a8">endpoint</span> <span style="color:#4d5470">·</span> <span style="color:#57ff8f">https://api.freesolo.co/v1</span>
318
+ <span style="color:#8a93a8">url </span> <span style="color:#4d5470">·</span> <span style="color:#97a3ff">https://api.freesolo.co/v1/v1</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> deployed
319
+ <span style="color:#5b6472">run </span> <span style="color:#9aa1b5">·</span> <span style="color:#3a46c8">flash-1718900000-a1b2c3d4</span>
320
+ <span style="color:#5b6472">endpoint</span> <span style="color:#9aa1b5">·</span> <span style="color:#00695c">https://api.freesolo.co/v1</span>
321
+ <span style="color:#5b6472">url </span> <span style="color:#9aa1b5">·</span> <span style="color:#3a46c8">https://api.freesolo.co/v1/v1</span></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>{
322
+ &quot;run_id&quot;: &quot;flash-1718900000-a1b2c3d4&quot;,
323
+ &quot;deleted_endpoints&quot;: [
324
+ &quot;flash-a1b2c3d4-serve&quot;
325
+ ]
326
+ }</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>
327
+ <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>
328
+ <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 STATE ENDPOINT DETAIL
329
+ flash-1718900000-a1b2c3d4 ready 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>
330
+ <span style="color:#4d5470">────────────────────────────────────────────────────────────────────────────</span>
331
+ <span style="color:#8a93a8;font-weight:700">RUN ID </span> <span style="color:#8a93a8;font-weight:700">STATE</span> <span style="color:#8a93a8;font-weight:700">ENDPOINT </span> <span style="color:#8a93a8;font-weight:700">DETAIL</span>
332
+ <span style="color:#4d5470">───────────────────────── ───── ────────────────────────── ──────</span>
333
+ <span style="color:#97a3ff">flash-1718900000-a1b2c3d4</span> <span style="color:#57ff8f">ready</span> <span style="color:#57ff8f">https://api.freesolo.co/v1</span> <span style="color:#8a93a8"> </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">deployments</span> <span style="color:#5b6472">1 active</span>
334
+ <span style="color:#9aa1b5">────────────────────────────────────────────────────────────────────────────</span>
335
+ <span style="color:#5b6472;font-weight:700">RUN ID </span> <span style="color:#5b6472;font-weight:700">STATE</span> <span style="color:#5b6472;font-weight:700">ENDPOINT </span> <span style="color:#5b6472;font-weight:700">DETAIL</span>
336
+ <span style="color:#9aa1b5">───────────────────────── ───── ────────────────────────── ──────</span>
337
+ <span style="color:#3a46c8">flash-1718900000-a1b2c3d4</span> <span style="color:#00695c">ready</span> <span style="color:#00695c">https://api.freesolo.co/v1</span> <span style="color:#5b6472"> </span></pre></div></div></section><section class="card"><div class="head"><code>flash chat &lt;run&gt; -m ...</code><span class="sub">chat with a deployed adapter</span></div><div class="cols"><div class="col before"><div class="tag"><span class="pill"></span>before</div><pre>The capital of France is Paris. It has been the country&#x27;s political and cultural center since the 12th century.</pre></div><div class="col after"><div class="tag"><span class="pill"></span>after · dark</div><pre><span style="color:#97a3ff;font-weight:700">assistant</span>
338
+ The capital of France is Paris. It has been the country&#x27;s political and cultural center since the 12th century.</pre></div><div class="col after light"><div class="tag"><span class="pill"></span>after · light</div><pre><span style="color:#3a46c8;font-weight:700">assistant</span>
339
+ The capital of France is Paris. It has been the country&#x27;s political and cultural center since the 12th century.</pre></div></div></section>
340
+ <footer>Rendered from the real <code>flash</code> handlers via <code>FLASH_STYLE=1</code>. The
341
+ plain column is the exact machine output (<code>FLASH_STYLE=0</code> / non-TTY). Pure standard
342
+ library, no new dependencies. Regenerate with <code>uv run python docs/cli-style/generate.py</code>.</footer>
343
+ </div></body></html>
@@ -0,0 +1,7 @@
1
+ """Shared adapter artifact filenames used by training and control-plane code."""
2
+
3
+ from __future__ import annotations
4
+
5
+ # The PEFT adapter weights file a deployable adapter must carry. Modern saves use safetensors,
6
+ # but older PEFT/default settings may emit adapter_model.bin.
7
+ ADAPTER_WEIGHT_FILES = ("adapter_model.safetensors", "adapter_model.bin")
@@ -259,7 +259,7 @@ def _build_parser() -> argparse.ArgumentParser:
259
259
  env_pull.add_argument(
260
260
  "path",
261
261
  nargs="?",
262
- help="optional single file within the env to fetch, e.g. datasets/train.jsonl",
262
+ help="optional single file within the env to fetch, e.g. dataset/train.jsonl",
263
263
  )
264
264
  env_pull.add_argument(
265
265
  "-o",
@@ -0,0 +1,32 @@
1
+ """TTY helpers shared by CLI progress renderers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+
7
+
8
+ class TtyStatusLine:
9
+ """Carriage-return status line on stderr; no-op off a TTY."""
10
+
11
+ def __init__(self) -> None:
12
+ self._enabled = sys.stderr.isatty()
13
+ self._last_len = 0
14
+ self._active = False
15
+
16
+ @property
17
+ def enabled(self) -> bool:
18
+ return self._enabled
19
+
20
+ def _write(self, message: str) -> None:
21
+ padding = " " * max(0, self._last_len - len(message))
22
+ sys.stderr.write(f"\r{message}{padding}")
23
+ sys.stderr.flush()
24
+ self._last_len = len(message)
25
+ self._active = True
26
+
27
+ def clear(self) -> None:
28
+ if not (self._enabled and self._active):
29
+ return
30
+ sys.stderr.write(f"\r{' ' * self._last_len}\r")
31
+ sys.stderr.flush()
32
+ self._active = False