freesolo-flash-dev 1.2.127__tar.gz → 1.2.129__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.127 → freesolo_flash_dev-1.2.129}/.env.example +3 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/deploy-modal.yml +146 -8
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/CHANGELOG.md +15 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/PKG-INFO +1 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/SELF_HOSTING.md +6 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docs/serving-contract.md +52 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/imports.py +16 -3
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/push.py +62 -12
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/scaffold/TRAINING.md +4 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/heartbeat.py +1 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/http.py +25 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/core/spec.py +0 -12
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/spec.py +1 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/entry/worker.py +11 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/score_batcher.py +47 -24
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/batching.py +3 -3
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/bridge.py +21 -7
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +44 -8
- freesolo_flash_dev-1.2.129/flash/providers/_lifecycle/bootstrapping/processes.py +110 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/instance.py +19 -24
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/provider.py +7 -18
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/net/worker.py +4 -4
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/artifacts/weight_cache.py +0 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/base.py +7 -7
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/preflight.py +7 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/execution/provider.py +3 -7
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/jobs/__init__.py +9 -19
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/jobs/builders.py +0 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/jobs/reap.py +2 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/job_execution.py +14 -11
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/provider.py +6 -11
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/resources.py +16 -3
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/serverless/endpoints.py +8 -50
- freesolo_flash_dev-1.2.129/flash/providers/runpod/serverless/naming.py +93 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/client/api.py +6 -6
- freesolo_flash_dev-1.2.129/flash/providers/vast/client/result.py +125 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/execution/provider.py +4 -8
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/jobs/__init__.py +7 -13
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/jobs/builders.py +0 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/status.py +11 -3
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/attach.py +4 -8
- freesolo_flash_dev-1.2.127/flash/runner/supervise/seed_submission.py → freesolo_flash_dev-1.2.129/flash/runner/supervise/attempt_supervision.py +12 -18
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/lifecycle.py +29 -13
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/recovery.py +1 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runtime_capsule/profiles.py +2 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/bootstrap.py +2 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/chat_stream.py +15 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/http.py +15 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/openai.py +19 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/progress.py +7 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/protocol.py +5 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/deploy.py +19 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/profiles.py +1 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/openai.py +91 -4
- freesolo_flash_dev-1.2.129/flash/serve/request/text_scan.py +100 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/thinking.py +1 -1
- freesolo_flash_dev-1.2.129/flash/serve/request/tool_calls.py +999 -0
- freesolo_flash_dev-1.2.129/flash/serve/request/tool_template.py +92 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/transport.py +27 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/validation.py +96 -16
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/engine.py +91 -24
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/prompt.py +13 -1
- freesolo_flash_dev-1.2.129/flash/serve/runtime/tool_calls.py +687 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/types.py +96 -3
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/asgi/app.py +25 -24
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/envs.py +153 -67
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/runtime.py +6 -5
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/serving.py +23 -21
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/serving_chat.py +29 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/app/README.md +39 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/app/modal_app.py +38 -14
- freesolo_flash_dev-1.2.129/flash/serving/promotion/__init__.py +10 -0
- freesolo_flash_dev-1.2.129/flash/serving/promotion/canary.py +194 -0
- freesolo_flash_dev-1.2.129/flash/serving/promotion/evidence.py +261 -0
- freesolo_flash_dev-1.2.129/flash/serving/promotion/gate.py +329 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/accounting/usage_facts.py +28 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/accounting/usage_outbox.py +19 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/generation.py +238 -37
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/lora_engine.py +89 -19
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/model_config.py +8 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/support.py +3 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/inference_routes.py +8 -0
- freesolo_flash_dev-1.2.129/flash/serving/src/io/openai_request.py +119 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/openai_stream.py +11 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/responses.py +14 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/runner.py +1 -1
- freesolo_flash_dev-1.2.129/tests/serving/test_mirror_sampling_parity.py +925 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_model_config.py +6 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_multimodal.py +15 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_per_model_gpu.py +16 -16
- freesolo_flash_dev-1.2.129/tests/serving/test_promotion_canary.py +243 -0
- freesolo_flash_dev-1.2.129/tests/serving/test_promotion_evidence.py +276 -0
- freesolo_flash_dev-1.2.129/tests/serving/test_promotion_gate.py +361 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_router.py +54 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_serve_structured_outputs.py +82 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_usage_outbox.py +49 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_usage_reporter.py +67 -4
- freesolo_flash_dev-1.2.129/tests/test_bootstrap_process_groups.py +146 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cancel_remote.py +66 -23
- freesolo_flash_dev-1.2.129/tests/test_chat_foundations.py +1022 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_serve_deploy.py +5 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_client.py +46 -0
- freesolo_flash_dev-1.2.129/tests/test_endpoint_name.py +142 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_download.py +1 -1
- freesolo_flash_dev-1.2.129/tests/test_env_git_auth.py +319 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_publish.py +7 -7
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_push.py +270 -5
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_ref_pinning.py +2 -3
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_flash_worker.py +19 -24
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_gpus.py +1 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_resident_sizing.py +1 -1
- freesolo_flash_dev-1.2.129/tests/test_grpo_reward_batching.py +719 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_rollout_contract.py +2 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_idle_endpoint_reaper.py +65 -22
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_instance_bootstrap_coverage.py +204 -4
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_jobs.py +51 -63
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lambda_runner.py +105 -130
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_mirror_sampling_parity.py +311 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_multi_gpu_gate.py +4 -8
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_resume_safety.py +11 -12
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_train.py +212 -16
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_orchestrator_flash.py +4 -4
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_preflight.py +39 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_provider_routing.py +68 -79
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_provider_teardown_robustness.py +4 -4
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_providers_symmetry.py +2 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_resume_on_retry.py +36 -36
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_runmgmt.py +153 -53
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_bootstrap_http.py +209 -5
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_progress.py +1 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_chat_transport.py +86 -8
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_reasoning_content.py +9 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_runtime_engine.py +326 -1
- freesolo_flash_dev-1.2.129/tests/test_serve_runtime_types.py +1527 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_api.py +127 -40
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_envs_coverage.py +3 -3
- freesolo_flash_dev-1.2.129/tests/test_server_managed_chat_requests.py +261 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_standalone.py +2 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serving_contract.py +89 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_staged_environment.py +6 -2
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_teacher_broker.py +4 -7
- freesolo_flash_dev-1.2.129/tests/test_tool_call_exact_parsing.py +5021 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_training_controls.py +11 -9
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vast_api_coverage.py +60 -48
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vast_offers.py +3 -3
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vast_provider_coverage.py +1 -1
- freesolo_flash_dev-1.2.129/tests/test_vast_result.py +251 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vast_runner.py +115 -135
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_warmstart_cross_repo.py +1 -1
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_weight_cache.py +16 -25
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_hardexit.py +153 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_stack.py +25 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_workflow_contracts.py +301 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/uv.lock +1 -1
- freesolo_flash_dev-1.2.127/flash/serving/src/io/openai_request.py +0 -63
- freesolo_flash_dev-1.2.127/tests/serving/test_mirror_sampling_parity.py +0 -405
- freesolo_flash_dev-1.2.127/tests/test_chat_foundations.py +0 -379
- freesolo_flash_dev-1.2.127/tests/test_endpoint_name.py +0 -45
- freesolo_flash_dev-1.2.127/tests/test_grpo_reward_batching.py +0 -334
- freesolo_flash_dev-1.2.127/tests/test_serve_runtime_types.py +0 -583
- freesolo_flash_dev-1.2.127/tests/test_server_managed_chat_requests.py +0 -91
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/deploy-modal-dev.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/dev-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/production-kernel-cache-ready.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/publish-serving-image.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/Dockerfile +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/Dockerfile.serve +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/README.md +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docker/patch_vllm_moe_lora.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/docs/hosted-inference-load-testing.md +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/http.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/openai_sse.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/_internal/version.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/adapters/targets.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/list.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/retained.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/setup.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/episode.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/eval.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/params.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/test.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/testing/warnings.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/account.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/catalog.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/deploy.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/log_follow.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/runs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/traces.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/train.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/ops/worker_output.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/serving/deploy.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/serving/identity.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/serving/status.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/serving/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/account.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/env.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/errors.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/main.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/models.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/serve_parser.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/traces.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/parsing/training.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/image_descriptors.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/reasoning_normalization.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/core/catalog.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/core/grpo.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/currency.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/support/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/support/huggingface.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/support/verl_checkpoint.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/support/verl_policy.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/support/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/runtime/state.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/backend_common.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/opd_train.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/opd_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/sft_train.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/child/tensors.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/child/patches.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/launch/config.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/train/sft/setup/config.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/capabilities.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/verl/process_census.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/adapter.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/base.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/loader.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/pull.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/loading/staged.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/identity.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/meta/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/package/direct_tokens.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/host/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/host/failmark.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/host/hostlog.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/poll.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/net/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/net/auth.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/net/deadline.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/_lifecycle/net/http.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/allocator.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/realized.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/registry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/core/sharding.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/api.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/lambda_/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/api.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/cost.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/jobs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/execution/polling.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/providers/vast/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/accounting/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/accounting/costs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/accounting/reconciliation.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/accounting/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/attempts.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/claim_lock.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/preparation.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/reporting.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/state.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/lifecycle/submit.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/results/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/attach_reconcile.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/deploy.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/errors.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/retry_decision.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/__main__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/launch.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/manifest.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/app/materialize.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/errors.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/provenance.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/responses.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/contract/urls.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/_canonical.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/_serialization.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/_urls.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/credentials.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/planning.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/control/types.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/adapter_check.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/export.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/preflight.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/readiness.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/deployment/resolve.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/common/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/common/records.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/execution/operations.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/planning/plan.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/planning/resources.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/runtime_support.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/request/streaming.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/adapters.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/errors.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/sampling.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serve/runtime/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/asgi/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/asgi/cli.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/billing/charges.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/ops/reconcile.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/ops/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/ops/serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/environment_registry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/projects.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/registry/runs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/teacher/broker.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/teacher/errors.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/domain/teacher/requests.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/auth.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/internal_client.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/serving_completion.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/serving_revisions.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/serving_smoke.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/__main__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/cli.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/metrics.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/protocol.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/runner.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/schedule.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/loadtest/schema.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/accounting/usage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/boot.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/errors.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/lora_entries.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/engine/prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/adapter_routes.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/body_limit.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/context.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/headers.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/router.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/http/routing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/provenance.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/requests.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/schemas.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/streaming.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/io/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/access.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/lookup.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/persisted_columns.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/persistence.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/registration.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/registry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/settings.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/supabase_rest.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/serving/src/store/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/snapshot/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/snapshot/archive.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/teacher/provider_status.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/check_rollout_identity_actor.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/check_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/qualify_serving_profile.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/serve_launch.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/chat_provenance.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/chat_transport.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/managed_chat.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/server_api_plugin.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/_helpers/wire_headers.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/capture_qwen38_27b_metadata.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/checkpoint_fixtures.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/conftest.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/hosted_loadtest_fake_scenario.json +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_base_model_serving.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_chat_auth.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_chat_authorizer.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_checkpoint_model_validation.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_engine_error_status.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_fp8_config.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_immutable_engine.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_immutable_revisions.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_immutable_schemas.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_metrics.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_protocol.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_runner.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_schedule.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_loadtest_schema.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_modal_deploy_identity.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_modal_image_paths.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_openai_stream_options.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_persistence.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_pre_first_disconnect.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_registry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_registry_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_request_body_limit.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_router_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_router_edge_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_schemas_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_serve_reasoning_split.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_serve_thinking.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_settings.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_structured_outputs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving/test_supabase_rest_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving_conformance/__init__.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving_conformance/conftest.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/serving_conformance/test_contract.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_authenticated_redirects.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_capture_qwen38_metadata.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_serve_status.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_currency.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_checkpoint_durability.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_process_census.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_grpo_rollout_identity.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_image_environment_capability.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_image_incremental_processor.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lora_rank_nested_rung.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lora_targeting.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_lora_targeting_pinned_verl.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_multiturn_failure_exit.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_opd_replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_retry_decision.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_rl_train.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_run_registry_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_launch.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_manifest.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_materialize.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_app_packaging.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_control.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_docs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_modal_contract_lock.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_modal_sdk.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_modal_sdk_deadlines.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_modal_teardown_identity.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_profile_qualification.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_profiles.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_provisioning_common.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_provisioning_modal.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_resolve_provenance.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_runtime_adapters.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serve_runtime_package.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_server_serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serving_conformance_gate.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_train.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_source_attestation_flow.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vllm_moe_lora_backport.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_warmstart_image_adapters.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -33,6 +33,9 @@ RUNPOD_API_KEY=
|
|
|
33
33
|
LAMBDA_API_KEY=
|
|
34
34
|
# Vast.ai API key.
|
|
35
35
|
VAST_API_KEY=
|
|
36
|
+
# exact https origins Vast may return for asynchronous result retrieval. configured values replace
|
|
37
|
+
# the default https://s3.amazonaws.com allowlist. this belongs only on the control-plane host.
|
|
38
|
+
# FLASH_VAST_RESULT_ORIGINS=https://s3.amazonaws.com
|
|
36
39
|
|
|
37
40
|
# --- required: artifacts ---
|
|
38
41
|
# HuggingFace token with write access to the dataset repos flash creates for artifacts
|
{freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/.github/workflows/deploy-modal.yml
RENAMED
|
@@ -39,10 +39,14 @@ jobs:
|
|
|
39
39
|
# this only constrains manual dispatches; a non-main dispatch skips without running `modal deploy`.
|
|
40
40
|
if: github.ref == 'refs/heads/main'
|
|
41
41
|
runs-on: ubuntu-latest
|
|
42
|
-
# the job's own bounded waits
|
|
43
|
-
#
|
|
44
|
-
#
|
|
45
|
-
|
|
42
|
+
# the job's own bounded waits now sum well past the old 30: two 300s readiness polls, the remote
|
|
43
|
+
# image build, a 420s canary that pays a GPU cold start, a 180s accounting deadline, and on the
|
|
44
|
+
# failure path a SECOND `modal deploy` plus a 300s restore poll. 60 minutes clears that worst
|
|
45
|
+
# case with room while keeping a wedged deploy from holding the runner for GitHub's 6-hour
|
|
46
|
+
# default. the headroom is specifically for the rollback: a job killed partway through the
|
|
47
|
+
# restore leaves the broken release live with no second attempt, which is the one outcome this
|
|
48
|
+
# workflow exists to prevent.
|
|
49
|
+
timeout-minutes: 60
|
|
46
50
|
# serialize serving deploys across runs because each deploy mutates the live app. github can still
|
|
47
51
|
# replace a pending run, so the gate compares against the sha reported by the deployed app rather
|
|
48
52
|
# than assuming every push predecessor was deployed.
|
|
@@ -87,9 +91,14 @@ jobs:
|
|
|
87
91
|
DEPLOYED_HEALTH_URL: https://serve.freesolo.co/healthz
|
|
88
92
|
run: |
|
|
89
93
|
deploy=false
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
94
|
+
# the sha reported by the LIVE app is read ONCE, before any decision, because it serves
|
|
95
|
+
# two purposes: it bounds the undeployed diff below, and it is the rollback target for a
|
|
96
|
+
# failed promotion. `modal deploy` overwrites the app in place, so after that point there
|
|
97
|
+
# is no way left to ask what the previous release was. reading it on workflow_dispatch
|
|
98
|
+
# too -- where the deploy decision does not need it -- is what makes a dispatched deploy
|
|
99
|
+
# rollback-capable rather than one-way.
|
|
100
|
+
read_ok=true
|
|
101
|
+
last_deployed_sha="$(python3 - <<'PY'
|
|
93
102
|
import json
|
|
94
103
|
import os
|
|
95
104
|
import re
|
|
@@ -107,7 +116,17 @@ jobs:
|
|
|
107
116
|
raise ValueError("deployed app returned no valid source revision")
|
|
108
117
|
print(revision.lower())
|
|
109
118
|
PY
|
|
110
|
-
)"
|
|
119
|
+
)" || read_ok=false
|
|
120
|
+
if [ "$read_ok" != "true" ]; then
|
|
121
|
+
last_deployed_sha=""
|
|
122
|
+
fi
|
|
123
|
+
# an empty previous sha means rollback is IMPOSSIBLE for this run. the rollback step below
|
|
124
|
+
# says so out loud rather than reporting a restore it never performed.
|
|
125
|
+
echo "previous_sha=$last_deployed_sha" >> "$GITHUB_OUTPUT"
|
|
126
|
+
|
|
127
|
+
if [ "$EVENT" = "workflow_dispatch" ]; then
|
|
128
|
+
deploy=true
|
|
129
|
+
elif [ "$read_ok" != "true" ]; then
|
|
111
130
|
# a missing deployment or any health, network, or parsing failure must deploy safely.
|
|
112
131
|
deploy=true
|
|
113
132
|
elif ! git merge-base --is-ancestor "$last_deployed_sha" "$CURRENT_SHA" 2>/dev/null; then
|
|
@@ -282,6 +301,7 @@ jobs:
|
|
|
282
301
|
done
|
|
283
302
|
|
|
284
303
|
- name: Deploy serving
|
|
304
|
+
id: deploy_serving
|
|
285
305
|
if: steps.gate.outputs.deploy == 'true'
|
|
286
306
|
env:
|
|
287
307
|
FREESOLO_DEPLOYMENT_SHA: ${{ github.sha }}
|
|
@@ -371,6 +391,124 @@ jobs:
|
|
|
371
391
|
sleep "$sleep_seconds"
|
|
372
392
|
done
|
|
373
393
|
|
|
394
|
+
- name: Install promotion gate dependencies
|
|
395
|
+
if: steps.gate.outputs.deploy == 'true'
|
|
396
|
+
working-directory: .
|
|
397
|
+
run: |
|
|
398
|
+
# the gate imports flash.serving.promotion, which needs httpx for the streaming canary and
|
|
399
|
+
# pydantic-settings for the accounting client. this job deliberately does not `uv sync`
|
|
400
|
+
# (see "Install Modal client"), so install exactly what the gate imports and nothing more.
|
|
401
|
+
# these are the exact versions uv.lock resolves, so the gate runs against the same client
|
|
402
|
+
# behaviour the serving tests were validated on rather than whatever pypi ships that day.
|
|
403
|
+
python -m pip install "httpx==0.28.1" "pydantic==2.13.4" "pydantic-settings==2.15.0"
|
|
404
|
+
|
|
405
|
+
- name: Prove the promotion with a real streaming canary
|
|
406
|
+
if: steps.gate.outputs.deploy == 'true'
|
|
407
|
+
working-directory: .
|
|
408
|
+
env:
|
|
409
|
+
# a healthy /healthz proves a ROUTER answered with the expected identity. it does not prove
|
|
410
|
+
# a gpu engine started, that a generation ran, that streaming works, or that usage settled
|
|
411
|
+
# durably. this step is the only thing standing between "the process booted" and "the
|
|
412
|
+
# release can actually serve", so a failure here must not be promoted.
|
|
413
|
+
SERVING_BASE_URL: https://serve.freesolo.co
|
|
414
|
+
FREESOLO_INTERNAL_KEY: ${{ secrets.FREESOLO_INTERNAL_KEY }}
|
|
415
|
+
SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
|
|
416
|
+
SUPABASE_SERVICE_ROLE_KEY: ${{ secrets.SUPABASE_SERVICE_ROLE_KEY }}
|
|
417
|
+
GITHUB_SHA: ${{ github.sha }}
|
|
418
|
+
GITHUB_RUN_ID: ${{ github.run_id }}
|
|
419
|
+
GITHUB_RUN_ATTEMPT: ${{ github.run_attempt }}
|
|
420
|
+
# credentials reach the gate ONLY through the environment above. passing any of them as an
|
|
421
|
+
# argument would put them in the process table and in the step's own command echo.
|
|
422
|
+
run: python -m flash.serving.promotion.gate
|
|
423
|
+
|
|
424
|
+
- name: Restore the previous release
|
|
425
|
+
# `failure()` alone is too broad. It also fires for the steps that run BEFORE any deploy --
|
|
426
|
+
# installing Modal, verifying auth, verifying the runtime secrets, waiting for the adapter
|
|
427
|
+
# schema. Restoring there would `modal deploy` the previous SHA over a live app this run never
|
|
428
|
+
# replaced, using the very secret set whose verification just failed: a healthy release
|
|
429
|
+
# overwritten by a rollback that had nothing to roll back. Gating on the deploy step's own
|
|
430
|
+
# outcome keeps the case the previous comment was right about -- a deploy that half-succeeded
|
|
431
|
+
# and then failed readiness is `failure`, not skipped, so it still restores. Any outcome other
|
|
432
|
+
# than an attempted deploy (empty, `skipped`) means production is untouched and must stay so.
|
|
433
|
+
if: >-
|
|
434
|
+
failure() && steps.gate.outputs.deploy == 'true'
|
|
435
|
+
&& (steps.deploy_serving.outcome == 'success' || steps.deploy_serving.outcome == 'failure')
|
|
436
|
+
working-directory: .
|
|
437
|
+
env:
|
|
438
|
+
PREVIOUS_SHA: ${{ steps.gate.outputs.previous_sha }}
|
|
439
|
+
CURRENT_SHA: ${{ github.sha }}
|
|
440
|
+
# a distinct attempt id so /healthz cannot report the FORWARD deploy's identity and be
|
|
441
|
+
# mistaken for a completed rollback.
|
|
442
|
+
ROLLBACK_DEPLOYMENT_ID: ${{ github.run_id }}-${{ github.run_attempt }}-rollback
|
|
443
|
+
HEALTH_URL: https://serve.freesolo.co/healthz
|
|
444
|
+
run: |
|
|
445
|
+
if [ -z "$PREVIOUS_SHA" ]; then
|
|
446
|
+
echo "::error::Promotion failed and NO previous release was recorded, so the broken release is still live. Restore production manually."
|
|
447
|
+
exit 1
|
|
448
|
+
fi
|
|
449
|
+
if ! git merge-base --is-ancestor "$PREVIOUS_SHA" "$CURRENT_SHA" 2>/dev/null; then
|
|
450
|
+
# refusing here is the safe branch: redeploying a sha that is not an ancestor of this
|
|
451
|
+
# head would deploy an unknown tree rather than the release that was actually live.
|
|
452
|
+
echo "::error::Recorded previous release ${PREVIOUS_SHA} is not an ancestor of ${CURRENT_SHA}; refusing to redeploy an unverified tree. Restore production manually."
|
|
453
|
+
exit 1
|
|
454
|
+
fi
|
|
455
|
+
|
|
456
|
+
echo "Promotion failed; restoring ${PREVIOUS_SHA}."
|
|
457
|
+
git checkout --quiet --force "$PREVIOUS_SHA"
|
|
458
|
+
|
|
459
|
+
# the restored app must report the RESTORED sha, deployed from the restored tree.
|
|
460
|
+
FREESOLO_DEPLOYMENT_SHA="$PREVIOUS_SHA" \
|
|
461
|
+
FREESOLO_DEPLOYMENT_ID="$ROLLBACK_DEPLOYMENT_ID" \
|
|
462
|
+
modal deploy flash/serving/app/modal_app.py
|
|
463
|
+
|
|
464
|
+
response_file="$(mktemp)"
|
|
465
|
+
trap 'rm -f "$response_file"' EXIT
|
|
466
|
+
deadline=$((SECONDS + 300))
|
|
467
|
+
restored=false
|
|
468
|
+
while (( SECONDS < deadline )); do
|
|
469
|
+
if curl --silent --show-error --output "$response_file" --fail \
|
|
470
|
+
--connect-timeout 5 --max-time 10 "$HEALTH_URL"; then
|
|
471
|
+
if python3 - "$response_file" "$PREVIOUS_SHA" "$ROLLBACK_DEPLOYMENT_ID" <<'PY'
|
|
472
|
+
import json
|
|
473
|
+
import sys
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
def reject_constant(_value: str) -> None:
|
|
477
|
+
raise ValueError
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
try:
|
|
481
|
+
with open(sys.argv[1], encoding="utf-8") as response:
|
|
482
|
+
payload = json.load(response, parse_constant=reject_constant)
|
|
483
|
+
except (OSError, UnicodeDecodeError, ValueError):
|
|
484
|
+
sys.exit(1)
|
|
485
|
+
|
|
486
|
+
restored = (
|
|
487
|
+
isinstance(payload, dict)
|
|
488
|
+
and payload.get("ok") is True
|
|
489
|
+
and payload.get("deployment_sha") == sys.argv[2]
|
|
490
|
+
and payload.get("deployment_id") == sys.argv[3]
|
|
491
|
+
)
|
|
492
|
+
sys.exit(0 if restored else 1)
|
|
493
|
+
PY
|
|
494
|
+
then
|
|
495
|
+
restored=true
|
|
496
|
+
break
|
|
497
|
+
fi
|
|
498
|
+
fi
|
|
499
|
+
sleep 10
|
|
500
|
+
done
|
|
501
|
+
|
|
502
|
+
if [ "$restored" != "true" ]; then
|
|
503
|
+
echo "::error::Rollback to ${PREVIOUS_SHA} was deployed but production never reported the restored release. Production may be serving a broken release; intervene manually."
|
|
504
|
+
exit 1
|
|
505
|
+
fi
|
|
506
|
+
# exit nonzero regardless: a restored predecessor means production is serving again, NOT
|
|
507
|
+
# that this promotion succeeded. reporting green here would mark an unpromotable commit as
|
|
508
|
+
# deployed and let the next push build on a release that never passed its gate.
|
|
509
|
+
echo "::error::Promotion failed; production was restored to ${PREVIOUS_SHA}. This commit is NOT deployed."
|
|
510
|
+
exit 1
|
|
511
|
+
|
|
374
512
|
- name: Nothing to deploy
|
|
375
513
|
if: steps.gate.outputs.deploy != 'true'
|
|
376
514
|
run: echo "No serving changes in this push; skipping deploy."
|
|
@@ -13,6 +13,11 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
|
|
|
13
13
|
|
|
14
14
|
### Added
|
|
15
15
|
|
|
16
|
+
- OpenAI chat serving now implements and offline-validates strict function tool calling for the exact
|
|
17
|
+
Qwen3.5 packaged and hosted paths, including validated tool history, buffered and raw SSE
|
|
18
|
+
`tool_calls`, and managed forwarding. Flash parses schema-valid calls but does not execute them;
|
|
19
|
+
malformed automatic calls remain exact assistant text. Tool calling is not live-qualified pending
|
|
20
|
+
exact model testing.
|
|
16
21
|
- OpenAI chat serving now preserves mirror sampling controls across packaged, hosted, and managed
|
|
17
22
|
entry points: up to four indexed choices, signed seeds, frequency and presence penalties, and
|
|
18
23
|
OpenAI token logprobs. Buffered and raw SSE responses retain independent choice terminals and
|
|
@@ -25,6 +30,16 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
|
|
|
25
30
|
|
|
26
31
|
### Changed
|
|
27
32
|
|
|
33
|
+
- A Flash run is one seed and may execute several attempts. The provider seed argument threaded
|
|
34
|
+
beside `spec.seed` is gone, so the spec is the only seed channel and no caller can supply a
|
|
35
|
+
second one to disagree with it; `Provider.submit_run`/`poll` are now `submit_attempt`/
|
|
36
|
+
`poll_attempt`; and `runner/supervise/seed_submission.py` is `attempt_supervision.py`. Instance
|
|
37
|
+
labels drop the redundant seed field (`<run>-s<seed>-a<n>` becomes `<run>-a<n>`), and every
|
|
38
|
+
RunPod endpoint carries an explicit `-a<n>` ordinal including attempt zero, replacing the `r<n>`
|
|
39
|
+
retry suffix that made a retry ordinal an identity and left the base name ambiguous between a run
|
|
40
|
+
and its first attempt. Names that exceed the provider budget now raise rather than truncate,
|
|
41
|
+
since a clipped ordinal is one two attempts of a run can collide on.
|
|
42
|
+
|
|
28
43
|
- Run-backed adapters now use only explicit permanent checkpoint identities, `<run_id>/final` and
|
|
29
44
|
`<run_id>/step-N`. Bare run aliases, composite source-revision identities, activation, implicit
|
|
30
45
|
checkpoint fallback, and public artifact provenance have been removed across hosted, managed, and
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.129
|
|
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
|
|
@@ -235,6 +235,12 @@ placeholder value to set for the ones you skip.
|
|
|
235
235
|
| Lambda | `LAMBDA_API_KEY` | |
|
|
236
236
|
| Vast | `VAST_API_KEY` | |
|
|
237
237
|
|
|
238
|
+
Vast log retrieval accepts signed result URLs only from exact HTTPS origins in
|
|
239
|
+
`FLASH_VAST_RESULT_ORIGINS`. The variable is control-plane-only and comma-separated. Leaving it
|
|
240
|
+
unset or blank allows only `https://s3.amazonaws.com`; setting it replaces that default. Origins
|
|
241
|
+
must be canonical HTTPS origins without credentials, explicit ports, paths, queries, fragments,
|
|
242
|
+
wildcards, spaces, or control characters.
|
|
243
|
+
|
|
238
244
|
The allocator ranks candidate GPU classes only on the substrates you configured, so a
|
|
239
245
|
plane with just `VAST_API_KEY` set allocates on Vast and never proposes a class it cannot
|
|
240
246
|
provision. Startup fails only when **all three** are missing.
|
|
@@ -75,6 +75,58 @@ The packaged, hosted, and managed OpenAI entry points retain the shared strict s
|
|
|
75
75
|
- `logprobs` is a strict boolean and `top_logprobs` is an integer from 0 through 20.
|
|
76
76
|
- thinking-enabled adapters reject logprobs.
|
|
77
77
|
|
|
78
|
+
Function tools are implemented and offline-validated only for the exact qualified Qwen3.5 packaged
|
|
79
|
+
and hosted profile. This path is not live-qualified pending exact model testing. The parser identity
|
|
80
|
+
is `qwen3_coder`; Qwen3.6 and unqualified engines reject tools after authorization and checkpoint
|
|
81
|
+
resolution, before generation. Declarations must be closed function objects with unique nonempty
|
|
82
|
+
names. Parameters use a bounded root-object JSON Schema profile with `properties`, `required`,
|
|
83
|
+
`additionalProperties: false`, recursive scalar, object, and array types, descriptions, enums, and
|
|
84
|
+
array `items`. Numeric enum members must be JSON integers; decimal and exponent numeric enum lexemes
|
|
85
|
+
are rejected because Flash cannot preserve them exactly across every ingress and template boundary.
|
|
86
|
+
Generated and historical JSON numeric literals support at most 1024 significand digits and exponent
|
|
87
|
+
magnitude at most 1,000,000; generated candidates outside either bound remain exact text, while
|
|
88
|
+
history outside either bound is rejected. A historical value within those bounds that no native
|
|
89
|
+
template number carries faithfully, because it
|
|
90
|
+
would overflow, underflow, or lose digits, is rendered as its exact compact text instead of being
|
|
91
|
+
converted or rejected, and a container holding such a value is rendered exactly as a whole. A
|
|
92
|
+
top-level boolean or null argument is likewise pre-rendered as `true`, `false`, or `null`, because the
|
|
93
|
+
template spells a scalar with `string` and would otherwise show the model Python's `True` and `None`;
|
|
94
|
+
inside a container those values stay native, since the template's `tojson` already spells them
|
|
95
|
+
correctly. A response carries at most 408 tool calls, and a longer run of candidates stays exact text. That is
|
|
96
|
+
the most any continuation could carry, not a promise that this batch replays. Replay cost depends on
|
|
97
|
+
the follow-up request as a whole: the prior conversation shares the same message-complexity budget,
|
|
98
|
+
and each result costs four nodes as a plain string, five with the optional `name`, and seven for a
|
|
99
|
+
single text block plus three for each additional block. A long enough history leaves no room for
|
|
100
|
+
even one call. Clients that intend to continue the tool lifecycle must therefore not assume any
|
|
101
|
+
positive call count replays under every history: a follow-up that exceeds the budget is rejected
|
|
102
|
+
with `messages exceed the supported complexity`. The budget counts structure rather than text, so
|
|
103
|
+
the remedies are to send fewer messages or fewer content blocks, drop optional result `name` fields,
|
|
104
|
+
use plain string results rather than text blocks, or request fewer calls; shortening the text inside
|
|
105
|
+
a message does not help, because a string is one node however long it is. These local
|
|
106
|
+
serving-contract bounds do not depend on Python's process-wide integer conversion limit. Unsupported
|
|
107
|
+
keywords and `strict: true` are rejected.
|
|
108
|
+
|
|
109
|
+
`tool_choice` defaults to `auto` and accepts only `auto` or `none`. `parallel_tool_calls` defaults to
|
|
110
|
+
`true` and accepts only exact `true`; either control requires `tools`. Tools cannot be combined with
|
|
111
|
+
thinking, logprobs, structured outputs, a non-text `response_format`, or image messages. Historical
|
|
112
|
+
assistant calls require unique IDs, function type, valid names, and JSON-string object arguments.
|
|
113
|
+
Each immediately following tool-result turn must resolve every declared call exactly once before a
|
|
114
|
+
non-tool turn. External messages remain unchanged; only a detached template copy converts argument
|
|
115
|
+
strings to objects.
|
|
116
|
+
|
|
117
|
+
In `auto` mode, complete schema-valid Qwen3 Coder XML candidates become OpenAI `tool_calls` with
|
|
118
|
+
independent call indexes and `finish_reason: "tool_calls"`. Parsed responses contain no raw Qwen
|
|
119
|
+
tags. Ordinary text and malformed or incomplete candidates remain exact assistant text with the
|
|
120
|
+
native finish reason. Candidate regions are buffered in raw SSE because argument deltas cannot be
|
|
121
|
+
retracted safely. Native prompt, completion, cached, and reasoning token accounting remains
|
|
122
|
+
authoritative and is never recomputed from serialized arguments. Flash parses calls but does not
|
|
123
|
+
execute or resubmit them.
|
|
124
|
+
|
|
125
|
+
The decoded convenience `chat_stream` iterator remains text-only and single-choice. It rejects
|
|
126
|
+
`n != 1`, logprobs, and tools before opening transport; use buffered JSON or raw SSE for those
|
|
127
|
+
features. Raw `/generate` and `/adapters/{id}/generate` remain tool-free. Buffered hosted responses
|
|
128
|
+
and raw hosted SSE are authoritative; managed serving forwards them and never reparses tool calls.
|
|
129
|
+
|
|
78
130
|
## Public provenance
|
|
79
131
|
|
|
80
132
|
Successful run-backed responses identify only the permanent checkpoint:
|
{freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/imports.py
RENAMED
|
@@ -17,6 +17,7 @@ from pathlib import Path
|
|
|
17
17
|
|
|
18
18
|
from flash.cli.commands.env.ops.push import (
|
|
19
19
|
_ENV_EVALUATIONS_SIDECAR,
|
|
20
|
+
_decode_env_entrypoint_source,
|
|
20
21
|
_ignore_env_push_path,
|
|
21
22
|
_raise_walk_error,
|
|
22
23
|
)
|
|
@@ -149,6 +150,18 @@ def _imported_module_names(tree, *, relative_names_are_siblings: bool = True) ->
|
|
|
149
150
|
return names
|
|
150
151
|
|
|
151
152
|
|
|
153
|
+
def _read_env_module_source(path: Path) -> str:
|
|
154
|
+
"""Read one packaged Python file under the interpreter's own encoding contract.
|
|
155
|
+
|
|
156
|
+
the publish path decodes the entrypoint with `tokenize.detect_encoding`, so a file carrying a
|
|
157
|
+
non-utf-8 encoding cookie is publishable. reading it as utf-8 here raises instead, and every
|
|
158
|
+
caller below treats that as "no imports" -- so the sibling helpers never enter the archive and
|
|
159
|
+
`env push` exits 0 with an environment that only fails once a gpu has been rented. one decoder
|
|
160
|
+
for both paths is what keeps "publishable" and "walked for imports" the same set of files.
|
|
161
|
+
"""
|
|
162
|
+
return _decode_env_entrypoint_source(path.read_bytes())[0]
|
|
163
|
+
|
|
164
|
+
|
|
152
165
|
def _helper_imports(helper: Path, *, env_root: Path) -> set[str]:
|
|
153
166
|
"""Return imports needed by a packaged helper.
|
|
154
167
|
|
|
@@ -160,7 +173,7 @@ def _helper_imports(helper: Path, *, env_root: Path) -> set[str]:
|
|
|
160
173
|
return set()
|
|
161
174
|
try:
|
|
162
175
|
return _imported_module_names(
|
|
163
|
-
ast.parse(helper
|
|
176
|
+
ast.parse(_read_env_module_source(helper), filename=str(helper)),
|
|
164
177
|
relative_names_are_siblings=helper.parent == env_root,
|
|
165
178
|
)
|
|
166
179
|
except (OSError, SyntaxError, UnicodeDecodeError):
|
|
@@ -295,7 +308,7 @@ def _iter_env_sidecar_files(
|
|
|
295
308
|
# GPU has been rented and the worker imports the module. parsed with the same reader as
|
|
296
309
|
# every other module here, so a lazily imported helper (inside load_environment) counts.
|
|
297
310
|
try:
|
|
298
|
-
entry_tree = ast.parse(entrypoint
|
|
311
|
+
entry_tree = ast.parse(_read_env_module_source(entrypoint), filename=str(entrypoint))
|
|
299
312
|
except (OSError, SyntaxError, UnicodeDecodeError):
|
|
300
313
|
# the entrypoint is validated for syntax on its own path, and a push that cannot read
|
|
301
314
|
# it fails there with a better message. an unreadable file here just means no closure.
|
|
@@ -325,7 +338,7 @@ def _iter_env_sidecar_files(
|
|
|
325
338
|
yielded.add(sidecar)
|
|
326
339
|
yield sidecar, sidecar.relative_to(env_root)
|
|
327
340
|
try:
|
|
328
|
-
tree = ast.parse(sidecar
|
|
341
|
+
tree = ast.parse(_read_env_module_source(sidecar), filename=str(sidecar))
|
|
329
342
|
except SyntaxError as exc:
|
|
330
343
|
raise ValueError(
|
|
331
344
|
f"{sidecar}: invalid evaluation sidecar syntax: {exc.msg}"
|
{freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/cli/commands/env/ops/push.py
RENAMED
|
@@ -382,15 +382,40 @@ def _env_name_error(raw: str) -> str:
|
|
|
382
382
|
return f"env name invalid: {text!r} has no usable characters"
|
|
383
383
|
|
|
384
384
|
|
|
385
|
+
def _validate_env_entrypoint_source(source: bytes) -> None:
|
|
386
|
+
"""Reject exact Python bytes that cannot execute as an environment module."""
|
|
387
|
+
compile(source, _ENV_ENTRYPOINT, "exec")
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
def _decode_env_entrypoint_source(source: bytes) -> tuple[str, str]:
|
|
391
|
+
"""Decode Python bytes with the interpreter's encoding-cookie and BOM contract."""
|
|
392
|
+
import io
|
|
393
|
+
import tokenize
|
|
394
|
+
|
|
395
|
+
encoding, _ = tokenize.detect_encoding(io.BytesIO(source).readline)
|
|
396
|
+
return source.decode(encoding), encoding
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
def _python_preamble_lines(lines: list[str]) -> int:
|
|
400
|
+
"""Return the shebang and encoding-cookie lines that must remain first."""
|
|
401
|
+
if not lines:
|
|
402
|
+
return 0
|
|
403
|
+
encoding_cookie = re.compile(r"^[ \t\f]*#.*?coding[:=][ \t]*[-\w.]+", re.ASCII)
|
|
404
|
+
blank_or_comment = re.compile(r"^[ \t\f]*(?:#|[\r\n]|$)", re.ASCII)
|
|
405
|
+
if encoding_cookie.match(lines[0]):
|
|
406
|
+
return 1
|
|
407
|
+
if len(lines) > 1 and blank_or_comment.match(lines[0]) and encoding_cookie.match(lines[1]):
|
|
408
|
+
return 2
|
|
409
|
+
return 1 if lines[0].startswith("#!") else 0
|
|
410
|
+
|
|
411
|
+
|
|
385
412
|
def _with_syspath_bootstrap(env_source: str) -> str:
|
|
386
|
-
"""
|
|
413
|
+
"""Insert the sys.path bootstrap after the Python module preamble."""
|
|
387
414
|
import ast
|
|
388
415
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
return _ENV_SYSPATH_BOOTSTRAP + env_source
|
|
393
|
-
insert_after = 0
|
|
416
|
+
tree = ast.parse(env_source, filename=_ENV_ENTRYPOINT)
|
|
417
|
+
lines = env_source.splitlines(keepends=True)
|
|
418
|
+
insert_after = _python_preamble_lines(lines)
|
|
394
419
|
body = tree.body
|
|
395
420
|
i = 0
|
|
396
421
|
if (
|
|
@@ -399,13 +424,27 @@ def _with_syspath_bootstrap(env_source: str) -> str:
|
|
|
399
424
|
and isinstance(getattr(body[0], "value", None), ast.Constant)
|
|
400
425
|
and isinstance(body[0].value.value, str)
|
|
401
426
|
):
|
|
402
|
-
insert_after = body[0].end_lineno or 0
|
|
427
|
+
insert_after = max(insert_after, body[0].end_lineno or 0)
|
|
403
428
|
i = 1
|
|
404
429
|
while i < len(body) and isinstance(body[i], ast.ImportFrom) and body[i].module == "__future__":
|
|
405
|
-
insert_after = body[i].end_lineno or
|
|
430
|
+
insert_after = max(insert_after, body[i].end_lineno or 0)
|
|
406
431
|
i += 1
|
|
407
|
-
|
|
408
|
-
|
|
432
|
+
prefix = "".join(lines[:insert_after])
|
|
433
|
+
if prefix and not prefix.endswith(("\n", "\r")):
|
|
434
|
+
prefix += "\n"
|
|
435
|
+
published_source = prefix + _ENV_SYSPATH_BOOTSTRAP + "".join(lines[insert_after:])
|
|
436
|
+
if not env_source.endswith(("\n", "\r")):
|
|
437
|
+
published_source = published_source.removesuffix("\n")
|
|
438
|
+
return published_source
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
def _prepare_env_entrypoint_source(env_source: bytes) -> bytes:
|
|
442
|
+
"""Validate the authored bytes and return the exact validated archive bytes."""
|
|
443
|
+
_validate_env_entrypoint_source(env_source)
|
|
444
|
+
decoded_source, encoding = _decode_env_entrypoint_source(env_source)
|
|
445
|
+
published_source = _with_syspath_bootstrap(decoded_source).encode(encoding)
|
|
446
|
+
_validate_env_entrypoint_source(published_source)
|
|
447
|
+
return published_source
|
|
409
448
|
|
|
410
449
|
|
|
411
450
|
def _raise_walk_error(error: OSError) -> None:
|
|
@@ -674,6 +713,18 @@ def cmd_env_push(args) -> int:
|
|
|
674
713
|
except ValueError as exc:
|
|
675
714
|
return _err(str(exc))
|
|
676
715
|
|
|
716
|
+
try:
|
|
717
|
+
published_source = _prepare_env_entrypoint_source(entrypoint.read_bytes())
|
|
718
|
+
except (SyntaxError, UnicodeError, ValueError) as exc:
|
|
719
|
+
location = (
|
|
720
|
+
f"line {exc.lineno}" if getattr(exc, "lineno", None) is not None else "unknown line"
|
|
721
|
+
)
|
|
722
|
+
return _err(
|
|
723
|
+
f"cannot publish {src}: environment entrypoint has invalid Python syntax ({location})"
|
|
724
|
+
)
|
|
725
|
+
except OSError:
|
|
726
|
+
return _err(f"cannot publish {src}: environment entrypoint could not be read")
|
|
727
|
+
|
|
677
728
|
try:
|
|
678
729
|
_check_env_push_limits(
|
|
679
730
|
env_root,
|
|
@@ -686,8 +737,7 @@ def cmd_env_push(args) -> int:
|
|
|
686
737
|
|
|
687
738
|
with tempfile.TemporaryDirectory(prefix="flash-env-push-") as tmp:
|
|
688
739
|
pkg = Path(tmp)
|
|
689
|
-
|
|
690
|
-
(pkg / _ENV_ENTRYPOINT).write_text(_with_syspath_bootstrap(module_source))
|
|
740
|
+
(pkg / _ENV_ENTRYPOINT).write_bytes(published_source)
|
|
691
741
|
_write_entrypoint_alias(pkg, entrypoint=entrypoint)
|
|
692
742
|
_copy_env_sidecars(
|
|
693
743
|
env_root,
|
|
@@ -255,7 +255,7 @@ model = "Qwen/Qwen3.5-9B" # see `flash models list`
|
|
|
255
255
|
project = "PROJECT_UUID" # required UUID from `flash projects create`
|
|
256
256
|
algorithm = "sft" # "sft" (supervised), "grpo" (RL), or "opd" (on-policy distillation)
|
|
257
257
|
# thinking = true # opt-in reasoning mode, for models that support it
|
|
258
|
-
# seed = 42 #
|
|
258
|
+
# seed = 42 # the run's one seed; omitted defaults to 42
|
|
259
259
|
|
|
260
260
|
[environment]
|
|
261
261
|
id = "your-org/your-project/my-env" # the id printed by `flash env push`
|
|
@@ -364,7 +364,9 @@ remove that failover, and cannot be combined with `providers`. An unknown name i
|
|
|
364
364
|
time and the error lists the names your plane accepts. `[gpu] type` pins one exact active
|
|
365
365
|
validated GPU class. Run artifacts are stored in a
|
|
366
366
|
private environment-scoped repo with content-addressed Flash code snapshots. Set `seed` only at the
|
|
367
|
-
top level
|
|
367
|
+
top level: a run has exactly one seed, and if a host fails Flash executes another attempt of that
|
|
368
|
+
same run rather than a new one, so every attempt trains on the seed you set here.
|
|
369
|
+
Compose or tweak configs without editing files: `--config extra.toml` (deep-merge) and
|
|
368
370
|
`--set key=value` (e.g. `--set train.epochs=3`). `--gpus N` is
|
|
369
371
|
shorthand for `--set gpu.count=N`; both land in one override list, so repeats resolve left to
|
|
370
372
|
right.
|
|
@@ -69,7 +69,7 @@ def live_attempt(obj: dict) -> int | None:
|
|
|
69
69
|
def heartbeat_is_current_attempt(obj: dict, heartbeat: dict) -> bool:
|
|
70
70
|
"""False only when the heartbeat provably belongs to a superseded retry attempt.
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
Every attempt of a run shares one heartbeat path, so a recovered run flips back to ``running`` for the
|
|
73
73
|
replacement worker while ``last_heartbeat`` can still be the previous attempt's setup ping until
|
|
74
74
|
the new worker publishes one. ``remote.attempt`` is the live attempt; ``last_heartbeat.attempt``
|
|
75
75
|
is the one that produced the ping. When the live attempt is known, keep the reassurance only for a
|
|
@@ -33,6 +33,7 @@ from flash.client.streaming import (
|
|
|
33
33
|
)
|
|
34
34
|
from flash.core.spec import require_project_id
|
|
35
35
|
from flash.serve.contract.urls import is_freesolo_hosted_url
|
|
36
|
+
from flash.serve.request.tool_calls import validate_tool_control_presence
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
class ClientError(RuntimeError):
|
|
@@ -213,9 +214,18 @@ def _prepare_chat_request(
|
|
|
213
214
|
max_tokens: int,
|
|
214
215
|
*,
|
|
215
216
|
stream: bool = False,
|
|
217
|
+
tools: list[dict[str, Any]] | None = None,
|
|
218
|
+
tool_choice: str | None = None,
|
|
219
|
+
parallel_tool_calls: bool | None = None,
|
|
216
220
|
) -> tuple[str, dict[str, Any]]:
|
|
217
221
|
base_run_id, checkpoint_id = _parse_chat_target(target)
|
|
218
222
|
_validate_chat_messages(messages)
|
|
223
|
+
validate_tool_control_presence(
|
|
224
|
+
tools,
|
|
225
|
+
tool_choice,
|
|
226
|
+
parallel_tool_calls,
|
|
227
|
+
error_type=ClientError,
|
|
228
|
+
)
|
|
219
229
|
body: dict[str, Any] = {
|
|
220
230
|
"checkpoint_id": checkpoint_id,
|
|
221
231
|
"messages": messages,
|
|
@@ -224,6 +234,10 @@ def _prepare_chat_request(
|
|
|
224
234
|
}
|
|
225
235
|
if stream:
|
|
226
236
|
body["stream"] = True
|
|
237
|
+
if tools is not None:
|
|
238
|
+
body["tools"] = tools
|
|
239
|
+
body["tool_choice"] = "auto" if tool_choice is None else tool_choice
|
|
240
|
+
body["parallel_tool_calls"] = True if parallel_tool_calls is None else parallel_tool_calls
|
|
227
241
|
return base_run_id, body
|
|
228
242
|
|
|
229
243
|
|
|
@@ -767,12 +781,19 @@ class ApiClient:
|
|
|
767
781
|
temperature: float = 0.0,
|
|
768
782
|
max_tokens: int = 512,
|
|
769
783
|
timeout: float | None = None,
|
|
784
|
+
*,
|
|
785
|
+
tools: list[dict[str, Any]] | None = None,
|
|
786
|
+
tool_choice: str | None = None,
|
|
787
|
+
parallel_tool_calls: bool | None = None,
|
|
770
788
|
) -> dict:
|
|
771
789
|
base_run_id, body = _prepare_chat_request(
|
|
772
790
|
run_id,
|
|
773
791
|
messages,
|
|
774
792
|
temperature,
|
|
775
793
|
max_tokens,
|
|
794
|
+
tools=tools,
|
|
795
|
+
tool_choice=tool_choice,
|
|
796
|
+
parallel_tool_calls=parallel_tool_calls,
|
|
776
797
|
)
|
|
777
798
|
return self._request(
|
|
778
799
|
"POST",
|
|
@@ -787,7 +808,11 @@ class ApiClient:
|
|
|
787
808
|
messages: list[dict],
|
|
788
809
|
temperature: float = 0.0,
|
|
789
810
|
max_tokens: int = 512,
|
|
811
|
+
*,
|
|
812
|
+
tools: list[dict[str, Any]] | None = None,
|
|
790
813
|
) -> Iterator[str]:
|
|
814
|
+
if tools is not None:
|
|
815
|
+
raise ValueError("decoded chat_stream does not support tools")
|
|
791
816
|
base_run_id, body = _prepare_chat_request(
|
|
792
817
|
run_id,
|
|
793
818
|
messages,
|
|
@@ -268,18 +268,6 @@ CONTROL_PLANE_OWNED_ENV_KEYS = frozenset(
|
|
|
268
268
|
TRAINER_BACKEND = "verl"
|
|
269
269
|
|
|
270
270
|
|
|
271
|
-
def require_matching_seed(spec: JobSpec, seed: Any) -> int:
|
|
272
|
-
"""Require the retained provider seed argument to match the authoritative JobSpec seed."""
|
|
273
|
-
provided = parse_seed(seed)
|
|
274
|
-
canonical = parse_seed(spec.seed)
|
|
275
|
-
if provided != canonical:
|
|
276
|
-
raise ValueError(
|
|
277
|
-
f"provider seed {provided} does not match JobSpec.seed {canonical}; "
|
|
278
|
-
"use spec.seed as the provider seed"
|
|
279
|
-
)
|
|
280
|
-
return canonical
|
|
281
|
-
|
|
282
|
-
|
|
283
271
|
def _model_revision(value: Any) -> str:
|
|
284
272
|
"""parse an optional exact model-repository revision."""
|
|
285
273
|
if not isinstance(value, str):
|
|
@@ -134,7 +134,7 @@ def _rollout_batch_for_quote(spec) -> int:
|
|
|
134
134
|
|
|
135
135
|
|
|
136
136
|
def spec_steps(spec) -> int:
|
|
137
|
-
"""Per-
|
|
137
|
+
"""Per-run optimizer steps implied by a train spec (mirrors the worker).
|
|
138
138
|
|
|
139
139
|
sft reads the horizon its workload profile measured: the profile already resolved epochs,
|
|
140
140
|
retained rows, realized batch, and ``max_steps`` against the exact tokenized dataset, so
|
{freesolo_flash_dev-1.2.127 → freesolo_flash_dev-1.2.129}/flash/engine/worker/entry/worker.py
RENAMED
|
@@ -17,6 +17,7 @@ import flash.engine.worker.runtime.kernel_warmup as kernel_warmup
|
|
|
17
17
|
import flash.engine.worker.train.entry.backend_common as backend_common
|
|
18
18
|
from flash._internal.diagnostics import sanitize_diagnostic
|
|
19
19
|
from flash.core.spec import gpu_count_of
|
|
20
|
+
from flash.engine.support.huggingface import hub_error_transience
|
|
20
21
|
from flash.engine.worker.runtime import state
|
|
21
22
|
from flash.envs.loading.staged import (
|
|
22
23
|
StagedEnvironmentTransientError,
|
|
@@ -67,6 +68,7 @@ def _run_worker_mode() -> None:
|
|
|
67
68
|
# Idempotency: check DONE before any env-mutating pip install (fla fast path).
|
|
68
69
|
if state.HF_REPO:
|
|
69
70
|
from huggingface_hub import hf_hub_download
|
|
71
|
+
from huggingface_hub.errors import RemoteEntryNotFoundError
|
|
70
72
|
|
|
71
73
|
try:
|
|
72
74
|
hf_hub_download(
|
|
@@ -76,8 +78,15 @@ def _run_worker_mode() -> None:
|
|
|
76
78
|
token=os.environ.get("HF_TOKEN"),
|
|
77
79
|
)
|
|
78
80
|
done = True
|
|
79
|
-
except Exception:
|
|
80
|
-
|
|
81
|
+
except Exception as exc:
|
|
82
|
+
if type(exc) is RemoteEntryNotFoundError:
|
|
83
|
+
done = False
|
|
84
|
+
elif hub_error_transience(exc) is True:
|
|
85
|
+
raise worker_perf.RetriableInfraError(
|
|
86
|
+
f"DONE marker read failed transiently ({type(exc).__name__})"
|
|
87
|
+
) from exc
|
|
88
|
+
else:
|
|
89
|
+
raise
|
|
81
90
|
remaining = state._remaining_worker_wall_seconds()
|
|
82
91
|
if remaining is not None and remaining <= 0:
|
|
83
92
|
raise RuntimeError("worker run wall deadline exceeded")
|