freesolo-flash-dev 1.2.66__tar.gz → 1.2.67__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.66 → freesolo_flash_dev-1.2.67}/PKG-INFO +1 -1
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/sft_train.py +13 -2
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_envs_coverage.py +6 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_flash_worker.py +34 -11
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_opd_train.py +47 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_rl_train.py +88 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_sft_train.py +72 -1
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/uv.lock +1 -1
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.env.example +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/CHANGELOG.md +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/Dockerfile +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/README.md +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/deploy.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/episode.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/eval.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/imports.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/list.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/push.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/retained.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/setup.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/test.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/test_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/test_params.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/test_warnings.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/traces.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/train_cost.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/scaffold/TRAINING.md +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/core/catalog.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/core/spec.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/huggingface.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/backend_common.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/opd_train.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/opd_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/runtime/pkg_proxy.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/score_batcher.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/core/checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/core/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/core/step_timing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/finalize.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/batching.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/bridge.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/bridge_failures.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/failures.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/gkd.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/multiturn_validation.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/overrides.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/prompts.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/reporting.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/scoring.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/state.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/opd/validation.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/child/patches.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/config.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/inputs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/multi_turn.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/reward_module.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/scoring.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/rl/verl_config.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/sft/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/sft/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/train/sft/config.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/verl/capabilities.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/engine/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/adapter.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/base.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/identity.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/loader.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/envs/pull.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/auth.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/bootstrap_console.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/bootstrap_pip.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/bootstrap_secrets.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/deadline.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/host/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/host/failmark.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/host/hostlog.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/http.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/instance.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/poll.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/poll_instance.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/provider.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/_lifecycle/worker.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/allocator.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/base.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/lambda_/api.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/lambda_/auth.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/lambda_/gpus.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/lambda_/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/lambda_/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/lambda_/jobs/reap.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/lambda_/preflight.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/lambda_/pricing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/preflight.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/realized.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/api.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/auth.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/cost.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/gpus.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/job_execution.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/jobs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/preflight.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/pricing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/resources.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/runpod/serverless/endpoints.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/sharding.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/vast/api.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/vast/auth.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/vast/preflight.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/providers/vast/pricing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/attempts.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/costs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/preparation.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/reconciliation.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/results/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/status.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/submit.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/supervise/attach.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/supervise/deploy.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/supervise/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/supervise/recovery.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/supervise/retry_decision.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/supervise/seed_submission.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runner/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/runtime_capsule/profiles.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/serve/adapter_check.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/serve/deploy.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/serve/errors.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/serve/export.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/serve/preflight.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/serve/responses.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/serve/streaming.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/serve/thinking.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/serve/urls.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/app.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/billing/charges.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/domain/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/domain/environment_registry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/domain/envs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/domain/projects.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/domain/reconcile.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/domain/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/domain/run_registry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/domain/teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/domain/teacher_errors.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/domain/teacher_requests.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/platform/auth.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/platform/internal_client.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/platform/runtime.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/routes/serving_completion.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/routes/serving_revisions.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/routes/serving_smoke.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/fixtures/math_eval.jsonl +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/fixtures/math_train.jsonl +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cancel_remote.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_deploy_alias_move_warning.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_jobs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_opd_multiturn_failure_exit.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_opd_replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_opd_resume_safety.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_provider_routing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_resume_on_retry.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_runmgmt.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_server_api.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_server_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_server_standalone.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_sft_startup_block.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.67
|
|
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
|
|
@@ -14,6 +14,7 @@ import sys
|
|
|
14
14
|
import threading
|
|
15
15
|
import time
|
|
16
16
|
|
|
17
|
+
from flash._internal.diagnostics import SECRET_ENV_KEYS_ENV
|
|
17
18
|
from flash.adapters.lora_rank import rank_from_adapter_config
|
|
18
19
|
from flash.engine.worker.runtime.pkg_proxy import W as _w
|
|
19
20
|
from flash.engine.worker.verl.checkpoints import resume_checkpoint_is_loadable
|
|
@@ -203,6 +204,9 @@ _CHILD_ENV_PREFIXES = (
|
|
|
203
204
|
|
|
204
205
|
|
|
205
206
|
def _build_verl_child_env(*, shim_dir: str, wandb_enabled: bool) -> dict[str, str]:
|
|
207
|
+
applied_secret_names = frozenset(
|
|
208
|
+
name.strip() for name in os.environ.get(SECRET_ENV_KEYS_ENV, "").split(",") if name.strip()
|
|
209
|
+
)
|
|
206
210
|
child = {
|
|
207
211
|
key: value
|
|
208
212
|
for key, value in os.environ.items()
|
|
@@ -210,9 +214,16 @@ def _build_verl_child_env(*, shim_dir: str, wandb_enabled: bool) -> dict[str, st
|
|
|
210
214
|
}
|
|
211
215
|
if wandb_enabled:
|
|
212
216
|
child.update({key: value for key, value in os.environ.items() if key.startswith("WANDB_")})
|
|
213
|
-
|
|
214
|
-
|
|
217
|
+
# retained runtime namespaces are filtered by applied-secret provenance. authenticated child-side
|
|
218
|
+
# wandb logging is the sole secret exception, and only when the existing logger gate enables it.
|
|
219
|
+
for name in applied_secret_names:
|
|
220
|
+
child.pop(name, None)
|
|
221
|
+
if wandb_enabled and "WANDB_API_KEY" in os.environ:
|
|
222
|
+
child["WANDB_API_KEY"] = os.environ["WANDB_API_KEY"]
|
|
223
|
+
parent_pythonpath = (
|
|
224
|
+
os.environ.get("PYTHONPATH", "") if "PYTHONPATH" not in applied_secret_names else ""
|
|
215
225
|
)
|
|
226
|
+
child["PYTHONPATH"] = os.pathsep.join(item for item in (shim_dir, parent_pythonpath) if item)
|
|
216
227
|
child["PYTHONUNBUFFERED"] = "1"
|
|
217
228
|
child["HYDRA_FULL_ERROR"] = "1"
|
|
218
229
|
child["HF_HUB_OFFLINE"] = "1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "freesolo-flash-dev"
|
|
3
|
-
version = "1.2.
|
|
3
|
+
version = "1.2.67"
|
|
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).
|
|
@@ -137,7 +137,7 @@ artifacts = ["flash/py.typed"]
|
|
|
137
137
|
# auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
|
|
138
138
|
# PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
|
|
139
139
|
# dev-channel release = bump this (and [project].version) and merge to `dev`.
|
|
140
|
-
version = "1.2.
|
|
140
|
+
version = "1.2.67"
|
|
141
141
|
|
|
142
142
|
[tool.pytest.ini_options]
|
|
143
143
|
pythonpath = ["."]
|
|
@@ -49,6 +49,9 @@ def test_env_setup_scaffolds_a_loadable_freesolo_env(tmp_path, monkeypatch) -> N
|
|
|
49
49
|
"name": "Test",
|
|
50
50
|
},
|
|
51
51
|
)
|
|
52
|
+
monkeypatch.setattr(
|
|
53
|
+
"flash.client.config.load_credentials", lambda: ("https://flash.freesolo.co", "key")
|
|
54
|
+
)
|
|
52
55
|
monkeypatch.chdir(tmp_path)
|
|
53
56
|
assert cmd_env_setup(Namespace()) == 0
|
|
54
57
|
|
|
@@ -94,6 +97,9 @@ def test_scaffolded_env_scores_through_real_task_example(tmp_path, monkeypatch)
|
|
|
94
97
|
"name": "Test",
|
|
95
98
|
},
|
|
96
99
|
)
|
|
100
|
+
monkeypatch.setattr(
|
|
101
|
+
"flash.client.config.load_credentials", lambda: ("https://flash.freesolo.co", "key")
|
|
102
|
+
)
|
|
97
103
|
monkeypatch.chdir(tmp_path)
|
|
98
104
|
assert cmd_env_setup(Namespace()) == 0
|
|
99
105
|
|
|
@@ -236,32 +236,55 @@ def test_build_worker_env_forwards_declared_environment_runtime_secrets():
|
|
|
236
236
|
assert "UNDECLARED_API_KEY" not in env
|
|
237
237
|
|
|
238
238
|
|
|
239
|
-
def test_build_worker_env_lists_declared_secret_names_for_the_redactors():
|
|
240
|
-
"""
|
|
241
|
-
cannot rely on the name-shape heuristic; the env carries the applied names explicitly."""
|
|
239
|
+
def test_build_worker_env_lists_declared_secret_names_for_the_redactors(monkeypatch, tmp_path):
|
|
240
|
+
"""the producer's exact applied-name metadata is also the verl child scrub contract."""
|
|
242
241
|
from flash._internal.diagnostics import SECRET_ENV_KEYS_ENV
|
|
243
242
|
from flash.core.spec import EnvironmentSpec, JobSpec, TrainSpec
|
|
243
|
+
from flash.engine.worker.sft_train import _build_verl_child_env
|
|
244
244
|
from flash.providers.runpod.serverless import build_worker_env
|
|
245
245
|
|
|
246
|
+
declared = (
|
|
247
|
+
"AWS_SECRET_ACCESS_KEY",
|
|
248
|
+
"CUDA_SECRET",
|
|
249
|
+
"FLA_CREDENTIAL",
|
|
250
|
+
"PYTHONPATH",
|
|
251
|
+
"WANDB_USER_SECRET",
|
|
252
|
+
)
|
|
246
253
|
spec = JobSpec(
|
|
247
254
|
model="Qwen/Qwen3.5-4B",
|
|
248
255
|
algorithm="grpo",
|
|
249
|
-
environment=EnvironmentSpec(id="owner/env", secrets=
|
|
256
|
+
environment=EnvironmentSpec(id="owner/env", secrets=declared),
|
|
250
257
|
train=TrainSpec(epochs=1, max_examples=10, hf_repo="owner/runs"),
|
|
251
258
|
seed=0,
|
|
252
259
|
)
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
0,
|
|
257
|
-
runtime_secrets={"AWS_SECRET_ACCESS_KEY": "aws-user", "WANDB_API_KEY": "user-wb"},
|
|
258
|
-
)
|
|
260
|
+
supplied = {name: f"synthetic-{name.lower()}" for name in declared}
|
|
261
|
+
supplied["WANDB_API_KEY"] = "synthetic-wandb-key"
|
|
262
|
+
env = build_worker_env(spec, 0, runtime_secrets=supplied)
|
|
259
263
|
|
|
260
264
|
listed = set(env[SECRET_ENV_KEYS_ENV].split(","))
|
|
261
|
-
assert listed == {
|
|
265
|
+
assert listed == {*declared, "WANDB_API_KEY"}
|
|
266
|
+
for name in listed:
|
|
267
|
+
assert name in env
|
|
262
268
|
# a run with no applied secrets carries no list at all.
|
|
263
269
|
assert SECRET_ENV_KEYS_ENV not in build_worker_env(_spec(), 0)
|
|
264
270
|
|
|
271
|
+
for name, value in env.items():
|
|
272
|
+
monkeypatch.setenv(name, value)
|
|
273
|
+
monkeypatch.setenv("CUDA_VISIBLE_DEVICES", "0,1")
|
|
274
|
+
monkeypatch.setenv("FLA_TILELANG", "0")
|
|
275
|
+
monkeypatch.setenv("WANDB_MODE", "offline")
|
|
276
|
+
child = _build_verl_child_env(shim_dir=str(tmp_path), wandb_enabled=True)
|
|
277
|
+
|
|
278
|
+
for name in declared:
|
|
279
|
+
if name != "PYTHONPATH":
|
|
280
|
+
assert name not in child
|
|
281
|
+
assert child["PYTHONPATH"] == str(tmp_path)
|
|
282
|
+
assert SECRET_ENV_KEYS_ENV not in child
|
|
283
|
+
assert "WANDB_API_KEY" in child
|
|
284
|
+
assert child["CUDA_VISIBLE_DEVICES"] == "0,1"
|
|
285
|
+
assert child["FLA_TILELANG"] == "0"
|
|
286
|
+
assert child["WANDB_MODE"] == "offline"
|
|
287
|
+
|
|
265
288
|
|
|
266
289
|
def test_the_redactor_metadata_name_is_reserved_from_declared_secrets():
|
|
267
290
|
"""build_worker_env sets FLASH_SECRET_ENV_KEYS last, so a job declaring that exact name would
|
|
@@ -6772,6 +6772,53 @@ def test_child_environment_keeps_bridge_but_excludes_teacher_transport(monkeypat
|
|
|
6772
6772
|
assert "FLASH_OPD_THINKING" not in child
|
|
6773
6773
|
|
|
6774
6774
|
|
|
6775
|
+
def test_opd_child_environment_scrubs_declared_prefixed_secrets(monkeypatch, tmp_path):
|
|
6776
|
+
from flash._internal.diagnostics import SECRET_ENV_KEYS_ENV
|
|
6777
|
+
|
|
6778
|
+
declared = (
|
|
6779
|
+
"CUDA_SECRET",
|
|
6780
|
+
"FLA_CREDENTIAL",
|
|
6781
|
+
"PYTHONPATH",
|
|
6782
|
+
"WANDB_USER_SECRET",
|
|
6783
|
+
"WANDB_API_KEY",
|
|
6784
|
+
)
|
|
6785
|
+
for name in declared:
|
|
6786
|
+
monkeypatch.setenv(name, f"synthetic-{name.lower()}")
|
|
6787
|
+
monkeypatch.setenv(SECRET_ENV_KEYS_ENV, ",".join(declared))
|
|
6788
|
+
monkeypatch.setenv("CUDA_VISIBLE_DEVICES", "0,1")
|
|
6789
|
+
monkeypatch.setenv("NCCL_DEBUG", "WARN")
|
|
6790
|
+
monkeypatch.setenv("FLA_TILELANG", "0")
|
|
6791
|
+
monkeypatch.setenv("WANDB_MODE", "offline")
|
|
6792
|
+
child = _build_opd_child_env(
|
|
6793
|
+
shim_dir=str(tmp_path),
|
|
6794
|
+
wandb_enabled=True,
|
|
6795
|
+
bridge_url="http://127.0.0.1:4444",
|
|
6796
|
+
bridge_token="synthetic-bridge-token",
|
|
6797
|
+
seed=42,
|
|
6798
|
+
stop_sequences=(),
|
|
6799
|
+
eos_token_ids=frozenset({1}),
|
|
6800
|
+
structured_outputs=None,
|
|
6801
|
+
model_vocab_size=248320,
|
|
6802
|
+
thinking=False,
|
|
6803
|
+
plugin_config='{"wandb":true}',
|
|
6804
|
+
)
|
|
6805
|
+
|
|
6806
|
+
for name in declared:
|
|
6807
|
+
if name not in {"PYTHONPATH", "WANDB_API_KEY"}:
|
|
6808
|
+
assert name not in child
|
|
6809
|
+
assert child["PYTHONPATH"] == str(tmp_path)
|
|
6810
|
+
assert SECRET_ENV_KEYS_ENV not in child
|
|
6811
|
+
assert "WANDB_API_KEY" in child
|
|
6812
|
+
assert child["WANDB_MODE"] == "offline"
|
|
6813
|
+
assert child["CUDA_VISIBLE_DEVICES"] == "0,1"
|
|
6814
|
+
assert child["NCCL_DEBUG"] == "WARN"
|
|
6815
|
+
assert child["FLA_TILELANG"] == "0"
|
|
6816
|
+
assert "FLASH_OPD_BRIDGE_URL" in child
|
|
6817
|
+
assert "FLASH_OPD_BRIDGE_TOKEN" in child
|
|
6818
|
+
assert child["VERL_USE_EXTERNAL_MODULES"] == "flash_opd_plugin"
|
|
6819
|
+
assert child["FLASH_OPD_PLUGIN_CONFIG"] == '{"wandb":true}'
|
|
6820
|
+
|
|
6821
|
+
|
|
6775
6822
|
def test_structured_child_environment_carries_only_canonical_replay_inputs(tmp_path):
|
|
6776
6823
|
child = _build_opd_child_env(
|
|
6777
6824
|
shim_dir=str(tmp_path),
|
|
@@ -7321,6 +7321,94 @@ def test_the_verl_child_allowlist_keeps_the_kernel_choice_but_drops_credentials(
|
|
|
7321
7321
|
assert key not in child
|
|
7322
7322
|
|
|
7323
7323
|
|
|
7324
|
+
def test_grpo_final_driver_env_scrubs_declared_prefixed_secrets_before_ray(monkeypatch, tmp_path):
|
|
7325
|
+
from flash._internal.diagnostics import SECRET_ENV_KEYS_ENV
|
|
7326
|
+
|
|
7327
|
+
declared = (
|
|
7328
|
+
"CUDA_SECRET",
|
|
7329
|
+
"FLA_CREDENTIAL",
|
|
7330
|
+
"PYTHONPATH",
|
|
7331
|
+
"WANDB_USER_SECRET",
|
|
7332
|
+
"WANDB_API_KEY",
|
|
7333
|
+
)
|
|
7334
|
+
for name in declared:
|
|
7335
|
+
monkeypatch.setenv(name, f"synthetic-{name.lower()}")
|
|
7336
|
+
monkeypatch.setenv(SECRET_ENV_KEYS_ENV, ",".join(declared))
|
|
7337
|
+
monkeypatch.setenv("CUDA_VISIBLE_DEVICES", "0,1")
|
|
7338
|
+
monkeypatch.setenv("FLA_TILELANG", "0")
|
|
7339
|
+
monkeypatch.setenv("WANDB_MODE", "offline")
|
|
7340
|
+
files = {
|
|
7341
|
+
"shim_dir": str(tmp_path),
|
|
7342
|
+
"rank_device_claims": str(tmp_path / "rank-device-claims"),
|
|
7343
|
+
"plugin_config_path": str(tmp_path / "plugin-config.json"),
|
|
7344
|
+
}
|
|
7345
|
+
child = rl_train._build_rl_child_env(
|
|
7346
|
+
{"multi_turn": False}, files, ["wandb"], "http://127.0.0.1:9/"
|
|
7347
|
+
)
|
|
7348
|
+
|
|
7349
|
+
for name in declared:
|
|
7350
|
+
if name not in {"PYTHONPATH", "WANDB_API_KEY"}:
|
|
7351
|
+
assert name not in child
|
|
7352
|
+
assert child["PYTHONPATH"] == files["shim_dir"]
|
|
7353
|
+
assert SECRET_ENV_KEYS_ENV not in child
|
|
7354
|
+
assert "WANDB_API_KEY" in child
|
|
7355
|
+
assert child["WANDB_MODE"] == "offline"
|
|
7356
|
+
assert child["CUDA_VISIBLE_DEVICES"] == "0,1"
|
|
7357
|
+
assert child["FLA_TILELANG"] == "0"
|
|
7358
|
+
assert child["FLASH_VERL_REWARD_URL"] == "http://127.0.0.1:9/"
|
|
7359
|
+
assert child["VERL_USE_EXTERNAL_MODULES"] == "flash_grpo_plugin"
|
|
7360
|
+
assert child["FLASH_GRPO_PLUGIN_CONFIG_PATH"] == files["plugin_config_path"]
|
|
7361
|
+
assert child["FLASH_RANK_DEVICE_CLAIMS"] == files["rank_device_claims"]
|
|
7362
|
+
|
|
7363
|
+
captured = {}
|
|
7364
|
+
|
|
7365
|
+
class _EmptyChildStream:
|
|
7366
|
+
def __init__(self, proc, **kwargs):
|
|
7367
|
+
captured["stream_proc"] = proc
|
|
7368
|
+
|
|
7369
|
+
def __iter__(self):
|
|
7370
|
+
return iter(())
|
|
7371
|
+
|
|
7372
|
+
def wait_and_classify(self):
|
|
7373
|
+
return 0
|
|
7374
|
+
|
|
7375
|
+
def terminate(self):
|
|
7376
|
+
raise AssertionError("the successful child should not be terminated")
|
|
7377
|
+
|
|
7378
|
+
process = SimpleNamespace()
|
|
7379
|
+
|
|
7380
|
+
def popen(*args, **kwargs):
|
|
7381
|
+
captured["popen_env"] = kwargs["env"]
|
|
7382
|
+
return process
|
|
7383
|
+
|
|
7384
|
+
monkeypatch.setattr(rl_train.subprocess, "Popen", popen)
|
|
7385
|
+
monkeypatch.setitem(
|
|
7386
|
+
rl_train._execute_rl_child.__globals__, "adopt_orphaned_descendants", lambda: None
|
|
7387
|
+
)
|
|
7388
|
+
monkeypatch.setattr(rl_train, "ChildOutputTail", lambda: object())
|
|
7389
|
+
monkeypatch.setattr(rl_train, "VerlChildSilenceWatchdog", lambda *args, **kwargs: object())
|
|
7390
|
+
monkeypatch.setattr(rl_train, "_GrpoSubprocessStream", _EmptyChildStream)
|
|
7391
|
+
reward_runtime = SimpleNamespace(
|
|
7392
|
+
observability=SimpleNamespace(parent_work=object()), wandb_link={}
|
|
7393
|
+
)
|
|
7394
|
+
|
|
7395
|
+
assert (
|
|
7396
|
+
rl_train._execute_rl_child(
|
|
7397
|
+
python_bin="python",
|
|
7398
|
+
overrides=[],
|
|
7399
|
+
env_for_verl=child,
|
|
7400
|
+
inp={},
|
|
7401
|
+
state=rl_train._StepMetricState(),
|
|
7402
|
+
reward_runtime=reward_runtime,
|
|
7403
|
+
_reward_observability=dict,
|
|
7404
|
+
)
|
|
7405
|
+
== 0
|
|
7406
|
+
)
|
|
7407
|
+
assert captured["popen_env"] is child
|
|
7408
|
+
assert captured["popen_env"]["PYTHONPATH"] == files["shim_dir"]
|
|
7409
|
+
assert captured["stream_proc"] is process
|
|
7410
|
+
|
|
7411
|
+
|
|
7324
7412
|
def test_grpo_finalization_carries_the_completed_step():
|
|
7325
7413
|
"""Regression (rl_train.py): write_train_meta emits `<phase>_train_done` and then the
|
|
7326
7414
|
terminal `done`. Called without `step`, both land stepless and overwrite the stepped `rl_trained`
|
|
@@ -2166,6 +2166,74 @@ def test_child_environment_excludes_provider_and_control_plane_secrets(monkeypat
|
|
|
2166
2166
|
assert with_wandb["WANDB_API_KEY"] == "wandb-secret"
|
|
2167
2167
|
|
|
2168
2168
|
|
|
2169
|
+
def test_shared_child_environment_scrubs_declared_prefixed_secrets(monkeypatch, tmp_path):
|
|
2170
|
+
from flash._internal.diagnostics import SECRET_ENV_KEYS_ENV
|
|
2171
|
+
|
|
2172
|
+
declared_secrets = (
|
|
2173
|
+
"CUDA_SECRET",
|
|
2174
|
+
"NCCL_CREDENTIAL",
|
|
2175
|
+
"TORCH_PRIVATE_TOKEN",
|
|
2176
|
+
"PYTORCH_AUTH",
|
|
2177
|
+
"VERL_USER_SECRET",
|
|
2178
|
+
"FLA_CREDENTIAL",
|
|
2179
|
+
"PYTHONPATH",
|
|
2180
|
+
"WANDB_USER_SECRET",
|
|
2181
|
+
"CUSTOM_USER_SECRET",
|
|
2182
|
+
"WANDB_API_KEY",
|
|
2183
|
+
)
|
|
2184
|
+
runtime_controls = {
|
|
2185
|
+
"CUDA_VISIBLE_DEVICES": "0,1",
|
|
2186
|
+
"NCCL_DEBUG": "WARN",
|
|
2187
|
+
"TORCH_LOGS": "+dynamo",
|
|
2188
|
+
"PYTORCH_CUDA_ALLOC_CONF": "max_split_size_mb:256",
|
|
2189
|
+
"VERL_LOGGING_LEVEL": "INFO",
|
|
2190
|
+
"FLA_TILELANG": "0",
|
|
2191
|
+
"OMP_NUM_THREADS": "4",
|
|
2192
|
+
"MKL_NUM_THREADS": "4",
|
|
2193
|
+
"OPENBLAS_NUM_THREADS": "4",
|
|
2194
|
+
"LC_ALL": "C.UTF-8",
|
|
2195
|
+
"HF_HOME": "/cache/hf",
|
|
2196
|
+
"FLASH_VERL_PYTHON": "/verl/python",
|
|
2197
|
+
}
|
|
2198
|
+
for name in declared_secrets:
|
|
2199
|
+
monkeypatch.setenv(name, f"synthetic-{name.lower()}")
|
|
2200
|
+
for name, value in runtime_controls.items():
|
|
2201
|
+
monkeypatch.setenv(name, value)
|
|
2202
|
+
monkeypatch.setenv("WANDB_MODE", "offline")
|
|
2203
|
+
monkeypatch.setenv(
|
|
2204
|
+
SECRET_ENV_KEYS_ENV,
|
|
2205
|
+
f" {','.join(declared_secrets[:4])},, {','.join(declared_secrets[4:])} ",
|
|
2206
|
+
)
|
|
2207
|
+
|
|
2208
|
+
without_wandb = _build_verl_child_env(shim_dir=str(tmp_path), wandb_enabled=False)
|
|
2209
|
+
for name, value in runtime_controls.items():
|
|
2210
|
+
assert without_wandb[name] == value
|
|
2211
|
+
for name in declared_secrets:
|
|
2212
|
+
if name != "PYTHONPATH":
|
|
2213
|
+
assert name not in without_wandb
|
|
2214
|
+
assert without_wandb["PYTHONPATH"] == str(tmp_path)
|
|
2215
|
+
assert "WANDB_MODE" not in without_wandb
|
|
2216
|
+
assert SECRET_ENV_KEYS_ENV not in without_wandb
|
|
2217
|
+
|
|
2218
|
+
with_wandb = _build_verl_child_env(shim_dir=str(tmp_path), wandb_enabled=True)
|
|
2219
|
+
for name, value in runtime_controls.items():
|
|
2220
|
+
assert with_wandb[name] == value
|
|
2221
|
+
for name in declared_secrets:
|
|
2222
|
+
if name not in {"PYTHONPATH", "WANDB_API_KEY"}:
|
|
2223
|
+
assert name not in with_wandb
|
|
2224
|
+
assert with_wandb["PYTHONPATH"] == str(tmp_path)
|
|
2225
|
+
assert "WANDB_API_KEY" in with_wandb
|
|
2226
|
+
assert with_wandb["WANDB_MODE"] == "offline"
|
|
2227
|
+
assert SECRET_ENV_KEYS_ENV not in with_wandb
|
|
2228
|
+
|
|
2229
|
+
monkeypatch.setenv(
|
|
2230
|
+
SECRET_ENV_KEYS_ENV,
|
|
2231
|
+
",".join(name for name in declared_secrets if name != "PYTHONPATH"),
|
|
2232
|
+
)
|
|
2233
|
+
inherited = _build_verl_child_env(shim_dir=str(tmp_path), wandb_enabled=False)
|
|
2234
|
+
assert inherited["PYTHONPATH"] == os.pathsep.join((str(tmp_path), "synthetic-pythonpath"))
|
|
2235
|
+
|
|
2236
|
+
|
|
2169
2237
|
def test_checkpoint_watcher_exports_and_uploads_required_step(monkeypatch, tmp_path):
|
|
2170
2238
|
import flash.engine.worker as worker
|
|
2171
2239
|
from flash.engine.worker import sft_train
|
|
@@ -2838,8 +2906,11 @@ def test_sft_collapse_warning_stays_quiet_for_structured_singleturn_targets(monk
|
|
|
2838
2906
|
|
|
2839
2907
|
|
|
2840
2908
|
def test_run_sft_train_orchestrates_exact_dataset_and_resume_accounting(monkeypatch):
|
|
2909
|
+
from flash._internal.diagnostics import SECRET_ENV_KEYS_ENV
|
|
2841
2910
|
from flash.engine.worker import sft_train
|
|
2842
2911
|
|
|
2912
|
+
monkeypatch.setenv("PYTHONPATH", "synthetic-sft-parent-path")
|
|
2913
|
+
monkeypatch.setenv(SECRET_ENV_KEYS_ENV, "PYTHONPATH")
|
|
2843
2914
|
spec, captured = _stub_sft_run(monkeypatch)
|
|
2844
2915
|
|
|
2845
2916
|
def fake_training(command, *, env, on_step, on_line, heartbeat):
|
|
@@ -2871,7 +2942,7 @@ def test_run_sft_train_orchestrates_exact_dataset_and_resume_accounting(monkeypa
|
|
|
2871
2942
|
if value.startswith("data.custom_cls.path=")
|
|
2872
2943
|
)
|
|
2873
2944
|
assert os.path.isfile(custom_path)
|
|
2874
|
-
assert captured["child_env"]["PYTHONPATH"]
|
|
2945
|
+
assert captured["child_env"]["PYTHONPATH"] == os.path.dirname(captured["child"].shim_markers)
|
|
2875
2946
|
assert captured["child_env"]["HF_HUB_OFFLINE"] == "1"
|
|
2876
2947
|
assert captured["uploads"][0][1:] == ("adapter", True)
|
|
2877
2948
|
assert captured["published"][0][1] == 2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/ISSUE_TEMPLATE/bug_report.yml
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/ISSUE_TEMPLATE/feature_request.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/bake-kernel-cache.yml
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/main-source-guard.yml
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.github/workflows/notify-tests-repo.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/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
|
{freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/setup_wandb.py
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/test_evaluations.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/test_params.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.2.66 → freesolo_flash_dev-1.2.67}/flash/cli/commands/env/test_warnings.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
|