freesolo-flash-dev 1.0.5__tar.gz → 1.0.6__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 (359) hide show
  1. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/PKG-INFO +1 -1
  2. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/render.py +1 -1
  3. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/base.py +4 -21
  4. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/schema/__init__.py +3 -3
  5. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/reconcile.py +2 -1
  6. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/pyproject.toml +2 -2
  7. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_render_theme.py +43 -1
  8. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_gpus.py +8 -6
  9. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_spec_and_validation.py +4 -4
  10. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/uv.lock +1 -1
  11. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.claude/skills/verify/SKILL.md +0 -0
  12. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.dockerignore +0 -0
  13. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.env.example +0 -0
  14. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/auto-rebake.yml +0 -0
  15. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/bake-kernel-cache.yml +0 -0
  16. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/ci.yml +0 -0
  17. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/main-source-guard.yml +0 -0
  18. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/notify-tests-repo.yml +0 -0
  19. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/publish-dev.yml +0 -0
  20. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/publish-image.yml +0 -0
  21. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/publish.yml +0 -0
  22. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/version-parity.yml +0 -0
  23. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/worker-image.yml +0 -0
  24. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.gitignore +0 -0
  25. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/Dockerfile +0 -0
  26. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/Dockerfile.worker +0 -0
  27. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/LICENSE +0 -0
  28. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/README.md +0 -0
  29. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/build/kernel_cache/.gitignore +0 -0
  30. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/build/kernel_cache/.keep +0 -0
  31. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/Dockerfile.kernelcache +0 -0
  32. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/Dockerfile.kernelcache.relayer +0 -0
  33. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/bake_kernel_cache.py +0 -0
  34. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/bake_pod_entry.py +0 -0
  35. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/kernel_fingerprint.py +0 -0
  36. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/make_rp_handler.py +0 -0
  37. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/__init__.py +0 -0
  38. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/_channel.py +0 -0
  39. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/_fileio.py +0 -0
  40. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/_logging.py +0 -0
  41. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/_update_check.py +0 -0
  42. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/adapter_artifacts.py +0 -0
  43. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/catalog.py +0 -0
  44. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/__init__.py +0 -0
  45. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/__main__.py +0 -0
  46. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/_tty.py +0 -0
  47. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/commands.py +0 -0
  48. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/env_setup.py +0 -0
  49. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/envpush.py +0 -0
  50. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/training_doc.py +0 -0
  51. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/client/__init__.py +0 -0
  52. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/client/config.py +0 -0
  53. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/client/http.py +0 -0
  54. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/client/runtime_secrets.py +0 -0
  55. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/client/specs.py +0 -0
  56. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cost/__init__.py +0 -0
  57. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cost/analytical.py +0 -0
  58. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cost/facts.py +0 -0
  59. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cost/spec.py +0 -0
  60. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cost/types.py +0 -0
  61. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/diagnostics.py +0 -0
  62. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/__init__.py +0 -0
  63. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/accounting.py +0 -0
  64. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/chalk_kernels.py +0 -0
  65. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/multiturn_reward_scoring.py +0 -0
  66. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/multiturn_rollout.py +0 -0
  67. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/recipe.py +0 -0
  68. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/steps.py +0 -0
  69. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/structured_outputs.py +0 -0
  70. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/vram.py +0 -0
  71. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/__init__.py +0 -0
  72. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/__main__.py +0 -0
  73. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/_pkg.py +0 -0
  74. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/adapter.py +0 -0
  75. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/decoding.py +0 -0
  76. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/finalize.py +0 -0
  77. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/gpu_setup.py +0 -0
  78. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/grpo.py +0 -0
  79. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/grpo_multimodal.py +0 -0
  80. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/grpo_perturn_trainer.py +0 -0
  81. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/heartbeat.py +0 -0
  82. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/hf.py +0 -0
  83. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/kernel_warmup.py +0 -0
  84. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/lora.py +0 -0
  85. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/opd.py +0 -0
  86. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/opd_gkd.py +0 -0
  87. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/opd_vllm.py +0 -0
  88. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/packing.py +0 -0
  89. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/__init__.py +0 -0
  90. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/attn.py +0 -0
  91. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/diagnostics.py +0 -0
  92. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/lifecycle.py +0 -0
  93. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/liger.py +0 -0
  94. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/loraplus.py +0 -0
  95. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/memory.py +0 -0
  96. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/rl.py +0 -0
  97. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/rng.py +0 -0
  98. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/sft.py +0 -0
  99. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/teacher.py +0 -0
  100. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/tokenizer_align.py +0 -0
  101. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/wandb_log.py +0 -0
  102. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker_entrypoint.py +0 -0
  103. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/__init__.py +0 -0
  104. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/adapter.py +0 -0
  105. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/archive.py +0 -0
  106. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/archive_policy.py +0 -0
  107. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/base.py +0 -0
  108. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/loader.py +0 -0
  109. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/pull.py +0 -0
  110. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/registry.py +0 -0
  111. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/lora_rank.py +0 -0
  112. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/multimodal.py +0 -0
  113. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/opd_retry_contract.py +0 -0
  114. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/__init__.py +0 -0
  115. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_auth.py +0 -0
  116. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_deadline.py +0 -0
  117. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_hf_artifacts.py +0 -0
  118. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_hf_retry.py +0 -0
  119. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_http.py +0 -0
  120. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_instance.py +0 -0
  121. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_instance_bootstrap.py +0 -0
  122. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_instance_poll.py +0 -0
  123. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_instance_provider.py +0 -0
  124. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_poll.py +0 -0
  125. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_worker.py +0 -0
  126. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/allocator.py +0 -0
  127. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/__init__.py +0 -0
  128. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/api.py +0 -0
  129. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/auth.py +0 -0
  130. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/gpus.py +0 -0
  131. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/jobs/__init__.py +0 -0
  132. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/jobs/builders.py +0 -0
  133. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/preflight.py +0 -0
  134. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/pricing.py +0 -0
  135. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/preflight.py +0 -0
  136. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/realized.py +0 -0
  137. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/__init__.py +0 -0
  138. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/api.py +0 -0
  139. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/auth.py +0 -0
  140. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/cost.py +0 -0
  141. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/gpus.py +0 -0
  142. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/jobs.py +0 -0
  143. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/keys.py +0 -0
  144. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/preflight.py +0 -0
  145. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/preload.py +0 -0
  146. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/pricing.py +0 -0
  147. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/slots.py +0 -0
  148. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/train/__init__.py +0 -0
  149. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/train/endpoints.py +0 -0
  150. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/__init__.py +0 -0
  151. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/api.py +0 -0
  152. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/auth.py +0 -0
  153. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/jobs/__init__.py +0 -0
  154. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/jobs/builders.py +0 -0
  155. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/preflight.py +0 -0
  156. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/pricing.py +0 -0
  157. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/py.typed +0 -0
  158. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/runner/__init__.py +0 -0
  159. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/runner/checkpoints.py +0 -0
  160. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/runner/deploy.py +0 -0
  161. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/runner/lifecycle.py +0 -0
  162. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/runner/verified_revisions.py +0 -0
  163. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/schema/fields.py +0 -0
  164. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/serve/__init__.py +0 -0
  165. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/serve/deploy.py +0 -0
  166. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/serve/export.py +0 -0
  167. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/serve/pricing.py +0 -0
  168. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/serve/urls.py +0 -0
  169. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/__init__.py +0 -0
  170. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/__main__.py +0 -0
  171. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/_deps.py +0 -0
  172. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/_internal_client.py +0 -0
  173. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/_locks.py +0 -0
  174. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/_runtime.py +0 -0
  175. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/app.py +0 -0
  176. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/auth.py +0 -0
  177. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/billing.py +0 -0
  178. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/billing_retry.py +0 -0
  179. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/checkpoints.py +0 -0
  180. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/db.py +0 -0
  181. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/environment_registry.py +0 -0
  182. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/envs.py +0 -0
  183. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/repo_cleanup.py +0 -0
  184. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/routes/__init__.py +0 -0
  185. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/routes/envs.py +0 -0
  186. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/routes/meta.py +0 -0
  187. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/routes/runs.py +0 -0
  188. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/routes/serving.py +0 -0
  189. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/run_registry.py +0 -0
  190. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/spec.py +0 -0
  191. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/infisical-entrypoint.sh +0 -0
  192. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/scripts/build_dev_dist.py +0 -0
  193. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/__init__.py +0 -0
  194. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/_helpers/__init__.py +0 -0
  195. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/_helpers/runner.py +0 -0
  196. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/_helpers/specs.py +0 -0
  197. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/_helpers/vast.py +0 -0
  198. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/conftest.py +0 -0
  199. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/fixtures/math_eval.jsonl +0 -0
  200. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/fixtures/math_train.jsonl +0 -0
  201. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/live/__init__.py +0 -0
  202. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/live/conftest.py +0 -0
  203. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/live/test_lambda_live.py +0 -0
  204. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/live/test_runpod_live.py +0 -0
  205. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/live/test_vast_live.py +0 -0
  206. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_accounting_coverage.py +0 -0
  207. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_agent_flash_cli_contract.py +0 -0
  208. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_algorithms.py +0 -0
  209. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_allocator.py +0 -0
  210. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_async_uploads.py +0 -0
  211. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_b200_rollout_opt.py +0 -0
  212. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_backend_jobspec_contract.py +0 -0
  213. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_base_model_provenance.py +0 -0
  214. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_billing_retry.py +0 -0
  215. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cancel_remote.py +0 -0
  216. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_catalog_consistency.py +0 -0
  217. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_chalk_kernels.py +0 -0
  218. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_charge_pricing.py +0 -0
  219. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_checkpoints.py +0 -0
  220. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_commands.py +0 -0
  221. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_commands_coverage.py +0 -0
  222. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_errors.py +0 -0
  223. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_estimate.py +0 -0
  224. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_help.py +0 -0
  225. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_main_coverage.py +0 -0
  226. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_managed.py +0 -0
  227. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_render_coverage.py +0 -0
  228. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_client.py +0 -0
  229. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_client_server_integration.py +0 -0
  230. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_client_stream_reads.py +0 -0
  231. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_config_overrides.py +0 -0
  232. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_controlled_experiment_repairs.py +0 -0
  233. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_analytical.py +0 -0
  234. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_equation.py +0 -0
  235. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_estimate.py +0 -0
  236. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_hardware.py +0 -0
  237. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_models.py +0 -0
  238. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_rewards.py +0 -0
  239. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_deploy_latency.py +0 -0
  240. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_dev_channel.py +0 -0
  241. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_disk_gb.py +0 -0
  242. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_endpoint_name.py +0 -0
  243. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_cache_evict.py +0 -0
  244. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_delete.py +0 -0
  245. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_download.py +0 -0
  246. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_download_api.py +0 -0
  247. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_no_install.py +0 -0
  248. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_publish.py +0 -0
  249. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_pull.py +0 -0
  250. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_pull_coverage.py +0 -0
  251. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_pull_loader_coverage.py +0 -0
  252. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_pull_managed_control_plane.py +0 -0
  253. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_push.py +0 -0
  254. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_rate_limit_resolve.py +0 -0
  255. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_envs_coverage.py +0 -0
  256. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_export.py +0 -0
  257. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_flash_mvp.py +0 -0
  258. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_flash_worker.py +0 -0
  259. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_flashinfer_cache_dirs.py +0 -0
  260. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_github_urlopen_retry.py +0 -0
  261. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_grpo_mask_aware.py +0 -0
  262. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_grpo_params.py +0 -0
  263. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_grpo_perturn.py +0 -0
  264. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_grpo_sleep_gate.py +0 -0
  265. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_health_liveness.py +0 -0
  266. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_hf_retry.py +0 -0
  267. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_idle_endpoint_reaper.py +0 -0
  268. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_instance_bootstrap_coverage.py +0 -0
  269. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_internal_client.py +0 -0
  270. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_jobs.py +0 -0
  271. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_kernel_cache.py +0 -0
  272. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_kernel_fingerprint.py +0 -0
  273. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_kv_util.py +0 -0
  274. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_lambda_api_coverage.py +0 -0
  275. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_lambda_runner.py +0 -0
  276. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_logging.py +0 -0
  277. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_login_perms.py +0 -0
  278. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_lora_rank_coverage.py +0 -0
  279. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_lora_rank_preflight.py +0 -0
  280. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_managed_hf_repo.py +0 -0
  281. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_metrics_schema_agent_contract.py +0 -0
  282. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_mig_guard.py +0 -0
  283. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multimodal_input_grads.py +0 -0
  284. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multimodal_training.py +0 -0
  285. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_image_rollout.py +0 -0
  286. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_per_turn_reward.py +0 -0
  287. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_rollout.py +0 -0
  288. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_rollout_coverage.py +0 -0
  289. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_rollout_records.py +0 -0
  290. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_rollout_request_policy.py +0 -0
  291. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_named_reward_metrics.py +0 -0
  292. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_oom_escalate_gpu.py +0 -0
  293. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_opd.py +0 -0
  294. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_opd_full_state_resume.py +0 -0
  295. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_opd_resume_safety.py +0 -0
  296. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_opd_vllm.py +0 -0
  297. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_open_model_policy.py +0 -0
  298. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_orchestrator_flash.py +0 -0
  299. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_packing.py +0 -0
  300. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_packing_coverage.py +0 -0
  301. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_poll_helpers.py +0 -0
  302. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_preflight.py +0 -0
  303. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_provider_preflight_coverage.py +0 -0
  304. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_provider_routing.py +0 -0
  305. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_provider_teardown_robustness.py +0 -0
  306. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_providers_symmetry.py +0 -0
  307. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_realized_cost.py +0 -0
  308. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_repo_cleanup.py +0 -0
  309. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_resolve_params_b.py +0 -0
  310. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_resume_on_retry.py +0 -0
  311. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_runmgmt.py +0 -0
  312. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_runpod_api_delete.py +0 -0
  313. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_runpod_key_fingerprint.py +0 -0
  314. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_runpod_key_waterfall.py +0 -0
  315. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_runpod_slots.py +0 -0
  316. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_serve.py +0 -0
  317. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_api.py +0 -0
  318. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_app_coverage.py +0 -0
  319. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_auth_singleflight.py +0 -0
  320. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_billing.py +0 -0
  321. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_checkpoints_coverage.py +0 -0
  322. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_db.py +0 -0
  323. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_envs_coverage.py +0 -0
  324. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_locks_coverage.py +0 -0
  325. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_serving_context_preflight.py +0 -0
  326. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_serving_contract.py +0 -0
  327. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_serving_pricing_coverage.py +0 -0
  328. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_serving_schema_coverage.py +0 -0
  329. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_sft_activation_shaping.py +0 -0
  330. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_sft_example_selection.py +0 -0
  331. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_sft_gc_off.py +0 -0
  332. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_sft_max_context.py +0 -0
  333. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_sft_tokenize_cache.py +0 -0
  334. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_single_turn_multimodal_grpo.py +0 -0
  335. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_structured_outputs.py +0 -0
  336. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_thinking_config.py +0 -0
  337. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_train_context_preflight.py +0 -0
  338. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_training_controls.py +0 -0
  339. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_update_check.py +0 -0
  340. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vast_api.py +0 -0
  341. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vast_api_coverage.py +0 -0
  342. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vast_offers.py +0 -0
  343. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vast_provider_coverage.py +0 -0
  344. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vast_runner.py +0 -0
  345. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_verified_revisions.py +0 -0
  346. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_verifiers.py +0 -0
  347. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_version.py +0 -0
  348. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vl_warmstart_adapter_keys.py +0 -0
  349. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_wandb_log_coverage.py +0 -0
  350. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_wandb_naming.py +0 -0
  351. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_warmstart_adapter_download.py +0 -0
  352. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_warmstart_cross_repo.py +0 -0
  353. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_weight_cache.py +0 -0
  354. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_worker_dryrun.py +0 -0
  355. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_worker_hardexit.py +0 -0
  356. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_worker_image.py +0 -0
  357. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_worker_init_heartbeat.py +0 -0
  358. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_worker_stack.py +0 -0
  359. {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/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: 1.0.5
3
+ Version: 1.0.6
4
4
  Summary: Flash — managed LoRA post-training (SFT/GRPO/OPD) for Freesolo environments, driven by the `flash` CLI
5
5
  Project-URL: Homepage, https://github.com/freesolo-co/flash
6
6
  Project-URL: Repository, https://github.com/freesolo-co/flash
@@ -440,7 +440,7 @@ def gpus_table(rows: list[tuple[str, int, float | None]], tip: str) -> str:
440
440
 
441
441
  def gpu_label(spec: dict, remote: dict) -> str:
442
442
  """Human-facing GPU label. Provider metadata stays internal."""
443
- return remote.get("gpu") or (spec.get("gpu") or {}).get("type", "")
443
+ return remote.get("allocated_gpu") or (spec.get("gpu") or {}).get("type", "")
444
444
 
445
445
 
446
446
  def runs_table(runs: list[dict]) -> str:
@@ -137,19 +137,6 @@ GPU_CLASSES: tuple[GpuClass, ...] = (
137
137
  )
138
138
 
139
139
  GPU_INFO: dict[str, GpuClass] = {g.name: g for g in GPU_CLASSES}
140
- LEGACY_GPU_CLASSES: tuple[GpuClass, ...] = (
141
- GpuClass(
142
- "RTX A6000",
143
- "NVIDIA_RTX_A6000",
144
- 48,
145
- "a6000",
146
- "sm86",
147
- 0.49,
148
- lambda_name="gpu_1x_a6000",
149
- vast_name="RTX A6000",
150
- ),
151
- )
152
- _GPU_INFO_ALL: dict[str, GpuClass] = {**GPU_INFO, **{g.name: g for g in LEGACY_GPU_CLASSES}}
153
140
  KNOWN = tuple(GPU_INFO)
154
141
  VALIDATED = tuple(g.name for g in GPU_CLASSES if g.validated)
155
142
 
@@ -204,7 +191,7 @@ def _alias_keys(name: str) -> set[str]:
204
191
 
205
192
 
206
193
  _ALIAS_TARGETS: dict[str, set[str]] = {}
207
- for _info in _GPU_INFO_ALL.values():
194
+ for _info in GPU_INFO.values():
208
195
  for _provider_name in (_info.name, _info.vast_name, *_info.vast_aliases):
209
196
  if not _provider_name:
210
197
  continue
@@ -214,7 +201,7 @@ _ALIASES: dict[str, str] = {
214
201
  key: next(iter(targets)) for key, targets in _ALIAS_TARGETS.items() if len(targets) == 1
215
202
  }
216
203
  # exact canonical names always resolve to themselves even if a provider spelling collides with them.
217
- _ALIASES.update({_info.name.lower(): _info.name for _info in _GPU_INFO_ALL.values()})
204
+ _ALIASES.update({_info.name.lower(): _info.name for _info in GPU_INFO.values()})
218
205
  # full marketing names (nvidia-smi / runpod api) and historical aliases not covered by generic rules.
219
206
  _ALIASES.update(
220
207
  {
@@ -264,11 +251,7 @@ class UnreconciledCreateError(RuntimeError):
264
251
 
265
252
 
266
253
  def canonical_gpu(name: str) -> str:
267
- """Normalize a friendly GPU name to an active or retired class; raise otherwise.
268
-
269
- Retired classes resolve for teardown/pricing compatibility but stay absent from ``GPU_INFO`` so
270
- allocation, display, and provider offer matching do not select them.
271
- """
254
+ """Normalize a friendly GPU name to a managed GPU class; raise otherwise."""
272
255
  key = (name or "").strip().lower()
273
256
  if key in _ALIASES:
274
257
  return _ALIASES[key]
@@ -276,7 +259,7 @@ def canonical_gpu(name: str) -> str:
276
259
 
277
260
 
278
261
  def get_gpu_info(name: str) -> GpuClass:
279
- return _GPU_INFO_ALL[canonical_gpu(name)]
262
+ return GPU_INFO[canonical_gpu(name)]
280
263
 
281
264
 
282
265
  def gpu_classes_for(identity_attr: str) -> list[GpuClass]:
@@ -397,9 +397,9 @@ def spec_from_dict(raw: dict[str, Any], run_id: str | None = None) -> JobSpec:
397
397
  # exact_type it suggests might not be provisionable there.
398
398
  if "type" in gpu_raw and not exact_type and not gpu_provider:
399
399
  authored_type_raw = gpu_raw["type"]
400
- # only an active validated class is a usable exact_type pin; an unrecognized string or a
401
- # retired-but-known class (e.g. RTX A6000) must not be echoed back as an exact_type, since
402
- # the exact_type validation above would then reject the very config the note suggested.
400
+ # only an active validated class is a usable exact_type pin; an unrecognized string must
401
+ # not be echoed back as an exact_type, since the exact_type validation above would then
402
+ # reject the very config the note suggested.
403
403
  pinnable: str | None = None
404
404
  if isinstance(authored_type_raw, str):
405
405
  try:
@@ -106,6 +106,7 @@ def reconcile_run(status: runner.RunStatus, *, now: float | None = None) -> bool
106
106
  later cycle (within the window) retries once the provider invoice settles."""
107
107
  now = time.time() if now is None else now
108
108
  remote = status.remote or {}
109
+ spec = status.spec or {}
109
110
  # raw persisted RunStatus.remote may omit started_ts or contain a falsey value. 0.0 means an
110
111
  # unknown launch rather than the epoch; falling back to created_at prevents inflated flat-rate
111
112
  # instance billing.
@@ -126,7 +127,7 @@ def reconcile_run(status: runner.RunStatus, *, now: float | None = None) -> bool
126
127
  "runId": status.run_id,
127
128
  "realizedCostUsd": realized.realized_usd,
128
129
  "provider": realized.provider,
129
- "gpu": remote.get("allocated_gpu") or remote.get("gpu"),
130
+ "gpu": remote.get("allocated_gpu") or (spec.get("gpu") or {}).get("type"),
130
131
  "costByResource": realized.by_resource,
131
132
  "wallSeconds": realized.wall_seconds,
132
133
  "costBasis": "realized",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "freesolo-flash-dev"
3
- version = "1.0.5"
3
+ version = "1.0.6"
4
4
  description = "Flash — managed LoRA post-training (SFT/GRPO/OPD) for Freesolo environments, driven by the `flash` CLI"
5
5
  readme = "README.md"
6
6
  # RunPod Flash supports Python 3.11-3.12 (not 3.13 yet).
@@ -116,7 +116,7 @@ artifacts = ["flash/py.typed"]
116
116
  # auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
117
117
  # PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
118
118
  # dev-channel release = bump this (and [project].version) and merge to `dev`.
119
- version = "1.0.5"
119
+ version = "1.0.6"
120
120
 
121
121
  [tool.pytest.ini_options]
122
122
  pythonpath = ["."]
@@ -88,7 +88,7 @@ def test_runs_and_status_hide_provider_names(monkeypatch) -> None:
88
88
  "run_id": "flash-1",
89
89
  "state": "done",
90
90
  "spec": {"model": "Qwen/Qwen3.5-4B", "algorithm": "grpo"},
91
- "remote": {"gpu": "RTX 4090", "provider": "runpod", "flash_arm": "runpod"},
91
+ "remote": {"allocated_gpu": "RTX 4090", "provider": "runpod", "flash_arm": "runpod"},
92
92
  }
93
93
  runs = render.runs_table([run])
94
94
  status = render.run_status(run)
@@ -100,6 +100,48 @@ def test_runs_and_status_hide_provider_names(monkeypatch) -> None:
100
100
  assert "flash_arm" not in status.lower()
101
101
 
102
102
 
103
+ def test_runs_and_status_prefer_allocated_gpu(monkeypatch) -> None:
104
+ monkeypatch.setenv("FLASH_STYLE", "1")
105
+ monkeypatch.setenv("NO_COLOR", "1")
106
+
107
+ allocated_run = {
108
+ "run_id": "flash-allocated",
109
+ "state": "done",
110
+ "spec": {
111
+ "model": "Qwen/Qwen3.5-4B",
112
+ "algorithm": "grpo",
113
+ "gpu": {"type": "RTX Pro 6000"},
114
+ },
115
+ "remote": {"allocated_gpu": "B200"},
116
+ }
117
+ runs = render.runs_table([allocated_run])
118
+ status = render.run_status(allocated_run)
119
+ status_panel = status.split("details", 1)[0]
120
+ assert "B200" in runs
121
+ assert "B200" in status_panel
122
+ assert "RTX Pro 6000" not in runs
123
+ assert "RTX Pro 6000" not in status_panel
124
+
125
+ spec_only_run = {
126
+ "run_id": "flash-spec-only",
127
+ "state": "done",
128
+ "spec": {"gpu": {"type": "RTX Pro 6000"}},
129
+ }
130
+ assert "RTX Pro 6000" in render.runs_table([spec_only_run])
131
+ assert "RTX Pro 6000" in render.run_status(spec_only_run)
132
+
133
+ # the removed legacy remote["gpu"] key is no longer honored: the label resolves from the
134
+ # authoritative allocated_gpu or the provisional spec type, never the dead key.
135
+ legacy_key_run = {
136
+ "run_id": "flash-legacy-key",
137
+ "state": "done",
138
+ "spec": {"gpu": {"type": "RTX Pro 6000"}},
139
+ "remote": {"gpu": "B200"},
140
+ }
141
+ assert "B200" not in render.runs_table([legacy_key_run])
142
+ assert "RTX Pro 6000" in render.runs_table([legacy_key_run])
143
+
144
+
103
145
  def test_color_respects_no_color(monkeypatch) -> None:
104
146
  monkeypatch.setenv("FLASH_STYLE", "1")
105
147
  monkeypatch.setenv("TERM", "xterm-256color")
@@ -64,12 +64,14 @@ def test_vast_gpu_for_offer_accepts_h100_pcie_alias():
64
64
  assert vast_gpu_for_offer("Tesla T4", 16 * 1024) is None
65
65
 
66
66
 
67
- def test_retired_gpu_resolves_but_is_not_active():
68
- from flash.providers.base import GPU_INFO, canonical_gpu, get_gpu_info
69
-
70
- assert canonical_gpu("RTX A6000") == "RTX A6000"
71
- assert get_gpu_info("RTX A6000").vram_gb == 48
72
- assert "RTX A6000" not in GPU_INFO
67
+ def test_removed_gpu_class_is_unmanaged():
68
+ # RTX A6000 was a retired class kept only to resolve legacy records; it is now fully removed, so
69
+ # it is not a managed class and resolves nowhere (no special retired-but-known status remains).
70
+ from flash.providers.base import KNOWN, UnsupportedGpuError, canonical_gpu
71
+
72
+ assert "RTX A6000" not in KNOWN
73
+ with pytest.raises(UnsupportedGpuError):
74
+ canonical_gpu("RTX A6000")
73
75
 
74
76
 
75
77
  def test_expanded_gpu_table():
@@ -682,7 +682,7 @@ def test_gpu_constraints_reject_unknown_unsupported_or_undersized_values() -> No
682
682
  spec_from_dict(_raw(**{"gpu.provider": "aws"}))
683
683
  with pytest.raises(ConfigError, match=r"gpu\.exact_type"):
684
684
  spec_from_dict(_raw(**{"gpu.exact_type": "Tesla T4"}))
685
- with pytest.raises(ConfigError, match="validated"):
685
+ with pytest.raises(ConfigError, match=r"unsupported gpu 'RTX A6000'"):
686
686
  spec_from_dict(_raw(**{"gpu.exact_type": "RTX A6000"}))
687
687
  with pytest.raises(ConfigError, match="requires at least"):
688
688
  spec_from_dict(
@@ -730,8 +730,8 @@ def test_gpu_type_override_warning_requires_an_authored_hint(capsys) -> None:
730
730
  assert "`flash gpus` to list valid classes" in invalid_warning
731
731
  assert 'add exact_type = "H10O"' not in invalid_warning
732
732
 
733
- # a retired-but-known class canonicalizes but is not validated, so it must be treated like an
734
- # unrecognized hint and never echoed back as an exact_type the schema would immediately reject.
733
+ # an unrecognized type hint (e.g. a removed/retired class name) must be treated like any unknown
734
+ # string and never echoed back as an exact_type the schema would immediately reject.
735
735
  spec_from_dict(_raw(**{"gpu.type": "RTX A6000"}))
736
736
  retired_warning = capsys.readouterr().err
737
737
  assert "[gpu] type='RTX A6000' is not an active GPU class and was ignored" in retired_warning
@@ -764,7 +764,7 @@ def test_persisted_gpu_type_is_canonicalized_and_validated() -> None:
764
764
  JobSpec.from_dict({"gpu": {"type": 1}})
765
765
  with pytest.raises(ValueError, match=r"gpu\.type: unsupported gpu 'H10O'"):
766
766
  JobSpec.from_dict({"gpu": {"type": "H10O"}})
767
- with pytest.raises(ValueError, match="active validated GPU class"):
767
+ with pytest.raises(ValueError, match=r"unsupported gpu 'RTX A6000'"):
768
768
  JobSpec.from_dict({"gpu": {"type": "RTX A6000"}})
769
769
 
770
770
 
@@ -1024,7 +1024,7 @@ wheels = [
1024
1024
 
1025
1025
  [[package]]
1026
1026
  name = "freesolo-flash"
1027
- version = "1.0.5"
1027
+ version = "1.0.6"
1028
1028
  source = { editable = "." }
1029
1029
 
1030
1030
  [package.optional-dependencies]