freesolo-flash-dev 1.2.110__tar.gz → 1.2.112__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.110 → freesolo_flash_dev-1.2.112}/.github/workflows/bake-kernel-cache.yml +2 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/ci.yml +6 -2
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/deploy-modal-dev.yml +5 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/deploy-modal.yml +3 -2
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-dev.yml +2 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/publish.yml +2 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/Dockerfile +2 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/Dockerfile.serve +2 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/Dockerfile.worker +31 -28
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/PKG-INFO +12 -11
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/worker_output.py +13 -3
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/scaffold/TRAINING.md +1 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/core/grpo.py +1 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/backend_common.py +11 -5
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/kernel_warmup.py +23 -17
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/sft_train.py +11 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/overrides.py +8 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/verl_config.py +9 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/capabilities.py +83 -15
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/instance.py +3 -2
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/runtime.py +14 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/modal_app.py +3 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/pyproject.toml +27 -15
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_usage_reporter.py +5 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_backend_common.py +106 -24
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_commands_coverage.py +31 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_params.py +9 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_rollout_contract.py +37 -10
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_kernel_fingerprint.py +26 -20
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lora_targeting_pinned_verl.py +1 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_train.py +42 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_rl_train.py +37 -1
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_package.py +3 -3
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_api.py +54 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_train.py +26 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_stack.py +24 -11
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/uv.lock +52 -56
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.env.example +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/dev-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/production-kernel-cache-ready.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-serving-image.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/CHANGELOG.md +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/README.md +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/docs/serving-contract.md +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/adapters/targets.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/deploy.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/episode.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/eval.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/imports.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/list.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/push.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/retained.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/setup.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_params.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_warnings.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/log_follow.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_deploy.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_identity.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_status.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/traces.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/train_cost.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/errors.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/serve_parser.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/content/image_descriptors.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/core/catalog.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/core/spec.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/huggingface.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/opd_train.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/opd_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/pkg_proxy.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/score_batcher.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/step_timing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/finalize.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/batching.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/bridge.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/bridge_failures.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/failures.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/gkd.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/multiturn_media.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/multiturn_validation.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/prompts.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/reporting.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/scoring.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/state.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/validation.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/patches.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/config.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/identity.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/inputs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/multi_turn.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/reward_module.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/scoring.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/config.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/process_census.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/adapter.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/base.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/identity.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/loader.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/package/direct_tokens.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/pull.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/envs/staged.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/auth.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_console.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_pip.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_secrets.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/deadline.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/failmark.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/hostlog.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/http.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/poll.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/poll_instance.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/provider.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/worker.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/allocator.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/base.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/api.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/auth.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/gpus.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/reap.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/preflight.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/pricing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/preflight.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/realized.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/api.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/auth.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/cost.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/gpus.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/job_execution.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/jobs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/preflight.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/pricing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/resources.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/serverless/endpoints.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/sharding.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/api.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/auth.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/preflight.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/providers/vast/pricing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/attempts.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/costs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/preparation.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/reconciliation.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/results/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/status.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/submit.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/attach.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/deploy.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/recovery.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/retry_decision.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/seed_submission.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runner/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/profiles.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/adapter_check.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/__main__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/http.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/launch.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/manifest.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/materialize.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/openai.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/app/progress.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/contract.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/_canonical.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/_serialization.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/_urls.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/credentials.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/planning.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/control/types.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/deploy.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/errors.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/export.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/preflight.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/profiles.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_common.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_deployment.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_plan.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_probe.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_readiness.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_resources.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_sdk.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_teardown.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_wrapper.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_mutations.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_plan.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_probe.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_protocol.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_readiness.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_resources.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_transport.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/modal.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/runpod.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/request_validation.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/resolve.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/responses.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/adapters.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/engine.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/errors.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/prompt.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/types.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/runtime_support.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/streaming.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/thinking.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serve/urls.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/app.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/billing/charges.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/environment_registry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/envs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/projects.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/reconcile.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/run_registry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_errors.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_requests.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/auth.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/internal_client.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_completion.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_revisions.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_smoke.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/README.md +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/adapter_routes.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/body_limit.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/context.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_boot.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_errors.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_support.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/http_headers.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/inference_routes.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/lookup.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/lora_engine.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/lora_entries.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/model_config.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/persisted_columns.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/persistence.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/registration.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/registry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/responses.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/router.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/routing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/schemas.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/serving_io.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/settings.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/streaming.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/supabase_rest.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/serving/src/usage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/teacher/provider_status.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/check_rollout_identity_actor.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/serve_launch.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/fixtures/qwen35_08b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/conftest.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_base_model_serving.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_chat_auth.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_chat_authorizer.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_checkpoint_model_validation.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_engine_error_status.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_fp8_config.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_engine.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_revisions.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_schemas.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_modal_deploy_identity.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_modal_image_paths.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_model_config.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_multimodal.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_openai_stream_options.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_per_model_gpu.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_persistence.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_pre_first_disconnect.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_registry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_registry_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_request_body_limit.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_router.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_router_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_router_edge_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_schemas_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_reasoning_split.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_thinking.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_settings.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_structured_outputs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving/test_supabase_rest_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/__init__.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/conftest.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/test_contract.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cancel_remote.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_deploy.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_status.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_deploy_alias_move_warning.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_process_census.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_grpo_rollout_identity.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_image_environment_capability.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_image_incremental_processor.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_jobs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_nested_rung.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_lora_targeting.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_multiturn_failure_exit.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_opd_resume_safety.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_provider_routing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_resume_on_retry.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_runmgmt.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_bootstrap_http.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_launch.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_manifest.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_materialize.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_packaging.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_control.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_sdk.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_sdk_deadlines.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_teardown_identity.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_profiles.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_common.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_modal.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_runpod.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_resolve_provenance.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_adapters.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_engine.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_types.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_server_standalone.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serving_conformance_gate.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_startup_block.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_source_attestation_flow.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_staged_environment.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_image_adapters.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/tests/test_zero2_sharding_gate.py +0 -0
{freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/bake-kernel-cache.yml
RENAMED
|
@@ -197,6 +197,8 @@ jobs:
|
|
|
197
197
|
if: steps.gate.outputs.run == 'true'
|
|
198
198
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
199
199
|
with:
|
|
200
|
+
# pin the installed binary as well as the action implementation.
|
|
201
|
+
version: "0.12.5"
|
|
200
202
|
# no cache: the post-run cache-prune calls `uv`, but the "Free disk space" step deletes
|
|
201
203
|
# /opt/hostedtoolcache (where setup-uv put uv), so the post step fails ("uv not found") and
|
|
202
204
|
# marks the whole job red even though the bake + push already succeeded.
|
|
@@ -35,10 +35,12 @@ jobs:
|
|
|
35
35
|
- name: Install uv
|
|
36
36
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
37
37
|
with:
|
|
38
|
+
# pin the installed binary as well as the action implementation.
|
|
39
|
+
version: "0.12.5"
|
|
38
40
|
python-version: ${{ matrix.python-version }}
|
|
39
41
|
|
|
40
42
|
- name: Sync (server extra + dev)
|
|
41
|
-
run: uv sync --extra server --extra serving --dev
|
|
43
|
+
run: uv sync --extra server --extra serving --dev --locked
|
|
42
44
|
|
|
43
45
|
- name: Ruff check
|
|
44
46
|
run: uv run ruff check .
|
|
@@ -158,10 +160,12 @@ jobs:
|
|
|
158
160
|
- name: Install uv
|
|
159
161
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
160
162
|
with:
|
|
163
|
+
# pin the installed binary as well as the action implementation.
|
|
164
|
+
version: "0.12.5"
|
|
161
165
|
python-version: "3.11"
|
|
162
166
|
|
|
163
167
|
- name: Sync (server extra + dev)
|
|
164
|
-
run: uv sync --extra server --extra serving --dev
|
|
168
|
+
run: uv sync --extra server --extra serving --dev --locked
|
|
165
169
|
|
|
166
170
|
- name: mypy
|
|
167
171
|
run: |
|
{freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/deploy-modal-dev.yml
RENAMED
|
@@ -99,6 +99,9 @@ jobs:
|
|
|
99
99
|
|
|
100
100
|
- uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6
|
|
101
101
|
if: steps.gate.outputs.deploy == 'true'
|
|
102
|
+
with:
|
|
103
|
+
# pin the installed binary as well as the action implementation.
|
|
104
|
+
version: "0.12.5"
|
|
102
105
|
|
|
103
106
|
- name: Install Modal client
|
|
104
107
|
if: steps.gate.outputs.deploy == 'true'
|
|
@@ -109,7 +112,8 @@ jobs:
|
|
|
109
112
|
# app file, so running from the repo root is what resolves `from flash.serving.src...`.
|
|
110
113
|
# pinned to the exact client pyproject declares; see deploy-modal.yml for why an
|
|
111
114
|
# unbounded range is unsafe for the deploy path.
|
|
112
|
-
|
|
115
|
+
# exact pins keep the deploy client bootstrap reproducible across runner image changes.
|
|
116
|
+
uv pip install --system "modal==1.5.4" "python-dotenv==1.2.3"
|
|
113
117
|
|
|
114
118
|
- name: Verify development deployment inputs
|
|
115
119
|
if: steps.gate.outputs.deploy == 'true'
|
{freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/.github/workflows/deploy-modal.yml
RENAMED
|
@@ -143,11 +143,12 @@ jobs:
|
|
|
143
143
|
# `working-directory` default) is what makes `from flash.serving.src...` resolve at deploy
|
|
144
144
|
# time. Installing flash here would instead risk importing a DIFFERENT copy than the one
|
|
145
145
|
# `add_local_python_source("flash")` ships to the container.
|
|
146
|
-
|
|
146
|
+
# exact pins keep the deploy client bootstrap reproducible across runner image changes.
|
|
147
|
+
python -m pip install --upgrade "pip==26.2.1"
|
|
147
148
|
# pinned to the exact client pyproject declares and the provisioning path was validated
|
|
148
149
|
# against: deploy behaviour (app lifecycle, tags, lookup) is client-version sensitive, so
|
|
149
150
|
# an unbounded range lets a future release change deploys with no diff here.
|
|
150
|
-
python -m pip install "modal==1.5.4" "python-dotenv
|
|
151
|
+
python -m pip install "modal==1.5.4" "python-dotenv==1.2.3"
|
|
151
152
|
|
|
152
153
|
- name: Verify Modal auth is configured
|
|
153
154
|
if: steps.gate.outputs.deploy == 'true'
|
|
@@ -138,6 +138,8 @@ jobs:
|
|
|
138
138
|
if: steps.decide.outputs.publish == 'true'
|
|
139
139
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
140
140
|
with:
|
|
141
|
+
# pin the installed binary as well as the action implementation.
|
|
142
|
+
version: "0.12.5"
|
|
141
143
|
python-version: "3.11"
|
|
142
144
|
|
|
143
145
|
- name: Build dev-channel distribution
|
|
@@ -204,6 +204,8 @@ jobs:
|
|
|
204
204
|
if: github.event_name == 'workflow_dispatch' || steps.changes.outputs.package_changed == 'true'
|
|
205
205
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
206
206
|
with:
|
|
207
|
+
# pin the installed binary as well as the action implementation.
|
|
208
|
+
version: "0.12.5"
|
|
207
209
|
python-version: "3.11"
|
|
208
210
|
|
|
209
211
|
- name: Build distributions
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
# also mount its own volume at the new location — otherwise state lands on the container's
|
|
15
15
|
# writable layer and disappears when the container is replaced.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
# digest-pinned so control-plane rebuilds reuse the exact reviewed base image bytes.
|
|
18
|
+
FROM python:3.12-slim@sha256:2c941e860699f878900b0edc2403613c234d4b32eda3cc9fa7036991a2a63c4a
|
|
18
19
|
|
|
19
20
|
WORKDIR /app
|
|
20
21
|
COPY . .
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# immutable flash serving runtime. the cuda major version is set by the serve-runtime vllm pin,
|
|
2
2
|
# whose compiled extension links libcudart.so.13 -- see the assertion below.
|
|
3
|
-
|
|
3
|
+
# digest-pinned so serving rebuilds reuse the exact cuda and torch base image bytes.
|
|
4
|
+
FROM pytorch/pytorch:2.11.0-cuda13.0-cudnn9-devel@sha256:6e8a7a6dedf900096f90190f66f988e7e658cda4f1e6cbc7c17e3a38980a4f89
|
|
4
5
|
|
|
5
6
|
# PIP_BREAK_SYSTEM_PACKAGES matches Dockerfile.worker, which shares this base image. The base
|
|
6
7
|
# ships a Debian-style PEP 668 marker (/usr/lib/python3.12/EXTERNALLY-MANAGED), so the pinned-uv
|
|
@@ -11,9 +11,10 @@
|
|
|
11
11
|
# # then make the GHCR package public (org packages settings) once.
|
|
12
12
|
#
|
|
13
13
|
# Base is torch 2.10 / cu12.8 / cudnn9 (-devel = has nvcc for any source builds); it ships the
|
|
14
|
-
# CUDA 12.8 runtime libs the PyPI wheels link against. The
|
|
15
|
-
#
|
|
16
|
-
|
|
14
|
+
# CUDA 12.8 runtime libs the PyPI wheels link against. The exact install block below is the deployed
|
|
15
|
+
# worker stack source of truth; the fallback verl venv is kept in lockstep in capabilities.py.
|
|
16
|
+
# digest-pinned so worker rebuilds reuse the exact torch and cuda base image bytes.
|
|
17
|
+
FROM pytorch/pytorch:2.10.0-cuda12.8-cudnn9-devel@sha256:b574d4ccf6d8856a5d87dcadc667aa4f95dc18d337ef3a28d02b7b01897d7081
|
|
17
18
|
|
|
18
19
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
19
20
|
HF_HUB_ENABLE_HF_TRANSFER=1 \
|
|
@@ -47,23 +48,24 @@ RUN apt-get update && apt-get install -y --no-install-recommends build-essential
|
|
|
47
48
|
&& rm -rf /var/lib/apt/lists/*
|
|
48
49
|
|
|
49
50
|
# The pinned worker stack (torch already in the base image, version-matched so pip skips it).
|
|
51
|
+
# exact pins preserve the already-resolved worker environment across image rebuilds.
|
|
50
52
|
RUN pip install --no-cache-dir \
|
|
51
|
-
"transformers
|
|
52
|
-
"peft
|
|
53
|
+
"transformers==5.12.1" \
|
|
54
|
+
"peft==0.20.0" \
|
|
53
55
|
"vllm==0.19.1" \
|
|
54
56
|
"flashinfer-python==0.6.6" \
|
|
55
|
-
"bitsandbytes
|
|
56
|
-
"datasets
|
|
57
|
-
"huggingface_hub
|
|
58
|
-
"accelerate
|
|
59
|
-
"wandb
|
|
57
|
+
"bitsandbytes==0.50.1" \
|
|
58
|
+
"datasets==5.0.1" \
|
|
59
|
+
"huggingface_hub==1.28.0" \
|
|
60
|
+
"accelerate==1.14.0" \
|
|
61
|
+
"wandb==0.28.2" \
|
|
60
62
|
"flash-linear-attention @ git+https://github.com/fla-org/flash-linear-attention.git@9c8e42e762fce087c27b673af4922795d9edb85e" \
|
|
61
63
|
"flash-qla==0.1.2" \
|
|
62
64
|
"tilelang==0.1.9" \
|
|
63
65
|
"apache-tvm-ffi==0.1.9" \
|
|
64
|
-
"hf_transfer" \
|
|
65
|
-
"freesolo
|
|
66
|
-
"runpod"
|
|
66
|
+
"hf_transfer==0.1.9" \
|
|
67
|
+
"freesolo==0.4.1" \
|
|
68
|
+
"runpod==1.12.0"
|
|
67
69
|
# Gated-DeltaNet (Qwen3.5/3.6) runs on flash-linear-attention's Triton kernels. On consumer cards
|
|
68
70
|
# (Ampere/Ada/Blackwell) the Triton path is correct. On Hopper (sm90) fla's GDN chunk_bwd is
|
|
69
71
|
# miscomputed with Triton>=3.4 (fla #640) — the fix is fla's TILELANG backend (correct there), so
|
|
@@ -310,22 +312,22 @@ print('worker stack OK | torch', torch.__version__, '| cudnn', cudnn, '| triton'
|
|
|
310
312
|
# fallback protects nobody and a vllm respin breaks launch on the default image alone. Keep them in
|
|
311
313
|
# lockstep with verl/capabilities.py's install list.
|
|
312
314
|
#
|
|
313
|
-
# transformers is pinned
|
|
314
|
-
#
|
|
315
|
-
#
|
|
316
|
-
# transformers owns the gdn modelling code the boundary-
|
|
317
|
-
# the causal conv, and the kwargs they read)
|
|
318
|
-
#
|
|
319
|
-
#
|
|
320
|
-
#
|
|
315
|
+
# transformers is exact-pinned in both the direct list and override file to the version this image
|
|
316
|
+
# already resolved. verl and vllm both depend on transformers, so without the exact override a
|
|
317
|
+
# transitive requirement can re-widen even an exact direct pin. the
|
|
318
|
+
# venv is the interpreter that trains, and transformers owns the gdn modelling code the boundary-
|
|
319
|
+
# reset shim patches (chunk_gated_delta_rule, the causal conv, and the kwargs they read). the main
|
|
320
|
+
# interpreter carrying an exact pin protects nothing in here (/opt/verl-venv is built without
|
|
321
|
+
# --system-site-packages). changing this exact pin means re-validating the gdn shim against the new
|
|
322
|
+
# version, not just bumping the number.
|
|
321
323
|
#
|
|
322
324
|
# This pin is NOT what makes the sanity block below pass. is_flash_linear_attention_available() and
|
|
323
325
|
# is_causal_conv1d_available() are byte-identical in 5.12.1 and 5.14.1, and both begin with
|
|
324
326
|
# is_torch_cuda_available() -- they answer False on this cpu builder at every version. An earlier
|
|
325
327
|
# revision of this comment blamed a 5.13 import-path move; no such move exists.
|
|
326
|
-
ARG VERL_SPEC=verl[vllm]@git+https://github.com/freesolo-co/verl@
|
|
328
|
+
ARG VERL_SPEC=verl[vllm]@git+https://github.com/freesolo-co/verl@f71a02ddb32a9c6a6915f7519bda6dede92e9dd0
|
|
327
329
|
ENV FLASH_VERL_PYTHON=/opt/verl-venv/bin/python
|
|
328
|
-
RUN printf '%s\n' "numpy==2.2.6" "xgrammar==0.1.25" "vllm==0.19.1" "transformers
|
|
330
|
+
RUN printf '%s\n' "numpy==2.2.6" "xgrammar==0.1.25" "vllm==0.19.1" "transformers==5.12.1" > /tmp/verl-overrides.txt \
|
|
329
331
|
&& uv venv --seed /opt/verl-venv \
|
|
330
332
|
&& VIRTUAL_ENV=/opt/verl-venv uv pip install --python /opt/verl-venv/bin/python \
|
|
331
333
|
--override /tmp/verl-overrides.txt \
|
|
@@ -333,12 +335,13 @@ RUN printf '%s\n' "numpy==2.2.6" "xgrammar==0.1.25" "vllm==0.19.1" "transformers
|
|
|
333
335
|
"vllm==0.19.1" \
|
|
334
336
|
"xgrammar==0.1.25" \
|
|
335
337
|
"numpy==2.2.6" \
|
|
336
|
-
"transformers
|
|
337
|
-
"datasets
|
|
338
|
+
"transformers==5.12.1" \
|
|
339
|
+
"datasets==5.0.1" \
|
|
338
340
|
"TransferQueue==0.1.7" \
|
|
339
|
-
"bitsandbytes
|
|
340
|
-
"wandb
|
|
341
|
-
cachetools uvicorn fastapi
|
|
341
|
+
"bitsandbytes==0.50.1" "qwen-vl-utils==0.0.14" \
|
|
342
|
+
"wandb==0.28.2" \
|
|
343
|
+
"cachetools==7.1.7" "uvicorn==0.52.4" "fastapi==0.141.1" \
|
|
344
|
+
"torchvision==0.25.0" "tqdm==4.70.0" "pyarrow==25.0.1" \
|
|
342
345
|
"flash-linear-attention @ git+https://github.com/fla-org/flash-linear-attention.git@9c8e42e762fce087c27b673af4922795d9edb85e" \
|
|
343
346
|
"flash-qla==0.1.2" \
|
|
344
347
|
"tilelang==0.1.9" \
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.112
|
|
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
|
|
@@ -18,22 +18,23 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
18
18
|
Requires-Python: <3.13,>=3.11
|
|
19
19
|
Provides-Extra: dev
|
|
20
20
|
Requires-Dist: datasets>=2.19; extra == 'dev'
|
|
21
|
-
Requires-Dist: fastapi; extra == 'dev'
|
|
21
|
+
Requires-Dist: fastapi<1,>=0.136; extra == 'dev'
|
|
22
22
|
Requires-Dist: freesolo>=0.4.1; extra == 'dev'
|
|
23
23
|
Requires-Dist: httpx>=0.27; extra == 'dev'
|
|
24
24
|
Requires-Dist: huggingface-hub>=1.2.0; extra == 'dev'
|
|
25
25
|
Requires-Dist: jsonschema>=4.23; extra == 'dev'
|
|
26
26
|
Requires-Dist: mypy>=1.13.0; extra == 'dev'
|
|
27
|
+
Requires-Dist: packaging<27,>=24; extra == 'dev'
|
|
27
28
|
Requires-Dist: pillow>=11; extra == 'dev'
|
|
28
29
|
Requires-Dist: pytest>=9.0.3; extra == 'dev'
|
|
29
30
|
Requires-Dist: referencing>=0.28.4; extra == 'dev'
|
|
30
31
|
Requires-Dist: regex>=2024.11.6; extra == 'dev'
|
|
31
32
|
Requires-Dist: ruff<0.17,>=0.6; extra == 'dev'
|
|
32
|
-
Requires-Dist: runpod-flash; extra == 'dev'
|
|
33
|
+
Requires-Dist: runpod-flash<2,>=1.19; extra == 'dev'
|
|
33
34
|
Requires-Dist: tiktoken>=0.12; extra == 'dev'
|
|
34
35
|
Requires-Dist: tokenizers>=0.22; extra == 'dev'
|
|
35
36
|
Requires-Dist: transformers<5.13,>=5.6; extra == 'dev'
|
|
36
|
-
Requires-Dist: uvicorn; extra == 'dev'
|
|
37
|
+
Requires-Dist: uvicorn<1,>=0.52; extra == 'dev'
|
|
37
38
|
Provides-Extra: gpu
|
|
38
39
|
Requires-Dist: accelerate>=1.4; extra == 'gpu'
|
|
39
40
|
Requires-Dist: bitsandbytes>=0.49; extra == 'gpu'
|
|
@@ -48,16 +49,16 @@ Requires-Dist: transformers<5.13,>=5.6; extra == 'gpu'
|
|
|
48
49
|
Requires-Dist: uv>=0.5; extra == 'gpu'
|
|
49
50
|
Requires-Dist: vllm==0.19.1; extra == 'gpu'
|
|
50
51
|
Provides-Extra: serve-runtime
|
|
51
|
-
Requires-Dist: fastapi; extra == 'serve-runtime'
|
|
52
|
+
Requires-Dist: fastapi<0.137,>=0.136; extra == 'serve-runtime'
|
|
52
53
|
Requires-Dist: huggingface-hub>=1.2.0; extra == 'serve-runtime'
|
|
53
54
|
Requires-Dist: pillow>=11.0.0; extra == 'serve-runtime'
|
|
54
|
-
Requires-Dist: safetensors; extra == 'serve-runtime'
|
|
55
|
+
Requires-Dist: safetensors<1,>=0.8; extra == 'serve-runtime'
|
|
55
56
|
Requires-Dist: transformers<5.13,>=5.6; extra == 'serve-runtime'
|
|
56
|
-
Requires-Dist: uvicorn; extra == 'serve-runtime'
|
|
57
|
+
Requires-Dist: uvicorn<1,>=0.52; extra == 'serve-runtime'
|
|
57
58
|
Requires-Dist: vllm==0.23.0; extra == 'serve-runtime'
|
|
58
59
|
Provides-Extra: server
|
|
59
60
|
Requires-Dist: datasets>=2.19; extra == 'server'
|
|
60
|
-
Requires-Dist: fastapi; extra == 'server'
|
|
61
|
+
Requires-Dist: fastapi<1,>=0.136; extra == 'server'
|
|
61
62
|
Requires-Dist: freesolo>=0.4.1; extra == 'server'
|
|
62
63
|
Requires-Dist: httpx>=0.27; extra == 'server'
|
|
63
64
|
Requires-Dist: huggingface-hub>=1.2.0; extra == 'server'
|
|
@@ -66,11 +67,11 @@ Requires-Dist: modal==1.5.4; extra == 'server'
|
|
|
66
67
|
Requires-Dist: pillow>=11; extra == 'server'
|
|
67
68
|
Requires-Dist: referencing>=0.28.4; extra == 'server'
|
|
68
69
|
Requires-Dist: regex>=2024.11.6; extra == 'server'
|
|
69
|
-
Requires-Dist: runpod-flash; extra == 'server'
|
|
70
|
+
Requires-Dist: runpod-flash<2,>=1.19; extra == 'server'
|
|
70
71
|
Requires-Dist: transformers<5.13,>=5.6; extra == 'server'
|
|
71
|
-
Requires-Dist: uvicorn; extra == 'server'
|
|
72
|
+
Requires-Dist: uvicorn<1,>=0.52; extra == 'server'
|
|
72
73
|
Provides-Extra: serving
|
|
73
|
-
Requires-Dist: fastapi; extra == 'serving'
|
|
74
|
+
Requires-Dist: fastapi<1,>=0.136; extra == 'serving'
|
|
74
75
|
Requires-Dist: httpx>=0.27.0; extra == 'serving'
|
|
75
76
|
Requires-Dist: modal==1.5.4; extra == 'serving'
|
|
76
77
|
Requires-Dist: orjson>=3.10.0; extra == 'serving'
|
{freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/cli/commands/worker_output.py
RENAMED
|
@@ -55,7 +55,7 @@ def _worker_section_name(name: str, current_attempt: int | str | None) -> str:
|
|
|
55
55
|
_HEARTBEAT_LINE_RE = re.compile(r"(?m)^(HEARTBEAT )(?!\[superseded)")
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
def _mark_superseded_heartbeats(text: str, attempt: int, current_attempt: int | str) -> str:
|
|
58
|
+
def _mark_superseded_heartbeats(text: str, attempt: int | None, current_attempt: int | str) -> str:
|
|
59
59
|
"""Tag every HEARTBEAT line in a dead attempt's console dump.
|
|
60
60
|
|
|
61
61
|
The section heading already says which attempt produced this text, but a heading is only read
|
|
@@ -71,13 +71,19 @@ def _mark_superseded_heartbeats(text: str, attempt: int, current_attempt: int |
|
|
|
71
71
|
Tagging the line itself means the provenance survives the pipe. A consumer that filters on the
|
|
72
72
|
tag gets only live heartbeats; one that does not at least sees the attempt in the line it
|
|
73
73
|
printed rather than silently trusting a dead worker's last words.
|
|
74
|
+
|
|
75
|
+
``attempt`` is ``None`` for the canonical ``console_<phase>.txt``, which encodes no attempt in
|
|
76
|
+
its name. That is reported as ``attempt=unknown`` rather than guessed: the file is written at
|
|
77
|
+
teardown, so on a retry whose terminal upload never ran it belongs to an OLDER attempt, and
|
|
78
|
+
naming a number the filename does not carry would be a second wrong answer rather than a fix.
|
|
74
79
|
"""
|
|
75
80
|
current = (
|
|
76
81
|
"worker torn down"
|
|
77
82
|
if current_attempt == _NO_LIVE_WORKER
|
|
78
83
|
else f"current attempt={current_attempt}"
|
|
79
84
|
)
|
|
80
|
-
|
|
85
|
+
which = "unknown" if attempt is None else attempt
|
|
86
|
+
return _HEARTBEAT_LINE_RE.sub(f"\\1[superseded attempt={which}; {current}] ", text)
|
|
81
87
|
|
|
82
88
|
|
|
83
89
|
def _worker_sections(client: ApiClient, run_id: str) -> dict[str, str]:
|
|
@@ -133,11 +139,15 @@ def _print_worker_output(
|
|
|
133
139
|
# heartbeats carry their own provenance into the pipe. `_NO_LIVE_WORKER` tags every
|
|
134
140
|
# attempt: during teardown the plane has PROVEN no worker is live, so every heartbeat on
|
|
135
141
|
# screen is a dead one and none of them may reach a monitor unmarked.
|
|
142
|
+
# an artifact whose name encodes NO attempt (the canonical `console_<phase>.txt`) is tagged
|
|
143
|
+
# too. it is fetched alongside the scoped snapshot and appended last, so it is what a pipe
|
|
144
|
+
# sees -- and being written at teardown it can belong to an older attempt on a retry.
|
|
145
|
+
# unknown provenance is not evidence of liveness, so it does not earn an untagged pass.
|
|
136
146
|
attempt = _artifact_attempt(name)
|
|
137
147
|
supersedes = current_attempt is not None and (
|
|
138
148
|
current_attempt == _NO_LIVE_WORKER or attempt != current_attempt
|
|
139
149
|
)
|
|
140
|
-
if
|
|
150
|
+
if supersedes:
|
|
141
151
|
text = _mark_superseded_heartbeats(text, attempt, current_attempt)
|
|
142
152
|
sep = "\n" if printed_any else ""
|
|
143
153
|
if render.styled():
|
|
@@ -1104,7 +1104,7 @@ in a sensible value, so only override with a reason.
|
|
|
1104
1104
|
|
|
1105
1105
|
| Knob | Convention |
|
|
1106
1106
|
| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1107
|
-
| `group_size` | Completions sampled per prompt. GRPO accepts exactly `2`, `4`, or `
|
|
1107
|
+
| `group_size` | Completions sampled per prompt. GRPO accepts exactly `2`, `4`, `8`, or `16` and defaults to `8`; Flash never changes the configured value. More completions can improve the within-group comparison but multiply rollout cost. |
|
|
1108
1108
|
| `max_completion_tokens` | Completion cap for each model turn, not the whole episode. In multi-turn runs every turn gets the full cap again, while the whole transcript (all model turns plus environment replies) must fit inside `max_context_tokens`. Size `max_context_tokens` for the whole episode, not just one turn; an undersized turn cap silently truncates good answers and poisons the reward. |
|
|
1109
1109
|
| `temperature` | Rollout sampling temperature. Keep it near 1.0 for GRPO — too low collapses diversity (and the model can collapse within a few steps); raise it to widen exploration against uniform-reward groups. |
|
|
1110
1110
|
| `kl_penalty_coef` | Keeps the trained model from drifting too far from the base. Raise it to anchor against entropy collapse; lower it for more freedom to move. |
|
|
@@ -9,7 +9,7 @@ from typing import Any
|
|
|
9
9
|
|
|
10
10
|
DEFAULT_GRPO_PROMPTS_PER_STEP = 64
|
|
11
11
|
DEFAULT_GRPO_GROUP_SIZE = 8
|
|
12
|
-
SUPPORTED_GRPO_GROUP_SIZES = (2, 4, 8)
|
|
12
|
+
SUPPORTED_GRPO_GROUP_SIZES = (2, 4, 8, 16)
|
|
13
13
|
MAX_GRPO_COMPLETIONS_PER_STEP = 512
|
|
14
14
|
|
|
15
15
|
GRPO_NATIVE_THREAD_ENV: Mapping[str, str] = MappingProxyType(
|
{freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/backend_common.py
RENAMED
|
@@ -25,13 +25,14 @@ from concurrent.futures import thread as _thread_module
|
|
|
25
25
|
from http.server import ThreadingHTTPServer
|
|
26
26
|
from typing import Self
|
|
27
27
|
|
|
28
|
-
# verl 0.8.0 exactly, plus the truncation-mask, 3d position-id, and ulysses fused-label fixes
|
|
28
|
+
# verl 0.8.0 exactly, plus the truncation-mask, 3d position-id, and ulysses fused-label fixes, the
|
|
29
|
+
# whole-adapter lora bucket sync, and the fused-linear grad-flag preservation.
|
|
29
30
|
# it must stay on the 0.8.0 base: the opd plugin patches 0.8.0 internals and imports
|
|
30
31
|
# verl.trainer.main_ppo_sync, which verl deleted after 0.8.0, and opd's exact-version gate reads the
|
|
31
32
|
# version file this branch pins to the release value.
|
|
32
33
|
VERL_REQUIREMENT_NAME = "verl"
|
|
33
34
|
VERL_REQUIREMENT_URL = (
|
|
34
|
-
"git+https://github.com/freesolo-co/verl@
|
|
35
|
+
"git+https://github.com/freesolo-co/verl@f71a02ddb32a9c6a6915f7519bda6dede92e9dd0"
|
|
35
36
|
)
|
|
36
37
|
# the pin, as the venv stamp records it. the provisioning install asks for the [vllm] extra of this
|
|
37
38
|
# same commit; the stamp stays extra-free so it identifies the verl a venv holds, not how it was
|
|
@@ -92,11 +93,13 @@ CAUSAL_CONV1D_REQUIREMENT = "causal-conv1d==1.6.2.post1"
|
|
|
92
93
|
# installed version. An earlier revision of this comment claimed a 5.13 import-path move made them
|
|
93
94
|
# answer False; that mechanism does not exist. See Dockerfile.worker's sanity block.
|
|
94
95
|
TRANSFORMERS_REQUIREMENT = "transformers>=5.6,<5.13"
|
|
96
|
+
# exact deployed install and override pin; the range above remains public package metadata.
|
|
97
|
+
TRANSFORMERS_INSTALL_REQUIREMENT = "transformers==5.12.1"
|
|
95
98
|
|
|
96
99
|
# the stamp must identify every separately installed package the venv holds. omitting flash-attn,
|
|
97
|
-
# fla, causal_conv1d, or the transformers
|
|
100
|
+
# fla, causal_conv1d, or the exact transformers pin lets an older partial venv match forever; conv1d
|
|
98
101
|
# leaves GRPO/OPD failing ``require_gdn_boundary_resets`` with no rebuild path, and a stale venv
|
|
99
|
-
# resolved before the transformers pin keeps training on
|
|
102
|
+
# resolved before the transformers pin keeps training on a different transformers indefinitely.
|
|
100
103
|
# bump when a repair applied at build time changes what a fully provisioned venv looks like. the
|
|
101
104
|
# libcudart repair runs only on the rebuild path, so a venv stamped by a release that predates it
|
|
102
105
|
# matches, is reused, and keeps tilelang's original stub -- vLLM then aborts its import in the child
|
|
@@ -110,7 +113,8 @@ VERL_VENV_BUILD_REPAIRS = "libcudart-stub-neutralized-v1"
|
|
|
110
113
|
# digest instead of letting it match forever and reuse an install that was never re-verified.
|
|
111
114
|
VERL_VENV_STAMP = (
|
|
112
115
|
f"{VERL_REQUIREMENT}\n{FLASH_ATTN_INSTALL_SPEC}\n{FLA_REQUIREMENT}\n{FLASH_QLA_REQUIREMENT}\n"
|
|
113
|
-
f"{CAUSAL_CONV1D_REQUIREMENT}\n{
|
|
116
|
+
f"{CAUSAL_CONV1D_REQUIREMENT}\n{TRANSFORMERS_INSTALL_REQUIREMENT}\n"
|
|
117
|
+
f"{VERL_VENV_BUILD_REPAIRS}"
|
|
114
118
|
)
|
|
115
119
|
|
|
116
120
|
|
|
@@ -927,6 +931,7 @@ from flash.engine.worker.verl.capabilities import ( # noqa: E402,F401
|
|
|
927
931
|
_CAPABILITIES_UNAVAILABLE,
|
|
928
932
|
_CAPABILITY_PROBE,
|
|
929
933
|
_CAPABILITY_PROBE_TIMEOUT_S,
|
|
934
|
+
actor_fsdp_strategy_overrides,
|
|
930
935
|
gdn_probe_module,
|
|
931
936
|
gdn_reset_arch_from_caps,
|
|
932
937
|
probe_verl_capabilities,
|
|
@@ -936,6 +941,7 @@ from flash.engine.worker.verl.capabilities import ( # noqa: E402,F401
|
|
|
936
941
|
resolve_verl_loggers,
|
|
937
942
|
resolve_verl_python,
|
|
938
943
|
rollout_fp8_kv,
|
|
944
|
+
rollout_layered_summon_overrides,
|
|
939
945
|
rollout_mm_processor_cache_overrides,
|
|
940
946
|
rollout_resident_overrides,
|
|
941
947
|
rollout_sleep_unsupported,
|
|
@@ -16,29 +16,35 @@ DEFAULT_CACHE_DIR = "/opt/flash/kernelcache"
|
|
|
16
16
|
MEGA_CACHE_FILENAME = "mega_cache.bin"
|
|
17
17
|
MEGA_CACHE_META_FILENAME = "mega_cache.json"
|
|
18
18
|
|
|
19
|
+
# every env var that addresses the baked kernel cache, mapped to its subdirectory of the cache root.
|
|
20
|
+
# Dockerfile.worker sets these image-wide to the same layout; this module re-forces them so a stale
|
|
21
|
+
# image or a prior run cannot defeat the redirect. it is also the allowlist the verl child inherits
|
|
22
|
+
# (see sft_train._CHILD_ENV_EXACT) -- the child is the interpreter that actually trains, so a cache
|
|
23
|
+
# only the parent can see is no cache at all. one definition, so a var added here cannot be added
|
|
24
|
+
# without the child getting it too.
|
|
25
|
+
KERNEL_CACHE_ENV_SUBDIRS = {
|
|
26
|
+
"TRITON_CACHE_DIR": "triton",
|
|
27
|
+
"TORCHINDUCTOR_CACHE_DIR": "inductor",
|
|
28
|
+
# flashinfer downloads b200 attention cubins and builds a host wrapper on first use. redirect
|
|
29
|
+
# both to distinct persistent-cache subdirs so cold workers do not depend on nvidia artifactory
|
|
30
|
+
# or pay the first-step build repeatedly. it reads FLASHINFER_CUBIN_DIR for cubins and
|
|
31
|
+
# FLASHINFER_WORKSPACE_BASE for the 0.6.x jit wrapper; FLASHINFER_CACHE_DIR is
|
|
32
|
+
# forward-compatible only, and is set anyway so a future version cannot silently miss the cache.
|
|
33
|
+
"FLASHINFER_CUBIN_DIR": "flashinfer_cubin",
|
|
34
|
+
"FLASHINFER_CACHE_DIR": "flashinfer",
|
|
35
|
+
"FLASHINFER_WORKSPACE_BASE": "flashinfer",
|
|
36
|
+
}
|
|
37
|
+
|
|
19
38
|
|
|
20
39
|
def _log(msg: str) -> None:
|
|
21
40
|
print(f"[kernel-warmup] {msg}", flush=True)
|
|
22
41
|
|
|
23
42
|
|
|
24
43
|
def _point_backends_at(cache_dir: str) -> None:
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
# flashinfer downloads b200 attention cubins and builds a host wrapper on first use. redirect both
|
|
30
|
-
# to distinct persistent-cache subdirs so cold workers do not depend on nvidia artifactory or pay
|
|
31
|
-
# the first-step build repeatedly.
|
|
32
|
-
fi_cubin = os.path.join(cache_dir, "flashinfer_cubin")
|
|
33
|
-
fi_cache = os.path.join(cache_dir, "flashinfer")
|
|
34
|
-
os.makedirs(fi_cubin, exist_ok=True)
|
|
35
|
-
os.makedirs(fi_cache, exist_ok=True)
|
|
36
|
-
# flashinfer reads FLASHINFER_CUBIN_DIR for cubins and FLASHINFER_WORKSPACE_BASE for the 0.6.x
|
|
37
|
-
# jit wrapper; FLASHINFER_CACHE_DIR is forward-compatible only. force all three so stale image or
|
|
38
|
-
# prior-run env values cannot defeat this workspace redirect.
|
|
39
|
-
os.environ["FLASHINFER_CUBIN_DIR"] = fi_cubin
|
|
40
|
-
os.environ["FLASHINFER_CACHE_DIR"] = fi_cache
|
|
41
|
-
os.environ["FLASHINFER_WORKSPACE_BASE"] = fi_cache
|
|
44
|
+
for var, subdir in KERNEL_CACHE_ENV_SUBDIRS.items():
|
|
45
|
+
path = os.path.join(cache_dir, subdir)
|
|
46
|
+
os.makedirs(path, exist_ok=True)
|
|
47
|
+
os.environ[var] = path
|
|
42
48
|
|
|
43
49
|
|
|
44
50
|
def _torch_sm(torch) -> str:
|
|
@@ -16,6 +16,7 @@ import time
|
|
|
16
16
|
|
|
17
17
|
from flash._internal.diagnostics import SECRET_ENV_KEYS_ENV
|
|
18
18
|
from flash.adapters.lora_rank import alpha_from_adapter_config, rank_from_adapter_config
|
|
19
|
+
from flash.engine.worker.runtime.kernel_warmup import KERNEL_CACHE_ENV_SUBDIRS
|
|
19
20
|
from flash.engine.worker.runtime.pkg_proxy import W as _w
|
|
20
21
|
from flash.engine.worker.verl.checkpoints import resume_checkpoint_is_loadable
|
|
21
22
|
from flash.engine.worker.verl.parallelism import ULYSSES_SEQUENCE_PARALLEL_SIZE
|
|
@@ -209,6 +210,16 @@ _CHILD_ENV_EXACT = frozenset(
|
|
|
209
210
|
"TOKENIZERS_PARALLELISM",
|
|
210
211
|
"FLASH_VERL_PYTHON",
|
|
211
212
|
}
|
|
213
|
+
# the baked per-sm kernel cache is addressed ONLY through these vars, and the child is the
|
|
214
|
+
# interpreter that actually trains: a cache the child never sees is no cache at all, so without
|
|
215
|
+
# them it falls back to $HOME/.cache and re-JITs the FA2/GDN triton kernels the bake already paid
|
|
216
|
+
# ~124s to build. taken from kernel_warmup rather than restated so the two cannot drift -- and
|
|
217
|
+
# they must be named EXACTly, because TORCHINDUCTOR_CACHE_DIR does NOT match the "TORCH_" prefix
|
|
218
|
+
# below (its sixth character is "I"), which is how it was dropped despite looking like it passes.
|
|
219
|
+
# safe to share: /opt/verl-venv resolves the SAME torch as the parent (both 2.10.0+cu128 on the
|
|
220
|
+
# published cu128-sm90 image), and both are image-local, so this shares nothing across tenants --
|
|
221
|
+
# see providers/_lifecycle/worker.py, which keeps JIT caches OFF the multi-tenant volume.
|
|
222
|
+
| KERNEL_CACHE_ENV_SUBDIRS.keys()
|
|
212
223
|
)
|
|
213
224
|
_CHILD_ENV_PREFIXES = (
|
|
214
225
|
"CUDA_",
|
{freesolo_flash_dev-1.2.110 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/overrides.py
RENAMED
|
@@ -15,8 +15,10 @@ import os
|
|
|
15
15
|
|
|
16
16
|
from flash.content.structured_outputs import reasoning_parser_for
|
|
17
17
|
from flash.engine.worker.backend_common import (
|
|
18
|
+
actor_fsdp_strategy_overrides,
|
|
18
19
|
agent_loop_workers,
|
|
19
20
|
ray_num_cpus,
|
|
21
|
+
rollout_layered_summon_overrides,
|
|
20
22
|
rollout_mm_processor_cache_overrides,
|
|
21
23
|
rollout_resident_overrides,
|
|
22
24
|
shim_marker_file,
|
|
@@ -130,7 +132,6 @@ def _actor_rollout_overrides(config: dict, *, max_tokens: int) -> list[str]:
|
|
|
130
132
|
else []
|
|
131
133
|
),
|
|
132
134
|
f"actor_rollout_ref.model.lora_adapter_path={_hydra_val(config.get('lora_adapter_path'))}",
|
|
133
|
-
"actor_rollout_ref.actor.strategy=fsdp",
|
|
134
135
|
"actor_rollout_ref.actor.use_kl_loss=false",
|
|
135
136
|
"actor_rollout_ref.actor.loss_agg_mode=seq-mean-token-mean",
|
|
136
137
|
"actor_rollout_ref.actor.use_dynamic_bsz=true",
|
|
@@ -148,6 +149,9 @@ def _actor_rollout_overrides(config: dict, *, max_tokens: int) -> list[str]:
|
|
|
148
149
|
# absent -> True, verl's own default: a config built without the gate must render the
|
|
149
150
|
# lower-memory strategy, never fall into zero-2 by omission.
|
|
150
151
|
f"actor_rollout_ref.actor.fsdp_config.reshard_after_forward={_hydra_val(bool(config.get('reshard_after_forward', True)))}",
|
|
152
|
+
# fused-expert lora is a parametrization on a named tensor, which only fsdp2 can host.
|
|
153
|
+
# writes `actor.strategy` for both cases, so the dense default lands here too.
|
|
154
|
+
*actor_fsdp_strategy_overrides(config.get("target_parameters")),
|
|
151
155
|
# store the frozen base in bf16, not verl's fp32 yaml default. shared with the rl driver.
|
|
152
156
|
*trainer_dtype_overrides(),
|
|
153
157
|
"actor_rollout_ref.rollout.name=vllm",
|
|
@@ -181,6 +185,9 @@ def _actor_rollout_overrides(config: dict, *, max_tokens: int) -> list[str]:
|
|
|
181
185
|
if config.get("mm_encoder_attn_backend")
|
|
182
186
|
else []
|
|
183
187
|
),
|
|
188
|
+
# fused-expert lora models gather the weight sync one submodule at a time, as the grpo path
|
|
189
|
+
# does; opd shares verl's collect_lora_params. requires load_format=safetensors above.
|
|
190
|
+
*rollout_layered_summon_overrides(config.get("target_parameters")),
|
|
184
191
|
*rollout_mm_processor_cache_overrides(),
|
|
185
192
|
# keep the rollout engine RESIDENT for models whose vLLM wake/reload HANGS (catalog
|
|
186
193
|
# sleep_unsupported), exactly as the grpo path does. opd is NOT exempt: main_ppo_sync calls
|
|
@@ -17,8 +17,10 @@ from flash.adapters.targets import resolve_lora_targeting
|
|
|
17
17
|
from flash.content.multimodal import messages_with_decoded_images
|
|
18
18
|
from flash.content.structured_outputs import reasoning_parser_for
|
|
19
19
|
from flash.engine.worker.backend_common import (
|
|
20
|
+
actor_fsdp_strategy_overrides,
|
|
20
21
|
agent_loop_workers,
|
|
21
22
|
ray_num_cpus,
|
|
23
|
+
rollout_layered_summon_overrides,
|
|
22
24
|
rollout_mm_processor_cache_overrides,
|
|
23
25
|
rollout_resident_overrides,
|
|
24
26
|
rollout_sleep_unsupported,
|
|
@@ -299,6 +301,9 @@ def _actor_overrides(cfg: dict) -> list[str]:
|
|
|
299
301
|
# absent -> True, verl's own default: a cfg built without the gate must render the
|
|
300
302
|
# lower-memory strategy, never fall into zero-2 by omission.
|
|
301
303
|
f"actor_rollout_ref.actor.fsdp_config.reshard_after_forward={_hydra_val(bool(cfg.get('reshard_after_forward', True)))}",
|
|
304
|
+
# fused-expert lora is a parametrization on a named tensor, which only fsdp2 can host.
|
|
305
|
+
# shared with the opd driver; sft has always been on fsdp2 for the same reason.
|
|
306
|
+
*actor_fsdp_strategy_overrides(cfg.get("target_parameters")),
|
|
302
307
|
# store the frozen base in bf16, not verl's fp32 yaml default. shared with the opd driver.
|
|
303
308
|
*trainer_dtype_overrides(),
|
|
304
309
|
]
|
|
@@ -350,6 +355,10 @@ def _rollout_overrides(cfg: dict) -> list[str]:
|
|
|
350
355
|
),
|
|
351
356
|
# safetensors load format is required for lora rollout on vllm.
|
|
352
357
|
"actor_rollout_ref.rollout.load_format=safetensors",
|
|
358
|
+
# fused-expert lora models gather the weight sync one submodule at a time; the whole-model
|
|
359
|
+
# summon materializes every layer's expert stack at once. requires load_format=safetensors
|
|
360
|
+
# above, which verl checks as base_sync_done before allowing the layered walk.
|
|
361
|
+
*rollout_layered_summon_overrides(cfg.get("target_parameters")),
|
|
353
362
|
*rollout_mm_processor_cache_overrides(),
|
|
354
363
|
# keep the rollout engine RESIDENT for models whose vLLM wake/reload HANGS (catalog
|
|
355
364
|
# sleep_unsupported). shared with the opd driver, which runs the same verl sleep path.
|