freesolo-flash-dev 1.2.132__tar.gz → 1.2.134__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.132 → freesolo_flash_dev-1.2.134}/.github/workflows/ci.yml +1 -2
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/deploy-modal-dev.yml +1 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/deploy-modal.yml +32 -8
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/PKG-INFO +1 -1
- freesolo_flash_dev-1.2.134/flash/adapters/config.py +136 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/core/spec.py +0 -21
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/plan/recipe.py +0 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/profiling/dataset_profile.py +27 -59
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/support/verl_checkpoint.py +2 -6
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/entry/opd_train_runner.py +0 -6
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/entry/rl_train_runner.py +0 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/entry/sft_train.py +3 -8
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/entry/sft_train_runner.py +5 -34
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/orchestration/failures.py +1 -5
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/orchestration/overrides.py +3 -4
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/orchestration/state.py +0 -3
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -5
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/launch/inputs.py +0 -4
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/launch/verl_config.py +1 -2
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/sft/child/plugin.py +0 -46
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/sft/setup/config.py +4 -10
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/verl/capabilities.py +3 -5
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/verl/checkpoints.py +1 -13
- freesolo_flash_dev-1.2.134/flash/providers/_lifecycle/bootstrapping/attempt.py +92 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +30 -61
- freesolo_flash_dev-1.2.134/flash/providers/_lifecycle/bootstrapping/preload.py +68 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/instances/poll_instance.py +8 -7
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/net/deadline.py +0 -15
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/artifacts/hf.py +13 -13
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/artifacts/weight_cache.py +4 -5
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/jobs/__init__.py +21 -22
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/execution/job_execution.py +6 -7
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/execution/polling.py +3 -10
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/execution/provider.py +4 -5
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/execution/resources.py +2 -7
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/vast/jobs/__init__.py +19 -20
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/accounting/reconciliation.py +1 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/lifecycle/attempts.py +1 -4
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/lifecycle/reporting.py +44 -28
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/lifecycle/state.py +4 -7
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/lifecycle/status.py +30 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/supervise/attach.py +9 -22
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/supervise/attach_reconcile.py +2 -2
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/supervise/attempt_supervision.py +16 -13
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/supervise/deploy.py +1 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/supervise/lifecycle.py +3 -24
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/supervise/recovery.py +3 -19
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runtime_capsule/profiles.py +3 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/schema/__init__.py +0 -8
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/app/launch.py +193 -139
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/app/materialize.py +25 -48
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/deployment/adapter_check.py +33 -17
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/deployment/deploy.py +16 -33
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/deployment/resolve.py +43 -120
- freesolo_flash_dev-1.2.134/flash/serve/provisioning/modal/planning/wrapper.py +38 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/asgi/app.py +33 -134
- freesolo_flash_dev-1.2.134/flash/server/billing/charges.py +288 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/billing/retry.py +1 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/registry/runs.py +4 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/platform/auth.py +80 -69
- freesolo_flash_dev-1.2.134/flash/server/platform/deployment_jobs.py +81 -0
- freesolo_flash_dev-1.2.134/flash/server/platform/deployment_state.py +65 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/platform/deps.py +4 -4
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/platform/runtime.py +4 -4
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/routes/runs.py +54 -29
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/routes/serving.py +53 -169
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/routes/serving_chat.py +3 -3
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/routes/serving_completion.py +42 -58
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/routes/serving_revisions.py +11 -3
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/routes/serving_smoke.py +4 -19
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/app/README.md +22 -8
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/app/modal_app.py +11 -21
- freesolo_flash_dev-1.2.134/flash/serving/app/timeouts.py +13 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/promotion/canary.py +2 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/promotion/gate.py +11 -10
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/accounting/usage_facts.py +1 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/accounting/usage_outbox.py +28 -14
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/engine/generation.py +3 -3
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/engine/support.py +1 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/io/openai_stream.py +35 -21
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/scripts/check_source_layout.py +8 -21
- freesolo_flash_dev-1.2.134/tests/_helpers/billing_precheck.py +131 -0
- freesolo_flash_dev-1.2.134/tests/serving/test_inference_duration.py +338 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_mirror_sampling_parity.py +59 -4
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_per_model_gpu.py +17 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_promotion_canary.py +25 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_promotion_gate.py +24 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_router.py +22 -2
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_serve_structured_outputs.py +4 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_usage_outbox.py +193 -23
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_usage_reporter.py +9 -15
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving_conformance/test_contract.py +1 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_authenticated_redirects.py +28 -5
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_backend_common.py +3 -26
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_billing_retry.py +4 -6
- freesolo_flash_dev-1.2.134/tests/test_bootstrap_reentry.py +213 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cancel_remote.py +4 -3
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_charge_pricing.py +2 -2
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_client_server_integration.py +11 -4
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_dataset_profile.py +459 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_deploy_latency.py +12 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_download_api.py +1 -2
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_publish.py +3 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_flash_worker.py +2 -3
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_grpo_checkpoint_durability.py +3 -18
- freesolo_flash_dev-1.2.134/tests/test_hosted_adapter_admission.py +197 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_idle_endpoint_reaper.py +38 -23
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_instance_bootstrap_coverage.py +16 -42
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_jobs.py +53 -65
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_lambda_api_coverage.py +2 -2
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_lambda_runner.py +94 -54
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_lora_targeting.py +2 -2
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_opd_resume_safety.py +17 -10
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_opd_train.py +8 -54
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_provider_routing.py +2 -4
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_provider_teardown_robustness.py +1 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_realized_cost.py +2 -3
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_resume_on_retry.py +23 -55
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_rl_train.py +0 -6
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_run_registry_lifecycle.py +25 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_runmgmt.py +30 -36
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve.py +62 -3
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_app_launch.py +473 -87
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_app_materialize.py +22 -10
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_modal_sdk.py +127 -3
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_modal_sdk_deadlines.py +13 -4
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_resolve_provenance.py +4 -4
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_runtime_package.py +14 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_server_api.py +391 -622
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_server_app_coverage.py +81 -10
- freesolo_flash_dev-1.2.134/tests/test_server_auth_singleflight.py +289 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_server_billing.py +258 -158
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_server_envs_coverage.py +106 -97
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_server_managed_chat_requests.py +8 -11
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_server_standalone.py +9 -6
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serving_contract.py +15 -3
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serving_schema_coverage.py +18 -17
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_sft_train.py +42 -272
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_source_layout.py +6 -18
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_spec_and_validation.py +0 -2
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_staged_environment.py +3 -3
- freesolo_flash_dev-1.2.134/tests/test_status_reporting.py +79 -0
- freesolo_flash_dev-1.2.134/tests/test_status_updates.py +118 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_vast_offers.py +2 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_vast_provider_coverage.py +1 -1
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_vast_runner.py +42 -26
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_weight_cache.py +61 -31
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_workflow_contracts.py +96 -8
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/uv.lock +1 -1
- freesolo_flash_dev-1.2.132/flash/engine/support/verl_policy.py +0 -20
- freesolo_flash_dev-1.2.132/flash/serve/provisioning/modal/planning/wrapper.py +0 -43
- freesolo_flash_dev-1.2.132/flash/server/billing/charges.py +0 -135
- freesolo_flash_dev-1.2.132/tests/test_loraplus_config.py +0 -97
- freesolo_flash_dev-1.2.132/tests/test_server_auth_singleflight.py +0 -82
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.env.example +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/dev-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/production-kernel-cache-ready.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/publish-serving-image.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/CHANGELOG.md +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/Dockerfile +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/Dockerfile.serve +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/README.md +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/docker/patch_vllm_moe_lora.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/docs/hosted-inference-load-testing.md +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/docs/serving-contract.md +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/_internal/http.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/_internal/openai_sse.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/_internal/version.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/adapters/targets.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/ops/imports.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/ops/list.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/ops/push.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/ops/retained.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/ops/setup.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/testing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/testing/episode.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/testing/eval.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/testing/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/testing/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/testing/params.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/testing/test.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/env/testing/warnings.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/ops/account.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/ops/catalog.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/ops/deploy.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/ops/log_follow.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/ops/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/ops/runs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/ops/traces.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/ops/train.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/ops/worker_output.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/serving/deploy.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/serving/identity.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/serving/status.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/commands/serving/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/parsing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/parsing/account.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/parsing/env.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/parsing/errors.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/parsing/main.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/parsing/models.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/parsing/serve_parser.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/parsing/traces.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/parsing/training.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/scaffold/TRAINING.md +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/content/image_descriptors.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/content/reasoning_normalization.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/core/catalog.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/core/grpo.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cost/currency.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/support/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/support/huggingface.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/support/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/entry/worker.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/runtime/state.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/core/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/entry/backend_common.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/entry/opd_train.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/entry/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/entry/score_batcher.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/child/tensors.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/child/patches.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/launch/config.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/worker/verl/process_census.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/loading/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/loading/adapter.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/loading/base.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/loading/loader.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/loading/pull.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/loading/staged.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/meta/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/meta/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/meta/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/meta/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/meta/identity.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/meta/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/package/direct_tokens.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/bootstrapping/processes.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/host/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/host/failmark.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/host/hostlog.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/instances/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/instances/instance.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/instances/poll.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/instances/provider.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/net/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/net/auth.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/net/http.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/_lifecycle/net/worker.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/core/allocator.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/core/base.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/core/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/core/preflight.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/core/realized.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/core/registry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/core/sharding.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/client/api.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/lambda_/jobs/reap.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/client/api.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/client/cost.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/execution/jobs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/serverless/endpoints.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/runpod/serverless/naming.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/vast/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/vast/client/api.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/vast/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/vast/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/vast/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/vast/client/result.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/vast/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/vast/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/accounting/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/accounting/costs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/accounting/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/lifecycle/claim_lock.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/lifecycle/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/lifecycle/preparation.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/lifecycle/submit.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/results/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/supervise/errors.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/supervise/retry_decision.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/app/__main__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/app/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/app/chat_stream.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/app/http.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/app/manifest.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/app/openai.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/app/progress.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/contract/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/contract/errors.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/contract/protocol.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/contract/provenance.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/contract/responses.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/contract/urls.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/control/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/control/_canonical.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/control/_serialization.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/control/_urls.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/control/credentials.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/control/planning.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/control/types.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/deployment/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/deployment/export.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/deployment/preflight.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/deployment/profiles.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/deployment/readiness.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/common/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/common/records.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/execution/operations.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/planning/plan.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/planning/resources.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/request/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/request/openai.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/request/runtime_support.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/request/streaming.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/request/text_scan.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/request/thinking.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/request/tool_calls.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/request/tool_template.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/request/transport.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/request/validation.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/runtime/adapters.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/runtime/engine.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/runtime/errors.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/runtime/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/runtime/prompt.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/runtime/sampling.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/runtime/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/runtime/tool_calls.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serve/runtime/types.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/asgi/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/asgi/cli.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/ops/reconcile.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/ops/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/ops/serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/registry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/registry/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/registry/environment_registry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/registry/envs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/registry/projects.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/teacher/broker.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/teacher/errors.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/domain/teacher/requests.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/platform/internal_client.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/loadtest/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/loadtest/__main__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/loadtest/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/loadtest/cli.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/loadtest/metrics.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/loadtest/protocol.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/loadtest/runner.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/loadtest/schedule.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/loadtest/schema.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/promotion/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/promotion/evidence.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/accounting/usage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/accounting/usage_retry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/engine/boot.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/engine/errors.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/engine/lora_engine.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/engine/lora_entries.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/engine/model_config.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/engine/prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/http/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/http/adapter_routes.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/http/body_limit.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/http/context.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/http/headers.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/http/inference_routes.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/http/router.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/http/routing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/io/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/io/openai_request.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/io/provenance.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/io/requests.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/io/responses.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/io/schemas.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/io/streaming.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/io/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/store/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/store/access.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/store/lookup.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/store/persisted_columns.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/store/persistence.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/store/registration.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/store/registry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/store/settings.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/store/supabase_rest.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/store/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/stream_channel/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/stream_channel/_tasks.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/stream_channel/client.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/stream_channel/engine.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/serving/src/stream_channel/protocol.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/snapshot/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/snapshot/archive.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/teacher/provider_status.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/scripts/check_rollout_identity_actor.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/scripts/qualify_serving_profile.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/serve_launch.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/chat_provenance.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/chat_transport.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/managed_chat.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/server_api_plugin.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/_helpers/wire_headers.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/capture_qwen38_27b_metadata.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/checkpoint_fixtures.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/conftest.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/hosted_loadtest_fake_scenario.json +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_base_model_serving.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_chat_auth.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_chat_authorizer.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_checkpoint_model_validation.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_engine_error_status.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_fp8_config.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_immutable_engine.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_immutable_revisions.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_immutable_schemas.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_loadtest_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_loadtest_metrics.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_loadtest_protocol.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_loadtest_runner.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_loadtest_schedule.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_loadtest_schema.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_modal_deploy_identity.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_modal_image_paths.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_model_config.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_multimodal.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_openai_stream_options.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_persistence.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_pre_first_disconnect.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_promotion_evidence.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_registry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_registry_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_request_body_limit.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_router_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_router_edge_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_schemas_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_serve_reasoning_split.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_serve_thinking.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_settings.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_stream_channel.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_structured_outputs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving/test_supabase_rest_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving_conformance/__init__.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/serving_conformance/conftest.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_bootstrap_process_groups.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_capture_qwen38_metadata.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_chat_foundations.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_serve_deploy.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_serve_status.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cost_currency.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_git_auth.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_grpo_process_census.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_grpo_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_grpo_rollout_identity.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_image_environment_capability.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_image_incremental_processor.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_lora_rank_nested_rung.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_lora_targeting_pinned_verl.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_mirror_sampling_parity.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_opd_multiturn_failure_exit.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_opd_replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_retry_decision.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_app_bootstrap_http.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_app_manifest.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_app_packaging.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_app_progress.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_chat_transport.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_control.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_docs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_modal_contract_lock.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_modal_teardown_identity.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_profile_qualification.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_profiles.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_provisioning_common.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_provisioning_modal.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_runtime_adapters.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_runtime_engine.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serve_runtime_types.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_server_serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serving_conformance_gate.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_sft_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_source_attestation_flow.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_tool_call_exact_parsing.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_vast_result.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_vllm_moe_lora_backport.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_warmstart_image_adapters.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -60,8 +60,7 @@ jobs:
|
|
|
60
60
|
- name: Function size check
|
|
61
61
|
run: uv run python scripts/check_function_size.py
|
|
62
62
|
|
|
63
|
-
#
|
|
64
|
-
# roots may mix subdirectories only with the three required marker files.
|
|
63
|
+
# Package roots may mix subdirectories only with semantic package marker files.
|
|
65
64
|
- name: Source layout check
|
|
66
65
|
run: uv run python scripts/check_source_layout.py
|
|
67
66
|
|
{freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/deploy-modal-dev.yml
RENAMED
|
@@ -114,7 +114,7 @@ jobs:
|
|
|
114
114
|
# pinned to the exact client pyproject declares; see deploy-modal.yml for why an
|
|
115
115
|
# unbounded range is unsafe for the deploy path.
|
|
116
116
|
# exact pins keep the deploy client bootstrap reproducible across runner image changes.
|
|
117
|
-
uv pip install --system "modal==1.
|
|
117
|
+
uv pip install --system "modal==1.6.1" "python-dotenv==1.2.3"
|
|
118
118
|
|
|
119
119
|
- name: Verify development deployment inputs
|
|
120
120
|
if: steps.gate.outputs.deploy == 'true'
|
{freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/.github/workflows/deploy-modal.yml
RENAMED
|
@@ -11,6 +11,7 @@ name: Deploy serving Modal app
|
|
|
11
11
|
# FREESOLO_INTERNAL_KEY - shared platform internal key (backend + serving)
|
|
12
12
|
# PLATFORM_BACKEND_URL - platform backend base URL
|
|
13
13
|
# SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY - serving startup hydration (durable adapter registry)
|
|
14
|
+
# required Actions variable: SERVING_CANARY_ORG_ID - existing internal organization billed for probes
|
|
14
15
|
# modal_app.py reads these from the environment (load_dotenv only supplements os.environ), so no
|
|
15
16
|
# .env file is written in CI. the "Verify required runtime secrets" step below hard-fails the deploy
|
|
16
17
|
# if a required secret is absent, preventing a broken production config with external chat failures,
|
|
@@ -40,13 +41,13 @@ jobs:
|
|
|
40
41
|
if: github.ref == 'refs/heads/main'
|
|
41
42
|
runs-on: ubuntu-latest
|
|
42
43
|
# the job's own bounded waits now sum well past the old 30: two 300s readiness polls, the remote
|
|
43
|
-
# image build, a
|
|
44
|
-
# failure path a SECOND `modal deploy` plus a 300s restore poll.
|
|
44
|
+
# image build, a 3360s canary that pays a GPU cold start, a 180s accounting deadline, and on the
|
|
45
|
+
# failure path a SECOND `modal deploy` plus a 300s restore poll. 90 minutes clears that worst
|
|
45
46
|
# case with room while keeping a wedged deploy from holding the runner for GitHub's 6-hour
|
|
46
47
|
# default. the headroom is specifically for the rollback: a job killed partway through the
|
|
47
48
|
# restore leaves the broken release live with no second attempt, which is the one outcome this
|
|
48
49
|
# workflow exists to prevent.
|
|
49
|
-
timeout-minutes:
|
|
50
|
+
timeout-minutes: 90
|
|
50
51
|
# serialize serving deploys across runs because each deploy mutates the live app. github can still
|
|
51
52
|
# replace a pending run, so the gate compares against the sha reported by the deployed app rather
|
|
52
53
|
# than assuming every push predecessor was deployed.
|
|
@@ -75,6 +76,7 @@ jobs:
|
|
|
75
76
|
# (empty => default *.modal.run url), so non-prod/fork/local workspaces stay deployable. This
|
|
76
77
|
# domain is verified in the production Modal workspace, so prod keeps serving on serve.freesolo.co.
|
|
77
78
|
SERVING_CUSTOM_DOMAIN: serve.freesolo.co
|
|
79
|
+
SERVING_CANARY_ORG_ID: ${{ vars.SERVING_CANARY_ORG_ID }}
|
|
78
80
|
|
|
79
81
|
steps:
|
|
80
82
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
@@ -168,7 +170,7 @@ jobs:
|
|
|
168
170
|
# pinned to the exact client pyproject declares and the provisioning path was validated
|
|
169
171
|
# against: deploy behaviour (app lifecycle, tags, lookup) is client-version sensitive, so
|
|
170
172
|
# an unbounded range lets a future release change deploys with no diff here.
|
|
171
|
-
python -m pip install "modal==1.
|
|
173
|
+
python -m pip install "modal==1.6.1" "python-dotenv==1.2.3"
|
|
172
174
|
|
|
173
175
|
- name: Verify Modal auth is configured
|
|
174
176
|
if: steps.gate.outputs.deploy == 'true'
|
|
@@ -198,7 +200,7 @@ jobs:
|
|
|
198
200
|
if [ -z "$SUPABASE_SERVICE_ROLE_KEY" ]; then
|
|
199
201
|
missing="$missing SUPABASE_SERVICE_ROLE_KEY"
|
|
200
202
|
fi
|
|
201
|
-
required="FREESOLO_INTERNAL_KEY PLATFORM_BACKEND_URL"
|
|
203
|
+
required="FREESOLO_INTERNAL_KEY PLATFORM_BACKEND_URL SERVING_CANARY_ORG_ID"
|
|
202
204
|
for name in $required; do
|
|
203
205
|
# indirect expansion: the secrets are exported into the env via the job-level `env:` block.
|
|
204
206
|
if [ -z "${!name}" ]; then
|
|
@@ -206,10 +208,21 @@ jobs:
|
|
|
206
208
|
fi
|
|
207
209
|
done
|
|
208
210
|
if [ -n "$missing" ]; then
|
|
209
|
-
echo "::error::Refusing to deploy serving to prod: missing required
|
|
211
|
+
echo "::error::Refusing to deploy serving to prod: missing required setting(s):${missing}. Set them in repo Settings -> Secrets and variables -> Actions."
|
|
210
212
|
exit 1
|
|
211
213
|
fi
|
|
212
|
-
|
|
214
|
+
# reject malformed attribution before replacing the live app.
|
|
215
|
+
python - <<'PY'
|
|
216
|
+
import os
|
|
217
|
+
import sys
|
|
218
|
+
import uuid
|
|
219
|
+
|
|
220
|
+
try:
|
|
221
|
+
uuid.UUID(os.environ["SERVING_CANARY_ORG_ID"].strip())
|
|
222
|
+
except ValueError:
|
|
223
|
+
sys.exit("::error::SERVING_CANARY_ORG_ID must be an existing internal organization UUID.")
|
|
224
|
+
PY
|
|
225
|
+
echo "All required serving runtime secrets and canary settings are present."
|
|
213
226
|
|
|
214
227
|
- name: Wait for production adapter schema readiness
|
|
215
228
|
if: steps.gate.outputs.deploy == 'true'
|
|
@@ -411,6 +424,7 @@ jobs:
|
|
|
411
424
|
# durably. this step is the only thing standing between "the process booted" and "the
|
|
412
425
|
# release can actually serve", so a failure here must not be promoted.
|
|
413
426
|
SERVING_BASE_URL: https://serve.freesolo.co
|
|
427
|
+
SERVING_CANARY_ORG_ID: ${{ vars.SERVING_CANARY_ORG_ID }}
|
|
414
428
|
FREESOLO_INTERNAL_KEY: ${{ secrets.FREESOLO_INTERNAL_KEY }}
|
|
415
429
|
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
|
|
416
430
|
SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.SUPABASE_SERVICE_ROLE_KEY }}
|
|
@@ -456,10 +470,20 @@ jobs:
|
|
|
456
470
|
echo "Promotion failed; restoring ${PREVIOUS_SHA}."
|
|
457
471
|
git checkout --quiet --force "$PREVIOUS_SHA"
|
|
458
472
|
|
|
473
|
+
# resolve the entrypoint in the restored tree, including releases before the source move.
|
|
474
|
+
if [ -f flash/serving/app/modal_app.py ]; then
|
|
475
|
+
rollback_app=flash/serving/app/modal_app.py
|
|
476
|
+
elif [ -f flash/serving/modal_app.py ]; then
|
|
477
|
+
rollback_app=flash/serving/modal_app.py
|
|
478
|
+
else
|
|
479
|
+
echo "::error::Previous release has no supported serving entrypoint. Restore production manually."
|
|
480
|
+
exit 1
|
|
481
|
+
fi
|
|
482
|
+
|
|
459
483
|
# the restored app must report the RESTORED sha, deployed from the restored tree.
|
|
460
484
|
FREESOLO_DEPLOYMENT_SHA="$PREVIOUS_SHA" \
|
|
461
485
|
FREESOLO_DEPLOYMENT_ID="$ROLLBACK_DEPLOYMENT_ID" \
|
|
462
|
-
modal deploy
|
|
486
|
+
modal deploy "$rollback_app"
|
|
463
487
|
|
|
464
488
|
response_file="$(mktemp)"
|
|
465
489
|
trap 'rm -f "$response_file"' EXIT
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.134
|
|
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
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"""one strict reader for the bytes of an ``adapter_config.json``.
|
|
2
|
+
|
|
3
|
+
Three boundaries admit an adapter by reading this one file, and all three are gated on the same
|
|
4
|
+
question: do these exact bytes describe a LoRA adapter that the engine about to load them can
|
|
5
|
+
actually serve? Answering it separately let them drift -- customer-owned resolution rejected a
|
|
6
|
+
config that hosted admission accepted, so the same artifact was refused before provisioning on one
|
|
7
|
+
path and refused inside the paid container on the other.
|
|
8
|
+
|
|
9
|
+
Every rule here is decidable from the config alone. Nothing in this module reads the hub, the
|
|
10
|
+
filesystem, or a provider, so a verdict costs a caller nothing beyond the bytes it already holds.
|
|
11
|
+
That is why it sits beside the rank and target rules rather than under a deployment path: the
|
|
12
|
+
GPU-side materializer revalidates a cache entry it already holds, and it needs the same verdict
|
|
13
|
+
without importing anything that resolves or deploys.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import json
|
|
19
|
+
from dataclasses import dataclass
|
|
20
|
+
from typing import Any
|
|
21
|
+
|
|
22
|
+
from flash.adapters.lora_rank import rank_from_adapter_config
|
|
23
|
+
from flash.serve.contract.protocol import reject_non_finite_json_constant
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AdapterConfigError(ValueError):
|
|
27
|
+
"""these ``adapter_config.json`` bytes cannot describe a servable LoRA adapter."""
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass(frozen=True)
|
|
31
|
+
class DeclaredAdapterConfig:
|
|
32
|
+
"""what an adapter stamps about itself, after every deterministic rule has passed."""
|
|
33
|
+
|
|
34
|
+
config: dict[str, Any]
|
|
35
|
+
lora_rank: int
|
|
36
|
+
base_model: str
|
|
37
|
+
base_revision: str | None
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class _DuplicateConfigKey(AdapterConfigError):
|
|
41
|
+
"""raised through ``json.loads``, so it stays a ValueError for any caller expecting one."""
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def parse_declared_adapter_config(raw: bytes, *, source: str) -> DeclaredAdapterConfig:
|
|
45
|
+
"""read one adapter's declared provenance, or refuse the bytes.
|
|
46
|
+
|
|
47
|
+
``source`` names the file in every message, so a caller that fetched the config from the hub and
|
|
48
|
+
one that read it off disk both report a location the reader can go look at.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
config = _strict_object(raw, source=source)
|
|
52
|
+
try:
|
|
53
|
+
rank = rank_from_adapter_config(config, source=source)
|
|
54
|
+
except ValueError as exc:
|
|
55
|
+
raise AdapterConfigError(f"{source} declares no usable lora rank: {exc}") from exc
|
|
56
|
+
|
|
57
|
+
peft_type = config.get("peft_type")
|
|
58
|
+
if peft_type != "LORA":
|
|
59
|
+
raise AdapterConfigError(f"{source} peft_type must be LORA, not {peft_type!r}")
|
|
60
|
+
task_type = config.get("task_type")
|
|
61
|
+
if task_type not in {None, "CAUSAL_LM"}:
|
|
62
|
+
raise AdapterConfigError(
|
|
63
|
+
f"{source} task_type must be absent or CAUSAL_LM, not {task_type!r}"
|
|
64
|
+
)
|
|
65
|
+
modules_to_save = config.get("modules_to_save")
|
|
66
|
+
if modules_to_save is not None and modules_to_save != []:
|
|
67
|
+
raise AdapterConfigError(f"{source} modules_to_save adapters are not supported")
|
|
68
|
+
|
|
69
|
+
# the engine compares `base_model_name_or_path` for equality, so an absent, empty, or
|
|
70
|
+
# non-string one can never match and the deployment is already doomed. skipping the check
|
|
71
|
+
# instead deferred a certain failure until after a provider had allocated and started billing.
|
|
72
|
+
base_model = _text(config, "base_model_name_or_path", source=source)
|
|
73
|
+
if base_model is None:
|
|
74
|
+
raise AdapterConfigError(f"{source} declares no base_model_name_or_path")
|
|
75
|
+
revision = config.get("revision")
|
|
76
|
+
if revision is not None and not isinstance(revision, str):
|
|
77
|
+
raise AdapterConfigError(f"{source} revision must be a string when present")
|
|
78
|
+
return DeclaredAdapterConfig(
|
|
79
|
+
config=config,
|
|
80
|
+
lora_rank=rank,
|
|
81
|
+
base_model=base_model,
|
|
82
|
+
base_revision=_text(config, "revision", source=source),
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _strict_object(raw: bytes, *, source: str) -> dict[str, Any]:
|
|
87
|
+
"""decode exactly the way the gpu-side materializer does, from the same bytes.
|
|
88
|
+
|
|
89
|
+
handing the bytes straight to ``json.load`` instead lets it auto-detect utf-16 and accept a bom
|
|
90
|
+
(rfc 4627), so a config the container refuses outright parsed cleanly at admission -- and the
|
|
91
|
+
deployment failed only after the provider resources had been allocated. duplicate keys are the
|
|
92
|
+
same case: plain decoding takes the last value, so a config declaring ``r`` twice would be
|
|
93
|
+
admitted against one rank and then rejected inside the container this check exists to avoid
|
|
94
|
+
paying for.
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
try:
|
|
98
|
+
config = json.loads(
|
|
99
|
+
raw.decode("utf-8"),
|
|
100
|
+
object_pairs_hook=_reject_duplicate_keys,
|
|
101
|
+
parse_constant=reject_non_finite_json_constant,
|
|
102
|
+
)
|
|
103
|
+
except _DuplicateConfigKey as exc:
|
|
104
|
+
raise AdapterConfigError(f"{source} contains a duplicate key") from exc
|
|
105
|
+
except (UnicodeDecodeError, ValueError) as exc:
|
|
106
|
+
raise AdapterConfigError(f"{source} is not readable json") from exc
|
|
107
|
+
if not isinstance(config, dict):
|
|
108
|
+
raise AdapterConfigError(f"{source} must be a json object")
|
|
109
|
+
return config
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def _reject_duplicate_keys(pairs: list[tuple[str, Any]]) -> dict[str, Any]:
|
|
113
|
+
result: dict[str, Any] = {}
|
|
114
|
+
for key, value in pairs:
|
|
115
|
+
if key in result:
|
|
116
|
+
raise _DuplicateConfigKey(f"{key!r} appears twice")
|
|
117
|
+
result[key] = value
|
|
118
|
+
return result
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def _text(config: dict[str, Any], key: str, *, source: str) -> str | None:
|
|
122
|
+
"""read a config string exactly as the engine will compare it.
|
|
123
|
+
|
|
124
|
+
the engine compares these raw bytes for equality, so a value that matches only after stripping
|
|
125
|
+
is admitted here and then rejected inside the paid container -- the outcome this reader exists
|
|
126
|
+
to prevent. normalizing the padding away instead would be worse for ``revision``, which the
|
|
127
|
+
resolver *adopts* into the immutable manifest: that would launder a padded string into the record
|
|
128
|
+
rather than surface it. rejecting keeps the admission-time and container-time verdicts identical.
|
|
129
|
+
"""
|
|
130
|
+
|
|
131
|
+
value = config.get(key)
|
|
132
|
+
if not isinstance(value, str):
|
|
133
|
+
return None
|
|
134
|
+
if value != value.strip():
|
|
135
|
+
raise AdapterConfigError(f"{source} {key} has surrounding whitespace: {value!r}")
|
|
136
|
+
return value or None
|
|
@@ -20,7 +20,6 @@ detail. See their docstrings before changing either.
|
|
|
20
20
|
from __future__ import annotations
|
|
21
21
|
|
|
22
22
|
import json
|
|
23
|
-
import math
|
|
24
23
|
import os
|
|
25
24
|
from dataclasses import asdict, dataclass, field, fields
|
|
26
25
|
from typing import Any, Literal
|
|
@@ -366,9 +365,6 @@ class TrainSpec:
|
|
|
366
365
|
hf_repo: str = ""
|
|
367
366
|
# None -> worker's tuned recipe default.
|
|
368
367
|
learning_rate: float | None = field(default=None, metadata={"introduced_in": "0.2.0"})
|
|
369
|
-
# sft only: none preserves a legacy persisted run's 16x optimizer. new configs freeze the
|
|
370
|
-
# recipe default at parse time; 1 uses equal adapter learning rates.
|
|
371
|
-
loraplus_ratio: float | None = field(default=None, metadata={"introduced_in": "1.2.131"})
|
|
372
368
|
# sft only. the packaged-dataset estimate resolves this against the selected row count into
|
|
373
369
|
# examples_per_update (packed) or pins the optimizer batch to 1 (unpacked). grpo/opd have no
|
|
374
370
|
# profile, so they take prompts_per_step instead and reject this key: the two are not the same
|
|
@@ -403,17 +399,6 @@ class TrainSpec:
|
|
|
403
399
|
)
|
|
404
400
|
|
|
405
401
|
def __post_init__(self) -> None:
|
|
406
|
-
if self.loraplus_ratio is not None:
|
|
407
|
-
ratio = self.loraplus_ratio
|
|
408
|
-
if isinstance(ratio, bool) or not isinstance(ratio, (int, float)):
|
|
409
|
-
raise TypeError("train.loraplus_ratio must be a number")
|
|
410
|
-
try:
|
|
411
|
-
ratio = float(ratio)
|
|
412
|
-
except OverflowError as exc:
|
|
413
|
-
raise ValueError("train.loraplus_ratio must be a finite number >= 1") from exc
|
|
414
|
-
if not math.isfinite(ratio) or ratio < 1:
|
|
415
|
-
raise ValueError("train.loraplus_ratio must be a finite number >= 1")
|
|
416
|
-
object.__setattr__(self, "loraplus_ratio", ratio)
|
|
417
402
|
if not self.lora_alpha:
|
|
418
403
|
object.__setattr__(self, "lora_alpha", 2 * self.lora_rank)
|
|
419
404
|
max_steps = parse_max_steps(self.max_steps)
|
|
@@ -581,8 +566,6 @@ class JobSpec:
|
|
|
581
566
|
project: str = ""
|
|
582
567
|
|
|
583
568
|
def __post_init__(self) -> None:
|
|
584
|
-
if self.train.loraplus_ratio is not None and self.algorithm != "sft":
|
|
585
|
-
raise ValueError("train.loraplus_ratio only applies to sft")
|
|
586
569
|
object.__setattr__(self, "seed", parse_seed(self.seed))
|
|
587
570
|
object.__setattr__(self, "model_revision", _model_revision(self.model_revision))
|
|
588
571
|
for field_name in ("model_revision_auto", "model_revision_force_pin"):
|
|
@@ -698,9 +681,6 @@ class JobSpec:
|
|
|
698
681
|
differently, so removing either pop would break existing digests.
|
|
699
682
|
"""
|
|
700
683
|
data = asdict(self)
|
|
701
|
-
# preserve historical preparation digests when the new option was not authored.
|
|
702
|
-
if data["train"]["loraplus_ratio"] is None:
|
|
703
|
-
data["train"].pop("loraplus_ratio")
|
|
704
684
|
# missing and unset are the same internal state. omitting the empty value preserves that state
|
|
705
685
|
# without serializing it into an explicit empty preference, which every parser rejects.
|
|
706
686
|
if not data["gpu"].get("providers"):
|
|
@@ -806,7 +786,6 @@ class JobSpec:
|
|
|
806
786
|
init_from_adapter_revision=str(train.get("init_from_adapter_revision") or ""),
|
|
807
787
|
hf_repo=str(train.get("hf_repo") or ""),
|
|
808
788
|
learning_rate=opt_float(train.get("learning_rate")),
|
|
809
|
-
loraplus_ratio=train.get("loraplus_ratio"),
|
|
810
789
|
batch_size=opt_int(train.get("batch_size")),
|
|
811
790
|
prompts_per_step=opt_int(train.get("prompts_per_step")),
|
|
812
791
|
max_context_tokens=opt_int(train.get("max_context_tokens")),
|
{freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/profiling/dataset_profile.py
RENAMED
|
@@ -189,96 +189,64 @@ def _selected_dataset_path(base_dir: Path, params: dict[str, Any]) -> Path:
|
|
|
189
189
|
)
|
|
190
190
|
|
|
191
191
|
|
|
192
|
-
def _read_jsonl_rows(path: Path, *, max_examples: int) -> tuple[int, list[dict[str, Any]]]:
|
|
193
|
-
source_examples = 0
|
|
194
|
-
values = []
|
|
195
|
-
missing = []
|
|
196
|
-
with path.open(encoding="utf-8") as handle:
|
|
197
|
-
for line in handle:
|
|
198
|
-
if not line.strip():
|
|
199
|
-
continue
|
|
200
|
-
row = json.loads(line)
|
|
201
|
-
if not isinstance(row, dict):
|
|
202
|
-
raise TypeError("dataset row is not an object")
|
|
203
|
-
if _CANONICAL_INPUT_KEY not in row and len(missing) < 10:
|
|
204
|
-
missing.append(source_examples)
|
|
205
|
-
source_examples += 1
|
|
206
|
-
if max_examples <= 0 or len(values) < max_examples:
|
|
207
|
-
values.append(row)
|
|
208
|
-
if missing:
|
|
209
|
-
raise ValueError(
|
|
210
|
-
"Freesolo dataset records must contain an input field; missing at row indexes "
|
|
211
|
-
f"{missing}"
|
|
212
|
-
)
|
|
213
|
-
return source_examples, values
|
|
214
|
-
|
|
215
|
-
|
|
216
192
|
def _validate_dataset_rows(
|
|
217
193
|
values: object,
|
|
218
194
|
*,
|
|
219
195
|
invalid_message: str,
|
|
220
|
-
empty_message: str,
|
|
221
196
|
max_examples: int,
|
|
197
|
+
empty_message: str | None = None,
|
|
222
198
|
) -> tuple[int, list[dict[str, Any]]]:
|
|
223
199
|
if not isinstance(values, list) or not all(isinstance(row, dict) for row in values):
|
|
224
200
|
raise PackagedDatasetUnavailable(invalid_message)
|
|
225
|
-
|
|
226
|
-
|
|
201
|
+
rows = values
|
|
202
|
+
source_examples = len(rows)
|
|
203
|
+
missing = [
|
|
204
|
+
index
|
|
205
|
+
for index, row in enumerate(rows)
|
|
206
|
+
if _CANONICAL_INPUT_KEY not in row or row.get(_CANONICAL_INPUT_KEY) is None
|
|
207
|
+
]
|
|
227
208
|
if missing:
|
|
228
209
|
raise ValueError(
|
|
229
210
|
"Freesolo dataset records must contain an input field; missing at row indexes "
|
|
230
211
|
f"{missing[:10]}"
|
|
231
212
|
)
|
|
232
|
-
selected =
|
|
233
|
-
if not selected:
|
|
213
|
+
selected = rows[:max_examples] if max_examples > 0 else rows
|
|
214
|
+
if not selected and empty_message is not None:
|
|
234
215
|
raise PackagedDatasetUnavailable(empty_message)
|
|
235
216
|
return source_examples, [dict(row) for row in selected]
|
|
236
217
|
|
|
237
218
|
|
|
238
219
|
def _read_dataset_rows(path: Path, *, max_examples: int) -> tuple[int, list[dict[str, Any]]]:
|
|
220
|
+
from freesolo.datasets.records import load_records
|
|
221
|
+
|
|
222
|
+
invalid_message = (
|
|
223
|
+
f"environment dataset file {path.name!r} must contain JSON object or string rows. Add a "
|
|
224
|
+
"valid dataset/train.jsonl to the environment package."
|
|
225
|
+
)
|
|
239
226
|
try:
|
|
240
227
|
if path.stat().st_size > _MAX_PROFILE_DATASET_BYTES:
|
|
241
228
|
raise PackagedDatasetUnavailable(
|
|
242
229
|
f"environment dataset file {path.name!r} exceeds the 32 MiB control-plane profiling "
|
|
243
230
|
"limit. Reduce the packaged training dataset."
|
|
244
231
|
)
|
|
245
|
-
if path.suffix.lower()
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
values = loaded.get("records") if isinstance(loaded, dict) else loaded
|
|
250
|
-
source_examples, values = _validate_dataset_rows(
|
|
251
|
-
values,
|
|
252
|
-
invalid_message=(
|
|
253
|
-
f"environment dataset file {path.name!r} must contain JSON object rows. Add a "
|
|
254
|
-
"valid dataset/train.jsonl to the environment package."
|
|
255
|
-
),
|
|
256
|
-
empty_message=(
|
|
257
|
-
f"environment dataset file {path.name!r} contains no rows. Add training rows to "
|
|
258
|
-
"dataset/train.jsonl in the environment package."
|
|
259
|
-
),
|
|
260
|
-
max_examples=max_examples,
|
|
261
|
-
)
|
|
262
|
-
else:
|
|
263
|
-
raise ValueError("dataset file must end in .jsonl or .json")
|
|
232
|
+
if path.suffix.lower() not in {".jsonl", ".json"}:
|
|
233
|
+
raise PackagedDatasetUnavailable("dataset file must end in .jsonl or .json")
|
|
234
|
+
# use the worker's decoder; it materializes all rows before profiling selects a prefix.
|
|
235
|
+
rows = load_records(path)
|
|
264
236
|
except PackagedDatasetUnavailable:
|
|
265
237
|
raise
|
|
266
|
-
except TypeError as exc:
|
|
267
|
-
raise PackagedDatasetUnavailable(
|
|
268
|
-
f"environment dataset file {path.name!r} must contain JSON object rows. Add a valid "
|
|
269
|
-
"dataset/train.jsonl to the environment package."
|
|
270
|
-
) from exc
|
|
271
238
|
except (OSError, UnicodeError, json.JSONDecodeError) as exc:
|
|
272
239
|
raise PackagedDatasetUnavailable(
|
|
273
240
|
f"environment dataset file {path.name!r} is not readable JSON. Add a valid "
|
|
274
241
|
"dataset/train.jsonl to the environment package."
|
|
275
242
|
) from exc
|
|
276
|
-
|
|
277
|
-
raise PackagedDatasetUnavailable(
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
243
|
+
except (TypeError, ValueError) as exc:
|
|
244
|
+
raise PackagedDatasetUnavailable(invalid_message) from exc
|
|
245
|
+
return _validate_dataset_rows(
|
|
246
|
+
rows,
|
|
247
|
+
invalid_message=invalid_message,
|
|
248
|
+
max_examples=max_examples,
|
|
249
|
+
)
|
|
282
250
|
|
|
283
251
|
|
|
284
252
|
def profile_packaged_sft_dataset(
|
{freesolo_flash_dev-1.2.132 → freesolo_flash_dev-1.2.134}/flash/engine/support/verl_checkpoint.py
RENAMED
|
@@ -8,7 +8,6 @@ from collections.abc import Iterable
|
|
|
8
8
|
from dataclasses import dataclass
|
|
9
9
|
|
|
10
10
|
from flash._internal.fileio import reject_duplicate_keys
|
|
11
|
-
from flash.engine.support.verl_policy import FsdpGeneration
|
|
12
11
|
|
|
13
12
|
VERL_FSDP_CONFIG_FILE = "fsdp_config.json"
|
|
14
13
|
_MAX_NATIVE_FSDP_WORLD_SIZE = 8
|
|
@@ -78,7 +77,6 @@ def inspect_fsdp_checkpoint_manifest(
|
|
|
78
77
|
stamp_raw: bytes | str | None,
|
|
79
78
|
files: Iterable[FsdpManifestFile],
|
|
80
79
|
*,
|
|
81
|
-
expected_generation: FsdpGeneration,
|
|
82
80
|
expected_world_size: int | None,
|
|
83
81
|
) -> FsdpCheckpointInspection:
|
|
84
82
|
"""validate the exact canonical native shard set for one stamped actor directory."""
|
|
@@ -90,13 +88,11 @@ def inspect_fsdp_checkpoint_manifest(
|
|
|
90
88
|
rejection_reason="invalid or missing fsdp stamp",
|
|
91
89
|
)
|
|
92
90
|
generation, width = stamp
|
|
93
|
-
if generation !=
|
|
91
|
+
if generation != 2:
|
|
94
92
|
return FsdpCheckpointInspection(
|
|
95
93
|
loadable=False,
|
|
96
94
|
width=width,
|
|
97
|
-
rejection_reason=(
|
|
98
|
-
f"fsdp generation mismatch (stamped {generation}, expected {expected_generation})"
|
|
99
|
-
),
|
|
95
|
+
rejection_reason=f"fsdp generation mismatch (stamped {generation}, expected 2)",
|
|
100
96
|
)
|
|
101
97
|
if expected_world_size is not None and width != expected_world_size:
|
|
102
98
|
return FsdpCheckpointInspection(
|
|
@@ -28,7 +28,6 @@ from flash.engine.plan import steps as _steps
|
|
|
28
28
|
from flash.engine.plan.recipe import RECIPE
|
|
29
29
|
from flash.engine.plan.steps import rl_data_parallel_cards
|
|
30
30
|
from flash.engine.profiling.sft_workload import _materialize_verl_images
|
|
31
|
-
from flash.engine.support.verl_policy import _resolve_fsdp_generation
|
|
32
31
|
from flash.engine.worker.entry import opd as _opd_entry
|
|
33
32
|
from flash.engine.worker.train.core.child.runtime import TEXT_LORA_TARGET_SHIM
|
|
34
33
|
from flash.engine.worker.train.entry.prompt_rows import canonical_prompt_messages
|
|
@@ -187,7 +186,6 @@ def _prepare_workload(
|
|
|
187
186
|
if isinstance(target_modules, set | frozenset):
|
|
188
187
|
target_modules = sorted(target_modules)
|
|
189
188
|
target_parameters = tuple(targeting.target_parameters) if targeting.target_parameters else None
|
|
190
|
-
fsdp_generation = _resolve_fsdp_generation("opd", target_parameters)
|
|
191
189
|
lora_rank = int(lora_config.r)
|
|
192
190
|
return _WorkloadState(
|
|
193
191
|
prompts_per_step,
|
|
@@ -209,7 +207,6 @@ def _prepare_workload(
|
|
|
209
207
|
int(lora_config.lora_alpha),
|
|
210
208
|
target_modules,
|
|
211
209
|
target_parameters,
|
|
212
|
-
fsdp_generation,
|
|
213
210
|
targeting.exclude_modules,
|
|
214
211
|
_sft._warmstart_adapter_path(
|
|
215
212
|
request.model_id,
|
|
@@ -260,8 +257,6 @@ def _materialize_child_files(
|
|
|
260
257
|
# the same count this attempt hands verl as n_gpus_per_node, which is the data-parallel
|
|
261
258
|
# width: ulysses is pinned to 1, so every rank is a dp rank.
|
|
262
259
|
world_size=gpu_count,
|
|
263
|
-
# native state is generation-specific, so use the same resolved policy as the child config.
|
|
264
|
-
expected_fsdp_generation=workload.fsdp_generation,
|
|
265
260
|
)
|
|
266
261
|
bridge = _opd_bridge._TeacherAlignmentBridge(
|
|
267
262
|
prompts=prompt_state.prompts,
|
|
@@ -399,7 +394,6 @@ def _build_base_config(
|
|
|
399
394
|
"target_modules": workload.target_modules,
|
|
400
395
|
"exclude_modules": None,
|
|
401
396
|
"target_parameters": workload.target_parameters,
|
|
402
|
-
"fsdp_generation": workload.fsdp_generation,
|
|
403
397
|
"lora_adapter_path": workload.warmstart_adapter,
|
|
404
398
|
"learning_rate": knobs.learning_rate,
|
|
405
399
|
"local_dir": workload.local_dir,
|
|
@@ -309,7 +309,6 @@ def _prepare_rl_files(inp, prompts):
|
|
|
309
309
|
resume_step = rl_checkpoints._restore_verl_resume(
|
|
310
310
|
local_dir,
|
|
311
311
|
world_size=int(inp["dp_cards"]),
|
|
312
|
-
expected_fsdp_generation=inp["fsdp_generation"],
|
|
313
312
|
required_steps=tuple(inp["save_at_steps"]),
|
|
314
313
|
)
|
|
315
314
|
train_pq = os.path.join(workdir, "train.parquet")
|
|
@@ -355,8 +355,7 @@ def _sft_liger_config() -> dict[str, bool]:
|
|
|
355
355
|
|
|
356
356
|
|
|
357
357
|
# re-exported so the child-render helpers stay reachable as `sft_train.<name>`: the other
|
|
358
|
-
# trainers import `_hydra_val` from here, and the sft tests import the renderers
|
|
359
|
-
# LoRA+ marker from here.
|
|
358
|
+
# trainers import `_hydra_val` from here, and the sft tests import the renderers.
|
|
360
359
|
# the runner resolves patched seams through this parent module at call time, so these imports must
|
|
361
360
|
# remain attributes of `sft_train` rather than direct imports in the split module.
|
|
362
361
|
from flash.engine.plan.recipe import RECIPE # noqa: E402,F401
|
|
@@ -394,7 +393,6 @@ from flash.engine.worker.train.sft.setup.checkpoints import ( # noqa: E402,F401
|
|
|
394
393
|
_VerlCheckpointWatcher,
|
|
395
394
|
)
|
|
396
395
|
from flash.engine.worker.train.sft.setup.config import ( # noqa: E402,F401
|
|
397
|
-
_LORAPLUS_READY_MARKER,
|
|
398
396
|
_REQUIRED_OVERRIDE_KEYS,
|
|
399
397
|
_VERL_OPTIMIZER_IMPL,
|
|
400
398
|
_VERL_OPTIMIZER_NAME,
|
|
@@ -485,9 +483,6 @@ def _write_sft_result(options, data, model, child, progress, verified, outputs)
|
|
|
485
483
|
"loss_curve": progress.loss_curve[:400],
|
|
486
484
|
"peak_gpu_gb": device_peak_gpu_gb,
|
|
487
485
|
"device_peak_gpu_gb": device_peak_gpu_gb,
|
|
488
|
-
"loraplus_optim": _VERL_OPTIMIZER_NAME,
|
|
489
|
-
"loraplus_applied": progress.loraplus_applied,
|
|
490
|
-
"loraplus_ratio": options.loraplus_ratio,
|
|
491
486
|
"verl_backend": "fsdp2",
|
|
492
487
|
# sft shards by DATA -- see ULYSSES_SEQUENCE_PARALLEL_SIZE for why. fsdp splits the batch
|
|
493
488
|
# across the ranks actually LAUNCHED, which is the allocated card count only when the
|
|
@@ -585,7 +580,7 @@ def run_sft_train(spec=None) -> None:
|
|
|
585
580
|
child = _prepare_sft_child(
|
|
586
581
|
options, data, model, capabilities, use_remove_padding, gdn_reset_arch
|
|
587
582
|
)
|
|
588
|
-
child_progress = _prepare_sft_progress(
|
|
583
|
+
child_progress = _prepare_sft_progress(data, model, child)
|
|
589
584
|
progress = child_progress.values
|
|
590
585
|
|
|
591
586
|
def on_line(line: str) -> None:
|
|
@@ -606,7 +601,7 @@ def run_sft_train(spec=None) -> None:
|
|
|
606
601
|
if child.resume_step < model.update_horizon:
|
|
607
602
|
child.watcher.start()
|
|
608
603
|
# check save completeness only after normal training completion. callback failures occur before
|
|
609
|
-
# return_code assignment; checking anyway would replace the real zero-grad or
|
|
604
|
+
# return_code assignment; checking anyway would replace the real zero-grad or runtime-patch diagnosis
|
|
610
605
|
# with a missing-save error. opd_train uses the same guard.
|
|
611
606
|
training_completed = False
|
|
612
607
|
try:
|