freesolo-flash-dev 1.2.123__tar.gz → 1.2.124__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.123 → freesolo_flash_dev-1.2.124}/PKG-INFO +1 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/eval.py +0 -21
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/scaffold/TRAINING.md +2 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/opd_train_runner.py +1 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/sft_train.py +0 -20
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/plugin.py +26 -12
- freesolo_flash_dev-1.2.124/flash/engine/worker/train/opd/child/tensors.py +56 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/base.py +2 -3
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/execution/provider.py +1 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/jobs/__init__.py +5 -72
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/jobs/reap.py +2 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/job_execution.py +0 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/jobs.py +3 -21
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/polling.py +4 -8
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/provider.py +0 -4
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/accounting/reconciliation.py +9 -31
- freesolo_flash_dev-1.2.124/flash/runner/lifecycle/attempts.py +635 -0
- freesolo_flash_dev-1.2.124/flash/runner/lifecycle/claim_lock.py +64 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/state.py +28 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/status.py +12 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/attach.py +62 -40
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/errors.py +4 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/lifecycle.py +53 -86
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/recovery.py +0 -88
- freesolo_flash_dev-1.2.124/flash/runner/supervise/retry_decision.py +401 -0
- freesolo_flash_dev-1.2.124/flash/runner/supervise/seed_submission.py +743 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/teacher/broker.py +2 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/runtime.py +68 -26
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/runner.py +16 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_allocator.py +1 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cancel_remote.py +21 -4
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_ref_pinning.py +3 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_jobs.py +155 -245
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lambda_runner.py +32 -307
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_multi_gpu_gate.py +0 -25
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_oom_escalate_gpu.py +30 -62
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_multiturn_failure_exit.py +38 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_resume_safety.py +69 -21
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_train.py +414 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_orchestrator_flash.py +4 -1
- freesolo_flash_dev-1.2.124/tests/test_provider_routing.py +1941 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_resume_on_retry.py +9 -3
- freesolo_flash_dev-1.2.124/tests/test_retry_decision.py +226 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_runmgmt.py +1448 -530
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_api.py +20 -11
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_source_attestation_flow.py +6 -5
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_staged_environment.py +9 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_teacher_broker.py +2 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_weight_cache.py +3 -3
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/uv.lock +1 -1
- freesolo_flash_dev-1.2.123/flash/runner/lifecycle/attempts.py +0 -151
- freesolo_flash_dev-1.2.123/flash/runner/supervise/retry_decision.py +0 -206
- freesolo_flash_dev-1.2.123/flash/runner/supervise/seed_submission.py +0 -935
- freesolo_flash_dev-1.2.123/tests/test_provider_routing.py +0 -3019
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.env.example +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/deploy-modal-dev.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/deploy-modal.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/dev-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/production-kernel-cache-ready.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/publish-serving-image.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/CHANGELOG.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/Dockerfile +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/Dockerfile.serve +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/README.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docker/patch_vllm_moe_lora.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/docs/serving-contract.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/openai_sse.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/_internal/version.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/adapters/targets.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/imports.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/list.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/push.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/retained.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/setup.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/episode.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/params.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/test.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/warnings.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/account.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/catalog.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/deploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/log_follow.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/runs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/traces.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/train.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/ops/worker_output.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/serving/deploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/serving/identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/serving/status.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/serving/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/account.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/env.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/main.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/models.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/serve_parser.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/traces.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/parsing/training.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/image_descriptors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/reasoning_normalization.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/core/catalog.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/core/grpo.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/core/spec.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/currency.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/support/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/support/huggingface.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/support/verl_checkpoint.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/support/verl_policy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/support/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/entry/worker.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/runtime/state.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/backend_common.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/opd_train.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/score_batcher.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/child/patches.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/launch/config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/train/sft/setup/config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/capabilities.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/engine/worker/verl/process_census.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/adapter.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/base.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/loader.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/pull.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/loading/staged.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/meta/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/package/direct_tokens.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/host/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/host/failmark.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/host/hostlog.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/instance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/poll.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/provider.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/net/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/net/auth.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/net/deadline.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/net/http.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/_lifecycle/net/worker.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/allocator.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/realized.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/registry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/core/sharding.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/cost.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/resources.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/serverless/endpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/client/api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/accounting/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/accounting/costs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/accounting/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/preparation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/reporting.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/lifecycle/submit.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/results/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/attach_reconcile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/deploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runtime_capsule/profiles.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/__main__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/chat_stream.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/http.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/launch.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/manifest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/materialize.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/openai.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/app/progress.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/protocol.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/provenance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/responses.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/contract/urls.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/_canonical.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/_serialization.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/_urls.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/credentials.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/planning.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/control/types.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/adapter_check.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/deploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/export.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/profiles.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/readiness.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/deployment/resolve.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/common/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/common/records.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/execution/operations.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/planning/plan.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/planning/resources.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/openai.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/runtime_support.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/streaming.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/thinking.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/transport.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/request/validation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/adapters.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/engine.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/prompt.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/sampling.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serve/runtime/types.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/asgi/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/asgi/app.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/asgi/cli.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/billing/charges.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/ops/reconcile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/ops/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/ops/serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/environment_registry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/envs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/projects.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/registry/runs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/teacher/errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/domain/teacher/requests.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/auth.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/internal_client.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/serving_chat.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/serving_completion.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/serving_revisions.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/serving_smoke.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/app/README.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/app/modal_app.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/accounting/usage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/accounting/usage_facts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/accounting/usage_outbox.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/boot.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/generation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/lora_engine.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/lora_entries.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/model_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/engine/support.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/adapter_routes.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/body_limit.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/context.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/headers.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/inference_routes.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/router.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/http/routing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/openai_request.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/openai_stream.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/provenance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/requests.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/responses.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/schemas.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/streaming.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/io/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/access.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/lookup.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/persisted_columns.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/persistence.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/registration.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/registry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/settings.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/supabase_rest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/serving/src/store/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/snapshot/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/snapshot/archive.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/teacher/provider_status.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/check_rollout_identity_actor.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/check_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/qualify_serving_profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/serve_launch.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/chat_provenance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/chat_transport.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/managed_chat.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/server_api_plugin.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/capture_qwen38_27b_metadata.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/checkpoint_fixtures.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/conftest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_base_model_serving.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_chat_auth.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_chat_authorizer.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_checkpoint_model_validation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_engine_error_status.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_fp8_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_immutable_engine.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_immutable_revisions.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_immutable_schemas.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_mirror_sampling_parity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_modal_deploy_identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_modal_image_paths.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_model_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_multimodal.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_openai_stream_options.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_per_model_gpu.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_persistence.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_pre_first_disconnect.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_registry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_registry_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_request_body_limit.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_router.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_router_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_router_edge_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_schemas_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_serve_reasoning_split.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_serve_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_serve_thinking.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_settings.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_structured_outputs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_supabase_rest_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_usage_outbox.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving/test_usage_reporter.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving_conformance/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving_conformance/conftest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/serving_conformance/test_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_capture_qwen38_metadata.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_chat_foundations.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_serve_deploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_serve_status.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_currency.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_checkpoint_durability.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_process_census.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_grpo_rollout_identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_image_environment_capability.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_image_incremental_processor.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lora_rank_nested_rung.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lora_targeting.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_lora_targeting_pinned_verl.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_mirror_sampling_parity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_opd_replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_rl_train.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_run_registry_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_bootstrap_http.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_launch.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_manifest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_materialize.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_packaging.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_app_progress.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_chat_transport.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_control.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_docs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_modal_contract_lock.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_modal_sdk.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_modal_sdk_deadlines.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_modal_teardown_identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_profile_qualification.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_profiles.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_provisioning_common.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_provisioning_modal.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_resolve_provenance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_runtime_adapters.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_runtime_engine.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_runtime_package.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serve_runtime_types.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_managed_chat_requests.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_server_standalone.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serving_conformance_gate.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_train.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vllm_moe_lora_backport.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_warmstart_image_adapters.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.124
|
|
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
|
{freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/cli/commands/env/testing/eval.py
RENAMED
|
@@ -202,27 +202,6 @@ def _score_case(
|
|
|
202
202
|
)
|
|
203
203
|
|
|
204
204
|
|
|
205
|
-
_READY_DEPLOYMENT_STATES = frozenset({"ready", "deployed"})
|
|
206
|
-
_BUSY_DEPLOYMENT_STATES = frozenset({"queued", "smoke_testing", "reconciling"})
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
def _live_deployment(client, run_id: str) -> dict | None:
|
|
210
|
-
"""The run's deployment record, whatever state it is in, or None when it has none.
|
|
211
|
-
|
|
212
|
-
Match by run id because `deployment_for` misses step deployments. Busy records name the rollout
|
|
213
|
-
target and hide the revision that may still be serving.
|
|
214
|
-
"""
|
|
215
|
-
for entry in client.deployments() or ():
|
|
216
|
-
listed = entry.get("deployment") or {}
|
|
217
|
-
if run_id not in (listed.get("run_id"), entry.get("run_id")):
|
|
218
|
-
continue
|
|
219
|
-
# the listing omits undeployed/dry_run rows, so anything here is servable.
|
|
220
|
-
if not listed.get("run_id") and entry.get("run_id"):
|
|
221
|
-
listed = {**listed, "run_id": entry["run_id"]}
|
|
222
|
-
return listed
|
|
223
|
-
return None
|
|
224
|
-
|
|
225
|
-
|
|
226
205
|
def _case_ids(cases: list[EvalCase]) -> list[str]:
|
|
227
206
|
"""Stable per-case ids, disambiguating sidecars that reuse one id across cases.
|
|
228
207
|
|
|
@@ -681,7 +681,7 @@ spending another GPU run:
|
|
|
681
681
|
| Local-only env path in config | Config validation says there is no local path mode | Publish first, then use the returned slug in `[environment] id`. `flash train` only runs published env ids, not local paths. |
|
|
682
682
|
| Config knobs are in the wrong table | Validation rejects `[grpo]`, `[sft]`, or unknown `[train]` keys | Put `epochs`, `group_size`, `max_completion_tokens`, `temperature`, `max_context_tokens`, LoRA, and other training knobs under `[train]`. |
|
|
683
683
|
| GPU selection is not what you expected | Leaving `[gpu] type` unset may select a different fitting class as prices or capacity change | Set `[gpu] type` to an active validated class to hard-pin it, to a list (`["A100 PCIe", "A100 SXM"]`) to allow several, or leave it unset for managed cheapest-fit allocation. `train.hf_repo` remains platform-managed. |
|
|
684
|
-
| A
|
|
684
|
+
| A run stops after an infrastructure or OOM failure | No candidate with strictly more usable VRAM remains, even if another provider offers the same-size GPU | Widen `[gpu] type` or the card-count ceiling to include a strictly larger fitting shape, or reduce the workload footprint. Flash preserves allocator order among larger candidates and never retries an equal-size shape. A managed shared-cache `no_capacity` or `poll_error` gets one cacheless same-shape retry before this rule applies. |
|
|
685
685
|
| Secrets are not available on the worker | Reward code works locally but remote logs show missing API keys or auth failures | List secret names under `[environment] secrets = [...]`, export those env vars locally before submit, or put them in local `.env` / `.env.local`. Never hard-code secret values in the config. |
|
|
686
686
|
| Scorer dependency is missing on the worker | Reward code works locally but every reward is `0.0` remotely; the import your scorer needs is installed in your venv, not the worker's | List the packages your scorer imports under `[environment] pip = ["pymongo>=4.6"]`. They are installed alongside Flash's own worker requirement. `flash env test` names the failing import locally before you spend a GPU on it. Entries name packages only: pip options and URLs with inline credentials are rejected, because the spec is stored and uploaded in plaintext (put the credential in `[environment] secrets`). |
|
|
687
687
|
| Wrong model / thinking setting | Config validation fails, or chat behavior does not match the run | Config validation is authoritative for model and thinking compatibility. Thinking is a run-level choice, and `flash models chat` does not expose an override flag. |
|
|
@@ -690,7 +690,7 @@ spending another GPU run:
|
|
|
690
690
|
| Reward rises but behavior is worse | Short, templated, malformed, or reward-hacked outputs score well | Deploy the adapter and probe real examples. Add hard validity gates before judge calls, penalize degenerate shortcuts, and judge the outcome rather than the surface string. |
|
|
691
691
|
| OPD makes the student worse, not better | The distilled adapter scores _below_ its SFT/base start even though the per-token loss fell | The teacher, not a knob, is the ceiling. Reverse-KL only pulls the student toward the managed GLM-5.2 teacher, so a teacher that is weak or wrong on _your_ task transfers its mistakes. Vet the teacher before you spend — the "On-policy distillation" section gives the two ways to do that with a managed key. If it can't beat your student, use GRPO or SFT instead — OPD cannot exceed a teacher that can't do the task. |
|
|
692
692
|
| Output is truncated | Correct-looking answers cut off mid-response or JSON is incomplete | Increase `max_completion_tokens` for GRPO/OPD rollouts or `max_context_tokens` for total prompt+completion context only after seeing truncation. Oversizing them by default just burns memory/cost. |
|
|
693
|
-
| Infrastructure, CUDA, OOM, vLLM, or kernel failure | Run errors before useful metrics, often during setup/model load |
|
|
693
|
+
| Infrastructure, CUDA, OOM, vLLM, or kernel failure | Run errors before useful metrics, often during setup/model load | Read `flash runs log <run-id>`. Flash advances a single executed-width-aware usable-VRAM floor for candidate-bound infrastructure and OOM failures, then retries only a strictly larger fitting candidate while keeping infrastructure and OOM budgets separate. Reduce `max_context_tokens`, `max_completion_tokens`, or `group_size` when no larger candidate remains. |
|
|
694
694
|
| Run looks stuck after disconnecting | Terminal stopped streaming but the job may still be alive | Ctrl-C detaches. Use `flash runs log <run-id> --follow` to reattach, `flash runs log <run-id>` for the console/error output, or `flash runs cancel <run-id>` if you intentionally want to stop it. |
|
|
695
695
|
| Two runs training the same thing | `flash runs list` shows a live run you thought you had killed, on top of the one you just submitted | Killing the `flash train` client only detaches; it never cancels. Always `flash runs list` and cancel the stale run _before_ re-submitting, and never wrap `flash train` in `timeout`. |
|
|
696
696
|
| Wrong identity spends the money | Push/train lands in an org you did not expect, or a run id you know is valid comes back "unknown" | `FREESOLO_API_KEY` in the environment silently overrides `flash login`. Run `flash whoami` first. Run visibility is scoped to the key that created the run, so archive result baselines to disk rather than relying on `flash runs list` to find them later. |
|
|
@@ -318,6 +318,7 @@ def _write_child_shims(
|
|
|
318
318
|
("train/opd/child/plugin.py", "flash_opd_plugin.py"),
|
|
319
319
|
("train/opd/child/bridge.py", "flash_opd_bridge.py"),
|
|
320
320
|
("train/opd/child/structured.py", "flash_opd_structured.py"),
|
|
321
|
+
("train/opd/child/tensors.py", "flash_opd_tensors.py"),
|
|
321
322
|
("train/opd/child/multiturn.py", "flash_opd_multiturn.py"),
|
|
322
323
|
("train/opd/child/entry.py", "flash_opd_entry.py"),
|
|
323
324
|
("train/opd/child/replay_guard.py", "flash_opd_replay_guard.py"),
|
|
@@ -112,26 +112,6 @@ def _warmstart_adapter_path(
|
|
|
112
112
|
return adapter_dir
|
|
113
113
|
|
|
114
114
|
|
|
115
|
-
def _verl_image_message_content(content) -> str:
|
|
116
|
-
if isinstance(content, str):
|
|
117
|
-
return content
|
|
118
|
-
if content is None:
|
|
119
|
-
return ""
|
|
120
|
-
if not isinstance(content, list):
|
|
121
|
-
raise ValueError("multimodal message content must be text or content blocks")
|
|
122
|
-
parts: list[str] = []
|
|
123
|
-
for block in content:
|
|
124
|
-
if not isinstance(block, dict):
|
|
125
|
-
raise ValueError("multimodal message content blocks must be objects")
|
|
126
|
-
if block.get("type") == "text":
|
|
127
|
-
parts.append(str(block.get("text") or ""))
|
|
128
|
-
elif block.get("type") == "image":
|
|
129
|
-
parts.append("<image>")
|
|
130
|
-
else:
|
|
131
|
-
raise ValueError(f"unsupported multimodal SFT content block {block.get('type')!r}")
|
|
132
|
-
return "".join(parts)
|
|
133
|
-
|
|
134
|
-
|
|
135
115
|
_restore_verl_resume = partial(restore_verl_resume, job_label="SFT")
|
|
136
116
|
|
|
137
117
|
|
|
@@ -26,6 +26,15 @@ if PLUGIN_LOADED_EXTERNALLY:
|
|
|
26
26
|
from flash_multiturn_glue import multi_modal_image_count
|
|
27
27
|
from flash_opd_multiturn import build_flash_multi_turn_agent_loop
|
|
28
28
|
from flash_opd_structured import StructuredOutputReplay, canonical_structured_spec
|
|
29
|
+
from flash_opd_tensors import (
|
|
30
|
+
full_sequence_signal_sequences as _full_sequence_signal_sequences,
|
|
31
|
+
)
|
|
32
|
+
from flash_opd_tensors import (
|
|
33
|
+
packed_full_sequence as _packed_full_sequence,
|
|
34
|
+
)
|
|
35
|
+
from flash_opd_tensors import (
|
|
36
|
+
signal_sequences as _signal_sequences,
|
|
37
|
+
)
|
|
29
38
|
else:
|
|
30
39
|
from flash.engine.worker.train.core.child.glue import multi_modal_image_count
|
|
31
40
|
from flash.engine.worker.train.opd.child.multiturn import build_flash_multi_turn_agent_loop
|
|
@@ -33,6 +42,15 @@ else:
|
|
|
33
42
|
StructuredOutputReplay,
|
|
34
43
|
canonical_structured_spec,
|
|
35
44
|
)
|
|
45
|
+
from flash.engine.worker.train.opd.child.tensors import (
|
|
46
|
+
full_sequence_signal_sequences as _full_sequence_signal_sequences,
|
|
47
|
+
)
|
|
48
|
+
from flash.engine.worker.train.opd.child.tensors import (
|
|
49
|
+
packed_full_sequence as _packed_full_sequence,
|
|
50
|
+
)
|
|
51
|
+
from flash.engine.worker.train.opd.child.tensors import (
|
|
52
|
+
signal_sequences as _signal_sequences,
|
|
53
|
+
)
|
|
36
54
|
|
|
37
55
|
_PERMANENT_TEACHER_EXIT = 86
|
|
38
56
|
_TRANSIENT_TEACHER_EXIT = 87
|
|
@@ -86,16 +104,6 @@ def deterministic_rollout_seed(
|
|
|
86
104
|
return int.from_bytes(digest, "big") & ((1 << 63) - 1)
|
|
87
105
|
|
|
88
106
|
|
|
89
|
-
def _signal_sequences(group_ids, response_mask):
|
|
90
|
-
"""Return the per-sequence mask for rows carrying at least one aligned student token."""
|
|
91
|
-
return ((group_ids >= 0) & response_mask.bool()).any(dim=-1)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
def _full_sequence_signal_sequences(group_ids):
|
|
95
|
-
"""Detect aligned metadata in native full-sequence teacher tensors."""
|
|
96
|
-
return group_ids.ge(0).flatten(start_dim=1).any(dim=-1)
|
|
97
|
-
|
|
98
|
-
|
|
99
107
|
def _flash_groupwise_reverse_kl_values(
|
|
100
108
|
student_logprobs,
|
|
101
109
|
teacher_logsums,
|
|
@@ -408,8 +416,14 @@ def _register_flash_distillation_loss() -> None:
|
|
|
408
416
|
def flash_groupwise_reverse_kl(config, distillation_config, model_output, data):
|
|
409
417
|
_set_current_global_batch_info(config, data)
|
|
410
418
|
student_logprobs = no_padding_2_padding(model_output["log_probs"], data)
|
|
411
|
-
teacher_logsums = no_padding_2_padding(
|
|
412
|
-
|
|
419
|
+
teacher_logsums = no_padding_2_padding(
|
|
420
|
+
_packed_full_sequence(data["teacher_logprobs"], data), data
|
|
421
|
+
).squeeze(-1)
|
|
422
|
+
group_ids = (
|
|
423
|
+
no_padding_2_padding(_packed_full_sequence(data["teacher_ids"], data), data)
|
|
424
|
+
.squeeze(-1)
|
|
425
|
+
.long()
|
|
426
|
+
)
|
|
413
427
|
response_mask = data["response_mask"]
|
|
414
428
|
if response_mask.is_nested:
|
|
415
429
|
response_mask = response_mask.to_padded_tensor(False)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""Batch-layout helpers for the flash OPD distillation loss.
|
|
2
|
+
|
|
3
|
+
verl hands the loss a `TensorDict` whose fields are laid out per field rather than per batch:
|
|
4
|
+
`list_of_dict_to_tensordict` stacks a field when every sample's tensor shares one shape and
|
|
5
|
+
nests it only when the shapes differ. So `prompts`, `teacher_logprobs`, and `teacher_ids` can
|
|
6
|
+
each arrive nested or padded independently, and the loss has to read all of them either way.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def signal_sequences(group_ids, response_mask):
|
|
13
|
+
"""Return the per-sequence mask for rows carrying at least one aligned student token."""
|
|
14
|
+
return ((group_ids >= 0) & response_mask.bool()).any(dim=-1)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def full_sequence_signal_sequences(group_ids):
|
|
18
|
+
"""Detect aligned metadata in native full-sequence teacher tensors.
|
|
19
|
+
|
|
20
|
+
Padded only: `flatten` raises on a nested tensor's ragged dim, so callers holding a nested
|
|
21
|
+
tensor must reduce per row instead.
|
|
22
|
+
"""
|
|
23
|
+
return group_ids.ge(0).flatten(start_dim=1).any(dim=-1)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def packed_full_sequence(tensor, data):
|
|
27
|
+
"""Put a full-sequence teacher tensor into the layout `no_padding_2_padding` documents.
|
|
28
|
+
|
|
29
|
+
That helper wants a nested tensor or `(total_nnz, *)` and reads `.values()` only when
|
|
30
|
+
nested, so a padded teacher measures as `bsz` and trips its `total_nnz` assertion.
|
|
31
|
+
|
|
32
|
+
The mask decides which positions are real, never the row's shape. verl pads a teacher row on
|
|
33
|
+
both sides (`_pad_teacher_outputs` left-pads by `prompt_width - prompt_length` and right-pads
|
|
34
|
+
the response), so a length alone cannot say where the real tokens sit and selecting a prefix
|
|
35
|
+
would silently train against the pad.
|
|
36
|
+
"""
|
|
37
|
+
if tensor.is_nested:
|
|
38
|
+
return tensor
|
|
39
|
+
if "attention_mask" in data:
|
|
40
|
+
return tensor[data["attention_mask"].bool()]
|
|
41
|
+
# no mask: only a nested-prompt batch may omit that key, and only such a batch carries the
|
|
42
|
+
# lengths needed to check the stack. verl stacks this field only when every sequence shares
|
|
43
|
+
# one length, and pads a row only to the strided widths, so an unmasked stack is full.
|
|
44
|
+
prompts = data["prompts"]
|
|
45
|
+
if not prompts.is_nested:
|
|
46
|
+
raise AssertionError(
|
|
47
|
+
"flash OPD strided batch carries no attention mask, so real token positions "
|
|
48
|
+
"cannot be located"
|
|
49
|
+
)
|
|
50
|
+
lengths = prompts.offsets().diff() + data["responses"].offsets().diff()
|
|
51
|
+
if int(lengths.min()) != tensor.shape[1] or int(lengths.max()) != tensor.shape[1]:
|
|
52
|
+
raise AssertionError(
|
|
53
|
+
"flash OPD teacher tensor is padded but the batch carries no attention mask: "
|
|
54
|
+
f"width {tensor.shape[1]} against lengths {int(lengths.min())}..{int(lengths.max())}"
|
|
55
|
+
)
|
|
56
|
+
return tensor.flatten(0, 1)
|
|
@@ -929,9 +929,8 @@ class Provider(Protocol):
|
|
|
929
929
|
|
|
930
930
|
# NOTE: ``supports_weight_cache: bool`` is an OPTIONAL capability attr (read via
|
|
931
931
|
# ``getattr(prov, "supports_weight_cache", False)``, off this Protocol for the same isinstance
|
|
932
|
-
# reason as below): True
|
|
933
|
-
#
|
|
934
|
-
# defaults False.
|
|
932
|
+
# reason as below): True for providers that attach the managed shared weight cache. The runner
|
|
933
|
+
# gates its one-shot cache-less retry fallback on it; every other provider defaults False.
|
|
935
934
|
|
|
936
935
|
# ``run_instances_remaining(run_id)`` is optional and must stay off this runtime-checkable
|
|
937
936
|
# protocol. callers use getattr in server/_runtime.py. ``[]`` confirms clear; non-empty means a
|
{freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/jobs/__init__.py
RENAMED
|
@@ -314,7 +314,7 @@ def _rent_instance(
|
|
|
314
314
|
"""Rent one box and return its handle, owing nothing rented behind on any exit.
|
|
315
315
|
|
|
316
316
|
The whole rent-to-handle window lives here because its ORDER is the correctness argument, and
|
|
317
|
-
|
|
317
|
+
every region in the launch walk needs exactly the same order:
|
|
318
318
|
|
|
319
319
|
- ``arm`` immediately before the request and only then. A deadline miss in the precheck rents
|
|
320
320
|
nothing, and an armed guard there would reap by run label, killing every other concurrent
|
|
@@ -356,46 +356,6 @@ def _rent_instance(
|
|
|
356
356
|
raise
|
|
357
357
|
|
|
358
358
|
|
|
359
|
-
def _retry_launch_without_cache(
|
|
360
|
-
plan: _LaunchPlan, inst: LambdaInstance, say, reap
|
|
361
|
-
) -> tuple[LambdaJobHandle | None, Exception | None]:
|
|
362
|
-
"""Rent a cache-less box for this region; return ``(handle, None)`` or ``(None, rejection)``.
|
|
363
|
-
|
|
364
|
-
The arm/own/return ordering lives in ``_rent_instance``. What is specific here is the
|
|
365
|
-
rejection policy, which mirrors the main walk's: a CLEAN reject rented nothing and stands the
|
|
366
|
-
guard down before anything below can raise, while an AMBIGUOUS one may have billed a box and
|
|
367
|
-
keeps the guard armed across reconciliation.
|
|
368
|
-
"""
|
|
369
|
-
say(f"retrying {inst.region} WITHOUT the weight cache (attach may have caused the reject)")
|
|
370
|
-
try:
|
|
371
|
-
return _rent_instance(
|
|
372
|
-
plan,
|
|
373
|
-
inst,
|
|
374
|
-
say,
|
|
375
|
-
reap,
|
|
376
|
-
user_data=plan.cold_user_data,
|
|
377
|
-
file_system_names=None,
|
|
378
|
-
describe=lambda instance_id: (
|
|
379
|
-
f"launched lambda instance {instance_id} (cold, cache-less): {inst.gpu} "
|
|
380
|
-
f"{inst.instance_type} in {inst.region} attempt={plan.attempt} seed={plan.seed}"
|
|
381
|
-
),
|
|
382
|
-
), None
|
|
383
|
-
except lambda_api.LambdaApiError as error:
|
|
384
|
-
clean = _launch_rejection_is_clean(error)
|
|
385
|
-
if clean:
|
|
386
|
-
# rented nothing: stand down on the FIRST statement, before the diagnostic and the say
|
|
387
|
-
# below, either of which can raise while armed and would then reap by run label,
|
|
388
|
-
# killing every other concurrent seed over a request that rented nothing.
|
|
389
|
-
reap.disarm()
|
|
390
|
-
cold_detail = sanitize_diagnostic(error, limit=1000)
|
|
391
|
-
if not clean:
|
|
392
|
-
# may have billed a box: the guard stays ARMED across reconciliation, which always
|
|
393
|
-
# raises, so an unnamed instance still has something able to find it.
|
|
394
|
-
_abort_ambiguous_launch(plan.spec.run_id, type(error).__name__)
|
|
395
|
-
say(f"region {inst.region} also rejected cold: {cold_detail}")
|
|
396
|
-
return None, error
|
|
397
|
-
|
|
398
|
-
|
|
399
359
|
def _refresh_launch_candidates(
|
|
400
360
|
inst: LambdaInstance,
|
|
401
361
|
tried_regions: set[str],
|
|
@@ -495,11 +455,7 @@ def _build_launch_plan(
|
|
|
495
455
|
def _region_launch_inputs(
|
|
496
456
|
plan: _LaunchPlan, inst: LambdaInstance, say
|
|
497
457
|
) -> tuple[str | None, list[str] | None, Exception | None]:
|
|
498
|
-
"""Resolve one region's
|
|
499
|
-
|
|
500
|
-
Returns ``(None, None, error)`` when the region must be skipped: a preload that trained on a
|
|
501
|
-
cache-less box would warm nothing, so it walks on instead of falling back.
|
|
502
|
-
"""
|
|
458
|
+
"""Resolve one region's cached launch inputs or return its attachment failure."""
|
|
503
459
|
if not plan.cache_name:
|
|
504
460
|
return plan.cold_user_data, None, None
|
|
505
461
|
try:
|
|
@@ -527,14 +483,9 @@ def _region_launch_inputs(
|
|
|
527
483
|
return region_user_data, [plan.cache_name], None
|
|
528
484
|
except Exception as e:
|
|
529
485
|
detail = sanitize_diagnostic(e, limit=1000)
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
f"weight cache unavailable in {inst.region} ({detail}); skipping (preload needs it)"
|
|
534
|
-
)
|
|
535
|
-
return None, None, e
|
|
536
|
-
say(f"weight cache unavailable in {inst.region} ({detail}); launching cold")
|
|
537
|
-
return plan.cold_user_data, None, e
|
|
486
|
+
suffix = " (preload needs it)" if plan.mode == "preload" else ""
|
|
487
|
+
say(f"weight cache unavailable in {inst.region} ({detail}); skipping{suffix}")
|
|
488
|
+
return None, None, e
|
|
538
489
|
|
|
539
490
|
|
|
540
491
|
def launch_and_submit(
|
|
@@ -620,24 +571,6 @@ def launch_and_submit(
|
|
|
620
571
|
)
|
|
621
572
|
_abort_ambiguous_launch(spec.run_id, type(e).__name__)
|
|
622
573
|
say(f"region {inst.region} ({inst.gpu} {inst.instance_type}) rejected: {detail}")
|
|
623
|
-
# Filesystem-attach errors: retry once without the cache before walking (clean reject = safe).
|
|
624
|
-
fs_attach_reject = fs_names and any(
|
|
625
|
-
tok in str(e).lower() for tok in ("file_system", "filesystem", "file-system")
|
|
626
|
-
)
|
|
627
|
-
if mode != "preload" and fs_attach_reject:
|
|
628
|
-
# the cache-less retry rents its own box, and arms the guard itself immediately
|
|
629
|
-
# before that request: an interrupt while it is in flight can leave an instance
|
|
630
|
-
# created but unnamed, and only the run-label reap can find it. Arming across
|
|
631
|
-
# the whole call instead would reap on paths that rented nothing (a deadline
|
|
632
|
-
# miss in the precheck, a raising preamble) or that already cleaned up exactly.
|
|
633
|
-
handle, last_err = _retry_launch_without_cache(plan, inst, say, reap)
|
|
634
|
-
if handle is not None:
|
|
635
|
-
# the retry's box is rented and owned by exact id; keep the guard holding
|
|
636
|
-
# it until the caller has the handle, exactly as the primary path does.
|
|
637
|
-
return handle
|
|
638
|
-
# nothing stayed rented: the retry disarmed on its reject paths, and this
|
|
639
|
-
# keeps the walk's next region from inheriting a guard it did not arm.
|
|
640
|
-
reap.disarm()
|
|
641
574
|
# Preload must not refresh to a different region (would warm the wrong one).
|
|
642
575
|
if mode != "preload" and not candidates and not refreshed:
|
|
643
576
|
refreshed = True
|
{freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/lambda_/jobs/reap.py
RENAMED
|
@@ -21,8 +21,8 @@ class _CoarseReapGuard:
|
|
|
21
21
|
|
|
22
22
|
Armed for exactly the window a launch request is in flight with no instance id in hand, when
|
|
23
23
|
the label reap is the ONLY thing that can find a box that is rented but not yet named. It is
|
|
24
|
-
an object rather than a local so
|
|
25
|
-
|
|
24
|
+
an object rather than a local so each region can arm it around its own request instead of the
|
|
25
|
+
caller arming across the whole walk.
|
|
26
26
|
|
|
27
27
|
``owns`` narrows the guard the instant an id exists. Ownership transfer would otherwise span
|
|
28
28
|
two statements (the publication helper returns, then the caller disarms), and an interrupt
|
|
@@ -189,7 +189,6 @@ def submit_run(
|
|
|
189
189
|
failure_detail_reader=failure_reader,
|
|
190
190
|
current_attempt=attempt_id,
|
|
191
191
|
**deadline_kwargs(runpod_polling.poll_job, deadline_at),
|
|
192
|
-
on_last_gpu=on_last_gpu,
|
|
193
192
|
# the count actually rented for this attempt, which allocation may have resolved to fewer
|
|
194
193
|
# cards than the spec's ceiling named -- so read the effective spec, not the run's request.
|
|
195
194
|
**stall_kwargs(on_last_gpu=on_last_gpu, gpu_count=gpu_count_of(spec)),
|
{freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/providers/runpod/execution/jobs.py
RENAMED
|
@@ -25,7 +25,6 @@ FAILURE_TEXT_LIMIT = 64_000
|
|
|
25
25
|
__all__ = [
|
|
26
26
|
"JobHandle",
|
|
27
27
|
"PollResult",
|
|
28
|
-
"capacity_escalation_note",
|
|
29
28
|
"capacity_grace_multiplier",
|
|
30
29
|
"decode_output",
|
|
31
30
|
]
|
|
@@ -33,16 +32,12 @@ __all__ = [
|
|
|
33
32
|
|
|
34
33
|
# capacity grace on the LAST candidate class: there is nowhere left to walk, so wait longer before
|
|
35
34
|
# giving up. purely a timing knob -- it says nothing about whether a retry follows, because
|
|
36
|
-
# on_last_gpu (runner/
|
|
35
|
+
# on_last_gpu (runner/supervise/retry_decision.py) is also true when the infra retry budget is exhausted.
|
|
37
36
|
LAST_GPU_CAPACITY_GRACE_S = 900.0
|
|
38
37
|
|
|
39
38
|
# multi-card shapes are rarer than single cards, so a grace sized for 1x expires on a 4x wait that
|
|
40
|
-
# was merely slow rather than starved.
|
|
41
|
-
#
|
|
42
|
-
# fitting shape once nothing is untried), so the run pays a fresh cold start to rejoin the same
|
|
43
|
-
# queue it just left. observed: 3-5 attempts and ~55 min of queueing per arm before a single
|
|
44
|
-
# optimizer step, with the multi-GPU arms churning most. scale the wait with the card count
|
|
45
|
-
# instead, so scarcity is waited out on one queue position rather than re-requested.
|
|
39
|
+
# was merely slow rather than starved. scale the wait with the card count so scarcity is waited out
|
|
40
|
+
# on one queue position rather than paying another cold start.
|
|
46
41
|
CAPACITY_GRACE_PER_GPU_CAP = 4
|
|
47
42
|
|
|
48
43
|
|
|
@@ -209,19 +204,6 @@ class GraceTimer:
|
|
|
209
204
|
self.seen = now
|
|
210
205
|
|
|
211
206
|
|
|
212
|
-
def capacity_escalation_note(on_last_gpu: bool) -> str:
|
|
213
|
-
"""The escalation clause a capacity failure detail carries. States the escalation fact ONLY.
|
|
214
|
-
|
|
215
|
-
`on_last_gpu` means no further class escalation follows, not that classes are exhausted or a
|
|
216
|
-
retry occurs. Keep both branches neutral; the supervisor owns target selection and budget.
|
|
217
|
-
"""
|
|
218
|
-
return (
|
|
219
|
-
"no further GPU-class escalation follows"
|
|
220
|
-
if on_last_gpu
|
|
221
|
-
else "GPU-class escalation may follow"
|
|
222
|
-
)
|
|
223
|
-
|
|
224
|
-
|
|
225
207
|
# heartbeat readers and provenance checks are provider-neutral and live in
|
|
226
208
|
# flash.providers.artifacts.hf; this module imports only the predicate it executes.
|
|
227
209
|
|
|
@@ -30,7 +30,6 @@ from flash.providers.runpod.execution.jobs import (
|
|
|
30
30
|
GraceTimer,
|
|
31
31
|
_append_failure_artifacts,
|
|
32
32
|
_safe_failure_text,
|
|
33
|
-
capacity_escalation_note,
|
|
34
33
|
decode_output,
|
|
35
34
|
surfaced_worker_flags,
|
|
36
35
|
)
|
|
@@ -61,7 +60,6 @@ class _PollContext:
|
|
|
61
60
|
absolute_deadline: float | None
|
|
62
61
|
current_attempt: int
|
|
63
62
|
launch_ts: float
|
|
64
|
-
next_gpu_note: str
|
|
65
63
|
poll_errors: PollErrorTracker
|
|
66
64
|
|
|
67
65
|
|
|
@@ -233,7 +231,7 @@ def _classify_queue_state(
|
|
|
233
231
|
failure="no_capacity",
|
|
234
232
|
detail=f"never scheduled: job stuck IN_QUEUE for "
|
|
235
233
|
f"{int(now - state.queued_timer.since)}s "
|
|
236
|
-
|
|
234
|
+
"(no RunPod capacity for the pinned GPU class)",
|
|
237
235
|
)
|
|
238
236
|
if status != "IN_QUEUE":
|
|
239
237
|
# the in-queue grace timers measure continuous throttle/unhealthy while queued (like
|
|
@@ -307,8 +305,8 @@ def _classify_queue_state(
|
|
|
307
305
|
False,
|
|
308
306
|
failure="no_capacity",
|
|
309
307
|
detail=f"never scheduled: worker stuck THROTTLED for "
|
|
310
|
-
f"{int(now - state.throttled_timer.since)}s while IN_QUEUE
|
|
311
|
-
|
|
308
|
+
f"{int(now - state.throttled_timer.since)}s while IN_QUEUE "
|
|
309
|
+
"(no RunPod capacity for the pinned GPU class)",
|
|
312
310
|
)
|
|
313
311
|
except Exception:
|
|
314
312
|
pass
|
|
@@ -456,12 +454,11 @@ def poll_job(
|
|
|
456
454
|
queue_grace_s: float = 300.0,
|
|
457
455
|
deadline_at: float | None = None,
|
|
458
456
|
current_attempt: int | None = None,
|
|
459
|
-
on_last_gpu: bool = False,
|
|
460
457
|
) -> PollResult:
|
|
461
458
|
"""Poll a queue job to completion; resilient to transient API errors.
|
|
462
459
|
|
|
463
460
|
Use setup grace before the first heartbeat, then stall grace; fail fast on sustained throttled,
|
|
464
|
-
unhealthy, or over-queued states.
|
|
461
|
+
unhealthy, or over-queued states.
|
|
465
462
|
"""
|
|
466
463
|
if not handle.job_id:
|
|
467
464
|
raise ValueError("endpoint-only RunPod handles cannot be polled")
|
|
@@ -487,7 +484,6 @@ def poll_job(
|
|
|
487
484
|
absolute_deadline=absolute_deadline,
|
|
488
485
|
current_attempt=attempt_id,
|
|
489
486
|
launch_ts=launch_ts,
|
|
490
|
-
next_gpu_note=capacity_escalation_note(on_last_gpu),
|
|
491
487
|
poll_errors=PollErrorTracker(say, interval_s),
|
|
492
488
|
)
|
|
493
489
|
state = _PollState(
|
|
@@ -155,10 +155,6 @@ class RunpodProvider:
|
|
|
155
155
|
failure_detail_reader=failure_reader,
|
|
156
156
|
current_attempt=rh.attempt,
|
|
157
157
|
**deadline_kwargs(runpod_polling.poll_job, _deadline_at),
|
|
158
|
-
# the persisted scarcity flag controls stall grace, not capacity wording. recovery
|
|
159
|
-
# rebuilds the unpinned allocation with a fresh candidate set, so claiming no escalation
|
|
160
|
-
# remains would be false.
|
|
161
|
-
#
|
|
162
158
|
# the card count comes from the spec rather than the handle's `allocated_gpu_count`:
|
|
163
159
|
# attach polls the persisted EFFECTIVE worker spec, which submission already stamped
|
|
164
160
|
# with the count allocation resolved, and the attach context pops that handle key off
|
{freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.124}/flash/runner/accounting/reconciliation.py
RENAMED
|
@@ -99,31 +99,6 @@ def _compare_and_clear_remote(run_id: str, expected_remote: dict) -> bool:
|
|
|
99
99
|
return True
|
|
100
100
|
|
|
101
101
|
|
|
102
|
-
def _compare_and_prepare_resubmit(
|
|
103
|
-
run_id: str,
|
|
104
|
-
expected_remote: dict | None,
|
|
105
|
-
*,
|
|
106
|
-
expected_state: str | None = None,
|
|
107
|
-
) -> bool:
|
|
108
|
-
"""Claim a nonterminal recovery launch only while its expected remote still owns the run."""
|
|
109
|
-
report_status: RunStatus | None = None
|
|
110
|
-
with state._status_guard(run_id):
|
|
111
|
-
status = status_ops.get_status(run_id)
|
|
112
|
-
if status.state in state.TERMINAL_STATES:
|
|
113
|
-
return False
|
|
114
|
-
if expected_state is not None and status.state != expected_state:
|
|
115
|
-
return False
|
|
116
|
-
if not _expected_remote_matches(status.remote, expected_remote):
|
|
117
|
-
return False
|
|
118
|
-
status.state = "provisioning"
|
|
119
|
-
status.updated_at = time.time()
|
|
120
|
-
state._save_status_unlocked(status)
|
|
121
|
-
report_status = status
|
|
122
|
-
if report_status is not None:
|
|
123
|
-
reporting._report_status(report_status)
|
|
124
|
-
return True
|
|
125
|
-
|
|
126
|
-
|
|
127
102
|
def _compare_and_fail_remote(
|
|
128
103
|
run_id: str,
|
|
129
104
|
expected_remote: dict | None,
|
|
@@ -180,7 +155,7 @@ def _compare_and_complete_remote(
|
|
|
180
155
|
expected_attempt = (
|
|
181
156
|
expected_remote.get("attempt")
|
|
182
157
|
if isinstance(expected_remote, dict)
|
|
183
|
-
else attempts.
|
|
158
|
+
else attempts.latest_reserved_attempt(run_id)
|
|
184
159
|
)
|
|
185
160
|
metrics, verified_attempt = status_ops.validate_terminal_source_metrics(
|
|
186
161
|
status,
|
|
@@ -236,15 +211,18 @@ def _canonical_cleanup_remote(remote: object) -> dict | None:
|
|
|
236
211
|
if provider == "runpod":
|
|
237
212
|
from flash.providers.runpod.execution.jobs import JobHandle as RunpodJobHandle
|
|
238
213
|
|
|
239
|
-
|
|
240
|
-
|
|
214
|
+
record = RunpodJobHandle.from_dict(remote).to_dict()
|
|
215
|
+
elif provider == "lambda":
|
|
241
216
|
from flash.providers.lambda_.jobs.builders import LambdaJobHandle
|
|
242
217
|
|
|
243
|
-
|
|
244
|
-
|
|
218
|
+
record = LambdaJobHandle.from_dict(remote).to_dict()
|
|
219
|
+
elif provider == "vast":
|
|
245
220
|
from flash.providers.vast.jobs.builders import VastJobHandle
|
|
246
221
|
|
|
247
|
-
|
|
222
|
+
record = VastJobHandle.from_dict(remote).to_dict()
|
|
223
|
+
else:
|
|
224
|
+
return None
|
|
225
|
+
return record
|
|
248
226
|
except (TypeError, ValueError):
|
|
249
227
|
return None
|
|
250
228
|
return None
|