freesolo-flash-dev 1.2.7__tar.gz → 1.2.13__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.13/CHANGELOG.md +200 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/PKG-INFO +1 -1
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/adapters/lora_rank.py +113 -2
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/__init__.py +1 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/episode.py +1 -1
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/eval.py +2 -1
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/setup.py +4 -1
- freesolo_flash_dev-1.2.13/flash/cli/commands/env/test.py +823 -0
- freesolo_flash_dev-1.2.13/flash/cli/commands/env/test_evaluations.py +141 -0
- freesolo_flash_dev-1.2.13/flash/cli/commands/env/test_params.py +256 -0
- freesolo_flash_dev-1.2.13/flash/cli/commands/env/test_warnings.py +393 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/scaffold/TRAINING.md +335 -34
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/core/catalog.py +13 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/opd_train.py +18 -6
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/opd_train_runner.py +6 -1
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/child/multiturn.py +8 -5
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/child/multiturn.py +18 -5
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/multi_turn.py +103 -16
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/shims.py +15 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/poll.py +1 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/__init__.py +1 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/artifacts.py +25 -7
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/preparation.py +8 -2
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/export.py +75 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/preflight.py +37 -10
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/serving_smoke.py +9 -3
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/profile.py +5 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_commands.py +4 -2
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_test.py +1279 -2
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_export.py +358 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_opd_resume_safety.py +9 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_opd_train.py +29 -13
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_poll_helpers.py +12 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_provider_routing.py +98 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_rl_train.py +199 -1
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_envs_coverage.py +84 -13
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/uv.lock +1 -1
- freesolo_flash_dev-1.2.7/CHANGELOG.md +0 -82
- freesolo_flash_dev-1.2.7/flash/cli/commands/env/test.py +0 -863
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.env.example +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/Dockerfile +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/README.md +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/deploy.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/imports.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/list.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/push.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/env/retained.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/traces.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/commands/train_cost.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/core/spec.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/backend_common.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/runtime/pkg_proxy.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/score_batcher.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/sft_train.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/finalize.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/batching.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/bridge.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/failures.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/gkd.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/multiturn_validation.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/overrides.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/prompts.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/scoring.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/opd/validation.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/config.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/inputs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/scoring.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/rl/verl_config.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/sft/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/train/sft/config.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/capabilities.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/engine/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/adapter.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/base.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/identity.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/loader.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/envs/pull.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/auth.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/bootstrap_pip.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/bootstrap_secrets.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/deadline.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/http.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/instance.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/poll_instance.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/provider.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/_lifecycle/worker.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/allocator.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/base.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/api.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/auth.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/gpus.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/jobs/reap.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/preflight.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/lambda_/pricing.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/preflight.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/realized.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/api.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/auth.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/cost.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/gpus.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/job_execution.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/jobs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/preflight.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/pricing.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/resources.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/runpod/serverless/endpoints.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/sharding.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/api.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/auth.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/preflight.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/providers/vast/pricing.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/attempts.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/costs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/reconciliation.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/results/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/status.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/submit.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/attach.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/deploy.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/recovery.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/seed_submission.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/runner/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/adapter_check.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/deploy.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/errors.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/streaming.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/thinking.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/serve/urls.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/app.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/billing/charges.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/environment_registry.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/envs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/projects.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/reconcile.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/run_registry.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/teacher_errors.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/domain/teacher_requests.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/auth.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/internal_client.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/platform/runtime.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/serving_completion.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/serving_revisions.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/fixtures/math_eval.jsonl +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/fixtures/math_train.jsonl +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cancel_remote.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_jobs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_resume_on_retry.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_runmgmt.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_api.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_server_standalone.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_train.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.7 → freesolo_flash_dev-1.2.13}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Notable changes to `freesolo-flash`. The dev-channel package `freesolo-flash-dev` ships in
|
|
4
|
+
lockstep at the same version.
|
|
5
|
+
|
|
6
|
+
Releases happen by merging a version bump from `dev` into `main`, which publishes to PyPI
|
|
7
|
+
(`.github/workflows/publish.yml`). Versions are `MAJOR.MINOR.PATCH`.
|
|
8
|
+
|
|
9
|
+
This file starts at 1.1.35. Earlier releases are not reconstructed here; use
|
|
10
|
+
`git log` for anything before that.
|
|
11
|
+
|
|
12
|
+
## Unreleased
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- A `flash-cli` console script, the same entry point as `flash` under a name nothing else
|
|
17
|
+
claims. The `server` and `dev` extras install `runpod-flash`, which declares its own `flash`
|
|
18
|
+
script; whichever distribution is installed last wins, so on a control-plane host
|
|
19
|
+
`pip install 'freesolo-flash[server]'` could leave `flash` running RunPod's CLI, which exits 0
|
|
20
|
+
and does nothing. `flash` is unchanged and remains correct on a base (client-only) install.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- CI runs the offline test suite on both supported interpreters (3.11 and 3.12) rather than
|
|
25
|
+
3.11 alone, and sets `HF_HUB_OFFLINE` / `TRANSFORMERS_OFFLINE` so a test that reaches the
|
|
26
|
+
network fails deterministically instead of depending on runner connectivity.
|
|
27
|
+
- Every GitHub Action is pinned to a commit SHA rather than a mutable tag.
|
|
28
|
+
- `mypy` runs in CI as an advisory (non-blocking) job.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- `flash env test` reported `overall: PASS` on environments that could not have trained anything,
|
|
33
|
+
because a well-formed hook return was the only thing it checked. Three silent-pass classes now
|
|
34
|
+
speak up. It still exits 0 for all three - they are warnings, not new blocking gates - but a run
|
|
35
|
+
no longer passes without a word about what it found:
|
|
36
|
+
|
|
37
|
+
- **Every episode scored 0.0.** The existing blocking gate is GRPO-only and abstains for a
|
|
38
|
+
non-GRPO algorithm and for a junk probe that raised, so an all-zero run routinely printed `PASS`
|
|
39
|
+
and nothing else. The warning is independent of those abstentions - but not of the two that are
|
|
40
|
+
about this command's own fidelity rather than the environment's health. A reference written in
|
|
41
|
+
reasoning markup is replayed verbatim here (there is no run config, so `thinking` defaults off)
|
|
42
|
+
and scores zero against a correct strict grader that would have seen the span stripped; a replay
|
|
43
|
+
that ran out mid-episode is graded part reference and part junk. Neither zero is evidence about
|
|
44
|
+
the environment, so both are excluded from the warning exactly as they are from the gate.
|
|
45
|
+
Counting them said "this run measured nothing" about a working reasoning environment - the very
|
|
46
|
+
conclusion the gate deliberately withholds. A constant reward that IS interpretable is never a
|
|
47
|
+
measurement, and for GRPO it carries the risk of being actively silent: rewards are mean-centred
|
|
48
|
+
within each group, so if sampled rollouts score alike the advantage and gradient are zero -
|
|
49
|
+
training completes, the loss curve looks unremarkable, W&B looks healthy, and the adapter comes
|
|
50
|
+
out identical to its warm start. That is stated as a risk rather than a prediction: this command
|
|
51
|
+
scores at most three offline gold replays, never a group of policy samples, so it cannot know
|
|
52
|
+
what a real rollout group would pay.
|
|
53
|
+
The end-of-run advantage-spread guard catches that only after the GPUs are paid for. An
|
|
54
|
+
For a non-GRPO run the warning says what is actually true of it: SFT and OPD never read
|
|
55
|
+
`env.reward`, so an all-zero scorer costs that run nothing and a placeholder `reward()` on an
|
|
56
|
+
SFT-only environment is a legitimate choice. It reports that the run is no evidence the grader
|
|
57
|
+
works - so the PASS is not clearance to train GRPO on the same environment later - instead of
|
|
58
|
+
sending the author to debug a function this algorithm never calls.
|
|
59
|
+
An all-`echo` run is reported differently and more weakly, because zero is the _correct_ score for
|
|
60
|
+
the deliberate junk echo replays - what is wrong there is that no gold text was ever scored,
|
|
61
|
+
which includes a real gold completion whose payload sits outside `content`: a native tool call
|
|
62
|
+
keeps its arguments in `tool_calls` and leaves `content` null. That row is a correct SFT target,
|
|
63
|
+
so it gets the opposite remedy - the warning says explicitly not to add assistant text to
|
|
64
|
+
satisfy the check, and to exercise the reward function against a sampled rollout instead, rather
|
|
65
|
+
than sending the author to corrupt a working target. It stays silent when the grader was proven
|
|
66
|
+
to separate - a centered scale paying gold 0.0 and junk -1.0, or a per-turn vector that
|
|
67
|
+
separates while the scalar is only a placeholder - since both have a real gradient and calling
|
|
68
|
+
them unmeasured would be false. A per-turn vector only counts as separation when the paid
|
|
69
|
+
worker would actually train from it: `_validated_reward` discards a vector holding a non-number,
|
|
70
|
+
a non-finite value, or a count that disagrees with the assistant turns the episode emitted, and
|
|
71
|
+
falls back to the flat episode reward. Reading such a vector as separation here was therefore
|
|
72
|
+
backwards - it suppressed both the warning and the blocking gate on precisely the runs that do
|
|
73
|
+
train on all-zero rewards, so two rewards for a three-turn episode bought a silent `PASS`. The
|
|
74
|
+
same three checks now apply before a vector is believed. Neither probe behind that judgement is free: the junk probe
|
|
75
|
+
drives a whole extra episode through user code, and the per-turn probe runs the environment's
|
|
76
|
+
own `score_episodes`, which may be the same paid judge the episodes just used. Both are spent
|
|
77
|
+
only where their answer can change what the command prints _and_ the algorithm trains from the
|
|
78
|
+
reward, since for SFT and OPD the answer could only soften a warning about a number that is
|
|
79
|
+
never read. Billing is therefore unchanged from the previous release in every case measured
|
|
80
|
+
against a counting grader: a healthy environment costs one call under both SFT and GRPO, and an
|
|
81
|
+
all-zero environment costs one under SFT and OPD and three under GRPO, exactly as before.
|
|
82
|
+
- **A gold replay that never terminates.** An environment applying every move twice can solve no
|
|
83
|
+
board, yet gold scored 0.60-0.65, beat a junk answer, and burned the full turn cap - clearing
|
|
84
|
+
every existing check. What exposed it in the field was reading `turns=12` on a board with a
|
|
85
|
+
five-move solution, a comparison the verdict never made. An episode stopped by the hard turn cap
|
|
86
|
+
rather than the environment's own done signal now says so. The verdict is drawn after the
|
|
87
|
+
deferred final `env_reply`, so an environment that solves its task on the last allowed turn is
|
|
88
|
+
not misreported. A gold answer shorter than the episode is judged at the moment it ran out
|
|
89
|
+
rather than at the end: the junk the driver pads with cannot advance the environment, so the
|
|
90
|
+
final state says nothing about the reference either way. Both halves stay reportable - a
|
|
91
|
+
five-move solution against a twelve-turn cap on an unsolvable board (the field case, since real
|
|
92
|
+
datasets carry minimal solutions) is still reported, and so is a short gold answer on a working
|
|
93
|
+
environment, because at that sampling point the two are indistinguishable: both are not-done,
|
|
94
|
+
one because it never can be and one because a real rollout would simply have continued. Rather
|
|
95
|
+
than resolve that ambiguity silently in either direction, the warning states it - a reference
|
|
96
|
+
that ran out before the cap names both explanations and puts the cheaper one first, since
|
|
97
|
+
extending a dataset row costs less than auditing termination logic that works. Only a reference
|
|
98
|
+
that covered every turn and still never finished leaves the environment as the sole
|
|
99
|
+
explanation. A gold trajectory _longer_ than the cap is separated out before either reading,
|
|
100
|
+
since its cause is fully determined rather than guessed: only a prefix could be replayed, so
|
|
101
|
+
the remaining gold turns were never scored, and the report names both numbers and the exact
|
|
102
|
+
remedy (raise the cap, or shorten the row) instead of sending the author to audit it. That
|
|
103
|
+
mismatch is reported independently of whether the episode finished, because the two are not the
|
|
104
|
+
same question: an environment that sets `done` while applying the capped prefix ends the episode
|
|
105
|
+
tidily, so the not-done signal never fires, and the dropped gold turns went unmentioned on an
|
|
106
|
+
otherwise clean `overall: PASS`. The count it reports is the turns actually replayed, not the
|
|
107
|
+
cap - an environment that terminates before reaching the cap sends fewer, and quoting the cap
|
|
108
|
+
claimed a turn had been replayed that never was, contradicting the episode line just below it.
|
|
109
|
+
Otherwise
|
|
110
|
+
the wording stops short of a verdict, because `rollout_done`
|
|
111
|
+
returns True at `turn >= cap` regardless of `state["done"]`, so a fixed-length episode that ends
|
|
112
|
+
purely by using its whole budget is a supported shape that never sets `done` and is
|
|
113
|
+
indistinguishable from a dead one here. Both are reported, the reward that separates them in
|
|
114
|
+
practice is quoted on the line, and the reader is told which reading applies to which. The
|
|
115
|
+
ceiling compared against is the
|
|
116
|
+
_effective_ one: a row setting `max_episode_turns` below the dataset-wide `max_turns` is stopped
|
|
117
|
+
by its own budget, which `rollout_done` gives precedence, so measuring exhaustion against
|
|
118
|
+
`max_turns` alone silenced this warning for exactly the rows whose budget is tightest.
|
|
119
|
+
|
|
120
|
+
Measuring against the effective cap also made an existing hole reachable: for an episode
|
|
121
|
+
stopped at the ceiling, the final `env_reply` is issued by a deferred call after the loop, and
|
|
122
|
+
that call never checked its envelope. An environment whose last reply is malformed - scalar
|
|
123
|
+
`content`, which breaks the chat template on the paid run - therefore reached `overall: PASS`.
|
|
124
|
+
It is now validated exactly like the in-loop replies, with an empty reply still allowed, since
|
|
125
|
+
an environment with nothing further to observe legitimately returns none.
|
|
126
|
+
|
|
127
|
+
- **A gold completion whose rendered role sequence collapses.** SFT does not replay a completion
|
|
128
|
+
turn by turn; it renders one training string from `prompt_messages + sft_completion`, and
|
|
129
|
+
nothing validated that concatenation. On a single-turn environment a gold answer returned as
|
|
130
|
+
assistant turns alone rendered as one user question followed by every answer back to back,
|
|
131
|
+
training the model to dump the whole episode into a single reply - the opposite of the
|
|
132
|
+
behaviour being taught. Because this gate scored each turn separately, it passed either way.
|
|
133
|
+
The rendered role sequence is now checked for consecutive same-role turns and printed.
|
|
134
|
+
|
|
135
|
+
The check is scoped to where the defect is real. It is skipped entirely for multi-turn
|
|
136
|
+
environments, where consecutive assistant turns are the contract rather than a fault - the
|
|
137
|
+
intervening user turns come from `env_reply` at rollout time and are deliberately absent from
|
|
138
|
+
the dataset. `tool` is exempt, since parallel tool calls are answered by one `tool` message per
|
|
139
|
+
call and chat templates render each as its own block; `user` and `system` are not, because a
|
|
140
|
+
doubled user turn is how an off-by-one trajectory capture shows up and it duplicates that text
|
|
141
|
+
in the trained string just as a doubled assistant turn does. Only repeats the completion owns
|
|
142
|
+
are reported, with `sft_completion`'s own indices: a repeat wholly inside `prompt_messages` is
|
|
143
|
+
an ordinary prompt shape (a retrieved document in its own user message, a task and its
|
|
144
|
+
reply-format instruction as separate turns) that no edit to the completion could change, and an
|
|
145
|
+
`assistant` turn at the prompt/completion seam is a prefill the completion continues, the one
|
|
146
|
+
adjacency meant to merge. A doubled `user` or `system` turn at that same seam has no such
|
|
147
|
+
innocent form and is still reported, since it is the completion restating a turn the prompt
|
|
148
|
+
already contains.
|
|
149
|
+
|
|
150
|
+
- Commands printed for the operator to run (the resume/cancel hand-off after `flash train`,
|
|
151
|
+
usage strings, `next:` hints) now name the executable actually invoked rather than always
|
|
152
|
+
`flash`. On a host where `runpod-flash` owns the `flash` script, the printed
|
|
153
|
+
`flash runs cancel <run-id>` exited 0 without cancelling, leaving a run billing while the
|
|
154
|
+
operator believed they had stopped it. Reached through the `python -m flash.cli` escape hatch,
|
|
155
|
+
the printed command now names the interpreter that is actually running, rather than a bare
|
|
156
|
+
`python` that is absent on a python3-only host and may resolve to a different environment
|
|
157
|
+
inside a virtualenv.
|
|
158
|
+
|
|
159
|
+
- `flash env setup` scaffolded hosted-only environment instructions on every plane. A
|
|
160
|
+
self-hosted plane cannot publish to Freesolo's managed environment hub, so the generated
|
|
161
|
+
configs left `[environment] id` empty (which fails validation) beside a `flash env push`
|
|
162
|
+
command that could not work. Against a self-hosted plane the scaffold now emits the
|
|
163
|
+
`github:owner/repo@ref:path` id form, which such a plane resolves directly. Output against
|
|
164
|
+
the managed plane is unchanged.
|
|
165
|
+
|
|
166
|
+
- `flash-server` reported missing operator configuration as an unhandled ASGI startup
|
|
167
|
+
exception, so the actionable message arrived under ~20 frames of starlette/contextlib. The
|
|
168
|
+
refusing half of the preflight now runs before uvicorn starts, and `flash-server` prints
|
|
169
|
+
`error: ...` and exits 3 (uvicorn's `STARTUP_FAILURE`, which this path already used, so
|
|
170
|
+
supervision keying on it is unaffected). The advisory warnings still come from the lifespan
|
|
171
|
+
alone, so a booted plane logs them once.
|
|
172
|
+
- `flash env test` blamed the reward function for a gold answer that scored zero, when the
|
|
173
|
+
gold completion is equally likely to be at fault: with no `sft_completion` hook the replayed
|
|
174
|
+
answer is the dataset row's raw `output`, so a dataset whose `output` is a bare value fails a
|
|
175
|
+
grader that (correctly) requires a wrapper. The warning now names both candidates and prints
|
|
176
|
+
the exact text it scored, verbatim rather than through the whitespace-collapsing, 200-character
|
|
177
|
+
preview that hid the formatting faults it exists to reveal. The scaffolded `environment.py`
|
|
178
|
+
documents that `output` is also the gold assistant turn SFT trains on, and that per-row scorer
|
|
179
|
+
state belongs in `metadata`.
|
|
180
|
+
- `flash env test` labelled the replayed dataset turns as the text that scored zero, but a
|
|
181
|
+
multi-turn environment whose `step_episode` returns a `final_response_text` has that override
|
|
182
|
+
replace the episode's response before scoring, so the diagnostic named text the grader never
|
|
183
|
+
saw. It now reports what the scorer actually received, captured at the scoring call.
|
|
184
|
+
- An environment that overrode its answer to the empty string had `flash env test` report the
|
|
185
|
+
replayed turns instead: the captured text was tested for truth, so a graded `""` was
|
|
186
|
+
indistinguishable from an episode that never reached the scorer. The override propagates on
|
|
187
|
+
`is not None`, so `""` really is what the grader saw -- and an empty answer explains a zero
|
|
188
|
+
reward on its own, making it the reading a reader most needs named rather than hidden.
|
|
189
|
+
- A crashed scorer went unreported on an `echo` episode -- a row with no gold answer to replay,
|
|
190
|
+
which is also the case that leaves the GRPO gate with nothing to count. `flash env test` could
|
|
191
|
+
exit `overall: PASS` with every reward coming from a scorer that never ran. The scorer's error is
|
|
192
|
+
now surfaced for any policy.
|
|
193
|
+
- A scorer that crashed behind the SDK's guard reached `flash env test` as a bare `0.000000`,
|
|
194
|
+
indistinguishable from a judged-wrong answer, because the adapter kept only
|
|
195
|
+
`RewardResult.score`. The new `FreesoloEnvironment.reward_with_error` returns the reward and the
|
|
196
|
+
discarded error from a single scoring call, so a missing runtime dependency names itself without
|
|
197
|
+
re-scoring the episode -- which would bill a paid judge twice and, for a non-deterministic
|
|
198
|
+
scorer, could report an error that did not produce the printed reward.
|
|
199
|
+
- Two tests resolved Hugging Face model metadata over the network and passed only on a
|
|
200
|
+
connected runner. They now stub the resolver like their siblings already did.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.13
|
|
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
|
|
@@ -7,11 +7,11 @@ import json
|
|
|
7
7
|
import math
|
|
8
8
|
import re
|
|
9
9
|
from collections.abc import Callable, Mapping
|
|
10
|
-
from dataclasses import dataclass
|
|
10
|
+
from dataclasses import dataclass, field
|
|
11
11
|
from decimal import Decimal, InvalidOperation
|
|
12
12
|
from typing import TYPE_CHECKING, Any
|
|
13
13
|
|
|
14
|
-
from flash.core.catalog import serving_context_cap, serving_lora_rank_cap
|
|
14
|
+
from flash.core.catalog import lora_expert_count, serving_context_cap, serving_lora_rank_cap
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class ServingPreflightError(ValueError):
|
|
@@ -279,6 +279,117 @@ def rank_from_adapter_config(config: Mapping[str, Any], *, source: str) -> int:
|
|
|
279
279
|
)
|
|
280
280
|
|
|
281
281
|
|
|
282
|
+
_LORA_A_INFIX = ".lora_A."
|
|
283
|
+
_LORA_B_INFIX = ".lora_B."
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
@dataclass(frozen=True)
|
|
287
|
+
class DeclaredLoraRanks:
|
|
288
|
+
"""The default rank, per-module overrides, and parameter-target module paths in a config."""
|
|
289
|
+
|
|
290
|
+
default: int | None = None
|
|
291
|
+
by_module: Mapping[str, int] = field(default_factory=dict)
|
|
292
|
+
stacked_rank_modules: tuple[str, ...] = ()
|
|
293
|
+
stacked_rank_multiplier: int | None = None
|
|
294
|
+
|
|
295
|
+
def __bool__(self) -> bool:
|
|
296
|
+
return self.default is not None or bool(self.by_module)
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def declared_lora_ranks(config: Mapping[str, Any]) -> DeclaredLoraRanks:
|
|
300
|
+
"""Read the per-module LoRA rank structure out of ``adapter_config.json``."""
|
|
301
|
+
if not isinstance(config, Mapping):
|
|
302
|
+
return DeclaredLoraRanks()
|
|
303
|
+
try:
|
|
304
|
+
default = _positive_int(config["r"], source="adapter_config.json", field="r")
|
|
305
|
+
except (KeyError, ValueError):
|
|
306
|
+
default = None
|
|
307
|
+
|
|
308
|
+
by_module: dict[str, int] = {}
|
|
309
|
+
pattern = config.get("rank_pattern")
|
|
310
|
+
if isinstance(pattern, Mapping):
|
|
311
|
+
for module, value in pattern.items():
|
|
312
|
+
try:
|
|
313
|
+
by_module[str(module)] = _positive_int(
|
|
314
|
+
value, source="adapter_config.json", field="rank_pattern"
|
|
315
|
+
)
|
|
316
|
+
except ValueError:
|
|
317
|
+
continue
|
|
318
|
+
|
|
319
|
+
stacked_rank_modules: list[str] = []
|
|
320
|
+
targets = config.get("target_parameters")
|
|
321
|
+
if isinstance(targets, list):
|
|
322
|
+
for target in targets:
|
|
323
|
+
if not isinstance(target, str):
|
|
324
|
+
continue
|
|
325
|
+
module, separator, _ = target.rpartition(".")
|
|
326
|
+
if separator and module:
|
|
327
|
+
stacked_rank_modules.append(module)
|
|
328
|
+
|
|
329
|
+
base_model = str(config.get("base_model_name_or_path") or "").strip()
|
|
330
|
+
return DeclaredLoraRanks(
|
|
331
|
+
default=default,
|
|
332
|
+
by_module=by_module,
|
|
333
|
+
stacked_rank_modules=tuple(stacked_rank_modules),
|
|
334
|
+
stacked_rank_multiplier=lora_expert_count(base_model),
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
def _rank_for_module(module_path: str, declared: DeclaredLoraRanks) -> int | None:
|
|
339
|
+
"""Resolve a module's rank with PEFT's ordered, anchored ``rank_pattern`` matching."""
|
|
340
|
+
for module, rank in declared.by_module.items():
|
|
341
|
+
if not module:
|
|
342
|
+
continue
|
|
343
|
+
try:
|
|
344
|
+
# entries are regexes in PEFT, deliberately not escaped here either
|
|
345
|
+
if re.match(rf"(.*\.)?({module})$", module_path):
|
|
346
|
+
return rank
|
|
347
|
+
except re.error:
|
|
348
|
+
continue
|
|
349
|
+
return declared.default
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
def _module_uses_target_parameters(module_path: str, declared: DeclaredLoraRanks) -> bool:
|
|
353
|
+
"""Whether this serialized module came from one of PEFT's targeted parameters."""
|
|
354
|
+
return any(
|
|
355
|
+
module_path == module or module_path.endswith(f".{module}")
|
|
356
|
+
for module in declared.stacked_rank_modules
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
def lora_tensor_rank_disagrees(key: str, shape: Any, declared: DeclaredLoraRanks) -> bool:
|
|
361
|
+
"""Return whether a 2-D LoRA weight provably contradicts its configured rank.
|
|
362
|
+
|
|
363
|
+
Ordinary module weights carry exactly ``r`` on the LoRA axis. A 3-D parameter targeted through
|
|
364
|
+
PEFT's ``target_parameters`` serializes under its parent module and stacks every model expert on
|
|
365
|
+
that axis, so only that module may carry exactly ``r * num_experts``. The distinction must be per
|
|
366
|
+
module because one config may contain ordinary ``target_modules`` and fused parameters together.
|
|
367
|
+
"""
|
|
368
|
+
if not declared:
|
|
369
|
+
return False
|
|
370
|
+
is_a = _LORA_A_INFIX in key
|
|
371
|
+
is_b = _LORA_B_INFIX in key
|
|
372
|
+
if is_a == is_b: # neither, or a key somehow claiming both
|
|
373
|
+
return False
|
|
374
|
+
if not isinstance(shape, (list, tuple)) or len(shape) != 2:
|
|
375
|
+
return False
|
|
376
|
+
dims = [d for d in shape if isinstance(d, int) and not isinstance(d, bool) and d > 0]
|
|
377
|
+
if len(dims) != 2:
|
|
378
|
+
return False
|
|
379
|
+
|
|
380
|
+
infix = _LORA_A_INFIX if is_a else _LORA_B_INFIX
|
|
381
|
+
module_path = key.partition(infix)[0]
|
|
382
|
+
rank = _rank_for_module(module_path, declared)
|
|
383
|
+
if rank is None:
|
|
384
|
+
return False
|
|
385
|
+
axis = dims[0] if is_a else dims[1]
|
|
386
|
+
if _module_uses_target_parameters(module_path, declared):
|
|
387
|
+
multiplier = declared.stacked_rank_multiplier
|
|
388
|
+
expected = rank * multiplier if multiplier is not None else rank
|
|
389
|
+
return axis != expected
|
|
390
|
+
return axis != rank
|
|
391
|
+
|
|
392
|
+
|
|
282
393
|
def alpha_from_adapter_config(config: Mapping[str, Any], *, source: str) -> int:
|
|
283
394
|
"""Return the maximum LoRA alpha across default and per-module metadata."""
|
|
284
395
|
return _max_adapter_value(
|
|
@@ -14,7 +14,7 @@ from __future__ import annotations
|
|
|
14
14
|
import contextlib
|
|
15
15
|
import inspect
|
|
16
16
|
|
|
17
|
-
from flash.cli.commands.env.
|
|
17
|
+
from flash.cli.commands.env.test_evaluations import _evaluation_example
|
|
18
18
|
from flash.envs.evaluations import EvalCase, EvalResult
|
|
19
19
|
|
|
20
20
|
|
|
@@ -17,7 +17,8 @@ from flash.cli.commands.env.eval_args import (
|
|
|
17
17
|
positive_int,
|
|
18
18
|
)
|
|
19
19
|
from flash.cli.commands.env.push import _err
|
|
20
|
-
from flash.cli.commands.env.test import _env_params
|
|
20
|
+
from flash.cli.commands.env.test import _env_params
|
|
21
|
+
from flash.cli.commands.env.test_evaluations import _evaluation_example
|
|
21
22
|
from flash.cli.ui import render
|
|
22
23
|
from flash.envs.evaluations import (
|
|
23
24
|
EvalCase,
|
|
@@ -288,6 +288,9 @@ class StarterMultiTurnEnv(EnvironmentMultiTurn):
|
|
|
288
288
|
) -> EnvironmentStepResult:
|
|
289
289
|
# Advance the world after one assistant action. Return done=True to end the
|
|
290
290
|
# episode, or append an observation message and keep going.
|
|
291
|
+
# `messages` already ends with this action: messages[-1]["content"] is
|
|
292
|
+
# `assistant_response`. If you rebuild state by replaying the transcript, replay
|
|
293
|
+
# `messages[:-1]` and apply `assistant_response` once, or you apply it twice.
|
|
291
294
|
try:
|
|
292
295
|
guess = int(assistant_response.strip().split()[0])
|
|
293
296
|
except (ValueError, IndexError):
|
|
@@ -889,7 +892,7 @@ def cmd_env_setup(args) -> int:
|
|
|
889
892
|
# the non-reasoning scaffold.
|
|
890
893
|
thinking_line = "thinking = true\n" if reasoning else ""
|
|
891
894
|
rl_reasoning_train = (
|
|
892
|
-
"max_completion_tokens = 2048 # reasoning shares
|
|
895
|
+
"max_completion_tokens = 2048 # per model turn; reasoning shares it with the answer\n"
|
|
893
896
|
if reasoning
|
|
894
897
|
else ""
|
|
895
898
|
)
|