freesolo-flash-dev 1.0.44__tar.gz → 1.0.45__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.
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/PKG-INFO +1 -1
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cli/training_doc.py +33 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/runner/__init__.py +17 -2
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_multi_gpu_gate.py +21 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/uv.lock +1 -1
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.dockerignore +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.env.example +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.gitignore +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/Dockerfile +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/LICENSE +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/NOTICE +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/README.md +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/_channel.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/_fileio.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/_logging.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/_update_check.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/adapter_artifacts.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/catalog.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cli/_tty.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cli/commands.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cli/env_setup.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cli/env_test.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cli/envpush.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cli/render.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cli/traces.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/diagnostics.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/accounting.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/chalk_kernels.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/multiturn_reward_scoring.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/multiturn_rollout.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/recipe.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/steps.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/vram.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/_pkg.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/adapter.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/decoding.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/finalize.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/gpu_setup.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/grpo.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/grpo_multimodal.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/grpo_perturn_trainer.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/heartbeat.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/hf.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/lora.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/opd.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/opd_gkd.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/opd_verl.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/opd_verl_multiturn.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/opd_verl_plugin.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/opd_verl_structured.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/opd_vllm.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/packing.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/perf/attn.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/perf/loraplus.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/rl.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/rl_verl.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/rng.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/sft.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/sft_verl.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/teacher.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/verl_common.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/wandb_log.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/envs/adapter.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/envs/archive.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/envs/archive_policy.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/envs/base.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/envs/loader.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/envs/pull.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/envs/registry.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/lora_rank.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/multimodal.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/opd_retry_contract.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/opd_verl_validation.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_auth.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_deadline.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_hf_artifacts.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_hf_retry.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_http.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_instance.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_instance_bootstrap.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_instance_poll.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_instance_provider.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_poll.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_worker.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/allocator.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/base.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/api.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/auth.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/gpus.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/preflight.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/pricing.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/preflight.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/realized.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/api.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/auth.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/cost.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/gpus.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/jobs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/keys.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/preflight.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/pricing.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/slots.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/train/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/train/endpoints.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/vast/api.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/vast/auth.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/vast/preflight.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/vast/pricing.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/weight_cache_preload.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/runner/checkpoints.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/runner/deploy.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/runner/lifecycle.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/runner/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/serve/deploy.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/serve/export.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/serve/preflight.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/serve/pricing.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/serve/urls.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/_deps.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/_internal_client.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/_locks.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/_runtime.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/app.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/auth.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/billing.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/billing_retry.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/checkpoints.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/db.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/environment_registry.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/envs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/projects.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/reconcile.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/server/run_registry.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/spec.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/infisical-entrypoint.sh +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/fixtures/math_eval.jsonl +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/fixtures/math_train.jsonl +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_async_uploads.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_b200_rollout_opt.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cancel_remote.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_chalk_kernels.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_cost_rewards.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_grpo_cudagraphs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_grpo_mask_aware.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_grpo_perturn.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_grpo_sleep_gate.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_jobs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_multimodal_input_grads.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_multiturn_image_rollout.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_multiturn_per_turn_reward.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_multiturn_rollout.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_multiturn_rollout_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_multiturn_rollout_records.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_multiturn_rollout_request_policy.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_opd_full_state_resume.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_opd_resume_safety.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_opd_verl.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_opd_vllm.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_open_model_policy.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_provider_routing.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_resume_on_retry.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_rl_verl.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_runmgmt.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_runpod_slots.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_server_api.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_server_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_serving_pricing_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_sft_activation_shaping.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_sft_tokenize_cache.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_sft_verl.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_single_turn_multimodal_grpo.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_update_check.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_verl_common.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_wandb_log_coverage.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/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.
|
|
3
|
+
Version: 1.0.45
|
|
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
|
|
@@ -697,6 +697,39 @@ on a beyond-noise improvement.
|
|
|
697
697
|
|
|
698
698
|
---
|
|
699
699
|
|
|
700
|
+
## Multi-GPU training (`gpu.count > 1`)
|
|
701
|
+
|
|
702
|
+
Flash trains on one card by default. The default `trl` backend is single-process and never
|
|
703
|
+
reads `gpu.count`, so raising the count alone would rent n cards and train on one — submit
|
|
704
|
+
rejects that rather than billing for idle hardware.
|
|
705
|
+
|
|
706
|
+
To shard one job across several cards, select the `verl` backend for the phase you are running:
|
|
707
|
+
|
|
708
|
+
```toml
|
|
709
|
+
[gpu]
|
|
710
|
+
type = "B200"
|
|
711
|
+
count = 4
|
|
712
|
+
# provider must also be pinned: not every provider puts all n cards on ONE machine, and
|
|
713
|
+
# submit names the ones that qualify when it rejects an unpinned multi-gpu spec.
|
|
714
|
+
|
|
715
|
+
[worker_env]
|
|
716
|
+
FLASH_SFT_BACKEND = "verl" # SFT
|
|
717
|
+
# FLASH_RL_BACKEND = "verl" # GRPO (the key is RL, not GRPO)
|
|
718
|
+
# FLASH_OPD_BACKEND = "verl" # OPD
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
One key per phase, and GRPO's is `FLASH_RL_BACKEND`. The verl worker launches one rank per
|
|
722
|
+
card with Ulysses sequence parallelism.
|
|
723
|
+
|
|
724
|
+
The verl GRPO backend covers single-turn, non-tool, non-multimodal runs; multi-turn, tool, and
|
|
725
|
+
image-prompt environments stay on `trl` (which is single-GPU). Warm-starting with
|
|
726
|
+
`init_from_adapter` while `kl_penalty_coef > 0` is also `trl`-only: verl computes its KL
|
|
727
|
+
reference with adapters disabled, so the reference would be the bare base model instead of your
|
|
728
|
+
SFT adapter, pulling the policy back toward base. Every one of these raises at startup rather
|
|
729
|
+
than quietly training on a different contract.
|
|
730
|
+
|
|
731
|
+
---
|
|
732
|
+
|
|
700
733
|
## Command reference
|
|
701
734
|
|
|
702
735
|
```bash
|
|
@@ -1187,6 +1187,15 @@ _MULTI_GPU_BACKENDS: frozenset[str] = frozenset({"verl"})
|
|
|
1187
1187
|
_MULTI_GPU_PROVIDERS: frozenset[str] = frozenset({"runpod"})
|
|
1188
1188
|
|
|
1189
1189
|
|
|
1190
|
+
def _backend_env_key(spec: JobSpec) -> str:
|
|
1191
|
+
"""the [worker_env] key that selects this spec's training backend.
|
|
1192
|
+
|
|
1193
|
+
one definition so the gate's remedy cannot name a different key than the resolver reads: the
|
|
1194
|
+
phase mapping is not derivable from the algorithm (grpo -> FLASH_RL_BACKEND).
|
|
1195
|
+
"""
|
|
1196
|
+
return f"FLASH_{spec.phase.upper()}_BACKEND"
|
|
1197
|
+
|
|
1198
|
+
|
|
1190
1199
|
def _effective_backend(spec: JobSpec) -> str:
|
|
1191
1200
|
"""the training backend this spec will actually run, as the worker resolves it.
|
|
1192
1201
|
|
|
@@ -1195,7 +1204,7 @@ def _effective_backend(spec: JobSpec) -> str:
|
|
|
1195
1204
|
empty dict and forwards a fixed credential allowlist, never the ambient control-plane env. so the
|
|
1196
1205
|
backend is a property of the SPEC and the gate can read it here rather than guessing.
|
|
1197
1206
|
"""
|
|
1198
|
-
key =
|
|
1207
|
+
key = _backend_env_key(spec)
|
|
1199
1208
|
worker_env = getattr(spec, "worker_env", None) or {}
|
|
1200
1209
|
for name, value in worker_env.items():
|
|
1201
1210
|
if str(name).upper() == key:
|
|
@@ -1215,10 +1224,16 @@ def _require_supported_gpu_count(spec: JobSpec) -> None:
|
|
|
1215
1224
|
return
|
|
1216
1225
|
backend = _effective_backend(spec)
|
|
1217
1226
|
if backend not in _MULTI_GPU_BACKENDS:
|
|
1227
|
+
# name the key that actually enables sharding. the backend is selected only through
|
|
1228
|
+
# [worker_env], which no other error or doc mentions, so a message that offers just
|
|
1229
|
+
# "set gpu.count to 1" leaves multi-gpu undiscoverable.
|
|
1230
|
+
key = _backend_env_key(spec)
|
|
1231
|
+
sharding = ", ".join(sorted(_MULTI_GPU_BACKENDS))
|
|
1218
1232
|
raise ValueError(
|
|
1219
1233
|
f"multi-gpu training (gpu.count={count}) is not supported by the {backend!r} backend "
|
|
1220
1234
|
f"for algorithm {spec.algorithm!r}; it trains in a single process and would leave "
|
|
1221
|
-
f"{count - 1} rented card(s) idle. set gpu.count to 1"
|
|
1235
|
+
f"{count - 1} rented card(s) idle. set gpu.count to 1, or select a sharding backend "
|
|
1236
|
+
f'with [worker_env] {key} = "{sharding}"'
|
|
1222
1237
|
)
|
|
1223
1238
|
provider = (getattr(spec.gpu, "provider", "") or "").strip().lower()
|
|
1224
1239
|
if provider not in _MULTI_GPU_PROVIDERS:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "freesolo-flash-dev"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.45"
|
|
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.
|
|
119
|
+
version = "1.0.45"
|
|
120
120
|
|
|
121
121
|
[tool.pytest.ini_options]
|
|
122
122
|
pythonpath = ["."]
|
|
@@ -110,3 +110,24 @@ def test_run_training_gates_effective_spec_on_recovery():
|
|
|
110
110
|
# before any provisioning (the gate precedes the first get_status/allocation touch).
|
|
111
111
|
with pytest.raises(ValueError, match="multi-gpu training"):
|
|
112
112
|
_run_training(_spec(2), io.StringIO(), prior_cost=0.0)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
@pytest.mark.parametrize(
|
|
116
|
+
("algorithm", "key"),
|
|
117
|
+
[("sft", "FLASH_SFT_BACKEND"), ("grpo", "FLASH_RL_BACKEND"), ("opd", "FLASH_OPD_BACKEND")],
|
|
118
|
+
)
|
|
119
|
+
def test_gate_message_names_the_key_that_enables_sharding(algorithm, key):
|
|
120
|
+
from flash import runner
|
|
121
|
+
|
|
122
|
+
# [worker_env] is the ONLY route to a sharding backend, and the phase key is not guessable from
|
|
123
|
+
# the algorithm (grpo -> FLASH_RL_BACKEND). a message offering only "set gpu.count to 1" leaves
|
|
124
|
+
# multi-gpu undiscoverable, so assert the remedy travels with the rejection.
|
|
125
|
+
# match the backend rejection specifically: the gate also raises for gpu.provider, and that
|
|
126
|
+
# path carries no backend key, so a bare raises() would pass while checking nothing.
|
|
127
|
+
with pytest.raises(ValueError, match="multi-gpu training") as excinfo:
|
|
128
|
+
runner._require_supported_gpu_count(_spec(4, algorithm))
|
|
129
|
+
|
|
130
|
+
message = str(excinfo.value)
|
|
131
|
+
assert key in message
|
|
132
|
+
assert "verl" in message
|
|
133
|
+
assert "worker_env" in message
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/ISSUE_TEMPLATE/bug_report.yml
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/ISSUE_TEMPLATE/feature_request.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/bake-kernel-cache.yml
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/main-source-guard.yml
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/notify-tests-repo.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/.github/workflows/version-parity.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/docker/Dockerfile.kernelcache.relayer
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/multiturn_reward_scoring.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/grpo_multimodal.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/grpo_perturn_trainer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/kernel_warmup.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/opd_verl_multiturn.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/opd_verl_plugin.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/opd_verl_structured.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/perf/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/perf/diagnostics.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/perf/lifecycle.py
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/perf/loraplus.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/rollout_samples.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/engine/worker/tokenizer_align.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_instance_bootstrap.py
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/_instance_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/jobs/__init__.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/jobs/builders.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/preflight.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/lambdalabs/pricing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/train/__init__.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/runpod/train/endpoints.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/vast/jobs/__init__.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/vast/jobs/builders.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.44 → freesolo_flash_dev-1.0.45}/flash/providers/weight_cache_preload.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|