freesolo-flash-dev 1.2.123__tar.gz → 1.2.127__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/PKG-INFO +1 -1
- freesolo_flash_dev-1.2.127/docs/hosted-inference-load-testing.md +224 -0
- freesolo_flash_dev-1.2.127/flash/_internal/http.py +101 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/eval.py +0 -21
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/scaffold/TRAINING.md +2 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/freesolo_api.py +3 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/http.py +4 -3
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/opd_train_runner.py +1 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/sft_train.py +0 -20
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/plugin.py +26 -12
- freesolo_flash_dev-1.2.127/flash/engine/worker/train/opd/child/tensors.py +56 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/base.py +2 -3
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/execution/provider.py +1 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/jobs/__init__.py +5 -72
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/jobs/reap.py +2 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/job_execution.py +0 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/jobs.py +3 -21
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/polling.py +4 -8
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/provider.py +0 -4
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/accounting/reconciliation.py +9 -31
- freesolo_flash_dev-1.2.127/flash/runner/lifecycle/attempts.py +635 -0
- freesolo_flash_dev-1.2.127/flash/runner/lifecycle/claim_lock.py +64 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/state.py +28 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/status.py +12 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/attach.py +62 -40
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/errors.py +4 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/lifecycle.py +53 -86
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/recovery.py +0 -88
- freesolo_flash_dev-1.2.127/flash/runner/supervise/retry_decision.py +401 -0
- freesolo_flash_dev-1.2.127/flash/runner/supervise/seed_submission.py +743 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/transport.py +15 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/billing/charges.py +2 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/ops/reconcile.py +2 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/checkpoints.py +2 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/environment_registry.py +2 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/projects.py +3 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/teacher/broker.py +2 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/auth.py +7 -3
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/internal_client.py +5 -4
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/runtime.py +68 -26
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/app/README.md +6 -0
- freesolo_flash_dev-1.2.127/flash/serving/loadtest/__init__.py +5 -0
- freesolo_flash_dev-1.2.127/flash/serving/loadtest/__main__.py +5 -0
- freesolo_flash_dev-1.2.127/flash/serving/loadtest/artifacts.py +195 -0
- freesolo_flash_dev-1.2.127/flash/serving/loadtest/cli.py +100 -0
- freesolo_flash_dev-1.2.127/flash/serving/loadtest/metrics.py +279 -0
- freesolo_flash_dev-1.2.127/flash/serving/loadtest/protocol.py +321 -0
- freesolo_flash_dev-1.2.127/flash/serving/loadtest/runner.py +535 -0
- freesolo_flash_dev-1.2.127/flash/serving/loadtest/schedule.py +191 -0
- freesolo_flash_dev-1.2.127/flash/serving/loadtest/schema.py +459 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/runner.py +16 -0
- freesolo_flash_dev-1.2.127/tests/_helpers/wire_headers.py +24 -0
- freesolo_flash_dev-1.2.127/tests/serving/hosted_loadtest_fake_scenario.json +85 -0
- freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_artifacts.py +92 -0
- freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_metrics.py +203 -0
- freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_protocol.py +389 -0
- freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_runner.py +373 -0
- freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_schedule.py +87 -0
- freesolo_flash_dev-1.2.127/tests/serving/test_loadtest_schema.py +158 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_allocator.py +1 -1
- freesolo_flash_dev-1.2.127/tests/test_authenticated_redirects.py +340 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cancel_remote.py +21 -4
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_publish.py +3 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_ref_pinning.py +3 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_freesolo_api_transport.py +4 -3
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_jobs.py +155 -245
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lambda_runner.py +32 -307
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_multi_gpu_gate.py +0 -25
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_oom_escalate_gpu.py +30 -62
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_multiturn_failure_exit.py +38 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_resume_safety.py +69 -21
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_train.py +414 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_orchestrator_flash.py +4 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_projects.py +5 -4
- freesolo_flash_dev-1.2.127/tests/test_provider_routing.py +1941 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_resume_on_retry.py +9 -3
- freesolo_flash_dev-1.2.127/tests/test_retry_decision.py +226 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_runmgmt.py +1448 -530
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_chat_transport.py +55 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_api.py +20 -11
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_checkpoints_coverage.py +2 -6
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_envs_coverage.py +21 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_source_attestation_flow.py +6 -5
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_staged_environment.py +9 -1
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_teacher_broker.py +2 -2
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_weight_cache.py +3 -3
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/uv.lock +1 -1
- freesolo_flash_dev-1.2.123/flash/runner/lifecycle/attempts.py +0 -151
- freesolo_flash_dev-1.2.123/flash/runner/supervise/retry_decision.py +0 -206
- freesolo_flash_dev-1.2.123/flash/runner/supervise/seed_submission.py +0 -935
- freesolo_flash_dev-1.2.123/tests/test_provider_routing.py +0 -3019
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.env.example +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/deploy-modal-dev.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/deploy-modal.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/dev-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/production-kernel-cache-ready.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/publish-serving-image.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/CHANGELOG.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/Dockerfile +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/Dockerfile.serve +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/README.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docker/patch_vllm_moe_lora.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/docs/serving-contract.md +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/openai_sse.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/_internal/version.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/adapters/targets.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/imports.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/list.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/push.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/retained.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/setup.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/episode.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/params.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/test.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/warnings.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/account.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/catalog.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/deploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/log_follow.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/runs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/traces.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/train.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/ops/worker_output.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/serving/deploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/serving/identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/serving/status.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/serving/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/account.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/env.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/main.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/models.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/serve_parser.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/traces.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/parsing/training.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/image_descriptors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/reasoning_normalization.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/core/catalog.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/core/grpo.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/core/spec.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/currency.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/support/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/support/huggingface.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/support/verl_checkpoint.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/support/verl_policy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/support/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/entry/worker.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/runtime/state.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/backend_common.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/opd_train.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/score_batcher.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/child/patches.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/launch/config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/train/sft/setup/config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/capabilities.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/engine/worker/verl/process_census.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/adapter.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/base.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/loader.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/pull.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/loading/staged.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/meta/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/package/direct_tokens.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/host/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/host/failmark.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/host/hostlog.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/instance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/poll.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/provider.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/net/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/net/auth.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/net/deadline.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/net/http.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/_lifecycle/net/worker.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/allocator.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/realized.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/registry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/core/sharding.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/lambda_/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/cost.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/execution/resources.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/runpod/serverless/endpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/client/api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/accounting/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/accounting/costs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/accounting/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/preparation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/reporting.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/lifecycle/submit.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/results/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/attach_reconcile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/deploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/runtime_capsule/profiles.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/__main__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/chat_stream.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/http.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/launch.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/manifest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/materialize.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/openai.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/app/progress.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/protocol.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/provenance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/responses.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/contract/urls.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/_canonical.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/_serialization.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/_urls.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/credentials.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/planning.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/control/types.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/adapter_check.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/deploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/export.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/profiles.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/readiness.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/deployment/resolve.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/common/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/common/records.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/execution/operations.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/planning/plan.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/planning/resources.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/openai.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/runtime_support.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/streaming.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/thinking.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/request/validation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/adapters.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/engine.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/prompt.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/sampling.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serve/runtime/types.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/asgi/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/asgi/app.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/asgi/cli.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/ops/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/ops/serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/envs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/registry/runs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/teacher/errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/domain/teacher/requests.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/serving_chat.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/serving_completion.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/serving_revisions.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/serving_smoke.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/app/modal_app.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/accounting/usage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/accounting/usage_facts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/accounting/usage_outbox.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/boot.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/generation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/lora_engine.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/lora_entries.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/model_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/engine/support.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/adapter_routes.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/body_limit.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/context.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/headers.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/inference_routes.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/router.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/http/routing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/openai_request.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/openai_stream.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/provenance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/requests.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/responses.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/schemas.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/streaming.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/io/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/access.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/lookup.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/persisted_columns.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/persistence.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/registration.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/registry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/settings.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/supabase_rest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/serving/src/store/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/snapshot/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/snapshot/archive.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/teacher/provider_status.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/check_rollout_identity_actor.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/check_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/qualify_serving_profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/serve_launch.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/chat_provenance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/chat_transport.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/managed_chat.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/server_api_plugin.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/capture_qwen38_27b_metadata.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/checkpoint_fixtures.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/conftest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_base_model_serving.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_chat_auth.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_chat_authorizer.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_checkpoint_model_validation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_engine_error_status.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_fp8_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_immutable_engine.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_immutable_revisions.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_immutable_schemas.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_mirror_sampling_parity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_modal_deploy_identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_modal_image_paths.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_model_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_multimodal.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_openai_stream_options.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_per_model_gpu.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_persistence.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_pre_first_disconnect.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_registry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_registry_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_request_body_limit.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_router.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_router_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_router_edge_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_schemas_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_serve_reasoning_split.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_serve_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_serve_thinking.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_settings.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_structured_outputs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_supabase_rest_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_usage_outbox.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving/test_usage_reporter.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving_conformance/__init__.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving_conformance/conftest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/serving_conformance/test_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_capture_qwen38_metadata.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_chat_foundations.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_serve_deploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_serve_status.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_currency.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_checkpoint_durability.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_process_census.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_grpo_rollout_identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_image_environment_capability.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_image_incremental_processor.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lora_rank_nested_rung.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lora_targeting.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_lora_targeting_pinned_verl.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_mirror_sampling_parity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_opd_replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_rl_train.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_run_registry_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_bootstrap_http.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_launch.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_manifest.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_materialize.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_packaging.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_app_progress.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_control.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_docs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_modal_contract_lock.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_modal_sdk.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_modal_sdk_deadlines.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_modal_teardown_identity.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_profile_qualification.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_profiles.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_provisioning_common.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_provisioning_modal.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_resolve_provenance.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_runtime_adapters.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_runtime_engine.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_runtime_package.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serve_runtime_types.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_managed_chat_requests.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_server_standalone.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serving_conformance_gate.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_train.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vllm_moe_lora_backport.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_warmstart_image_adapters.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.127
|
|
4
4
|
Summary: Flash — managed LoRA post-training (SFT/GRPO/OPD) for Freesolo environments, driven by the `flash` CLI
|
|
5
5
|
Project-URL: Homepage, https://github.com/freesolo-co/flash
|
|
6
6
|
Project-URL: Repository, https://github.com/freesolo-co/flash
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Hosted inference load testing
|
|
2
|
+
|
|
3
|
+
The `flash.serving.loadtest` package is an operator-only, public-HTTP load harness for the hosted
|
|
4
|
+
inference front door. It is not imported by production serving and it does not create, resize, inspect,
|
|
5
|
+
or destroy provider resources. Operators run it explicitly with the serving extra:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
uv run --extra serving python -m flash.serving.loadtest validate scenario.json
|
|
9
|
+
uv run --extra serving python -m flash.serving.loadtest discover scenario.json
|
|
10
|
+
uv run --extra serving python -m flash.serving.loadtest run scenario.json results/fake-five-phase
|
|
11
|
+
uv run --extra serving python -m flash.serving.loadtest summarize results/fake-five-phase
|
|
12
|
+
uv run --extra serving python -m flash.serving.loadtest verify results/fake-five-phase
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
`validate` is allocation-free and performs no HTTP request. `discover` calls only `GET /healthz`.
|
|
16
|
+
`run` calls only `GET /healthz` and `POST /v1/chat/completions`. The credential value is read from the
|
|
17
|
+
environment variable named by `credential_env`; never put a credential value in a scenario file.
|
|
18
|
+
There are no request retries.
|
|
19
|
+
|
|
20
|
+
## Evidence boundary
|
|
21
|
+
|
|
22
|
+
The harness verifies exact deployment SHA and deployment id, required capabilities, required base
|
|
23
|
+
models, and immutable adapter response provenance. It checks health before and after every phase and
|
|
24
|
+
at the midpoint of each duration phase. Its evidence remains HTTP-only:
|
|
25
|
+
|
|
26
|
+
- it cannot prove that a live replica scaled out;
|
|
27
|
+
- it cannot prove that an engine was actually cold or at scale zero;
|
|
28
|
+
- it cannot distinguish a dispatch deadline from the underlying resource constraint;
|
|
29
|
+
- it cannot establish an availability SLA;
|
|
30
|
+
- fake and test runs cannot support production claims.
|
|
31
|
+
|
|
32
|
+
A `cold_burst` therefore records either `cold_scale_out_intent_http_unattested` or
|
|
33
|
+
`true_scale_zero_intent_http_unattested`. That is an honest statement of the authored intent, not an
|
|
34
|
+
attestation of provider state.
|
|
35
|
+
|
|
36
|
+
## Strict scenario
|
|
37
|
+
|
|
38
|
+
Scenarios are strict Pydantic v2 JSON. Unknown fields and fields that belong to another phase kind are
|
|
39
|
+
rejected. The authored `phases` list may contain any subset of the five supported discriminated kinds
|
|
40
|
+
in any order, except that a present `cold_burst` must be the first inference-producing phase. A complete
|
|
41
|
+
five-phase scenario uses `cold_burst`, `warm`, `sustained`, `mixed`, then `overload`.
|
|
42
|
+
|
|
43
|
+
Dynamic base-model discovery reads `base_models` from `/healthz`, then applies `include`, `exclude`, and
|
|
44
|
+
`require`. `require` is a hard gate.
|
|
45
|
+
|
|
46
|
+
Explicit adapter targets must name the immutable model id, base model, and checkpoint. The request
|
|
47
|
+
carries `X-Freesolo-Expected-Checkpoint` and the response must match `X-Freesolo-Checkpoint`.
|
|
48
|
+
|
|
49
|
+
`adapter_revision` and `hf_revision` are optional, because the hosted app does not emit them on every
|
|
50
|
+
deployment. Omitting one verifies checkpoint identity alone rather than passing a header check the
|
|
51
|
+
deployment never answered. Supplying one asserts that the deployment does emit it, so a response that
|
|
52
|
+
omits or changes it is a provenance mismatch, never a skipped assertion. A supplied `hf_revision` must
|
|
53
|
+
still be a canonical 40-character hub commit SHA.
|
|
54
|
+
|
|
55
|
+
`/healthz` is read for `ok`, deployment identity, capabilities, and `base_models`. `accounting_ok` is
|
|
56
|
+
optional: a deployment that does not report it is not treated as an accounting failure, while an
|
|
57
|
+
explicit `false` stops the run. Note that `/healthz.gpus` is the configured supported-base-model engine
|
|
58
|
+
count, not a live container count, so it can never be read as a replica count.
|
|
59
|
+
|
|
60
|
+
This fake example covers every phase kind:
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"schema_version": 1,
|
|
65
|
+
"name": "fake five-phase hosted inference",
|
|
66
|
+
"endpoint": "https://example.invalid",
|
|
67
|
+
"expected_deployment": {
|
|
68
|
+
"sha": "94210a3",
|
|
69
|
+
"deployment_id": "fake-deployment-1"
|
|
70
|
+
},
|
|
71
|
+
"credential_env": "FAKE_SERVING_TOKEN",
|
|
72
|
+
"required_capabilities": ["permanent_checkpoint_identity"],
|
|
73
|
+
"discovery": {
|
|
74
|
+
"enabled": true,
|
|
75
|
+
"include": ["model-a", "model-b", "model-c"],
|
|
76
|
+
"exclude": ["model-b"],
|
|
77
|
+
"require": ["model-a"]
|
|
78
|
+
},
|
|
79
|
+
"targets": [],
|
|
80
|
+
"profiles": [
|
|
81
|
+
{
|
|
82
|
+
"name": "short",
|
|
83
|
+
"weight": 1.0,
|
|
84
|
+
"messages": [{ "role": "user", "content": "Return one short sentence." }],
|
|
85
|
+
"max_tokens": 16,
|
|
86
|
+
"temperature": 0.0,
|
|
87
|
+
"top_p": 0.95
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"client": {
|
|
91
|
+
"connect_timeout_seconds": 5.0,
|
|
92
|
+
"read_timeout_seconds": 30.0,
|
|
93
|
+
"write_timeout_seconds": 10.0,
|
|
94
|
+
"pool_timeout_seconds": 5.0,
|
|
95
|
+
"max_in_flight": 8,
|
|
96
|
+
"max_scheduling_lag_ms": 100.0
|
|
97
|
+
},
|
|
98
|
+
"seed": 17,
|
|
99
|
+
"fake": true,
|
|
100
|
+
"phases": [
|
|
101
|
+
{
|
|
102
|
+
"name": "cold",
|
|
103
|
+
"kind": "cold_burst",
|
|
104
|
+
"requests": 4,
|
|
105
|
+
"burst_window_seconds": 0.2,
|
|
106
|
+
"cold_intent": "cold_scale_out"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"name": "warm",
|
|
110
|
+
"kind": "warm",
|
|
111
|
+
"requests": 4,
|
|
112
|
+
"concurrency": 2
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"name": "sustained",
|
|
116
|
+
"kind": "sustained",
|
|
117
|
+
"duration_seconds": 2.0,
|
|
118
|
+
"rate_rps": 2.0
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"name": "mixed",
|
|
122
|
+
"kind": "mixed",
|
|
123
|
+
"duration_seconds": 2.0,
|
|
124
|
+
"rate_rps": 3.0
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "overload",
|
|
128
|
+
"kind": "overload",
|
|
129
|
+
"expects_capacity_contract": false,
|
|
130
|
+
"stages": [
|
|
131
|
+
{ "duration_seconds": 1.0, "rate_rps": 4.0 },
|
|
132
|
+
{ "duration_seconds": 1.0, "rate_rps": 8.0 }
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
`warm` is the only closed-loop phase. Its authored request count is completed with bounded
|
|
140
|
+
concurrency. Every other phase is open-loop. Its dispatch offsets are computed before the phase
|
|
141
|
+
starts. If the client cannot admit an offset within `max_in_flight` and `max_scheduling_lag_ms`, the
|
|
142
|
+
harness writes a terminal `client_admission_missed` record instead of converting that offered request
|
|
143
|
+
into delayed closed-loop work. Overload stages use the same rule and never retry.
|
|
144
|
+
|
|
145
|
+
## Stream and artifact contract
|
|
146
|
+
|
|
147
|
+
Streaming requests ask for usage. Every SSE `data:` payload must be valid JSON, followed by exactly
|
|
148
|
+
one `[DONE]`; data after `[DONE]`, a missing terminal finish reason, or a missing `[DONE]` is a protocol
|
|
149
|
+
error. The first nonempty `content` or `reasoning_content` delta defines time to first generated token.
|
|
150
|
+
The first nonempty visible `content` delta is measured separately. Missing usage makes token throughput
|
|
151
|
+
unavailable for that request; the harness never estimates tokens from chunks.
|
|
152
|
+
|
|
153
|
+
Only HTTP 503 with error code `serving_capacity_unavailable` and `Retry-After: 1` is counted as exact
|
|
154
|
+
capacity rejection. Other 503 responses and 429 responses are separate classes.
|
|
155
|
+
|
|
156
|
+
An error body can echo the request back, so only a machine error code is read out of it. A code that
|
|
157
|
+
does not look like a slug is recorded as `unrecognized_code`, and a free-text `message` is never
|
|
158
|
+
persisted.
|
|
159
|
+
|
|
160
|
+
### Overload cannot be demonstrated without a capacity contract
|
|
161
|
+
|
|
162
|
+
Current Flash `dev` implements no retryable capacity contract. Its engine error mapping returns 504
|
|
163
|
+
for an engine timeout and 502 for other upstream failures; there is no capacity 503 and no
|
|
164
|
+
`Retry-After: 1`. An overload phase run against such a deployment therefore cannot produce a clean
|
|
165
|
+
rejection signal at all.
|
|
166
|
+
|
|
167
|
+
An overload phase declares this with `expects_capacity_contract`, which defaults to `false`. The flag
|
|
168
|
+
never changes how a response is classified. It only records whether an absence of capacity rejections
|
|
169
|
+
is an accurate description of the deployment or a failed expectation:
|
|
170
|
+
|
|
171
|
+
| observed | `expects_capacity_contract` | verdict |
|
|
172
|
+
| ------------------------------- | --------------------------- | ----------------------------------------------------- |
|
|
173
|
+
| at least one exact capacity 503 | either | `capacity_rejection_observed` |
|
|
174
|
+
| none | `false` | `overload_not_demonstrated` |
|
|
175
|
+
| none | `true` | `overload_not_demonstrated_despite_declared_contract` |
|
|
176
|
+
|
|
177
|
+
**An absence of capacity rejections is never evidence of headroom.** A deployment without a capacity
|
|
178
|
+
contract sheds load in ways this harness cannot distinguish from ordinary failure over public HTTP.
|
|
179
|
+
When any overload phase declares no capacity contract, the summary carries that limitation explicitly.
|
|
180
|
+
No overload phase is ever summarized as a success on the strength of a quiet run.
|
|
181
|
+
|
|
182
|
+
Each run claims a new result directory and writes:
|
|
183
|
+
|
|
184
|
+
- `scenario.authored.json`, with prompt content redacted;
|
|
185
|
+
- `scenario.resolved.json`, with discovered targets and cold-intent labels;
|
|
186
|
+
- `events.jsonl`, through one event writer with one terminal row per scheduled request;
|
|
187
|
+
- `summary.json`, atomically;
|
|
188
|
+
- `complete.json`, last, with row counts, byte counts, and SHA-256 hashes.
|
|
189
|
+
|
|
190
|
+
An interrupted run closes the event stream but never writes `complete.json`. It remains inspectable and
|
|
191
|
+
`verify` rejects it as incomplete. Version 1 has no partial-phase resume.
|
|
192
|
+
|
|
193
|
+
Artifacts never contain credentials, authorization or request headers, generated text, raw response
|
|
194
|
+
bodies, or per-request prompts. Persisted response headers are limited to content type, retry-after,
|
|
195
|
+
and immutable provenance.
|
|
196
|
+
|
|
197
|
+
## Metrics
|
|
198
|
+
|
|
199
|
+
`summary.json` reports overall and per-phase, per-target, and per-profile values:
|
|
200
|
+
|
|
201
|
+
- scheduled, dispatched, completed, successful, and client-admission-missed counts;
|
|
202
|
+
- offered, dispatch, and completion rates with explicit denominator seconds and basis;
|
|
203
|
+
- scheduling, header, first-generated, first-visible, and total latency p50, p90, p95, p99, and max;
|
|
204
|
+
- usage coverage and token totals, aggregate output token rate, and decode token rate;
|
|
205
|
+
- peak client in-flight, HTTP status and error counts, retry count, exact capacity ratio, and 429 count;
|
|
206
|
+
- authored versus achieved target and profile mix;
|
|
207
|
+
- explicit sustained and mixed authored, scheduling, dispatch, and completion windows.
|
|
208
|
+
|
|
209
|
+
## B200 owner handoff
|
|
210
|
+
|
|
211
|
+
The harness does not allocate a B200 and does not attest provider state. The B200 deployment owner must
|
|
212
|
+
complete the provider-side handoff before an operator runs a non-fake scenario:
|
|
213
|
+
|
|
214
|
+
1. identify the already deployed endpoint, exact release SHA, deployment id, and intended base models;
|
|
215
|
+
2. confirm the B200 resource is owned, budgeted, and governed outside this harness;
|
|
216
|
+
3. decide whether the cold intent is `cold_scale_out` or `true_scale_zero`, and establish that state
|
|
217
|
+
through the provider control plane without using the harness;
|
|
218
|
+
4. provide only the name of the existing credential environment variable in the scenario;
|
|
219
|
+
5. run `validate`, then `discover`, and confirm the resolved two-of-three or other intended model set;
|
|
220
|
+
6. run into a new result directory, then run `verify` before interpreting `summary.json`;
|
|
221
|
+
7. retain provider-side replica and hardware evidence separately if a scale-out or B200 claim is needed.
|
|
222
|
+
|
|
223
|
+
A successful HTTP load run is not provider-side proof of B200 identity, replica count, scale-to-zero,
|
|
224
|
+
or autoscaler behavior.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""authenticated stdlib HTTP that does not let the stdlib replay a credential across a redirect.
|
|
2
|
+
|
|
3
|
+
`urllib.request.Request` keeps two header bags. `headers` survives a redirect:
|
|
4
|
+
`HTTPRedirectHandler.redirect_request` builds the follow-up request by copying it, stripping only
|
|
5
|
+
content headers. `unredirected_hdrs` does not survive, and `AbstractHTTPHandler.do_open` sends both.
|
|
6
|
+
application code that writes `Request(url, headers={"Authorization": ...})` lands the credential in
|
|
7
|
+
the surviving bag, so the stdlib replays the token against whatever host the `Location` names.
|
|
8
|
+
|
|
9
|
+
the fix is to move the caller's credential into the bag a redirect cannot copy. it survives any
|
|
10
|
+
transport that forwards the request as it was handed over, so it still holds for a tracing or
|
|
11
|
+
compatibility wrapper that only delegates.
|
|
12
|
+
|
|
13
|
+
two things it does not cover, both because the credential ends up on an object this module never
|
|
14
|
+
touched:
|
|
15
|
+
|
|
16
|
+
- a transport that rebuilds the request. `Request.header_items()` merges both bags, so a wrapper
|
|
17
|
+
that reconstructs with `Request(url, headers=dict(req.header_items()))` puts the credential back
|
|
18
|
+
in the redirectable bag, and its inner call follows redirects normally.
|
|
19
|
+
- a credential a handler adds mid-open. `redirect_request` builds each hop as a fresh `Request`, so
|
|
20
|
+
anything scoped to the object we were handed is gone by the second hop; a credentialed
|
|
21
|
+
`ProxyHandler` re-adds `Proxy-Authorization` to that fresh request and no work on ours reaches it.
|
|
22
|
+
|
|
23
|
+
containing either is the redirect refusal's job, not this function's.
|
|
24
|
+
|
|
25
|
+
on top of that the stdlib path refuses the hop outright. no flash or freesolo endpoint answers 3xx,
|
|
26
|
+
so this rejects rather than deciding which hops are safe, and surfaces as an `HTTPError` that every
|
|
27
|
+
caller already classifies.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
from __future__ import annotations
|
|
31
|
+
|
|
32
|
+
import urllib.request
|
|
33
|
+
from collections.abc import Callable
|
|
34
|
+
from typing import Any
|
|
35
|
+
|
|
36
|
+
_UrlOpen = Callable[..., Any]
|
|
37
|
+
|
|
38
|
+
# headers that authenticate the request and must never reach a redirect target.
|
|
39
|
+
_CREDENTIAL_HEADERS = ("authorization", "proxy-authorization", "cookie", "x-api-key")
|
|
40
|
+
|
|
41
|
+
# the stdlib transport as it was before any test replaced it. comparing against the live
|
|
42
|
+
# `urllib.request.urlopen` instead would defeat the check: a replaced attribute is trivially
|
|
43
|
+
# identical to itself, so every fake would be routed through the opener stack and never called.
|
|
44
|
+
_STDLIB_URLOPEN: _UrlOpen = urllib.request.urlopen
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class _NoRedirectHandler(urllib.request.HTTPRedirectHandler):
|
|
48
|
+
"""raise 3xx instead of following it."""
|
|
49
|
+
|
|
50
|
+
def redirect_request(self, req, fp, code, msg, headers, newurl):
|
|
51
|
+
return None
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _move_credentials_to_the_unredirected_bag(request: urllib.request.Request) -> None:
|
|
55
|
+
"""move the caller's credential headers into the bag `redirect_request` does not copy.
|
|
56
|
+
|
|
57
|
+
`do_open` sends `unredirected_hdrs` and `headers` together, so the request is unchanged on the
|
|
58
|
+
wire. only the follow-up request a redirect would build loses them.
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
for name in list(request.headers):
|
|
62
|
+
if name.lower() not in _CREDENTIAL_HEADERS:
|
|
63
|
+
continue
|
|
64
|
+
# `do_open` gives `unredirected_hdrs` precedence, so an entry already there is the value
|
|
65
|
+
# being sent. dropping the redirectable duplicate keeps that principal on the wire;
|
|
66
|
+
# promoting it instead would silently authenticate as someone else.
|
|
67
|
+
canonical = request.unredirected_hdrs.get(name)
|
|
68
|
+
value = request.headers[name]
|
|
69
|
+
# `remove_header` pops from both bags, so it has to run before the value is re-added.
|
|
70
|
+
request.remove_header(name)
|
|
71
|
+
request.add_unredirected_header(name, value if canonical is None else canonical)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _urlopen_no_redirect(
|
|
75
|
+
request: urllib.request.Request,
|
|
76
|
+
*,
|
|
77
|
+
timeout: float,
|
|
78
|
+
urlopen: _UrlOpen | None = None,
|
|
79
|
+
):
|
|
80
|
+
"""open one authenticated request through a transport that refuses redirects.
|
|
81
|
+
|
|
82
|
+
the transport is read at call time rather than bound at import, because many tests replace
|
|
83
|
+
`urllib.request.urlopen` with a fake. a replaced transport is called directly: it is not the
|
|
84
|
+
stdlib opener stack, so routing it through a no-redirect opener would not reach it. every
|
|
85
|
+
authenticated call site in flash passes either nothing or `urllib.request.urlopen` itself, so
|
|
86
|
+
production always takes the refusing opener below; the direct branch exists for those fakes.
|
|
87
|
+
|
|
88
|
+
that makes the refusal guarantee conditional on the transport, and the condition is the global
|
|
89
|
+
being the one this module imported. rebinding `urllib.request.urlopen` after import - a test
|
|
90
|
+
fake, an apm shim installed at runtime - routes the call to the direct branch, which does not
|
|
91
|
+
refuse. relocation still runs first and still holds, so the credential cannot ride a hop the
|
|
92
|
+
replacement forwards as handed over; what is lost is refusal, and with it containment of the
|
|
93
|
+
two rebuild-and-handler gaps the module docstring names. a replacement transport owns its own
|
|
94
|
+
redirect policy.
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
_move_credentials_to_the_unredirected_bag(request)
|
|
98
|
+
transport = urlopen if urlopen is not None else urllib.request.urlopen
|
|
99
|
+
if transport is not _STDLIB_URLOPEN:
|
|
100
|
+
return transport(request, timeout=timeout)
|
|
101
|
+
return urllib.request.build_opener(_NoRedirectHandler()).open(request, timeout=timeout)
|
{freesolo_flash_dev-1.2.123 → freesolo_flash_dev-1.2.127}/flash/cli/commands/env/testing/eval.py
RENAMED
|
@@ -202,27 +202,6 @@ def _score_case(
|
|
|
202
202
|
)
|
|
203
203
|
|
|
204
204
|
|
|
205
|
-
_READY_DEPLOYMENT_STATES = frozenset({"ready", "deployed"})
|
|
206
|
-
_BUSY_DEPLOYMENT_STATES = frozenset({"queued", "smoke_testing", "reconciling"})
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
def _live_deployment(client, run_id: str) -> dict | None:
|
|
210
|
-
"""The run's deployment record, whatever state it is in, or None when it has none.
|
|
211
|
-
|
|
212
|
-
Match by run id because `deployment_for` misses step deployments. Busy records name the rollout
|
|
213
|
-
target and hide the revision that may still be serving.
|
|
214
|
-
"""
|
|
215
|
-
for entry in client.deployments() or ():
|
|
216
|
-
listed = entry.get("deployment") or {}
|
|
217
|
-
if run_id not in (listed.get("run_id"), entry.get("run_id")):
|
|
218
|
-
continue
|
|
219
|
-
# the listing omits undeployed/dry_run rows, so anything here is servable.
|
|
220
|
-
if not listed.get("run_id") and entry.get("run_id"):
|
|
221
|
-
listed = {**listed, "run_id": entry["run_id"]}
|
|
222
|
-
return listed
|
|
223
|
-
return None
|
|
224
|
-
|
|
225
|
-
|
|
226
205
|
def _case_ids(cases: list[EvalCase]) -> list[str]:
|
|
227
206
|
"""Stable per-case ids, disambiguating sidecars that reuse one id across cases.
|
|
228
207
|
|
|
@@ -681,7 +681,7 @@ spending another GPU run:
|
|
|
681
681
|
| Local-only env path in config | Config validation says there is no local path mode | Publish first, then use the returned slug in `[environment] id`. `flash train` only runs published env ids, not local paths. |
|
|
682
682
|
| Config knobs are in the wrong table | Validation rejects `[grpo]`, `[sft]`, or unknown `[train]` keys | Put `epochs`, `group_size`, `max_completion_tokens`, `temperature`, `max_context_tokens`, LoRA, and other training knobs under `[train]`. |
|
|
683
683
|
| GPU selection is not what you expected | Leaving `[gpu] type` unset may select a different fitting class as prices or capacity change | Set `[gpu] type` to an active validated class to hard-pin it, to a list (`["A100 PCIe", "A100 SXM"]`) to allow several, or leave it unset for managed cheapest-fit allocation. `train.hf_repo` remains platform-managed. |
|
|
684
|
-
| A
|
|
684
|
+
| A run stops after an infrastructure or OOM failure | No candidate with strictly more usable VRAM remains, even if another provider offers the same-size GPU | Widen `[gpu] type` or the card-count ceiling to include a strictly larger fitting shape, or reduce the workload footprint. Flash preserves allocator order among larger candidates and never retries an equal-size shape. A managed shared-cache `no_capacity` or `poll_error` gets one cacheless same-shape retry before this rule applies. |
|
|
685
685
|
| Secrets are not available on the worker | Reward code works locally but remote logs show missing API keys or auth failures | List secret names under `[environment] secrets = [...]`, export those env vars locally before submit, or put them in local `.env` / `.env.local`. Never hard-code secret values in the config. |
|
|
686
686
|
| Scorer dependency is missing on the worker | Reward code works locally but every reward is `0.0` remotely; the import your scorer needs is installed in your venv, not the worker's | List the packages your scorer imports under `[environment] pip = ["pymongo>=4.6"]`. They are installed alongside Flash's own worker requirement. `flash env test` names the failing import locally before you spend a GPU on it. Entries name packages only: pip options and URLs with inline credentials are rejected, because the spec is stored and uploaded in plaintext (put the credential in `[environment] secrets`). |
|
|
687
687
|
| Wrong model / thinking setting | Config validation fails, or chat behavior does not match the run | Config validation is authoritative for model and thinking compatibility. Thinking is a run-level choice, and `flash models chat` does not expose an override flag. |
|
|
@@ -690,7 +690,7 @@ spending another GPU run:
|
|
|
690
690
|
| Reward rises but behavior is worse | Short, templated, malformed, or reward-hacked outputs score well | Deploy the adapter and probe real examples. Add hard validity gates before judge calls, penalize degenerate shortcuts, and judge the outcome rather than the surface string. |
|
|
691
691
|
| OPD makes the student worse, not better | The distilled adapter scores _below_ its SFT/base start even though the per-token loss fell | The teacher, not a knob, is the ceiling. Reverse-KL only pulls the student toward the managed GLM-5.2 teacher, so a teacher that is weak or wrong on _your_ task transfers its mistakes. Vet the teacher before you spend — the "On-policy distillation" section gives the two ways to do that with a managed key. If it can't beat your student, use GRPO or SFT instead — OPD cannot exceed a teacher that can't do the task. |
|
|
692
692
|
| Output is truncated | Correct-looking answers cut off mid-response or JSON is incomplete | Increase `max_completion_tokens` for GRPO/OPD rollouts or `max_context_tokens` for total prompt+completion context only after seeing truncation. Oversizing them by default just burns memory/cost. |
|
|
693
|
-
| Infrastructure, CUDA, OOM, vLLM, or kernel failure | Run errors before useful metrics, often during setup/model load |
|
|
693
|
+
| Infrastructure, CUDA, OOM, vLLM, or kernel failure | Run errors before useful metrics, often during setup/model load | Read `flash runs log <run-id>`. Flash advances a single executed-width-aware usable-VRAM floor for candidate-bound infrastructure and OOM failures, then retries only a strictly larger fitting candidate while keeping infrastructure and OOM budgets separate. Reduce `max_context_tokens`, `max_completion_tokens`, or `group_size` when no larger candidate remains. |
|
|
694
694
|
| Run looks stuck after disconnecting | Terminal stopped streaming but the job may still be alive | Ctrl-C detaches. Use `flash runs log <run-id> --follow` to reattach, `flash runs log <run-id>` for the console/error output, or `flash runs cancel <run-id>` if you intentionally want to stop it. |
|
|
695
695
|
| Two runs training the same thing | `flash runs list` shows a live run you thought you had killed, on top of the one you just submitted | Killing the `flash train` client only detaches; it never cancels. Always `flash runs list` and cancel the stale run _before_ re-submitting, and never wrap `flash train` in `timeout`. |
|
|
696
696
|
| Wrong identity spends the money | Push/train lands in an org you did not expect, or a run id you know is valid comes back "unknown" | `FREESOLO_API_KEY` in the environment silently overrides `flash login`. Run `flash whoami` first. Run visibility is scoped to the key that created the run, so archive result baselines to disk rather than relying on `flash runs list` to find them later. |
|
|
@@ -9,6 +9,7 @@ import urllib.request
|
|
|
9
9
|
from typing import Any
|
|
10
10
|
|
|
11
11
|
from flash._internal.channel import CLI_NAME
|
|
12
|
+
from flash._internal.http import _urlopen_no_redirect
|
|
12
13
|
from flash.client.http import (
|
|
13
14
|
FREESOLO_AUTH_VERIFY_PATH,
|
|
14
15
|
FREESOLO_EVAL_RUNS_PATH,
|
|
@@ -34,7 +35,7 @@ def verify_freesolo_key(api_key: str, base_url: str | None = None) -> None:
|
|
|
34
35
|
headers={"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"},
|
|
35
36
|
)
|
|
36
37
|
try:
|
|
37
|
-
with
|
|
38
|
+
with _urlopen_no_redirect(req, timeout=30) as resp:
|
|
38
39
|
resp.read()
|
|
39
40
|
except urllib.error.HTTPError as exc:
|
|
40
41
|
if exc.code in (401, 403):
|
|
@@ -77,7 +78,7 @@ def _freesolo_request(
|
|
|
77
78
|
headers={"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"},
|
|
78
79
|
)
|
|
79
80
|
try:
|
|
80
|
-
with
|
|
81
|
+
with _urlopen_no_redirect(req, timeout=timeout) as resp:
|
|
81
82
|
raw = resp.read()
|
|
82
83
|
except urllib.error.HTTPError as exc:
|
|
83
84
|
if exc.code == 401:
|
|
@@ -15,6 +15,7 @@ from collections.abc import Iterator, Mapping
|
|
|
15
15
|
from typing import Any
|
|
16
16
|
|
|
17
17
|
from flash._internal.channel import CLI_NAME
|
|
18
|
+
from flash._internal.http import _urlopen_no_redirect
|
|
18
19
|
from flash._internal.openai_sse import (
|
|
19
20
|
DeltaEvent,
|
|
20
21
|
ErrorEvent,
|
|
@@ -408,7 +409,7 @@ class ApiClient:
|
|
|
408
409
|
deadline = time.monotonic() + body_deadline if body_deadline is not None else None
|
|
409
410
|
with (
|
|
410
411
|
self._translate_http_errors(),
|
|
411
|
-
|
|
412
|
+
_urlopen_no_redirect(
|
|
412
413
|
req, timeout=_capped_timeout(timeout or self.timeout, deadline)
|
|
413
414
|
) as resp,
|
|
414
415
|
):
|
|
@@ -435,7 +436,7 @@ class ApiClient:
|
|
|
435
436
|
)
|
|
436
437
|
with (
|
|
437
438
|
self._translate_http_errors(),
|
|
438
|
-
|
|
439
|
+
_urlopen_no_redirect(req, timeout=timeout or self.timeout) as resp,
|
|
439
440
|
):
|
|
440
441
|
if max_bytes is not None:
|
|
441
442
|
return _read_capped_response(resp, max_bytes)
|
|
@@ -804,7 +805,7 @@ class ApiClient:
|
|
|
804
805
|
decoder = codecs.getincrementaldecoder("utf-8")()
|
|
805
806
|
with (
|
|
806
807
|
self._translate_http_errors(),
|
|
807
|
-
|
|
808
|
+
_urlopen_no_redirect(req, timeout=30 * 60) as resp,
|
|
808
809
|
):
|
|
809
810
|
content_type = resp.headers.get("Content-Type", "")
|
|
810
811
|
media_type = content_type.partition(";")[0].strip().lower()
|
|
@@ -318,6 +318,7 @@ def _write_child_shims(
|
|
|
318
318
|
("train/opd/child/plugin.py", "flash_opd_plugin.py"),
|
|
319
319
|
("train/opd/child/bridge.py", "flash_opd_bridge.py"),
|
|
320
320
|
("train/opd/child/structured.py", "flash_opd_structured.py"),
|
|
321
|
+
("train/opd/child/tensors.py", "flash_opd_tensors.py"),
|
|
321
322
|
("train/opd/child/multiturn.py", "flash_opd_multiturn.py"),
|
|
322
323
|
("train/opd/child/entry.py", "flash_opd_entry.py"),
|
|
323
324
|
("train/opd/child/replay_guard.py", "flash_opd_replay_guard.py"),
|
|
@@ -112,26 +112,6 @@ def _warmstart_adapter_path(
|
|
|
112
112
|
return adapter_dir
|
|
113
113
|
|
|
114
114
|
|
|
115
|
-
def _verl_image_message_content(content) -> str:
|
|
116
|
-
if isinstance(content, str):
|
|
117
|
-
return content
|
|
118
|
-
if content is None:
|
|
119
|
-
return ""
|
|
120
|
-
if not isinstance(content, list):
|
|
121
|
-
raise ValueError("multimodal message content must be text or content blocks")
|
|
122
|
-
parts: list[str] = []
|
|
123
|
-
for block in content:
|
|
124
|
-
if not isinstance(block, dict):
|
|
125
|
-
raise ValueError("multimodal message content blocks must be objects")
|
|
126
|
-
if block.get("type") == "text":
|
|
127
|
-
parts.append(str(block.get("text") or ""))
|
|
128
|
-
elif block.get("type") == "image":
|
|
129
|
-
parts.append("<image>")
|
|
130
|
-
else:
|
|
131
|
-
raise ValueError(f"unsupported multimodal SFT content block {block.get('type')!r}")
|
|
132
|
-
return "".join(parts)
|
|
133
|
-
|
|
134
|
-
|
|
135
115
|
_restore_verl_resume = partial(restore_verl_resume, job_label="SFT")
|
|
136
116
|
|
|
137
117
|
|
|
@@ -26,6 +26,15 @@ if PLUGIN_LOADED_EXTERNALLY:
|
|
|
26
26
|
from flash_multiturn_glue import multi_modal_image_count
|
|
27
27
|
from flash_opd_multiturn import build_flash_multi_turn_agent_loop
|
|
28
28
|
from flash_opd_structured import StructuredOutputReplay, canonical_structured_spec
|
|
29
|
+
from flash_opd_tensors import (
|
|
30
|
+
full_sequence_signal_sequences as _full_sequence_signal_sequences,
|
|
31
|
+
)
|
|
32
|
+
from flash_opd_tensors import (
|
|
33
|
+
packed_full_sequence as _packed_full_sequence,
|
|
34
|
+
)
|
|
35
|
+
from flash_opd_tensors import (
|
|
36
|
+
signal_sequences as _signal_sequences,
|
|
37
|
+
)
|
|
29
38
|
else:
|
|
30
39
|
from flash.engine.worker.train.core.child.glue import multi_modal_image_count
|
|
31
40
|
from flash.engine.worker.train.opd.child.multiturn import build_flash_multi_turn_agent_loop
|
|
@@ -33,6 +42,15 @@ else:
|
|
|
33
42
|
StructuredOutputReplay,
|
|
34
43
|
canonical_structured_spec,
|
|
35
44
|
)
|
|
45
|
+
from flash.engine.worker.train.opd.child.tensors import (
|
|
46
|
+
full_sequence_signal_sequences as _full_sequence_signal_sequences,
|
|
47
|
+
)
|
|
48
|
+
from flash.engine.worker.train.opd.child.tensors import (
|
|
49
|
+
packed_full_sequence as _packed_full_sequence,
|
|
50
|
+
)
|
|
51
|
+
from flash.engine.worker.train.opd.child.tensors import (
|
|
52
|
+
signal_sequences as _signal_sequences,
|
|
53
|
+
)
|
|
36
54
|
|
|
37
55
|
_PERMANENT_TEACHER_EXIT = 86
|
|
38
56
|
_TRANSIENT_TEACHER_EXIT = 87
|
|
@@ -86,16 +104,6 @@ def deterministic_rollout_seed(
|
|
|
86
104
|
return int.from_bytes(digest, "big") & ((1 << 63) - 1)
|
|
87
105
|
|
|
88
106
|
|
|
89
|
-
def _signal_sequences(group_ids, response_mask):
|
|
90
|
-
"""Return the per-sequence mask for rows carrying at least one aligned student token."""
|
|
91
|
-
return ((group_ids >= 0) & response_mask.bool()).any(dim=-1)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
def _full_sequence_signal_sequences(group_ids):
|
|
95
|
-
"""Detect aligned metadata in native full-sequence teacher tensors."""
|
|
96
|
-
return group_ids.ge(0).flatten(start_dim=1).any(dim=-1)
|
|
97
|
-
|
|
98
|
-
|
|
99
107
|
def _flash_groupwise_reverse_kl_values(
|
|
100
108
|
student_logprobs,
|
|
101
109
|
teacher_logsums,
|
|
@@ -408,8 +416,14 @@ def _register_flash_distillation_loss() -> None:
|
|
|
408
416
|
def flash_groupwise_reverse_kl(config, distillation_config, model_output, data):
|
|
409
417
|
_set_current_global_batch_info(config, data)
|
|
410
418
|
student_logprobs = no_padding_2_padding(model_output["log_probs"], data)
|
|
411
|
-
teacher_logsums = no_padding_2_padding(
|
|
412
|
-
|
|
419
|
+
teacher_logsums = no_padding_2_padding(
|
|
420
|
+
_packed_full_sequence(data["teacher_logprobs"], data), data
|
|
421
|
+
).squeeze(-1)
|
|
422
|
+
group_ids = (
|
|
423
|
+
no_padding_2_padding(_packed_full_sequence(data["teacher_ids"], data), data)
|
|
424
|
+
.squeeze(-1)
|
|
425
|
+
.long()
|
|
426
|
+
)
|
|
413
427
|
response_mask = data["response_mask"]
|
|
414
428
|
if response_mask.is_nested:
|
|
415
429
|
response_mask = response_mask.to_padded_tensor(False)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""Batch-layout helpers for the flash OPD distillation loss.
|
|
2
|
+
|
|
3
|
+
verl hands the loss a `TensorDict` whose fields are laid out per field rather than per batch:
|
|
4
|
+
`list_of_dict_to_tensordict` stacks a field when every sample's tensor shares one shape and
|
|
5
|
+
nests it only when the shapes differ. So `prompts`, `teacher_logprobs`, and `teacher_ids` can
|
|
6
|
+
each arrive nested or padded independently, and the loss has to read all of them either way.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def signal_sequences(group_ids, response_mask):
|
|
13
|
+
"""Return the per-sequence mask for rows carrying at least one aligned student token."""
|
|
14
|
+
return ((group_ids >= 0) & response_mask.bool()).any(dim=-1)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def full_sequence_signal_sequences(group_ids):
|
|
18
|
+
"""Detect aligned metadata in native full-sequence teacher tensors.
|
|
19
|
+
|
|
20
|
+
Padded only: `flatten` raises on a nested tensor's ragged dim, so callers holding a nested
|
|
21
|
+
tensor must reduce per row instead.
|
|
22
|
+
"""
|
|
23
|
+
return group_ids.ge(0).flatten(start_dim=1).any(dim=-1)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def packed_full_sequence(tensor, data):
|
|
27
|
+
"""Put a full-sequence teacher tensor into the layout `no_padding_2_padding` documents.
|
|
28
|
+
|
|
29
|
+
That helper wants a nested tensor or `(total_nnz, *)` and reads `.values()` only when
|
|
30
|
+
nested, so a padded teacher measures as `bsz` and trips its `total_nnz` assertion.
|
|
31
|
+
|
|
32
|
+
The mask decides which positions are real, never the row's shape. verl pads a teacher row on
|
|
33
|
+
both sides (`_pad_teacher_outputs` left-pads by `prompt_width - prompt_length` and right-pads
|
|
34
|
+
the response), so a length alone cannot say where the real tokens sit and selecting a prefix
|
|
35
|
+
would silently train against the pad.
|
|
36
|
+
"""
|
|
37
|
+
if tensor.is_nested:
|
|
38
|
+
return tensor
|
|
39
|
+
if "attention_mask" in data:
|
|
40
|
+
return tensor[data["attention_mask"].bool()]
|
|
41
|
+
# no mask: only a nested-prompt batch may omit that key, and only such a batch carries the
|
|
42
|
+
# lengths needed to check the stack. verl stacks this field only when every sequence shares
|
|
43
|
+
# one length, and pads a row only to the strided widths, so an unmasked stack is full.
|
|
44
|
+
prompts = data["prompts"]
|
|
45
|
+
if not prompts.is_nested:
|
|
46
|
+
raise AssertionError(
|
|
47
|
+
"flash OPD strided batch carries no attention mask, so real token positions "
|
|
48
|
+
"cannot be located"
|
|
49
|
+
)
|
|
50
|
+
lengths = prompts.offsets().diff() + data["responses"].offsets().diff()
|
|
51
|
+
if int(lengths.min()) != tensor.shape[1] or int(lengths.max()) != tensor.shape[1]:
|
|
52
|
+
raise AssertionError(
|
|
53
|
+
"flash OPD teacher tensor is padded but the batch carries no attention mask: "
|
|
54
|
+
f"width {tensor.shape[1]} against lengths {int(lengths.min())}..{int(lengths.max())}"
|
|
55
|
+
)
|
|
56
|
+
return tensor.flatten(0, 1)
|
|
@@ -929,9 +929,8 @@ class Provider(Protocol):
|
|
|
929
929
|
|
|
930
930
|
# NOTE: ``supports_weight_cache: bool`` is an OPTIONAL capability attr (read via
|
|
931
931
|
# ``getattr(prov, "supports_weight_cache", False)``, off this Protocol for the same isinstance
|
|
932
|
-
# reason as below): True
|
|
933
|
-
#
|
|
934
|
-
# defaults False.
|
|
932
|
+
# reason as below): True for providers that attach the managed shared weight cache. The runner
|
|
933
|
+
# gates its one-shot cache-less retry fallback on it; every other provider defaults False.
|
|
935
934
|
|
|
936
935
|
# ``run_instances_remaining(run_id)`` is optional and must stay off this runtime-checkable
|
|
937
936
|
# protocol. callers use getattr in server/_runtime.py. ``[]`` confirms clear; non-empty means a
|