freesolo-flash-dev 1.4.5__tar.gz → 1.4.7__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.4.5 → freesolo_flash_dev-1.4.7}/CHANGELOG.md +13 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/PKG-INFO +16 -3
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/README.md +15 -2
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/scaffold/TRAINING.md +4 -7
- freesolo_flash_dev-1.4.7/flash/engine/profiling/sft_tools.py +49 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/sft_workload.py +15 -8
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/backend_common.py +1 -4
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +1 -1
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/jobs.py +2 -2
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/retry_decision.py +6 -16
- freesolo_flash_dev-1.4.7/flash/serve/request/schema_types.py +36 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/tool_calls.py +20 -31
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/tool_calls.py +1 -1
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/asgi/app.py +6 -4
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/auth.py +43 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/modal_app.py +1 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_autoscaling.py +13 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_plane_lease.py +22 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_resume_on_retry.py +3 -14
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_retry_decision.py +29 -23
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_runmgmt.py +6 -2
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_auth_singleflight.py +87 -0
- freesolo_flash_dev-1.4.7/tests/test_sft_tools.py +264 -0
- freesolo_flash_dev-1.4.7/tests/test_tool_scalar_unions.py +127 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/uv.lock +1 -1
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.dockerignore +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.env.example +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/scripts/notify_tests_repo.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/deploy-deepinfer.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/deploy-modal-dev.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/deploy-modal.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/dev-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/production-kernel-cache-ready.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/publish-serving-image.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/.gitignore +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/Dockerfile +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/Dockerfile.serve +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/LICENSE +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/NOTICE +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/bake_sandbox_entry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/docker/patch_vllm_moe_lora.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/background.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/http.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/http_deadline.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/openai_sse.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/_internal/version.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/adapters/targets.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/imports.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/list.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/push.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/retained.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/setup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/episode.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/eval.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/eval_args.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/evaluations.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/params.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/test.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/env/testing/warnings.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/account.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/catalog.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/deploy.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/log_follow.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/runs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/traces.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/train.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/ops/worker_output.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/deploy.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/identity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/status.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/commands/serving/undeploy.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/account.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/custom.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/env.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/errors.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/main.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/models.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/serve_parser.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/traces.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/parsing/training.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/image_descriptors.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/reasoning_normalization.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/structured_options.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/core/catalog.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/core/grpo.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/core/spec.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/currency.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/async_client.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/backend.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/billing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/client.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/controller.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/managed.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/server.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/session.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/starter.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/types.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/validation.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/custom/worker.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/sft_rows.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/checkpoint_transport.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/huggingface.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/model_snapshot.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/verl_checkpoint.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/support/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/entry/worker.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/cpu_handoff.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/transfer.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/perf/model_size.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/phases.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/runtime/state.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/agents.yaml +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/batch.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/compact_checkpoint.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/configuration.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/engine.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/flashinfer_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/launch.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/model.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/observations.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/options.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/prompt_media.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/queue.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/readiness.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/reference.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/registration.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/replay.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/rollout.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/rollout_contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/startup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/tracking.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/trainer.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/upstream.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/vllm_worker.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/child/worker.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/persistence.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/lifecycle/timing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/episode.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/generation.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/identity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/core/rollout/lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/rl_train.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/score_batcher.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/sft_train.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/credit.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/identity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/metrics.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/reward.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/rollout.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/trainer.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/child/transport.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/dataset.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/loop.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/schedule.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/child/trainer.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/train/sft/setup/config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/adapter_merger.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/capabilities.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/adapter.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/base.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/loader.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/pull.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/loading/staged.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/cache_security.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/cache_storage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/evaluations.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/identity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/meta/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/package/direct_tokens.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/registry/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/registry/azure.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/registry/packages.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/scoring/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/scoring/context.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/envs/scoring/response.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/attempt.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/processes.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/instance.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/poll.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/auth.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/deadline.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/http.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/_lifecycle/net/worker.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/allocator.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/base.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/fit_errors.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/preflight.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/registry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/core/sharding.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/api.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/auth.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/checkpoint_upload.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/handles.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/prefetch.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/pricing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/provider.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/providers/modal/startup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/artifacts.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/costs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/accounting/weight_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/attempts.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/claim_lock.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/cleanup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/deadlines.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/preparation.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/reporting.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/runtime_credentials.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/state.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/status.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/lifecycle/submit.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/results/deployments.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/attach.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/deploy.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/errors.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/execution.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/recovery.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runtime_capsule/profiles.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/schema/custom.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/__main__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/bootstrap.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/chat_stream.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/http.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/launch.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/manifest.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/materialize.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/openai.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/app/progress.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/errors.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/protocol.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/provenance.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/responses.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/contract/urls.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/_canonical.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/_serialization.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/_urls.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/credentials.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/planning.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/control/types.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/adapter_check.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/deploy.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/download.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/export.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/preflight.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/profiles.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/readiness.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/deployment/resolve.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/common/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/common/records.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/operations.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/plan.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/resources.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/openai.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/runtime_support.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/streaming.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/text_scan.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/thinking.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/tool_template.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/transport.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/request/validation.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/adapters.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/cache_admission.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/cache_retention.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/cache_scheduler.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/engine.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/errors.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/hub.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/multimodal.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/prompt.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/prompt_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/sampling.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/token_batch.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/token_prefix_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serve/runtime/types.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/asgi/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/asgi/cli.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/billing/charges.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/ops/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/ops/serving_resources.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/blob_envs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/env_files.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/environment_registry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/envs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/projects.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/domain/registry/runs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/deployment_jobs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/deployment_state.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/internal_client.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/plane_lease.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/platform/runtime.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/adapter_download.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/custom.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/env_files.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_chat.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_completion.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_revisions.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/server/routes/serving_smoke.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/app/GPU_QUALIFICATION.md +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/app/README.md +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/app/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/app/modal_app.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/app/timeouts.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/README.md +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/autoscaling.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/client.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/events.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/http.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/render.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/retries.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/app/rollout.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/errors.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/protocol.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/contract/tokenizer.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/engram_transport.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/image.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/patches.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/native/transport.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/bridge.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/kernel_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/prefill_scheduler.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/prefix_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/provenance.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/routing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/snapshots.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/tiered_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/warmup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/deepinfer/runtime/worker.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/accounting_smoke_test.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/canary.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/evidence.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/promotion/gate.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage_facts.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage_outbox.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/accounting/usage_retry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/boot.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/errors.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/generation.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/hub.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/lora_engine.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/lora_entries.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/model_config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/prequant_config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/reasoning_usage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/support.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/text_tokenizer.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/engine/warmup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/adapter_routes.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/body_limit.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/context.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/headers.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/inference_routes.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/key_rate_limit.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/rate_limit.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/router.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/routing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/http/stream_response.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/cache_namespace.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/multimodal.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/openai_request.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/openai_stream.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/provenance.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/requests.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/responses.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/schemas.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/streaming.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/io/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/access.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/lookup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/persisted_columns.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/persistence.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/registration.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/registry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/settings.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/supabase_rest.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/store/undeploy.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/_tasks.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/client.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/engine.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/serving/src/stream_channel/protocol.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/snapshot/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/snapshot/archive.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/check_rollout_identity_actor.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/check_source_layout.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/fixtures/custom_algorithm.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/fixtures/modal_environment/dataset/train.jsonl +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/fixtures/modal_environment/environment.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/fixtures/modal_environment/evaluations.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/qualify_serving_profile.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/smoke_custom_training.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/smoke_modal_sft.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/scripts/smoke_modal_training.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/serve_launch.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/billing_precheck.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/chat_provenance.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/chat_transport.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/deployments.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/managed_chat.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/modal.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/server_api_plugin.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/_helpers/wire_headers.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/capture_qwen38_27b_metadata.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/checkpoint_fixtures.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/conftest.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_adapter_hub.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_artifact_protections.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_base_model_serving.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_chat_auth.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_chat_authorizer.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_fingerprint_validation.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_model_validation.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_checkpoint_revocation.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_deadline.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_hosted.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_http_deadline.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_latency.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_optimizations.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_parallel.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_prefill_scheduler.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_provenance.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_retention.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_retries.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_rollout.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_routing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_tiering.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_engine_error_status.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_fp8_config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_immutable_engine.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_immutable_revisions.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_immutable_schemas.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_inference_duration.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_internal_header_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_key_rate_limit.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_key_rate_limit_review.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_kv_namespace.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_latency_admission.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_mirror_sampling_parity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_modal_deploy_identity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_modal_image_paths.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_model_config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_multimodal.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_openai_stream_options.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_per_model_gpu.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_persistence.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_pre_first_disconnect.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_prequant_config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_accounting_smoke.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_canary.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_evidence.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_promotion_gate.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_qwen_warmup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_rate_limit.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_reasoning_usage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_registration_endpoint.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_registry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_registry_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_request_body_limit.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_router.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_router_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_router_edge_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_schemas_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_serve_reasoning_split.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_serve_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_serve_thinking.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_settings.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_stream_channel.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_stream_response_disconnect.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_stream_wait_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_structured_outputs_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_supabase_rest_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_token_prefix_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_delivery_concurrency.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_outbox.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_usage_reporter.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving_conformance/__init__.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving_conformance/conftest.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving_conformance/test_contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_adapter_download.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_authenticated_redirects.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_azure_environment_registry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_background_supervisor.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_bake_sandbox_entry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_base_environment_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_billing_response_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_bootstrap_process_groups.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_bootstrap_reentry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_bootstrap_worker_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cache_admission.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cache_retention.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cache_scheduler.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_capture_qwen38_metadata.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_chat_foundations.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_cancellation.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_deployment_inventory_api.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_deployments.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_listing_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_storage_overlap.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoint_transport.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_serve_deploy.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_serve_status.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_client_deadline_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_compact_checkpoint.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_currency.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_cpu_checkpoint_handoff.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_client.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_gpu_selection.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_gradients.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_managed.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_session.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_custom_worker.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_deployment_cleanup_resilience.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_deployment_generation_completion.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_deployment_registration_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_list_registry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_environment_cache_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_environment_publish_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_flashinfer_aot_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_generation_eos.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_checkpoint_durability.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_metric_stream.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_reward_context.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_grpo_rollout_identity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_heartbeat_startup_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_hosted_adapter_admission.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_image_environment_capability.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_image_incremental_processor.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_kernel_bake_build_contracts.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_local_credential_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_lora_rank_nested_rung.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_lora_targeting.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_lora_targeting_pinned_verl.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_mirror_sampling_parity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_api_loop.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_prefetch_snapshot.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_provider.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_startup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_training_lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_modal_weight_warm.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_multimodal_boundary_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_notify_tests_repo.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_offline_http.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_prompt_budget.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_removed_algorithms.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_removed_training_settings.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_replay_guard.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_reward_server_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_rl_train.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_rollout_engine_prompt.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_run_log_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_run_registry_lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_runtime_credentials.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_runtime_secret_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_schema_boundary_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_bootstrap_http.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_launch.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_manifest.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_materialize.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_packaging.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_app_progress.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_cache_resource_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_chat_transport.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_control.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_docs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_contract_lock.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_sdk.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_sdk_deadlines.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_modal_teardown_identity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_profile_qualification.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_profiles.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_provisioning_common.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_provisioning_modal.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_resolve_provenance.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_adapters.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_engine.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_hub.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_package.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serve_runtime_types.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_api.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_managed_chat_requests.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_serving_resources.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_server_standalone.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serving_conformance_gate.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serving_input_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_batch_prefetch.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_cancel_profile_pricing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_cost_reduction.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_dataset_lazy_images.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_dataset_nulls.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_memory_policy.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_step_floor.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_train.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_warmup_schedule.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_smoke_content_integrity.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_source_attestation_flow.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_source_layout.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_source_snapshot.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_staged_environment.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_status_reporting.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_status_updates.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_structured_option_safety.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_structured_runtime_options.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_submission_outcome.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_tool_call_exact_parsing.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_training_phases.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_transfer_queue_init.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_upload_concurrency.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_upstream_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_upstream_runtime_policy.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_upstream_verl_contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_versioned_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_vllm_moe_lora_backport.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_warmstart_image_adapters.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_watchdog_startup_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -35,6 +35,13 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
|
|
|
35
35
|
run recovery, deployment recovery and the background loops; a plane started beside it serves
|
|
36
36
|
HTTP and leaves new runs queued for the holder until the old plane exits.
|
|
37
37
|
|
|
38
|
+
- SFT rows accept `tools`: OpenAI-style function declarations, validated and normalized exactly
|
|
39
|
+
as a chat request's `tools`. They are rendered through the chat template into every training
|
|
40
|
+
view of the row (transcript, prompt boundary and loss-mask probe), so a tool-calling adapter
|
|
41
|
+
trains on the prompt it is served with. Previously every SFT row rendered without tools, so for
|
|
42
|
+
Qwen3.5 the `# Tools` block that serving prepends to the system turn never appeared in
|
|
43
|
+
training. The block is prompt only, so supervised tokens are unchanged. Rows without `tools`
|
|
44
|
+
render as before; `tools` on an image-bearing row is refused.
|
|
38
45
|
- Custom training rows accept a rectangular `target_tokens` matrix, `[len(tokens)-1, K]`
|
|
39
46
|
with K up to 64, scoring K tokens at every position instead of the next token. `weights`
|
|
40
47
|
then has the same shape and logprobs come back with it, so `forward_backward` computes
|
|
@@ -155,6 +162,12 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
|
|
|
155
162
|
|
|
156
163
|
### Fixed
|
|
157
164
|
|
|
165
|
+
- API-key verification bridges brief Freesolo identity-service outages. A key that verified
|
|
166
|
+
successfully within the last 5 minutes is accepted when verification is unavailable (transport
|
|
167
|
+
errors or 5xx), instead of failing the request with `503 Authentication service unavailable`.
|
|
168
|
+
Live verification still runs on every request while the service answers, and a definitive
|
|
169
|
+
rejection forgets the key, so revocation stays immediate. Long multi-turn rollouts previously
|
|
170
|
+
lost about 13% of episodes to these 503s.
|
|
158
171
|
- Image SFT no longer stores processed pixel tensors in the training parquet. The worker keeps
|
|
159
172
|
each row's small processor fields (image grid, token types) and its saved image files, and the
|
|
160
173
|
training dataset rebuilds `pixel_values` per item, checking the stored grid. Before this,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.7
|
|
4
4
|
Summary: Flash — managed LoRA post-training (SFT/GRPO) 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
|
|
@@ -341,6 +341,13 @@ endpoint returns `409` with a hint to deploy first. Prefer this control-plane en
|
|
|
341
341
|
directly: it enforces run ownership and forwards per-run serving options such as
|
|
342
342
|
thinking-mode parity.
|
|
343
343
|
|
|
344
|
+
Tool parameters use a restricted JSON Schema profile. Inside JSON arrays and objects,
|
|
345
|
+
scalar types can be combined explicitly, for example `"type": ["string", "number",
|
|
346
|
+
"boolean", "null"]` for spreadsheet cells. Empty schemas (`{}`), container unions,
|
|
347
|
+
and unions on top-level function arguments are unsupported. Top-level arguments use
|
|
348
|
+
native parameter text, where a string such as `"12"` and a number would be ambiguous;
|
|
349
|
+
nested JSON preserves those types during generation, streaming, and history replay.
|
|
350
|
+
|
|
344
351
|
### Workload estimates (SFT)
|
|
345
352
|
|
|
346
353
|
`flash train`, `--dry-run`, and `--cost` read the pinned environment's packaged dataset
|
|
@@ -352,8 +359,14 @@ The estimate tokenizes raw `input`/`output` fields plus the statically readable
|
|
|
352
359
|
contract. SFT rows can instead supply `prompt_messages`, a nonempty chat-message list
|
|
353
360
|
that is authoritative for both profiling and training. This preserves stored multi-turn
|
|
354
361
|
histories and screenshot blocks; image-bearing transcripts use unpacked execution.
|
|
355
|
-
The row still requires `input` for dataset identity.
|
|
356
|
-
|
|
362
|
+
The row still requires `input` for dataset identity. A row for a tool-calling agent can also
|
|
363
|
+
supply `tools`, the same OpenAI-style function declarations a chat request sends. Flash
|
|
364
|
+
validates them as serving does and renders them into the row's prompt through the chat template,
|
|
365
|
+
so the adapter trains on the prompt it is served with: Qwen3.5, for example, prepends a
|
|
366
|
+
`# Tools` block to the system turn. The block is prompt, not target, so it lengthens rows
|
|
367
|
+
without adding supervised tokens. Without `tools`, a row trained for a tool-calling deployment
|
|
368
|
+
never sees that block. Environment-added prompts, few-shot
|
|
369
|
+
examples, environment-built tool schemas, filters, and transformations are **not** executed, so real training
|
|
357
370
|
can retain fewer rows, truncate more often, and cost more than the estimate. If no readable dataset exists, cost, dry-run, and
|
|
358
371
|
submit all fail before GPU allocation rather than billing a profiling run.
|
|
359
372
|
|
|
@@ -241,6 +241,13 @@ endpoint returns `409` with a hint to deploy first. Prefer this control-plane en
|
|
|
241
241
|
directly: it enforces run ownership and forwards per-run serving options such as
|
|
242
242
|
thinking-mode parity.
|
|
243
243
|
|
|
244
|
+
Tool parameters use a restricted JSON Schema profile. Inside JSON arrays and objects,
|
|
245
|
+
scalar types can be combined explicitly, for example `"type": ["string", "number",
|
|
246
|
+
"boolean", "null"]` for spreadsheet cells. Empty schemas (`{}`), container unions,
|
|
247
|
+
and unions on top-level function arguments are unsupported. Top-level arguments use
|
|
248
|
+
native parameter text, where a string such as `"12"` and a number would be ambiguous;
|
|
249
|
+
nested JSON preserves those types during generation, streaming, and history replay.
|
|
250
|
+
|
|
244
251
|
### Workload estimates (SFT)
|
|
245
252
|
|
|
246
253
|
`flash train`, `--dry-run`, and `--cost` read the pinned environment's packaged dataset
|
|
@@ -252,8 +259,14 @@ The estimate tokenizes raw `input`/`output` fields plus the statically readable
|
|
|
252
259
|
contract. SFT rows can instead supply `prompt_messages`, a nonempty chat-message list
|
|
253
260
|
that is authoritative for both profiling and training. This preserves stored multi-turn
|
|
254
261
|
histories and screenshot blocks; image-bearing transcripts use unpacked execution.
|
|
255
|
-
The row still requires `input` for dataset identity.
|
|
256
|
-
|
|
262
|
+
The row still requires `input` for dataset identity. A row for a tool-calling agent can also
|
|
263
|
+
supply `tools`, the same OpenAI-style function declarations a chat request sends. Flash
|
|
264
|
+
validates them as serving does and renders them into the row's prompt through the chat template,
|
|
265
|
+
so the adapter trains on the prompt it is served with: Qwen3.5, for example, prepends a
|
|
266
|
+
`# Tools` block to the system turn. The block is prompt, not target, so it lengthens rows
|
|
267
|
+
without adding supervised tokens. Without `tools`, a row trained for a tool-calling deployment
|
|
268
|
+
never sees that block. Environment-added prompts, few-shot
|
|
269
|
+
examples, environment-built tool schemas, filters, and transformations are **not** executed, so real training
|
|
257
270
|
can retain fewer rows, truncate more often, and cost more than the estimate. If no readable dataset exists, cost, dry-run, and
|
|
258
271
|
submit all fail before GPU allocation rather than billing a profiling run.
|
|
259
272
|
|
|
@@ -461,13 +461,10 @@ described above.
|
|
|
461
461
|
Never derive seconds-per-step from total elapsed time (early steps include one-time warmup
|
|
462
462
|
that can dominate a short run).
|
|
463
463
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
> is confirmed dead with no retry pending, or is burning money on a definite unrecoverable
|
|
469
|
-
> fault. An idle GPU during model load is also not evidence of a hang — and it is not
|
|
470
|
-
> evidence that your GPU class is unhealthy, so do not "fix" it by pinning another one.
|
|
464
|
+
A stale heartbeat alone does not identify the failure. Check the provider/attempt state and
|
|
465
|
+
wait for a terminal result or a retry decision for a supported failure category. Host preemption
|
|
466
|
+
is terminal: Flash does not automatically restart a preempted job. Preserve any published
|
|
467
|
+
checkpoints for an explicit follow-up run. An idle GPU during model loading can be normal.
|
|
471
468
|
|
|
472
469
|
### 6. Deploy & chat
|
|
473
470
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""tool declarations an SFT row trains against.
|
|
2
|
+
|
|
3
|
+
A tool-calling agent is served with ``tools=``, and the chat template renders those declarations
|
|
4
|
+
into the prompt (Qwen3.5 prepends a ``# Tools`` block to the system turn). A row rendered without
|
|
5
|
+
them trains on a prompt the deployed adapter never sees. A row may therefore carry ``tools`` -- the
|
|
6
|
+
same per-example field as OpenAI fine-tuning data -- which is validated and normalized exactly as a
|
|
7
|
+
chat request's ``tools`` are (``text_tokenizer`` renders ``tools_wire(normalize_tools(...))``), then
|
|
8
|
+
rendered into every training view of the row. A row without ``tools`` renders as before.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
from flash.serve.request.tool_calls import normalize_tools, tools_wire
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def sft_row_tools(example) -> list[dict[str, Any]] | None:
|
|
19
|
+
"""The row's tools in the form serving renders them, or None when it declares none."""
|
|
20
|
+
if not isinstance(example, dict) or example.get("tools") is None:
|
|
21
|
+
return None
|
|
22
|
+
try:
|
|
23
|
+
return tools_wire(normalize_tools(example["tools"]))
|
|
24
|
+
except ValueError as exc:
|
|
25
|
+
raise ValueError(f"sft tools: {exc}") from exc
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def sft_template_kwargs(thinking: bool, tools: list[dict[str, Any]] | None) -> dict[str, Any]:
|
|
29
|
+
"""Chat-template kwargs for every training view of a row.
|
|
30
|
+
|
|
31
|
+
The transcript, the prompt boundary, the reasoning probe and the loss mask's field probe all
|
|
32
|
+
render with these, so the supervised tokens are located in exactly the text that is trained on.
|
|
33
|
+
Without tools this is the pre-existing thinking-only render.
|
|
34
|
+
"""
|
|
35
|
+
kwargs: dict[str, Any] = {"enable_thinking": thinking, "preserve_thinking": False}
|
|
36
|
+
if tools is not None:
|
|
37
|
+
kwargs["tools"] = tools
|
|
38
|
+
return kwargs
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def reject_image_row_tools(example, *, image_bearing: bool) -> None:
|
|
42
|
+
"""Refuse tools on an image row before any tokenizer or processor is resolved.
|
|
43
|
+
|
|
44
|
+
The image pipeline tokenizes through the processor's own render, so accepting them would silently
|
|
45
|
+
train the row without the declarations it was given. Validating here, while rows are collected,
|
|
46
|
+
also makes a malformed declaration fail with its own message rather than as a capability error.
|
|
47
|
+
"""
|
|
48
|
+
if sft_row_tools(example) is not None and image_bearing:
|
|
49
|
+
raise ValueError("sft tools are not supported on image-bearing rows")
|
{freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/engine/profiling/sft_workload.py
RENAMED
|
@@ -15,6 +15,7 @@ from flash.content.multimodal import NormalizedImages
|
|
|
15
15
|
from flash.content.thinking import messages_for_chat_template
|
|
16
16
|
from flash.engine.plan.recipe import RECIPE
|
|
17
17
|
from flash.engine.plan.steps import resolve_update_horizon, sft_update_steps
|
|
18
|
+
from flash.engine.profiling import sft_tools
|
|
18
19
|
from flash.engine.profiling.sft_image_rows import (
|
|
19
20
|
estimate_sft_image_row,
|
|
20
21
|
process_sft_image_row,
|
|
@@ -417,22 +418,24 @@ def _text_sft_row_spec(
|
|
|
417
418
|
max_length: int,
|
|
418
419
|
row_index: int,
|
|
419
420
|
multiturn: bool,
|
|
421
|
+
tools: list[dict[str, Any]] | None = None,
|
|
420
422
|
) -> tuple[str, _RowReasoning, dict[str, Any]]:
|
|
421
423
|
normalized_prompt = messages_for_chat_template(prompt_messages)
|
|
422
424
|
normalized_completion = messages_for_chat_template(completion_messages)
|
|
423
425
|
normalized_source = [*normalized_prompt, *normalized_completion]
|
|
424
|
-
|
|
426
|
+
template_kwargs = sft_tools.sft_template_kwargs(spec.thinking, tools)
|
|
427
|
+
render = partial(render_transcript, tools=tools)
|
|
428
|
+
text = render(normalized_source)
|
|
425
429
|
prompt_text = tokenizer.apply_chat_template(
|
|
426
430
|
normalized_prompt,
|
|
427
431
|
tokenize=False,
|
|
428
432
|
add_generation_prompt=True,
|
|
429
|
-
|
|
430
|
-
preserve_thinking=False,
|
|
433
|
+
**template_kwargs,
|
|
431
434
|
)
|
|
432
435
|
reasoning = _row_reasoning(
|
|
433
436
|
prompt_messages,
|
|
434
437
|
completion_messages,
|
|
435
|
-
render=
|
|
438
|
+
render=render,
|
|
436
439
|
tokenizer=tokenizer,
|
|
437
440
|
max_length=max_length,
|
|
438
441
|
)
|
|
@@ -444,7 +447,7 @@ def _text_sft_row_spec(
|
|
|
444
447
|
"prompt_text": prompt_text,
|
|
445
448
|
"target_messages": normalized_completion,
|
|
446
449
|
"source_messages": normalized_source,
|
|
447
|
-
"template_kwargs":
|
|
450
|
+
"template_kwargs": template_kwargs,
|
|
448
451
|
# measurement carried alongside the row rather than in it: the parquet row is built from
|
|
449
452
|
# an explicit key list below, so neither key reaches verl.
|
|
450
453
|
"row_index": row_index,
|
|
@@ -481,13 +484,12 @@ def _tokenize_prompt_rows(
|
|
|
481
484
|
# denominator. summed after filtering instead.
|
|
482
485
|
reasoning_by_index: dict[int, _RowReasoning] = {}
|
|
483
486
|
|
|
484
|
-
def render_transcript(messages: list[dict]) -> str:
|
|
487
|
+
def render_transcript(messages: list[dict], tools: list[dict[str, Any]] | None = None) -> str:
|
|
485
488
|
return tokenizer.apply_chat_template(
|
|
486
489
|
messages_for_chat_template(messages),
|
|
487
490
|
tokenize=False,
|
|
488
491
|
add_generation_prompt=False,
|
|
489
|
-
|
|
490
|
-
preserve_thinking=False,
|
|
492
|
+
**sft_tools.sft_template_kwargs(spec.thinking, tools),
|
|
491
493
|
)
|
|
492
494
|
|
|
493
495
|
for row_index, (
|
|
@@ -498,6 +500,7 @@ def _tokenize_prompt_rows(
|
|
|
498
500
|
) in enumerate(prompt_rows):
|
|
499
501
|
has_images = record_has_images(example, prompt_messages)
|
|
500
502
|
_reject_image_completion(completion_messages, image_bearing=has_images)
|
|
503
|
+
tools = sft_tools.sft_row_tools(example)
|
|
501
504
|
# read before the image branch rewrites `completion_messages` to its text-only form.
|
|
502
505
|
multiturn = len(completion_messages) > 1
|
|
503
506
|
if multiturn:
|
|
@@ -561,6 +564,7 @@ def _tokenize_prompt_rows(
|
|
|
561
564
|
max_length=max_length,
|
|
562
565
|
row_index=row_index,
|
|
563
566
|
multiturn=multiturn,
|
|
567
|
+
tools=tools,
|
|
564
568
|
)
|
|
565
569
|
sampled_texts.append(text)
|
|
566
570
|
reasoning_by_index[row_index] = reasoning
|
|
@@ -913,6 +917,9 @@ def prepare_sft_workload(
|
|
|
913
917
|
else:
|
|
914
918
|
prompt_messages = env.prompt_messages(example)
|
|
915
919
|
completion_messages, coerced_scalar_output = _sft_completion_with_provenance(env, example)
|
|
920
|
+
sft_tools.reject_image_row_tools(
|
|
921
|
+
example, image_bearing=record_has_images(example, prompt_messages)
|
|
922
|
+
)
|
|
916
923
|
prompt_rows.append((example, prompt_messages, completion_messages, coerced_scalar_output))
|
|
917
924
|
package_root = getattr(env, "package_root", None)
|
|
918
925
|
multimodal = any(
|
|
@@ -159,10 +159,7 @@ def _install_flash_attn(py: str) -> None:
|
|
|
159
159
|
return
|
|
160
160
|
except subprocess.CalledProcessError as e:
|
|
161
161
|
if attempt == FLASH_ATTN_INSTALL_ATTEMPTS - 1:
|
|
162
|
-
#
|
|
163
|
-
# fresh worker instead of failing the run. bounded by the plane's own retry budget
|
|
164
|
-
# (INFRA_RETRY_FLOOR), so a genuinely broken wheel spec still terminates rather than
|
|
165
|
-
# looping -- it just costs a few provisioning attempts to establish that.
|
|
162
|
+
# preserve the infrastructure failure in the terminal record after local retries.
|
|
166
163
|
raise RetriableInfraError(
|
|
167
164
|
f"prebuilt flash-attn wheel install failed {FLASH_ATTN_INSTALL_ATTEMPTS}x "
|
|
168
165
|
f"(exit {e.returncode}): {FLASH_ATTN_SPEC}"
|
|
@@ -56,7 +56,7 @@ _MAX_ATTEMPT_ID = (1 << 63) - 1
|
|
|
56
56
|
|
|
57
57
|
|
|
58
58
|
class RetriableBootstrapError(RuntimeError):
|
|
59
|
-
"""
|
|
59
|
+
"""Infrastructure failure recorded in the attempt's terminal marker."""
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
class WorkerInterrupted(BaseException):
|
|
@@ -68,8 +68,8 @@ def poll(handle, spec, *, log=None, deadline_at=None):
|
|
|
68
68
|
|
|
69
69
|
def process_failure():
|
|
70
70
|
# the provider exit status survives an artifact-store outage. ordinary process errors
|
|
71
|
-
# must not
|
|
72
|
-
# signals/unknown status remain host-loss candidates; explicit
|
|
71
|
+
# must not be mislabeled as host loss merely because their failure upload hit 429.
|
|
72
|
+
# signals/unknown status remain host-loss candidates; explicit worker markers still win.
|
|
73
73
|
if type(returncode) is int and 0 < returncode < 128:
|
|
74
74
|
return f"Modal worker stopped with exit code {returncode} without a terminal record"
|
|
75
75
|
return None
|
{freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/flash/runner/supervise/retry_decision.py
RENAMED
|
@@ -8,7 +8,7 @@ from dataclasses import dataclass, replace
|
|
|
8
8
|
from flash.core.spec import JobSpec
|
|
9
9
|
|
|
10
10
|
INFRA_RETRY_FLOOR = 5
|
|
11
|
-
INFRA_RETRY_FAILURES = frozenset({"stalled", "no_capacity", "poll_error"
|
|
11
|
+
INFRA_RETRY_FAILURES = frozenset({"stalled", "no_capacity", "poll_error"})
|
|
12
12
|
CANDIDATE_RETRY_FAILURES = INFRA_RETRY_FAILURES | {"oom"}
|
|
13
13
|
CACHE_FALLBACK_FAILURES = frozenset({"no_capacity", "poll_error"})
|
|
14
14
|
_STATE_KEYS = frozenset(
|
|
@@ -185,7 +185,11 @@ def _restore_last_decision(raw: object, counters: dict) -> PersistedRetryDecisio
|
|
|
185
185
|
or not failure
|
|
186
186
|
):
|
|
187
187
|
raise ValueError("persisted retry state has an invalid last decision")
|
|
188
|
-
|
|
188
|
+
plan = _restore_plan(raw["plan"], counters)
|
|
189
|
+
# an older saved decision cannot authorize a failure the current policy no longer retries.
|
|
190
|
+
if plan.retry and failure not in CANDIDATE_RETRY_FAILURES:
|
|
191
|
+
plan = RetryPlan(False, "not retrying")
|
|
192
|
+
return PersistedRetryDecision(attempt, failure, plan)
|
|
189
193
|
|
|
190
194
|
|
|
191
195
|
def _decision_snapshot(decision: PersistedRetryDecision | None) -> dict | None:
|
|
@@ -325,20 +329,6 @@ def transition_failure(
|
|
|
325
329
|
observation,
|
|
326
330
|
attempt,
|
|
327
331
|
)
|
|
328
|
-
if failure == "job_preempted":
|
|
329
|
-
# Preemption says nothing about memory demand. Advancing the OOM floor here
|
|
330
|
-
# made a healthy worker at the largest allowed shape impossible to resume.
|
|
331
|
-
if state.infra_used >= state.infra_retries:
|
|
332
|
-
plan = RetryPlan(False, "not retrying: infrastructure retry budget exhausted")
|
|
333
|
-
else:
|
|
334
|
-
ordinal = state.infra_used + 1
|
|
335
|
-
state = replace(state, infra_used=ordinal, cache_retry_shape=None)
|
|
336
|
-
plan = RetryPlan(
|
|
337
|
-
True,
|
|
338
|
-
"retrying after preemption (resume from last checkpoint)",
|
|
339
|
-
ordinal,
|
|
340
|
-
)
|
|
341
|
-
return _finish(state, plan, observation, attempt)
|
|
342
332
|
floor = max(state.usable_vram_floor, _candidate_usable_vram_gb(chosen))
|
|
343
333
|
state = replace(state, usable_vram_floor=floor, cache_retry_shape=None)
|
|
344
334
|
if candidates is not None and not any(
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"""Exact JSON Schema type matching for tool declarations and arguments."""
|
|
2
|
+
|
|
3
|
+
import math
|
|
4
|
+
from decimal import Decimal
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def _matches_type(value: Any, schema_type: str | list[str]) -> bool:
|
|
9
|
+
if type(schema_type) is list:
|
|
10
|
+
return any(_matches_type(value, member) for member in schema_type)
|
|
11
|
+
if schema_type == "null":
|
|
12
|
+
return value is None
|
|
13
|
+
if schema_type == "boolean":
|
|
14
|
+
return type(value) is bool
|
|
15
|
+
if schema_type == "integer":
|
|
16
|
+
return (
|
|
17
|
+
type(value) is int
|
|
18
|
+
or (type(value) is Decimal and _decimal_is_integral(value))
|
|
19
|
+
or (type(value) is float and math.isfinite(value) and value.is_integer())
|
|
20
|
+
)
|
|
21
|
+
if schema_type == "number":
|
|
22
|
+
if type(value) is Decimal:
|
|
23
|
+
return value.is_finite()
|
|
24
|
+
return type(value) is int or (type(value) is float and math.isfinite(value))
|
|
25
|
+
if schema_type == "string":
|
|
26
|
+
return type(value) is str
|
|
27
|
+
if schema_type == "array":
|
|
28
|
+
return type(value) is list
|
|
29
|
+
return type(value) is dict
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _decimal_is_integral(value: Decimal) -> bool:
|
|
33
|
+
if not value.is_finite():
|
|
34
|
+
return False
|
|
35
|
+
digits, exponent = value.as_tuple().digits, value.as_tuple().exponent
|
|
36
|
+
return exponent >= 0 or all(digit == 0 for digit in digits[exponent:])
|
|
@@ -12,6 +12,7 @@ from typing import Any
|
|
|
12
12
|
|
|
13
13
|
from flash.serve.contract.protocol import MAX_CHAT_REQUEST_BYTES, TEXT_TYPES
|
|
14
14
|
from flash.serve.request import text_scan
|
|
15
|
+
from flash.serve.request.schema_types import _decimal_is_integral, _matches_type
|
|
15
16
|
from flash.serve.request.text_scan import TOOL_CALL_END, TOOL_CALL_START
|
|
16
17
|
from flash.serve.request.text_scan import skip_whitespace as _skip_whitespace
|
|
17
18
|
from flash.serve.request.tool_template import last_query_index, rendered_turn_prefix
|
|
@@ -37,6 +38,7 @@ _MAX_FIXED_DECIMAL_DIGITS = _MAX_NUMERIC_LITERAL_DIGITS = 1024
|
|
|
37
38
|
_MAX_NUMERIC_LITERAL_EXPONENT = 1_000_000
|
|
38
39
|
_MAX_ENUM_INTEGER_MAGNITUDE = 10**_MAX_NUMERIC_LITERAL_DIGITS
|
|
39
40
|
_SCHEMA_TYPES = frozenset(["array", "boolean", "integer", "null", "number", "object", "string"]) # fmt: skip
|
|
41
|
+
_SCALAR_SCHEMA_TYPES = _SCHEMA_TYPES - {"array", "object"}
|
|
40
42
|
_SCHEMA_KEYS = frozenset(["additionalProperties", "description", "enum", "items", "properties", "required", "type"]) # fmt: skip
|
|
41
43
|
|
|
42
44
|
|
|
@@ -317,7 +319,22 @@ def _normalize_schema(
|
|
|
317
319
|
if unknown:
|
|
318
320
|
raise error_type(f"{path} uses unsupported schema keyword(s): {', '.join(sorted(unknown))}")
|
|
319
321
|
schema_type = raw.get("type")
|
|
320
|
-
if type(schema_type) is
|
|
322
|
+
if type(schema_type) is list:
|
|
323
|
+
if (
|
|
324
|
+
not 1 <= len(schema_type) <= len(_SCALAR_SCHEMA_TYPES)
|
|
325
|
+
or any(
|
|
326
|
+
type(member) is not str or member not in _SCALAR_SCHEMA_TYPES
|
|
327
|
+
for member in schema_type
|
|
328
|
+
)
|
|
329
|
+
or len(set(schema_type)) != len(schema_type)
|
|
330
|
+
):
|
|
331
|
+
raise error_type(
|
|
332
|
+
f"{path}.type must be a nonempty unique list of supported scalar types"
|
|
333
|
+
)
|
|
334
|
+
if root or direct:
|
|
335
|
+
raise error_type(f"{path}.type unions are supported only inside JSON arrays or objects")
|
|
336
|
+
schema_type = list(schema_type)
|
|
337
|
+
elif type(schema_type) is not str or schema_type not in _SCHEMA_TYPES:
|
|
321
338
|
raise error_type(f"{path}.type must be one supported JSON Schema type")
|
|
322
339
|
if root and schema_type != "object":
|
|
323
340
|
raise error_type(f"{path} must be a root object schema")
|
|
@@ -498,7 +515,8 @@ def _validate_tool_result(
|
|
|
498
515
|
|
|
499
516
|
def _canonicalize_integer_values(value: Any, schema: Mapping[str, Any]) -> Any:
|
|
500
517
|
schema_type = schema["type"]
|
|
501
|
-
|
|
518
|
+
types = schema_type if type(schema_type) is list else [schema_type]
|
|
519
|
+
if "integer" in types and "number" not in types and type(value) is Decimal:
|
|
502
520
|
return value.to_integral_value()
|
|
503
521
|
if schema_type == "object":
|
|
504
522
|
properties = schema["properties"]
|
|
@@ -511,35 +529,6 @@ def _canonicalize_integer_values(value: Any, schema: Mapping[str, Any]) -> Any:
|
|
|
511
529
|
return value
|
|
512
530
|
|
|
513
531
|
|
|
514
|
-
def _matches_type(value: Any, schema_type: str) -> bool:
|
|
515
|
-
if schema_type == "null":
|
|
516
|
-
return value is None
|
|
517
|
-
if schema_type == "boolean":
|
|
518
|
-
return type(value) is bool
|
|
519
|
-
if schema_type == "integer":
|
|
520
|
-
return (
|
|
521
|
-
type(value) is int
|
|
522
|
-
or (type(value) is Decimal and _decimal_is_integral(value))
|
|
523
|
-
or (type(value) is float and math.isfinite(value) and value.is_integer())
|
|
524
|
-
)
|
|
525
|
-
if schema_type == "number":
|
|
526
|
-
if type(value) is Decimal:
|
|
527
|
-
return value.is_finite()
|
|
528
|
-
return type(value) is int or (type(value) is float and math.isfinite(value))
|
|
529
|
-
if schema_type == "string":
|
|
530
|
-
return type(value) is str
|
|
531
|
-
if schema_type == "array":
|
|
532
|
-
return type(value) is list
|
|
533
|
-
return type(value) is dict
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
def _decimal_is_integral(value: Decimal) -> bool:
|
|
537
|
-
if not value.is_finite():
|
|
538
|
-
return False
|
|
539
|
-
digits, exponent = value.as_tuple().digits, value.as_tuple().exponent
|
|
540
|
-
return exponent >= 0 or all(digit == 0 for digit in digits[exponent:])
|
|
541
|
-
|
|
542
|
-
|
|
543
532
|
def _load_exact_json(value: str) -> Any:
|
|
544
533
|
try:
|
|
545
534
|
decoded = json.loads(
|
|
@@ -660,7 +660,7 @@ def _validate_value(value: Any, schema: Mapping[str, Any]) -> bool:
|
|
|
660
660
|
return type(value) in {dict, list}
|
|
661
661
|
if not _matches_type(value, schema_type):
|
|
662
662
|
return False
|
|
663
|
-
if
|
|
663
|
+
if type(value) is str and _contains_unpaired_surrogate(value):
|
|
664
664
|
return False
|
|
665
665
|
if "enum" in schema and not any(_json_values_equal(value, item) for item in schema["enum"]):
|
|
666
666
|
return False
|
|
@@ -198,16 +198,18 @@ async def _lead_when_free(work: _LeaderWork) -> None:
|
|
|
198
198
|
work.recovery = asyncio.ensure_future(asyncio.to_thread(work.recover))
|
|
199
199
|
try:
|
|
200
200
|
await asyncio.shield(work.recovery)
|
|
201
|
+
# Starting the loops can fail too, e.g. the deployment-job pool is full of jobs the plane
|
|
202
|
+
# accepted in standby. Leave standby only once the holder's work is actually running.
|
|
203
|
+
work.start()
|
|
201
204
|
except asyncio.CancelledError:
|
|
202
205
|
raise
|
|
203
206
|
except Exception:
|
|
204
|
-
# A lone plane fails startup when recovery
|
|
205
|
-
# it led. Stop, and let the restart recover from a clean start.
|
|
206
|
-
_log.critical("control-plane
|
|
207
|
+
# A lone plane fails startup when recovery or its loops fail; a takeover must not keep
|
|
208
|
+
# serving as if it led. Stop, and let the restart recover from a clean start.
|
|
209
|
+
_log.critical("control-plane takeover failed; stopping", exc_info=True)
|
|
207
210
|
_stop_plane()
|
|
208
211
|
return
|
|
209
212
|
work.app.state.plane_standby = False
|
|
210
|
-
work.start()
|
|
211
213
|
|
|
212
214
|
|
|
213
215
|
def create_app():
|
|
@@ -31,6 +31,12 @@ _verify_cache: dict[str, float] = {}
|
|
|
31
31
|
_verify_cache_lock = threading.Lock()
|
|
32
32
|
_verify_inflight: dict[str, Future[dict[str, Any] | None]] = {}
|
|
33
33
|
_VERIFY_CACHE_MAX = 1024
|
|
34
|
+
# token digest -> (monotonic verified-at, identity) of the last successful verification. it is never
|
|
35
|
+
# served while the identity service answers, so revocation stays immediate; it only bridges brief
|
|
36
|
+
# identity-service outages for keys verified moments ago, which otherwise fail every request with a
|
|
37
|
+
# 503 (e.g. thousands of rollout chat calls). a definitive rejection forgets it.
|
|
38
|
+
_VERIFY_STALE_GRACE_S = 300.0
|
|
39
|
+
_verify_last_good: dict[str, tuple[float, dict[str, Any]]] = {}
|
|
34
40
|
|
|
35
41
|
|
|
36
42
|
class AuthVerificationUnavailable(RuntimeError):
|
|
@@ -53,6 +59,27 @@ def _prune_verify_cache_locked(now: float) -> None:
|
|
|
53
59
|
del _verify_cache[digest]
|
|
54
60
|
|
|
55
61
|
|
|
62
|
+
def _remember_good_locked(digest: str, identity: dict[str, Any], now: float) -> None:
|
|
63
|
+
"""Record a successful verification. Caller must hold ``_verify_cache_lock``."""
|
|
64
|
+
for stale in [
|
|
65
|
+
d for d, (at, _) in _verify_last_good.items() if now - at > _VERIFY_STALE_GRACE_S
|
|
66
|
+
]:
|
|
67
|
+
del _verify_last_good[stale]
|
|
68
|
+
if digest not in _verify_last_good and len(_verify_last_good) >= _VERIFY_CACHE_MAX:
|
|
69
|
+
oldest = min(_verify_last_good, key=lambda d: _verify_last_good[d][0])
|
|
70
|
+
del _verify_last_good[oldest]
|
|
71
|
+
_verify_last_good[digest] = (now, dict(identity))
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _recent_good_identity(digest: str) -> dict[str, Any] | None:
|
|
75
|
+
"""Identity verified within the grace window, for use only when verification is unavailable."""
|
|
76
|
+
with _verify_cache_lock:
|
|
77
|
+
entry = _verify_last_good.get(digest)
|
|
78
|
+
if entry is None or time.monotonic() - entry[0] > _VERIFY_STALE_GRACE_S:
|
|
79
|
+
return None
|
|
80
|
+
return dict(entry[1])
|
|
81
|
+
|
|
82
|
+
|
|
56
83
|
def _freesolo_key_prefix(token: str) -> str:
|
|
57
84
|
"""Non-secret preview of a Freesolo API key, matching the dashboard-style public prefix."""
|
|
58
85
|
parts = token.split("_", 2)
|
|
@@ -232,6 +259,22 @@ def _freesolo_verify(token: str) -> dict[str, Any] | None:
|
|
|
232
259
|
now = time.monotonic()
|
|
233
260
|
_prune_verify_cache_locked(now)
|
|
234
261
|
_verify_cache[digest] = now + _VERIFY_CACHE_NEG_TTL_S
|
|
262
|
+
_verify_last_good.pop(digest, None)
|
|
263
|
+
elif identity is not None:
|
|
264
|
+
with _verify_cache_lock:
|
|
265
|
+
_remember_good_locked(digest, identity, time.monotonic())
|
|
266
|
+
except AuthVerificationUnavailable as exc:
|
|
267
|
+
fallback = _recent_good_identity(digest)
|
|
268
|
+
with _verify_cache_lock:
|
|
269
|
+
if _verify_inflight.get(digest) is pending:
|
|
270
|
+
del _verify_inflight[digest]
|
|
271
|
+
if fallback is None:
|
|
272
|
+
pending.set_exception(exc)
|
|
273
|
+
else:
|
|
274
|
+
pending.set_result(fallback)
|
|
275
|
+
if fallback is None:
|
|
276
|
+
raise
|
|
277
|
+
return fallback
|
|
235
278
|
except BaseException as exc:
|
|
236
279
|
with _verify_cache_lock:
|
|
237
280
|
if _verify_inflight.get(digest) is pending:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "freesolo-flash-dev"
|
|
3
|
-
version = "1.4.
|
|
3
|
+
version = "1.4.7"
|
|
4
4
|
description ="Flash — managed LoRA post-training (SFT/GRPO) for Freesolo environments, driven by the `flash` CLI"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
# The training and serving stack is validated on Python 3.11 and 3.12.
|
|
@@ -209,7 +209,7 @@ artifacts = ["flash/py.typed"]
|
|
|
209
209
|
# auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
|
|
210
210
|
# PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
|
|
211
211
|
# dev-channel release = bump this (and [project].version) and merge to `dev`.
|
|
212
|
-
version = "1.4.
|
|
212
|
+
version = "1.4.7"
|
|
213
213
|
|
|
214
214
|
[tool.pytest.ini_options]
|
|
215
215
|
pythonpath = ["."]
|
{freesolo_flash_dev-1.4.5 → freesolo_flash_dev-1.4.7}/tests/serving/test_deepinfer_autoscaling.py
RENAMED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"""Pool thresholds, telemetry failures, and complete streaming request lifetimes."""
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
+
import runpy
|
|
5
|
+
from pathlib import Path
|
|
4
6
|
from types import SimpleNamespace
|
|
5
7
|
|
|
6
8
|
import pytest
|
|
@@ -235,3 +237,14 @@ def test_counter_covers_preparation_and_stream_lifetime(path, finish):
|
|
|
235
237
|
assert counts["active"] == 0
|
|
236
238
|
|
|
237
239
|
asyncio.run(run())
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def test_deployed_pool_controller_uses_nonpreemptible_cpu_capacity(monkeypatch):
|
|
243
|
+
monkeypatch.setenv("MODAL_ENVIRONMENT", "main")
|
|
244
|
+
module = runpy.run_path(
|
|
245
|
+
str(Path(__file__).parents[2] / "flash/serving/deepinfer/app/modal_app.py")
|
|
246
|
+
)
|
|
247
|
+
info = module["scale_pool"].info()
|
|
248
|
+
assert info.nonpreemptible
|
|
249
|
+
assert not info.gpus
|
|
250
|
+
assert info.schedule is not None
|
|
@@ -192,6 +192,28 @@ def test_takeover_recovery_failure_stops_the_plane_instead_of_serving_as_leader(
|
|
|
192
192
|
assert loops == []
|
|
193
193
|
|
|
194
194
|
|
|
195
|
+
def test_takeover_that_cannot_start_its_loops_stops_the_plane(monkeypatch):
|
|
196
|
+
"""Recovery succeeding is not enough: e.g. a full deployment-job pool fails the loops' start."""
|
|
197
|
+
import flash.server.asgi.app as app_mod
|
|
198
|
+
|
|
199
|
+
recovered, stopped = [], threading.Event()
|
|
200
|
+
_stub_lifespan(monkeypatch, recovered)
|
|
201
|
+
|
|
202
|
+
def pool_full(self):
|
|
203
|
+
raise RuntimeError("deployment job capacity reached")
|
|
204
|
+
|
|
205
|
+
monkeypatch.setattr(app_mod, "_stop_plane", stopped.set)
|
|
206
|
+
monkeypatch.setattr(app_mod._LeaderWork, "start", pool_full)
|
|
207
|
+
old_plane = _hold_elsewhere()
|
|
208
|
+
|
|
209
|
+
with TestClient(app_mod.create_app()) as client:
|
|
210
|
+
_release_elsewhere(old_plane)
|
|
211
|
+
assert stopped.wait(10)
|
|
212
|
+
assert recovered == ["runs", "deployments"]
|
|
213
|
+
# never leaves standby, so submissions are not launched by a plane without its loops.
|
|
214
|
+
assert client.app.state.plane_standby is True
|
|
215
|
+
|
|
216
|
+
|
|
195
217
|
def test_shutdown_waits_for_takeover_recovery_before_releasing_the_lease(monkeypatch):
|
|
196
218
|
import flash.server.asgi.app as app_mod
|
|
197
219
|
import flash.server.platform.runtime as server_runtime
|