freesolo-flash-dev 1.2.111__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.111 → freesolo_flash_dev-1.2.112}/.github/workflows/bake-kernel-cache.yml +2 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/ci.yml +6 -2
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/deploy-modal-dev.yml +5 -1
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/deploy-modal.yml +3 -2
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-dev.yml +2 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/publish.yml +2 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/Dockerfile +2 -1
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/Dockerfile.serve +2 -1
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/Dockerfile.worker +31 -28
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/PKG-INFO +12 -11
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/worker_output.py +13 -3
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/backend_common.py +10 -5
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/kernel_warmup.py +23 -17
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/sft_train.py +11 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/overrides.py +4 -1
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/verl_config.py +4 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/capabilities.py +51 -15
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/instance.py +3 -2
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/runtime.py +14 -1
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/modal_app.py +3 -1
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/pyproject.toml +27 -15
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_usage_reporter.py +5 -1
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_backend_common.py +73 -24
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_commands_coverage.py +31 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_kernel_fingerprint.py +26 -20
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lora_targeting_pinned_verl.py +1 -1
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_train.py +20 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_rl_train.py +19 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_package.py +3 -3
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_api.py +54 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_train.py +26 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_stack.py +24 -11
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/uv.lock +52 -56
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.env.example +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/dev-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/production-kernel-cache-ready.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/publish-serving-image.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/CHANGELOG.md +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/README.md +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/docs/serving-contract.md +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/adapters/targets.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/deploy.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/episode.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/eval.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/imports.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/list.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/push.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/retained.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/setup.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_params.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/env/test_warnings.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/log_follow.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_deploy.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_identity.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_status.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/traces.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/commands/train_cost.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/errors.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/scaffold/TRAINING.md +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/serve_parser.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/content/image_descriptors.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/core/catalog.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/core/grpo.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/core/spec.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/huggingface.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/opd_train.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/opd_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/pkg_proxy.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/score_batcher.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/core/step_timing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/finalize.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/batching.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/bridge.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/bridge_failures.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/failures.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/gkd.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/multiturn_media.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/multiturn_validation.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/prompts.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/reporting.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/scoring.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/state.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/validation.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/patches.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/config.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/identity.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/inputs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/multi_turn.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/reward_module.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/scoring.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/rl/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/sft/config.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/process_census.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/adapter.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/base.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/identity.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/loader.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/package/direct_tokens.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/pull.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/envs/staged.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/auth.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_console.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_pip.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/bootstrap_secrets.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/deadline.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/failmark.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/host/hostlog.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/http.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/poll.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/poll_instance.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/provider.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/_lifecycle/worker.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/allocator.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/base.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/api.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/auth.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/gpus.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/jobs/reap.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/preflight.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/lambda_/pricing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/preflight.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/realized.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/api.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/auth.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/cost.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/gpus.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/job_execution.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/jobs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/preflight.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/pricing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/resources.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/runpod/serverless/endpoints.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/sharding.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/api.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/auth.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/preflight.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/providers/vast/pricing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/attempts.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/costs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/preparation.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/reconciliation.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/results/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/status.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/submit.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/attach.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/deploy.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/recovery.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/retry_decision.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/seed_submission.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runner/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/runtime_capsule/profiles.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/adapter_check.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/__main__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/http.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/launch.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/manifest.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/materialize.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/openai.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/app/progress.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/contract.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/_canonical.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/_serialization.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/_urls.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/credentials.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/planning.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/control/types.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/deploy.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/errors.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/export.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/preflight.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/profiles.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_common.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_deployment.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_plan.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_probe.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_readiness.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_resources.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_sdk.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_teardown.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_modal_wrapper.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_mutations.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_plan.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_probe.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_protocol.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_readiness.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_resources.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/_runpod_transport.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/modal.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/provisioning/runpod.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/request_validation.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/resolve.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/responses.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/adapters.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/engine.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/errors.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/prompt.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime/types.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/runtime_support.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/streaming.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/thinking.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serve/urls.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/app.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/billing/charges.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/environment_registry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/envs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/projects.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/reconcile.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/run_registry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_errors.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/domain/teacher_requests.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/auth.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/internal_client.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_completion.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_revisions.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/serving_smoke.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/README.md +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/adapter_routes.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/body_limit.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/context.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_boot.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_errors.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/engine_support.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/http_headers.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/inference_routes.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/lookup.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/lora_engine.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/lora_entries.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/model_config.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/persisted_columns.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/persistence.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/registration.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/registry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/responses.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/router.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/routing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/schemas.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/serving_io.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/settings.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/streaming.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/supabase_rest.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/serving/src/usage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/teacher/provider_status.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/check_rollout_identity_actor.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/serve_launch.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/fixtures/qwen35_08b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/conftest.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_base_model_serving.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_chat_auth.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_chat_authorizer.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_checkpoint_model_validation.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_engine_error_status.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_fp8_config.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_engine.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_revisions.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_immutable_schemas.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_modal_deploy_identity.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_modal_image_paths.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_model_config.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_multimodal.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_openai_stream_options.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_per_model_gpu.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_persistence.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_pre_first_disconnect.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_registry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_registry_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_request_body_limit.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_router.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_router_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_router_edge_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_schemas_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_reasoning_split.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_serve_thinking.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_settings.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_structured_outputs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving/test_supabase_rest_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/__init__.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/conftest.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/serving_conformance/test_contract.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cancel_remote.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_deploy.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_status.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_deploy_alias_move_warning.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_process_census.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_grpo_rollout_identity.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_image_environment_capability.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_image_incremental_processor.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_jobs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_nested_rung.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_lora_targeting.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_multiturn_failure_exit.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_opd_resume_safety.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_provider_routing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_resume_on_retry.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_runmgmt.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_bootstrap_http.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_launch.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_manifest.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_materialize.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_app_packaging.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_control.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_sdk.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_sdk_deadlines.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_modal_teardown_identity.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_profiles.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_common.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_modal.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_provisioning_runpod.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_resolve_provenance.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_adapters.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_engine.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serve_runtime_types.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_server_standalone.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serving_conformance_gate.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_startup_block.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_source_attestation_flow.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_staged_environment.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_warmstart_image_adapters.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/tests/test_zero2_sharding_gate.py +0 -0
{freesolo_flash_dev-1.2.111 → 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.111 → 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.111 → 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.111 → 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():
|
{freesolo_flash_dev-1.2.111 → 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,
|
|
@@ -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.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/train/opd/overrides.py
RENAMED
|
@@ -15,6 +15,7 @@ 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,
|
|
20
21
|
rollout_layered_summon_overrides,
|
|
@@ -131,7 +132,6 @@ def _actor_rollout_overrides(config: dict, *, max_tokens: int) -> list[str]:
|
|
|
131
132
|
else []
|
|
132
133
|
),
|
|
133
134
|
f"actor_rollout_ref.model.lora_adapter_path={_hydra_val(config.get('lora_adapter_path'))}",
|
|
134
|
-
"actor_rollout_ref.actor.strategy=fsdp",
|
|
135
135
|
"actor_rollout_ref.actor.use_kl_loss=false",
|
|
136
136
|
"actor_rollout_ref.actor.loss_agg_mode=seq-mean-token-mean",
|
|
137
137
|
"actor_rollout_ref.actor.use_dynamic_bsz=true",
|
|
@@ -149,6 +149,9 @@ def _actor_rollout_overrides(config: dict, *, max_tokens: int) -> list[str]:
|
|
|
149
149
|
# absent -> True, verl's own default: a config built without the gate must render the
|
|
150
150
|
# lower-memory strategy, never fall into zero-2 by omission.
|
|
151
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")),
|
|
152
155
|
# store the frozen base in bf16, not verl's fp32 yaml default. shared with the rl driver.
|
|
153
156
|
*trainer_dtype_overrides(),
|
|
154
157
|
"actor_rollout_ref.rollout.name=vllm",
|
|
@@ -17,6 +17,7 @@ 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,
|
|
22
23
|
rollout_layered_summon_overrides,
|
|
@@ -300,6 +301,9 @@ def _actor_overrides(cfg: dict) -> list[str]:
|
|
|
300
301
|
# absent -> True, verl's own default: a cfg built without the gate must render the
|
|
301
302
|
# lower-memory strategy, never fall into zero-2 by omission.
|
|
302
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")),
|
|
303
307
|
# store the frozen base in bf16, not verl's fp32 yaml default. shared with the opd driver.
|
|
304
308
|
*trainer_dtype_overrides(),
|
|
305
309
|
]
|
{freesolo_flash_dev-1.2.111 → freesolo_flash_dev-1.2.112}/flash/engine/worker/verl/capabilities.py
RENAMED
|
@@ -21,7 +21,7 @@ from flash.engine.worker.backend_common import (
|
|
|
21
21
|
CAUSAL_CONV1D_REQUIREMENT,
|
|
22
22
|
FLA_REQUIREMENT,
|
|
23
23
|
FLASH_QLA_REQUIREMENT,
|
|
24
|
-
|
|
24
|
+
TRANSFORMERS_INSTALL_REQUIREMENT,
|
|
25
25
|
VERL_REQUIREMENT_NAME,
|
|
26
26
|
VERL_REQUIREMENT_URL,
|
|
27
27
|
VERL_VENV_PYTHON,
|
|
@@ -438,7 +438,10 @@ def resolve_verl_python(workdir: str, *, install_wandb: bool = False) -> str:
|
|
|
438
438
|
# and transformers owns the gdn modelling code the boundary-reset shim patches.
|
|
439
439
|
overrides = os.path.join(workdir, "verl-overrides.txt")
|
|
440
440
|
with open(overrides, "w") as f:
|
|
441
|
-
f.write(
|
|
441
|
+
f.write(
|
|
442
|
+
f"numpy==2.2.6\nxgrammar==0.1.25\nvllm==0.19.1\n"
|
|
443
|
+
f"{TRANSFORMERS_INSTALL_REQUIREMENT}\n"
|
|
444
|
+
)
|
|
442
445
|
subprocess.run(
|
|
443
446
|
[
|
|
444
447
|
"uv",
|
|
@@ -454,25 +457,25 @@ def resolve_verl_python(workdir: str, *, install_wandb: bool = False) -> str:
|
|
|
454
457
|
f"{VERL_REQUIREMENT_NAME}[vllm] @ {VERL_REQUIREMENT_URL}",
|
|
455
458
|
"vllm==0.19.1",
|
|
456
459
|
"numpy==2.2.6",
|
|
457
|
-
|
|
458
|
-
#
|
|
460
|
+
TRANSFORMERS_INSTALL_REQUIREMENT,
|
|
461
|
+
# not transitively guaranteed: verl imports these at module level on the launch path
|
|
459
462
|
# (main_ppo -> ppo.ray_trainer -> rollout.llm_server imports cachetools, and
|
|
460
463
|
# rollout.utils imports uvicorn + fastapi), yet declares none of them. vllm happens
|
|
461
464
|
# to pull cachetools and fastapi today, but that is vllm's dependency choice, not a
|
|
462
|
-
# contract verl states --
|
|
463
|
-
"cachetools",
|
|
464
|
-
"uvicorn",
|
|
465
|
-
"fastapi",
|
|
465
|
+
# contract verl states -- exact pins mirror the worker dockerfile's resolved venv.
|
|
466
|
+
"cachetools==7.1.7",
|
|
467
|
+
"uvicorn==0.52.4",
|
|
468
|
+
"fastapi==0.141.1",
|
|
466
469
|
# opd's entrypoint calls tq.init()/tq.close(); absent from verl's setup.py.
|
|
467
470
|
"TransferQueue==0.1.7",
|
|
468
471
|
# older raises AttributeError on PyArrow PyExtensionType.
|
|
469
|
-
"datasets
|
|
470
|
-
"bitsandbytes
|
|
471
|
-
"qwen-vl-utils",
|
|
472
|
-
"torchvision",
|
|
472
|
+
"datasets==5.0.1",
|
|
473
|
+
"bitsandbytes==0.50.1",
|
|
474
|
+
"qwen-vl-utils==0.0.14",
|
|
475
|
+
"torchvision==0.25.0",
|
|
473
476
|
"xgrammar==0.1.25",
|
|
474
|
-
"tqdm",
|
|
475
|
-
"pyarrow",
|
|
477
|
+
"tqdm==4.70.0",
|
|
478
|
+
"pyarrow==25.0.1",
|
|
476
479
|
# gated-deltanet kernels, in LOCKSTEP with Dockerfile.worker's
|
|
477
480
|
# verl-venv layer (same fla sha, same tilelang pins). the model
|
|
478
481
|
# trains in THIS interpreter, so fla being installed in the
|
|
@@ -536,7 +539,8 @@ def resolve_verl_python(workdir: str, *, install_wandb: bool = False) -> str:
|
|
|
536
539
|
# keep wandb outside the stamped rebuild branch. wandb is absent from the stamp, so reused venvs
|
|
537
540
|
# and transient failures must retry it on later runs; installing an already satisfied package
|
|
538
541
|
# is a cheap no-op.
|
|
539
|
-
|
|
542
|
+
# exact-pinned to the same version baked into Dockerfile.worker's verl venv.
|
|
543
|
+
subprocess.run(["uv", "pip", "install", "--python", py, "wandb==0.28.2"], check=False)
|
|
540
544
|
return py
|
|
541
545
|
|
|
542
546
|
|
|
@@ -860,6 +864,38 @@ def rollout_layered_summon_overrides(target_parameters: Sequence[str] | None) ->
|
|
|
860
864
|
return ["actor_rollout_ref.rollout.layered_summon=true"]
|
|
861
865
|
|
|
862
866
|
|
|
867
|
+
def actor_fsdp_strategy_overrides(target_parameters: list[str] | None) -> list[str]:
|
|
868
|
+
"""select the actor's fsdp wrapper: fused-expert lora needs fsdp2, dense keeps fsdp1.
|
|
869
|
+
|
|
870
|
+
PEFT implements ``target_parameters`` by registering a torch parametrization onto a NAMED
|
|
871
|
+
TENSOR at forward time (``peft/tuners/lora/layer.py:2463``), unlike ``target_modules``, which
|
|
872
|
+
swaps in a wrapper layer once at injection. ``register_parametrization`` calls
|
|
873
|
+
``delattr(module, name)`` and then asserts the name is gone
|
|
874
|
+
(``torch/nn/utils/parametrize.py:387``). fsdp1 cannot satisfy that on either setting:
|
|
875
|
+
``use_orig_params=False`` (verl's default, ``workers/config/engine.py:254``) flattens the
|
|
876
|
+
tensor away so the name never resolves (``parametrize.py:639``), and ``use_orig_params=True``
|
|
877
|
+
leaves ``FSDP.__getattr__`` resolving it from ``_fsdp_wrapped_module``, so ``hasattr`` stays
|
|
878
|
+
True after ``delattr`` and the bare assert fires (``parametrize.py:634`` -> ``:387``).
|
|
879
|
+
|
|
880
|
+
no config value satisfies that assert while fsdp1 owns the module, so the strategy itself has
|
|
881
|
+
to change. fsdp2's ``fully_shard`` keeps parameters under their own names with no wrapper
|
|
882
|
+
indirection. flash's sft driver has always pinned ``engine.strategy=fsdp2``
|
|
883
|
+
(``train/sft/config.py:138``) and trains this same model with these same ``target_parameters``.
|
|
884
|
+
|
|
885
|
+
verl supports it here: ``strategy`` is declared in ``actor/dp_actor.yaml:26`` so it takes a
|
|
886
|
+
bare override, ``workers/config/engine.py:265`` accepts ``fsdp2``, the ref policy interpolates
|
|
887
|
+
the actor's value (``ref/ref.yaml:5``) so the two cannot drift, and ``layered_summon_lora_params``
|
|
888
|
+
carries an explicit fsdp2 prefix block (``utils/fsdp_utils.py:646-649``).
|
|
889
|
+
|
|
890
|
+
dense models stay on fsdp1: their lora lives on wrapper modules swapped in at injection, so no
|
|
891
|
+
parametrization is ever registered. the key is written for BOTH cases rather than omitted for
|
|
892
|
+
dense, so it has exactly one writer per config and the rl and opd drivers cannot disagree about
|
|
893
|
+
the dense default or inherit a future change to verl's yaml.
|
|
894
|
+
"""
|
|
895
|
+
strategy = "fsdp2" if target_parameters else "fsdp"
|
|
896
|
+
return [f"actor_rollout_ref.actor.strategy={strategy}"]
|
|
897
|
+
|
|
898
|
+
|
|
863
899
|
def rollout_mm_processor_cache_overrides() -> list[str]:
|
|
864
900
|
"""disable vllm's split multimodal processor cache for every verl rollout.
|
|
865
901
|
|