freesolo-flash-dev 1.2.63__tar.gz → 1.2.65__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.2.63 → freesolo_flash_dev-1.2.65}/CHANGELOG.md +4 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/PKG-INFO +1 -1
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/setup.py +40 -20
- freesolo_flash_dev-1.2.65/flash/cli/commands/env/setup_wandb.py +30 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/traces.py +2 -2
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/scaffold/TRAINING.md +4 -2
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/__init__.py +14 -4
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/__init__.py +11 -17
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/opd_train_runner.py +35 -17
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/perf/__init__.py +2 -2
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/perf/lifecycle.py +48 -85
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/child/glue.py +158 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/child/runtime.py +15 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/bridge.py +90 -117
- freesolo_flash_dev-1.2.65/flash/engine/worker/train/opd/bridge_failures.py +117 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/multiturn.py +30 -9
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/plugin.py +3 -21
- freesolo_flash_dev-1.2.65/flash/engine/worker/train/opd/scoring.py +86 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/child/multiturn.py +3 -58
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/sft/child/plugin.py +3 -2
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/projects.py +34 -55
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_commands.py +242 -11
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_dev_channel.py +5 -1
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_envs_coverage.py +8 -2
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_oom_escalate_gpu.py +125 -32
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_multiturn_failure_exit.py +10 -1
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_train.py +689 -4
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_projects.py +232 -49
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_api.py +62 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_train.py +59 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_wandb_link.py +163 -6
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/uv.lock +1 -1
- freesolo_flash_dev-1.2.63/flash/engine/worker/train/opd/scoring.py +0 -73
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.env.example +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/Dockerfile +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/README.md +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/deploy.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/episode.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/eval.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/imports.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/list.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/push.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/retained.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/test.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/test_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/test_params.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/env/test_warnings.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/commands/train_cost.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/core/catalog.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/core/spec.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/huggingface.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/backend_common.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/opd_train.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/runtime/pkg_proxy.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/score_batcher.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/sft_train.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/core/step_timing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/finalize.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/batching.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/failures.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/gkd.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/multiturn_validation.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/overrides.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/prompts.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/reporting.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/state.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/opd/validation.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/child/patches.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/config.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/inputs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/multi_turn.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/reward_module.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/scoring.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/rl/verl_config.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/sft/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/train/sft/config.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/capabilities.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/adapter.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/base.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/identity.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/loader.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/envs/pull.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/auth.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/bootstrap_console.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/bootstrap_pip.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/bootstrap_secrets.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/deadline.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/host/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/host/failmark.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/host/hostlog.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/http.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/instance.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/poll.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/poll_instance.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/provider.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/_lifecycle/worker.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/allocator.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/base.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/api.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/auth.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/gpus.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/jobs/reap.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/preflight.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/lambda_/pricing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/preflight.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/realized.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/api.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/auth.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/cost.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/gpus.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/job_execution.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/jobs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/preflight.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/pricing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/resources.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/runpod/serverless/endpoints.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/sharding.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/api.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/auth.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/preflight.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/providers/vast/pricing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/attempts.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/costs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/preparation.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/reconciliation.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/results/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/status.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/submit.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/attach.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/deploy.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/recovery.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/retry_decision.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/seed_submission.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runner/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/runtime_capsule/profiles.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/adapter_check.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/deploy.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/errors.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/export.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/preflight.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/responses.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/streaming.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/thinking.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/serve/urls.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/app.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/billing/charges.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/environment_registry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/envs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/reconcile.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/run_registry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/teacher_errors.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/domain/teacher_requests.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/auth.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/internal_client.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/platform/runtime.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/serving_completion.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/serving_revisions.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/serving_smoke.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/fixtures/math_eval.jsonl +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/fixtures/math_train.jsonl +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cancel_remote.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_deploy_alias_move_warning.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_jobs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_opd_resume_safety.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_provider_routing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_resume_on_retry.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_rl_train.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_runmgmt.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_server_standalone.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_startup_block.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -54,6 +54,10 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
|
|
|
54
54
|
|
|
55
55
|
### Fixed
|
|
56
56
|
|
|
57
|
+
- Completed verl children now finish each captured W&B run before the W&B service shuts down,
|
|
58
|
+
avoiding teardown tracebacks, and `flash env setup` now gives every starter config explicit W&B
|
|
59
|
+
project and folder-derived run metadata.
|
|
60
|
+
|
|
57
61
|
- An ordered `[gpu] type` list is now priced over every class it declares acceptable, not just the
|
|
58
62
|
first. Allocation cost-ranks the whole set, so quoting the head alone priced a shape the run may
|
|
59
63
|
never be given — an authored `["B200", "H100"]` quoted roughly 3x the H100 the allocator would
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.65
|
|
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
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import json
|
|
6
6
|
import sys
|
|
7
7
|
import tomllib
|
|
8
|
+
from collections.abc import Mapping
|
|
8
9
|
from pathlib import Path
|
|
9
10
|
|
|
10
11
|
from flash._internal.channel import CLI_NAME
|
|
@@ -13,6 +14,7 @@ from flash.cli.commands.env.retained import (
|
|
|
13
14
|
_warn_if_environment_form_disagrees,
|
|
14
15
|
_warn_if_retained_starter_files_describe_another_plane,
|
|
15
16
|
)
|
|
17
|
+
from flash.cli.commands.env.setup_wandb import _wandb_block, _wandb_project
|
|
16
18
|
from flash.cli.scaffold import TRAINING_MD
|
|
17
19
|
from flash.cli.ui import render
|
|
18
20
|
from flash.envs.evaluations import _DEFAULT_EVALUATIONS_PATH
|
|
@@ -358,22 +360,14 @@ _REASONING_OPTIONS = [
|
|
|
358
360
|
_SKIP_TRACES = "" # sentinel option value: scaffold the starter rows instead of importing
|
|
359
361
|
|
|
360
362
|
|
|
361
|
-
def _require_setup_project(args) -> str:
|
|
363
|
+
def _require_setup_project(args, *, api_url: str | None, api_key: str) -> Mapping[str, object]:
|
|
362
364
|
"""Resolve and validate the one explicit project used by the whole scaffold."""
|
|
363
|
-
from flash.client import ClientError, list_projects,
|
|
364
|
-
from flash.client.config import load_credentials
|
|
365
|
+
from flash.client import ClientError, list_projects, resolve_project
|
|
365
366
|
from flash.client.http import has_freesolo_backend
|
|
366
367
|
|
|
367
|
-
api_url, api_key = load_credentials()
|
|
368
|
-
if not api_key:
|
|
369
|
-
raise ClientError(
|
|
370
|
-
f"not logged in. Run `{CLI_NAME} login` before `{CLI_NAME} env setup` "
|
|
371
|
-
"so the project can be validated"
|
|
372
|
-
)
|
|
373
|
-
|
|
374
368
|
supplied = str(getattr(args, "project", "") or "").strip()
|
|
375
369
|
if supplied:
|
|
376
|
-
return
|
|
370
|
+
return resolve_project(supplied, api_key, api_url)
|
|
377
371
|
if not _setup_interactive(args):
|
|
378
372
|
raise ClientError(
|
|
379
373
|
"--project PROJECT_UUID is required in noninteractive mode, with redirected stdin, or with --yes"
|
|
@@ -395,7 +389,7 @@ def _require_setup_project(args) -> str:
|
|
|
395
389
|
f"`{CLI_NAME} projects create NAME`"
|
|
396
390
|
)
|
|
397
391
|
selected = render.select_required("Choose the Freesolo project for this environment", options)
|
|
398
|
-
return
|
|
392
|
+
return resolve_project(selected, api_key, api_url)
|
|
399
393
|
|
|
400
394
|
|
|
401
395
|
# Guidance the starter .py docstrings carry, per plane kind. The templates hold placeholders
|
|
@@ -450,7 +444,7 @@ def _render_starter(template: str, project_id: str, *, can_publish: bool) -> str
|
|
|
450
444
|
return template.replace("PROJECT_UUID", project_id)
|
|
451
445
|
|
|
452
446
|
|
|
453
|
-
def _plane_can_publish_environments() -> bool:
|
|
447
|
+
def _plane_can_publish_environments(api_url: str | None) -> bool:
|
|
454
448
|
"""Whether `flash env push` can actually publish for the logged-in plane.
|
|
455
449
|
|
|
456
450
|
Publishing uploads to the plane, which commits into the managed environment hub
|
|
@@ -462,10 +456,8 @@ def _plane_can_publish_environments() -> bool:
|
|
|
462
456
|
operator-run Freesolo-compatible backend has a project directory (which is what that helper
|
|
463
457
|
answers) but still cannot publish to the hub.
|
|
464
458
|
"""
|
|
465
|
-
from flash.client.config import load_credentials
|
|
466
459
|
from flash.serve.urls import is_freesolo_hosted_url
|
|
467
460
|
|
|
468
|
-
api_url, _ = load_credentials()
|
|
469
461
|
# Unset means the built-in default, which is the managed plane.
|
|
470
462
|
return api_url is None or is_freesolo_hosted_url(api_url)
|
|
471
463
|
|
|
@@ -553,7 +545,7 @@ def _existing_reasoning(configs: tuple[Path, ...]) -> bool | None:
|
|
|
553
545
|
return next(iter(found.values()), None)
|
|
554
546
|
|
|
555
547
|
|
|
556
|
-
def _traces_dataset(args, project_id: str) -> str | None:
|
|
548
|
+
def _traces_dataset(args, project_id: str, api_key: str) -> str | None:
|
|
557
549
|
"""Optionally export traces from the already-selected project."""
|
|
558
550
|
if not _setup_interactive(args):
|
|
559
551
|
return None
|
|
@@ -568,7 +560,7 @@ def _traces_dataset(args, project_id: str) -> str | None:
|
|
|
568
560
|
if use_traces == _SKIP_TRACES:
|
|
569
561
|
return None
|
|
570
562
|
try:
|
|
571
|
-
exported = traces.fetch_records(project_id)
|
|
563
|
+
exported = traces.fetch_records(project_id, api_key)
|
|
572
564
|
except Exception as exc: # trace import is optional after project validation succeeds
|
|
573
565
|
_warn(f"could not export traces from {project_id} ({exc}); using the starter dataset")
|
|
574
566
|
return None
|
|
@@ -692,6 +684,7 @@ def _write_rl_config(
|
|
|
692
684
|
rl: Path,
|
|
693
685
|
project_line: str,
|
|
694
686
|
thinking_line: str,
|
|
687
|
+
wandb_block: str,
|
|
695
688
|
env_comment: str,
|
|
696
689
|
max_examples_line: str,
|
|
697
690
|
rl_reasoning_train: str,
|
|
@@ -704,6 +697,7 @@ def _write_rl_config(
|
|
|
704
697
|
'algorithm = "grpo"\n'
|
|
705
698
|
f"{thinking_line}"
|
|
706
699
|
"\n"
|
|
700
|
+
f"{wandb_block}"
|
|
707
701
|
f"{env_comment}"
|
|
708
702
|
"[train]\n"
|
|
709
703
|
"epochs = 1\n"
|
|
@@ -722,6 +716,7 @@ def _write_sft_config(
|
|
|
722
716
|
sft: Path,
|
|
723
717
|
project_line: str,
|
|
724
718
|
thinking_line: str,
|
|
719
|
+
wandb_block: str,
|
|
725
720
|
env_comment: str,
|
|
726
721
|
max_examples_line: str,
|
|
727
722
|
sft_reasoning_note: str,
|
|
@@ -734,6 +729,7 @@ def _write_sft_config(
|
|
|
734
729
|
'algorithm = "sft"\n'
|
|
735
730
|
f"{thinking_line}"
|
|
736
731
|
"\n"
|
|
732
|
+
f"{wandb_block}"
|
|
737
733
|
f"{env_comment}"
|
|
738
734
|
"[train]\n"
|
|
739
735
|
"epochs = 1\n"
|
|
@@ -766,6 +762,7 @@ def _write_opd_config(
|
|
|
766
762
|
project_line: str,
|
|
767
763
|
project_id: str,
|
|
768
764
|
thinking_line: str,
|
|
765
|
+
wandb_block: str,
|
|
769
766
|
max_examples_line: str,
|
|
770
767
|
*,
|
|
771
768
|
can_publish: bool = True,
|
|
@@ -788,6 +785,7 @@ def _write_opd_config(
|
|
|
788
785
|
'algorithm = "opd" # on-policy distillation from a managed parasail teacher (default glm 5.2)\n'
|
|
789
786
|
f"{thinking_line}"
|
|
790
787
|
"\n"
|
|
788
|
+
f"{wandb_block}"
|
|
791
789
|
+ _environment_comment(
|
|
792
790
|
project_id,
|
|
793
791
|
can_publish=can_publish,
|
|
@@ -816,15 +814,34 @@ def _write_training_guide(training: Path, project_id: str) -> None:
|
|
|
816
814
|
)
|
|
817
815
|
|
|
818
816
|
|
|
817
|
+
def _resolve_setup_identity(args) -> tuple[str, str, str, str, str]:
|
|
818
|
+
"""Resolve the credential, project, and folder identity used by every setup phase."""
|
|
819
|
+
from flash.client import ClientError
|
|
820
|
+
from flash.client.config import load_credentials
|
|
821
|
+
|
|
822
|
+
api_url, api_key = load_credentials()
|
|
823
|
+
if not api_key:
|
|
824
|
+
raise ClientError(
|
|
825
|
+
f"not logged in. Run `{CLI_NAME} login` before `{CLI_NAME} env setup` "
|
|
826
|
+
"so the project can be validated"
|
|
827
|
+
)
|
|
828
|
+
project = _require_setup_project(args, api_url=api_url, api_key=api_key)
|
|
829
|
+
project_id = str(project["id"])
|
|
830
|
+
folder_name = Path.cwd().name
|
|
831
|
+
if not folder_name.strip():
|
|
832
|
+
raise ClientError("the current environment folder name must be nonblank")
|
|
833
|
+
return api_url, api_key, project_id, _wandb_project(project), folder_name
|
|
834
|
+
|
|
835
|
+
|
|
819
836
|
def cmd_env_setup(args) -> int:
|
|
820
|
-
project_id =
|
|
837
|
+
api_url, api_key, project_id, project_name, folder_name = _resolve_setup_identity(args)
|
|
821
838
|
_validate_existing_config_projects(project_id)
|
|
822
839
|
starter_env = Path("environment.py")
|
|
823
840
|
starter_evaluations = Path(_DEFAULT_EVALUATIONS_PATH)
|
|
824
841
|
dataset = Path("dataset/train.jsonl")
|
|
825
842
|
# trace import is optional and can only read the selected project. an existing dataset is never
|
|
826
843
|
# overwritten, so importing into it would be a silently discarded download.
|
|
827
|
-
traces_jsonl = None if dataset.exists() else _traces_dataset(args, project_id)
|
|
844
|
+
traces_jsonl = None if dataset.exists() else _traces_dataset(args, project_id, api_key)
|
|
828
845
|
multi_turn, starter_env_exists = _resolve_turn_mode(args, starter_env, dataset)
|
|
829
846
|
|
|
830
847
|
rl = Path("configs/rl.toml")
|
|
@@ -837,7 +854,7 @@ def cmd_env_setup(args) -> int:
|
|
|
837
854
|
reasoning_configs = (rl, opd, sft)
|
|
838
855
|
reasoning = _resolve_reasoning_mode(args, reasoning_configs)
|
|
839
856
|
|
|
840
|
-
can_publish = _plane_can_publish_environments()
|
|
857
|
+
can_publish = _plane_can_publish_environments(api_url)
|
|
841
858
|
_warn_if_environment_form_disagrees(reasoning_configs, can_publish=can_publish, warn=_warn)
|
|
842
859
|
env_py = _render_starter(
|
|
843
860
|
_STARTER_ENV_MULTITURN_PY if multi_turn else _STARTER_ENV_PY,
|
|
@@ -908,6 +925,7 @@ def cmd_env_setup(args) -> int:
|
|
|
908
925
|
rl,
|
|
909
926
|
project_line,
|
|
910
927
|
thinking_line,
|
|
928
|
+
_wandb_block(project_name, f"{folder_name}-grpo"),
|
|
911
929
|
env_comment,
|
|
912
930
|
max_examples_line,
|
|
913
931
|
rl_reasoning_train,
|
|
@@ -916,6 +934,7 @@ def cmd_env_setup(args) -> int:
|
|
|
916
934
|
sft,
|
|
917
935
|
project_line,
|
|
918
936
|
thinking_line,
|
|
937
|
+
_wandb_block(project_name, f"{folder_name}-sft"),
|
|
919
938
|
env_comment,
|
|
920
939
|
max_examples_line,
|
|
921
940
|
sft_reasoning_note,
|
|
@@ -927,6 +946,7 @@ def cmd_env_setup(args) -> int:
|
|
|
927
946
|
project_line,
|
|
928
947
|
project_id,
|
|
929
948
|
thinking_line,
|
|
949
|
+
_wandb_block(project_name, f"{folder_name}-opd"),
|
|
930
950
|
max_examples_line,
|
|
931
951
|
can_publish=can_publish,
|
|
932
952
|
)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""W&B metadata helpers for environment scaffolds."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from collections.abc import Mapping
|
|
7
|
+
|
|
8
|
+
_WANDB_PROJECT_MAX_LENGTH = 128
|
|
9
|
+
_WANDB_PROJECT_FORBIDDEN = frozenset("/\\#?%:")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _wandb_project(project: Mapping[str, object]) -> str:
|
|
13
|
+
"""Adapt a resolved canonical project to a W&B-safe project name."""
|
|
14
|
+
project_id = str(project["id"])
|
|
15
|
+
name = project.get("name")
|
|
16
|
+
if not isinstance(name, str) or not name.strip():
|
|
17
|
+
return project_id
|
|
18
|
+
if len(name) > _WANDB_PROJECT_MAX_LENGTH or any(
|
|
19
|
+
character in _WANDB_PROJECT_FORBIDDEN for character in name
|
|
20
|
+
):
|
|
21
|
+
return project_id
|
|
22
|
+
return name
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _wandb_block(project_name: str, run_name: str) -> str:
|
|
26
|
+
return (
|
|
27
|
+
"[wandb]\n"
|
|
28
|
+
f"project = {json.dumps(project_name, ensure_ascii=False)}\n"
|
|
29
|
+
f"run_name = {json.dumps(run_name, ensure_ascii=False)}\n\n"
|
|
30
|
+
)
|
|
@@ -77,8 +77,8 @@ def fetch_records(
|
|
|
77
77
|
) -> dict:
|
|
78
78
|
"""A project's traces in the requested shape, converted server-side.
|
|
79
79
|
|
|
80
|
-
Omitting `api_key` reads the stored credential
|
|
81
|
-
|
|
80
|
+
Omitting `api_key` reads the stored credential. Callers that already resolved configuration
|
|
81
|
+
should pass the key from that snapshot so a concurrent login cannot change the request identity.
|
|
82
82
|
"""
|
|
83
83
|
key = _require_api_key(api_key or load_credentials()[1])
|
|
84
84
|
return export_trace_records(project_id, key, export_format=export_format)
|
|
@@ -272,8 +272,10 @@ lora_rank = 32 # lora_alpha defaults to 2 x lora_rank; set it to ov
|
|
|
272
272
|
# All knobs live under [train]. Do not add [sft], [grpo], or [opd] tables.
|
|
273
273
|
|
|
274
274
|
[wandb]
|
|
275
|
-
#
|
|
276
|
-
#
|
|
275
|
+
# new scaffolds set `project` from the selected Freesolo project and `run_name` from the folder
|
|
276
|
+
# plus algorithm. edit either value as needed; only `project` and `run_name` are allowed.
|
|
277
|
+
# project = "my-project"
|
|
278
|
+
# run_name = "sft-run-1"
|
|
277
279
|
```
|
|
278
280
|
|
|
279
281
|
**Knobs are scoped by algorithm.** `[train]` is one flat table shared by all three algorithms,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"""HTTP client for the managed Flash control plane (used by the CLI)."""
|
|
2
2
|
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
|
|
3
5
|
from flash._internal.channel import CLI_NAME
|
|
4
6
|
from flash.client.config import load_credentials, save_credentials
|
|
5
7
|
from flash.client.http import (
|
|
@@ -20,8 +22,10 @@ from flash.client.http import (
|
|
|
20
22
|
from flash.core.spec import require_project_id
|
|
21
23
|
|
|
22
24
|
|
|
23
|
-
def
|
|
24
|
-
|
|
25
|
+
def resolve_project(
|
|
26
|
+
project_id: str, api_key: str, api_url: str | None = None
|
|
27
|
+
) -> Mapping[str, object]:
|
|
28
|
+
"""Resolve one project, turning "not yours / not there" into the actionable CLI refusal.
|
|
25
29
|
|
|
26
30
|
403 and 404 are the same answer to a CLI user -- this project is not one you can record against
|
|
27
31
|
-- and neither is distinguishable from a typo, so they collapse into one message naming the way
|
|
@@ -48,9 +52,9 @@ def resolve_project_id(project_id: str, api_key: str, api_url: str | None = None
|
|
|
48
52
|
at call time, which is the binding the CLI tests patch.
|
|
49
53
|
"""
|
|
50
54
|
if api_url is not None and not has_freesolo_backend(api_url):
|
|
51
|
-
return require_project_id(project_id)
|
|
55
|
+
return {"id": require_project_id(project_id)}
|
|
52
56
|
try:
|
|
53
|
-
return
|
|
57
|
+
return get_project(project_id, api_key)
|
|
54
58
|
except ApiError as exc:
|
|
55
59
|
if exc.status not in {403, 404}:
|
|
56
60
|
raise
|
|
@@ -60,6 +64,11 @@ def resolve_project_id(project_id: str, api_key: str, api_url: str | None = None
|
|
|
60
64
|
) from exc
|
|
61
65
|
|
|
62
66
|
|
|
67
|
+
def resolve_project_id(project_id: str, api_key: str, api_url: str | None = None) -> str:
|
|
68
|
+
"""Resolve and return one canonical project id."""
|
|
69
|
+
return str(resolve_project(project_id, api_key, api_url)["id"])
|
|
70
|
+
|
|
71
|
+
|
|
63
72
|
__all__ = [
|
|
64
73
|
"ApiClient",
|
|
65
74
|
"ApiError",
|
|
@@ -72,6 +81,7 @@ __all__ = [
|
|
|
72
81
|
"list_projects",
|
|
73
82
|
"list_trace_projects",
|
|
74
83
|
"load_credentials",
|
|
84
|
+
"resolve_project",
|
|
75
85
|
"resolve_project_id",
|
|
76
86
|
"save_credentials",
|
|
77
87
|
"upload_eval_run",
|
|
@@ -18,7 +18,7 @@ import traceback
|
|
|
18
18
|
|
|
19
19
|
from flash._internal.diagnostics import sanitize_diagnostic
|
|
20
20
|
from flash.adapters.fused_experts import lora_target_parameters
|
|
21
|
-
from flash.core.spec import FIXED_SEED, load_job_spec_from_env
|
|
21
|
+
from flash.core.spec import FIXED_SEED, gpu_count_of, load_job_spec_from_env
|
|
22
22
|
from flash.engine.result.accounting import RunMetrics
|
|
23
23
|
from flash.engine.worker.backend_common import collect_ray_failure_logs
|
|
24
24
|
from flash.engine.worker.entry.opd import run_opd
|
|
@@ -80,7 +80,7 @@ from flash.engine.worker.perf import (
|
|
|
80
80
|
grad_checkpointing_on,
|
|
81
81
|
grpo_use_reentrant,
|
|
82
82
|
is_cuda_oom,
|
|
83
|
-
|
|
83
|
+
preflight_gpu_occupancy,
|
|
84
84
|
wait_for_gpu,
|
|
85
85
|
)
|
|
86
86
|
from flash.engine.worker.runtime.kernel_warmup import _current_cuda_sm, load_mega_cache
|
|
@@ -221,22 +221,16 @@ def _worker_failure_flags(exc: BaseException) -> dict[str, bool]:
|
|
|
221
221
|
return {"retriable": retriable, "oom": (not retriable and is_cuda_oom(exc))}
|
|
222
222
|
|
|
223
223
|
|
|
224
|
-
def
|
|
225
|
-
"""
|
|
224
|
+
def _preflight_gpu_occupancy_for_spec() -> None:
|
|
225
|
+
"""Screen every GPU in the allocator-resolved worker allocation for substantial occupancy.
|
|
226
226
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
and wrong in both directions -- see ``preflight_free_vram``. Occupancy needs no requirement, so
|
|
230
|
-
it runs on any shape without reimplementing ``combined_vram_gb``'s non-linear multi-card fit.
|
|
227
|
+
The allocator stamps the chosen count onto ``JOB_SPEC`` before provider launch, so this passes
|
|
228
|
+
only the cards rented for this worker. It does not re-derive required VRAM or claim exact fit.
|
|
231
229
|
|
|
232
|
-
|
|
233
|
-
undetected, which is a gap and not a false alarm -- device 0 occupancy is still evidence of a
|
|
234
|
-
shared host.
|
|
235
|
-
|
|
236
|
-
Must stay the first CUDA-adjacent call in boot: the reading is only trustworthy while this
|
|
230
|
+
This must stay the first CUDA-adjacent call in boot. The reading is trustworthy only while this
|
|
237
231
|
process has no context of its own, and ``_force_fla_triton_gdn_on_sm100`` below creates one.
|
|
238
232
|
"""
|
|
239
|
-
|
|
233
|
+
preflight_gpu_occupancy(gpu_count_of(JOB_SPEC))
|
|
240
234
|
|
|
241
235
|
|
|
242
236
|
THINKING = JOB_SPEC.thinking if JOB_SPEC else False
|
|
@@ -347,14 +341,14 @@ def _run_worker_mode() -> None:
|
|
|
347
341
|
# FIRST, and specifically before `_force_fla_triton_gdn_on_sm100`: that reads
|
|
348
342
|
# `get_device_capability`, which initializes CUDA in this process, and from that moment the
|
|
349
343
|
# driver's "used" includes our own context with no sound way to subtract it -- the occupancy
|
|
350
|
-
# check declines to run rather than guess (see `
|
|
351
|
-
# never calling it at all.
|
|
344
|
+
# check declines to run rather than guess (see `preflight_gpu_occupancy`), so calling it later
|
|
345
|
+
# means never calling it at all. this is also before `_ensure_fla_fastpath_on_hopper`, whose repair
|
|
352
346
|
# path runs pip installs with 600s timeouts: a card handed over with a co-tenant's ~18GB still
|
|
353
347
|
# resident fails the run either way, and the only question is whether that happens now or after
|
|
354
348
|
# dependency repair, the model download and FSDP init have spent paid GPU on the same
|
|
355
349
|
# conclusion. NVML answers without a context, so nothing here dirties the reading for the code
|
|
356
350
|
# below.
|
|
357
|
-
|
|
351
|
+
_preflight_gpu_occupancy_for_spec()
|
|
358
352
|
# run before model imports: sm100 tilelang GDN computes wrong gradients, so use Triton.
|
|
359
353
|
_force_fla_triton_gdn_on_sm100()
|
|
360
354
|
_ensure_fla_fastpath_on_hopper()
|
{freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/opd_train_runner.py
RENAMED
|
@@ -124,6 +124,31 @@ def _validate_teacher_transport() -> tuple[str, str]:
|
|
|
124
124
|
return capability, control_panel_url
|
|
125
125
|
|
|
126
126
|
|
|
127
|
+
def _prepare_prompt_messages(
|
|
128
|
+
example: dict,
|
|
129
|
+
messages: list[dict],
|
|
130
|
+
*,
|
|
131
|
+
multi_turn: bool,
|
|
132
|
+
package_root: str | None,
|
|
133
|
+
) -> tuple[list[dict], tuple[str, ...]]:
|
|
134
|
+
from flash.content.multimodal import normalize_prompt_images, record_has_images
|
|
135
|
+
|
|
136
|
+
if record_has_images(example, messages):
|
|
137
|
+
normalized = normalize_prompt_images(example, messages, package_root)
|
|
138
|
+
if multi_turn:
|
|
139
|
+
_opd_train.validate_transcript_messages(
|
|
140
|
+
normalized.messages,
|
|
141
|
+
source="environment initial prompt",
|
|
142
|
+
allow_content_blocks=True,
|
|
143
|
+
)
|
|
144
|
+
return normalized.messages, tuple(normalized.descriptors)
|
|
145
|
+
if multi_turn:
|
|
146
|
+
messages = _opd_train.validate_transcript_messages(
|
|
147
|
+
messages, source="environment initial prompt"
|
|
148
|
+
)
|
|
149
|
+
return messages, ()
|
|
150
|
+
|
|
151
|
+
|
|
127
152
|
def _prepare_prompts(
|
|
128
153
|
request: _OpdRequest,
|
|
129
154
|
prompt_rows: list[tuple[Any, Any]],
|
|
@@ -131,11 +156,7 @@ def _prepare_prompts(
|
|
|
131
156
|
capability: str,
|
|
132
157
|
control_panel_url: str,
|
|
133
158
|
) -> _PromptState:
|
|
134
|
-
from flash.content.multimodal import
|
|
135
|
-
image_teacher_prompt_messages,
|
|
136
|
-
normalize_prompt_images,
|
|
137
|
-
record_has_images,
|
|
138
|
-
)
|
|
159
|
+
from flash.content.multimodal import image_teacher_prompt_messages
|
|
139
160
|
from flash.engine.worker.teacher.client import TeacherClient
|
|
140
161
|
|
|
141
162
|
teacher = TeacherClient(capability, control_panel_url, request.knobs.teacher_model)
|
|
@@ -187,15 +208,14 @@ def _prepare_prompts(
|
|
|
187
208
|
with _opd_train.liveness_heartbeat("opd_image_prep", progress=lambda: prepped[0]):
|
|
188
209
|
for example, messages in prompt_rows:
|
|
189
210
|
prepped[0] += 1
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
211
|
+
student_messages, image_descriptors = _prepare_prompt_messages(
|
|
212
|
+
example,
|
|
213
|
+
messages,
|
|
214
|
+
multi_turn=request.multi_turn,
|
|
215
|
+
package_root=package_root,
|
|
216
|
+
)
|
|
217
|
+
if image_descriptors:
|
|
195
218
|
assert processor is not None
|
|
196
|
-
normalized = normalize_prompt_images(example, messages, package_root)
|
|
197
|
-
student_messages = normalized.messages
|
|
198
|
-
image_descriptors = tuple(normalized.descriptors)
|
|
199
219
|
teacher_messages = image_teacher_prompt_messages(
|
|
200
220
|
student_messages, len(image_descriptors)
|
|
201
221
|
)
|
|
@@ -207,9 +227,7 @@ def _prepare_prompts(
|
|
|
207
227
|
enable_thinking=bool(_opd_train._w.THINKING),
|
|
208
228
|
)
|
|
209
229
|
else:
|
|
210
|
-
|
|
211
|
-
teacher_messages = messages
|
|
212
|
-
image_descriptors = ()
|
|
230
|
+
teacher_messages = student_messages
|
|
213
231
|
if processor is not None:
|
|
214
232
|
# mixed job: the verl child tokenizes EVERY row through the multimodal dataset
|
|
215
233
|
# path (the processor), so text-only rows must freeze via the same path or the
|
|
@@ -224,7 +242,7 @@ def _prepare_prompts(
|
|
|
224
242
|
else:
|
|
225
243
|
prompt_ids = _opd_train._normalize_prompt_ids(
|
|
226
244
|
tokenizer.apply_chat_template(
|
|
227
|
-
|
|
245
|
+
student_messages,
|
|
228
246
|
tokenize=True,
|
|
229
247
|
add_generation_prompt=True,
|
|
230
248
|
enable_thinking=_opd_train._w.THINKING,
|
{freesolo_flash_dev-1.2.63 → freesolo_flash_dev-1.2.65}/flash/engine/worker/perf/__init__.py
RENAMED
|
@@ -28,7 +28,7 @@ from flash.engine.worker.perf.lifecycle import (
|
|
|
28
28
|
RetriableInfraError,
|
|
29
29
|
free_vram_gb,
|
|
30
30
|
is_cuda_oom,
|
|
31
|
-
|
|
31
|
+
preflight_gpu_occupancy,
|
|
32
32
|
total_vram_gb,
|
|
33
33
|
wait_for_gpu,
|
|
34
34
|
)
|
|
@@ -403,7 +403,7 @@ __all__ = [
|
|
|
403
403
|
"grad_checkpointing_on",
|
|
404
404
|
"grpo_use_reentrant",
|
|
405
405
|
"is_cuda_oom",
|
|
406
|
-
"
|
|
406
|
+
"preflight_gpu_occupancy",
|
|
407
407
|
"total_vram_gb",
|
|
408
408
|
"wait_for_gpu",
|
|
409
409
|
]
|