freesolo-flash-dev 1.4.6__tar.gz → 1.4.8__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.6 → freesolo_flash_dev-1.4.8}/.github/workflows/publish-dev.yml +2 -18
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/CHANGELOG.md +6 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/PKG-INFO +27 -6
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/README.md +26 -5
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/scaffold/TRAINING.md +4 -7
- freesolo_flash_dev-1.4.8/flash/content/processor.py +17 -0
- freesolo_flash_dev-1.4.8/flash/content/stop_tokens.py +13 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/core/catalog.py +28 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/plan/vram.py +1 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/sft_workload.py +5 -4
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/backend_common.py +1 -4
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/launch/inputs.py +6 -2
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +1 -1
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/modal/jobs.py +2 -2
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/retry_decision.py +6 -16
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/profiles.py +28 -0
- freesolo_flash_dev-1.4.8/flash/serve/request/schema_types.py +36 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/request/tool_calls.py +31 -35
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/request/tool_template.py +7 -4
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/engine.py +20 -9
- freesolo_flash_dev-1.4.8/flash/serve/runtime/reasoning_tools.py +60 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/tool_calls.py +1 -1
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/platform/auth.py +43 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/app/GPU_QUALIFICATION.md +45 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/app/README.md +2 -1
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/modal_app.py +1 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/accounting/usage.py +2 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/boot.py +2 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/generation.py +11 -3
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/model_config.py +22 -1
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/pyproject.toml +2 -2
- freesolo_flash_dev-1.4.8/scripts/check_dev_release.py +44 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/smoke_modal_sft.py +8 -6
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_autoscaling.py +13 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_inference_duration.py +1 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_model_config.py +2 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_per_model_gpu.py +1 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_prequant_config.py +1 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_serve_structured_outputs.py +28 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_usage_outbox.py +5 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_catalog_consistency.py +1 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_chat_foundations.py +3 -7
- freesolo_flash_dev-1.4.8/tests/test_chat_stop_tokens.py +12 -0
- freesolo_flash_dev-1.4.8/tests/test_dev_publish_decision.py +101 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_disk_gb.py +1 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_instance_bootstrap_coverage.py +32 -7
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_modal_weight_warm.py +1 -1
- freesolo_flash_dev-1.4.8/tests/test_processor_chat_template.py +69 -0
- freesolo_flash_dev-1.4.8/tests/test_qwen9b_base.py +52 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_resume_on_retry.py +3 -14
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_retry_decision.py +29 -23
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_rl_train.py +56 -1
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_runmgmt.py +6 -2
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_bootstrap_http.py +106 -2
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_profiles.py +2 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_runtime_engine.py +84 -7
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_server_auth_singleflight.py +87 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_train.py +1 -1
- freesolo_flash_dev-1.4.8/tests/test_thinking_tool_calls.py +102 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_tool_call_exact_parsing.py +10 -7
- freesolo_flash_dev-1.4.8/tests/test_tool_scalar_unions.py +127 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/uv.lock +1 -1
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.dockerignore +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.env.example +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/scripts/notify_tests_repo.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/deploy-deepinfer.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/deploy-modal-dev.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/deploy-modal.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/dev-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/production-kernel-cache-ready.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/publish-serving-image.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/.gitignore +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/Dockerfile +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/Dockerfile.serve +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/LICENSE +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/NOTICE +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/docker/bake_sandbox_entry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/docker/patch_vllm_moe_lora.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/_internal/background.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/_internal/http.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/_internal/http_deadline.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/_internal/openai_sse.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/_internal/version.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/adapters/config.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/adapters/targets.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/imports.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/list.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/push.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/retained.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/setup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/episode.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/eval.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/eval_args.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/evaluations.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/params.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/test.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/env/testing/warnings.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/account.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/catalog.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/deploy.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/log_follow.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/runs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/traces.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/train.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/ops/worker_output.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/serving/deploy.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/serving/identity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/serving/status.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/commands/serving/undeploy.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/account.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/custom.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/env.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/errors.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/main.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/models.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/serve_parser.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/traces.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/parsing/training.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/content/image_descriptors.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/content/reasoning_normalization.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/content/structured_options.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/core/grpo.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/core/spec.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cost/currency.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/async_client.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/backend.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/billing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/client.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/controller.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/managed.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/server.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/session.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/starter.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/types.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/validation.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/custom/worker.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/sft_rows.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/sft_tools.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/support/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/support/checkpoint_transport.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/support/huggingface.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/support/model_snapshot.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/support/verl_checkpoint.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/support/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/entry/worker.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/cpu_handoff.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/transfer.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/perf/model_size.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/runtime/phases.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/runtime/state.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/agents.yaml +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/batch.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/compact_checkpoint.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/configuration.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/engine.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/flashinfer_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/launch.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/model.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/observations.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/options.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/prompt_media.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/queue.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/readiness.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/reference.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/registration.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/replay.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/rollout.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/rollout_contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/startup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/tracking.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/trainer.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/upstream.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/vllm_worker.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/child/worker.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/persistence.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/lifecycle/timing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/episode.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/generation.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/identity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/core/rollout/lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/rl_train.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/score_batcher.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/sft_train.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/credit.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/identity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/metrics.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/reward.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/rollout.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/trainer.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/child/transport.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/launch/config.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/child/dataset.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/child/loop.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/child/schedule.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/child/trainer.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/sft/setup/config.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/adapter_merger.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/capabilities.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/loading/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/loading/adapter.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/loading/base.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/loading/loader.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/loading/pull.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/loading/staged.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/meta/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/meta/cache_security.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/meta/cache_storage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/meta/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/meta/evaluations.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/meta/identity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/meta/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/package/direct_tokens.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/registry/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/registry/azure.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/registry/packages.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/scoring/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/scoring/context.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/envs/scoring/response.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/attempt.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/processes.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/instances/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/instances/instance.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/instances/poll.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/net/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/net/auth.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/net/deadline.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/net/http.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/_lifecycle/net/worker.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/core/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/core/allocator.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/core/base.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/core/fit_errors.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/core/preflight.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/core/registry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/core/sharding.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/modal/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/modal/api.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/modal/auth.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/modal/checkpoint_upload.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/modal/handles.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/modal/prefetch.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/modal/pricing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/modal/provider.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/providers/modal/startup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/accounting/artifacts.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/accounting/costs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/accounting/weight_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/attempts.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/claim_lock.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/cleanup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/deadlines.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/preparation.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/reporting.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/runtime_credentials.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/state.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/status.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/lifecycle/submit.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/results/deployments.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/attach.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/deploy.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/errors.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/execution.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/recovery.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/runtime_capsule/profiles.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/schema/custom.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/app/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/app/__main__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/app/bootstrap.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/app/chat_stream.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/app/http.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/app/launch.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/app/manifest.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/app/materialize.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/app/openai.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/app/progress.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/contract/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/contract/errors.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/contract/protocol.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/contract/provenance.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/contract/responses.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/contract/urls.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/control/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/control/_canonical.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/control/_serialization.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/control/_urls.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/control/credentials.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/control/planning.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/control/types.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/adapter_check.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/deploy.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/download.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/export.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/preflight.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/readiness.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/deployment/resolve.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/common/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/common/records.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/execution/operations.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/planning/plan.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/planning/resources.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/request/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/request/openai.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/request/runtime_support.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/request/streaming.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/request/text_scan.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/request/thinking.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/request/transport.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/request/validation.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/adapters.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/cache_admission.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/cache_retention.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/cache_scheduler.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/errors.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/hub.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/multimodal.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/prompt.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/prompt_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/sampling.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/token_batch.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/token_prefix_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serve/runtime/types.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/asgi/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/asgi/app.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/asgi/cli.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/billing/charges.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/ops/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/ops/serving_resources.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/blob_envs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/env_files.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/environment_registry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/envs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/projects.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/domain/registry/runs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/platform/deployment_jobs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/platform/deployment_state.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/platform/internal_client.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/platform/plane_lease.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/platform/runtime.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/adapter_download.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/custom.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/env_files.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/serving_chat.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/serving_completion.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/serving_revisions.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/server/routes/serving_smoke.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/app/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/app/modal_app.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/app/timeouts.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/README.md +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/autoscaling.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/client.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/events.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/http.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/render.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/retries.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/app/rollout.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/contract/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/contract/config.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/contract/errors.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/contract/protocol.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/contract/tokenizer.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/native/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/native/engram_transport.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/native/image.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/native/patches.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/native/transport.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/bridge.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/kernel_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/prefill_scheduler.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/prefix_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/provenance.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/routing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/snapshots.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/tiered_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/warmup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/deepinfer/runtime/worker.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/promotion/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/promotion/accounting_smoke_test.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/promotion/canary.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/promotion/evidence.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/promotion/gate.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/accounting/usage_facts.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/accounting/usage_outbox.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/accounting/usage_retry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/errors.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/hub.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/lora_engine.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/lora_entries.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/prequant_config.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/reasoning_usage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/support.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/text_tokenizer.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/engine/warmup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/adapter_routes.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/body_limit.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/context.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/headers.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/inference_routes.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/key_rate_limit.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/rate_limit.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/router.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/routing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/http/stream_response.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/cache_namespace.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/multimodal.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/openai_request.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/openai_stream.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/provenance.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/requests.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/responses.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/schemas.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/streaming.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/io/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/access.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/lookup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/persisted_columns.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/persistence.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/registration.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/registry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/settings.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/supabase_rest.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/store/undeploy.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/stream_channel/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/stream_channel/_tasks.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/stream_channel/client.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/stream_channel/engine.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/serving/src/stream_channel/protocol.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/snapshot/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/snapshot/archive.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/check_rollout_identity_actor.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/check_source_layout.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/fixtures/custom_algorithm.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/fixtures/modal_environment/dataset/train.jsonl +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/fixtures/modal_environment/environment.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/fixtures/modal_environment/evaluations.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/qualify_serving_profile.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/smoke_custom_training.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/scripts/smoke_modal_training.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/serve_launch.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/billing_precheck.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/chat_provenance.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/chat_transport.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/deployments.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/managed_chat.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/modal.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/server_api_plugin.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/_helpers/wire_headers.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/capture_qwen38_27b_metadata.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/checkpoint_fixtures.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/conftest.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_adapter_hub.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_artifact_protections.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_base_model_serving.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_chat_auth.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_chat_authorizer.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_checkpoint_fingerprint_validation.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_checkpoint_model_validation.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_checkpoint_revocation.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_deadline.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_hosted.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_http_deadline.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_latency.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_optimizations.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_parallel.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_prefill_scheduler.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_provenance.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_retention.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_retries.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_rollout.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_routing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_deepinfer_tiering.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_engine_error_status.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_fp8_config.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_immutable_engine.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_immutable_revisions.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_immutable_schemas.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_internal_header_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_key_rate_limit.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_key_rate_limit_review.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_kv_namespace.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_latency_admission.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_mirror_sampling_parity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_modal_deploy_identity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_modal_image_paths.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_multimodal.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_openai_stream_options.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_persistence.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_pre_first_disconnect.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_promotion_accounting_smoke.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_promotion_canary.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_promotion_evidence.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_promotion_gate.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_qwen_warmup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_rate_limit.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_reasoning_usage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_registration_endpoint.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_registry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_registry_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_request_body_limit.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_router.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_router_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_router_edge_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_schemas_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_serve_reasoning_split.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_serve_thinking.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_settings.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_stream_channel.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_stream_response_disconnect.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_stream_wait_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_structured_outputs_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_supabase_rest_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_token_prefix_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_usage_delivery_concurrency.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_usage_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving/test_usage_reporter.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving_conformance/__init__.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving_conformance/conftest.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/serving_conformance/test_contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_adapter_download.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_authenticated_redirects.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_azure_environment_registry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_background_supervisor.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_bake_sandbox_entry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_base_environment_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_billing_response_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_bootstrap_process_groups.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_bootstrap_reentry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_bootstrap_worker_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cache_admission.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cache_retention.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cache_scheduler.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_capture_qwen38_metadata.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_cancellation.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_deployment_inventory_api.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_deployments.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_listing_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_storage_overlap.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_checkpoint_transport.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_serve_deploy.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_serve_status.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_client_deadline_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_compact_checkpoint.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cost_currency.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_cpu_checkpoint_handoff.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_custom_checkpoints.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_custom_client.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_custom_gpu_selection.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_custom_gradients.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_custom_managed.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_custom_session.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_custom_worker.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_deployment_cleanup_resilience.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_deployment_generation_completion.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_deployment_registration_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_list_registry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_environment_cache_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_environment_publish_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_flashinfer_aot_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_generation_eos.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_grpo_checkpoint_durability.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_grpo_metric_stream.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_grpo_reward_context.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_grpo_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_grpo_rollout_identity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_heartbeat_startup_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_hosted_adapter_admission.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_image_environment_capability.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_image_incremental_processor.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_kernel_bake_build_contracts.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_local_credential_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_lora_rank_nested_rung.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_lora_targeting.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_lora_targeting_pinned_verl.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_mirror_sampling_parity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_modal_api_loop.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_modal_prefetch_snapshot.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_modal_provider.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_modal_startup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_modal_training_lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_multimodal_boundary_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_notify_tests_repo.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_offline_http.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_plane_lease.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_prompt_budget.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_removed_algorithms.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_removed_training_settings.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_replay_guard.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_reward_server_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_rollout_engine_prompt.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_run_log_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_run_registry_lifecycle.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_runtime_credentials.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_runtime_secret_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_schema_boundary_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_launch.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_manifest.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_materialize.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_packaging.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_app_progress.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_cache_resource_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_chat_transport.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_control.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_docs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_modal_contract_lock.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_modal_sdk.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_modal_sdk_deadlines.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_modal_teardown_identity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_profile_qualification.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_provisioning_common.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_provisioning_modal.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_resolve_provenance.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_runtime_adapters.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_runtime_hub.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_runtime_package.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serve_runtime_types.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_server_api.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_server_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_server_managed_chat_requests.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_server_serving_resources.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_server_standalone.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serving_conformance_gate.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serving_input_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_batch_prefetch.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_cancel_profile_pricing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_cost_reduction.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_dataset_lazy_images.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_dataset_nulls.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_memory_policy.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_step_floor.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_tools.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_warmup_schedule.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_smoke_content_integrity.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_source_attestation_flow.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_source_layout.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_source_snapshot.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_staged_environment.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_status_reporting.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_status_updates.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_structured_option_safety.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_structured_runtime_options.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_submission_outcome.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_training_phases.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_transfer_queue_init.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_upload_concurrency.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_upstream_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_upstream_runtime_policy.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_upstream_verl_contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_versioned_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_vllm_moe_lora_backport.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_warmstart_image_adapters.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_watchdog_startup_cleanup.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -19,6 +19,7 @@ on:
|
|
|
19
19
|
- "uv.lock"
|
|
20
20
|
- "flash/**"
|
|
21
21
|
- "scripts/build_dev_dist.py"
|
|
22
|
+
- "scripts/check_dev_release.py"
|
|
22
23
|
- ".github/workflows/publish-dev.yml"
|
|
23
24
|
workflow_dispatch:
|
|
24
25
|
|
|
@@ -82,24 +83,7 @@ jobs:
|
|
|
82
83
|
id: decide
|
|
83
84
|
env:
|
|
84
85
|
VERSION: ${{ steps.meta.outputs.version }}
|
|
85
|
-
run:
|
|
86
|
-
python3 - <<'PY' >> "$GITHUB_OUTPUT"
|
|
87
|
-
import os
|
|
88
|
-
import urllib.error
|
|
89
|
-
import urllib.request
|
|
90
|
-
|
|
91
|
-
version = os.environ["VERSION"]
|
|
92
|
-
url = f"https://pypi.org/pypi/freesolo-flash-dev/{version}/json"
|
|
93
|
-
published = False
|
|
94
|
-
try:
|
|
95
|
-
with urllib.request.urlopen(url, timeout=30) as response:
|
|
96
|
-
published = response.status == 200
|
|
97
|
-
except urllib.error.HTTPError as error:
|
|
98
|
-
if error.code != 404:
|
|
99
|
-
raise
|
|
100
|
-
# Publish only when the dev version isn't on PyPI yet (i.e. it was just bumped).
|
|
101
|
-
print(f"publish={'false' if published else 'true'}")
|
|
102
|
-
PY
|
|
86
|
+
run: python3 scripts/check_dev_release.py >> "$GITHUB_OUTPUT"
|
|
103
87
|
|
|
104
88
|
- name: Already published (nothing to do)
|
|
105
89
|
if: steps.decide.outputs.publish == 'false'
|
|
@@ -162,6 +162,12 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
|
|
|
162
162
|
|
|
163
163
|
### Fixed
|
|
164
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.
|
|
165
171
|
- Image SFT no longer stores processed pixel tensors in the training parquet. The worker keeps
|
|
166
172
|
each row's small processor fields (image grid, token types) and its saved image files, and the
|
|
167
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.8
|
|
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
|
|
@@ -144,11 +144,19 @@ path is self-hostable end to end — see **[SELF_HOSTING.md](SELF_HOSTING.md)**.
|
|
|
144
144
|
|
|
145
145
|
## Using the hosted service
|
|
146
146
|
|
|
147
|
-
The
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
147
|
+
The training catalog includes Qwen3.5 0.8B, 4B, 9B, and **9B Base**, Qwen3.8 27B,
|
|
148
|
+
and Qwen3.6 35B-A3B. `Qwen/Qwen3.5-9B` is Qwen's post-trained chat model and remains
|
|
149
|
+
the default. Select `model = "Qwen/Qwen3.5-9B-Base"` to fine-tune the pretrained-only
|
|
150
|
+
checkpoint with SFT or GRPO. It has its own weights, tokenizer revision, adapters,
|
|
151
|
+
and Modal cache entry; it is never mapped to the post-trained model's FP8 weights.
|
|
152
|
+
Its native chat template supports text, images, and tool calls, but the pretrained
|
|
153
|
+
weights have not been tuned for instruction following.
|
|
154
|
+
|
|
155
|
+
Hosted serving uses the [per-model GPU placements](flash/serving/app/README.md#hosted-gpu-configuration).
|
|
156
|
+
The 9B Base checkpoint serves in BF16 on H100 with a 262,144-token context.
|
|
157
|
+
Customer-owned `flash serve` requires explicit `--provider modal` and a live-qualified
|
|
158
|
+
profile. The retired dense Qwen3.6 27B identity is never translated into Qwen3.8.
|
|
159
|
+
Training and serving both use Modal.
|
|
152
160
|
|
|
153
161
|
`flash login` is not interactive. Export `FREESOLO_API_KEY` first so the key does not appear in process listings:
|
|
154
162
|
|
|
@@ -341,6 +349,19 @@ endpoint returns `409` with a hint to deploy first. Prefer this control-plane en
|
|
|
341
349
|
directly: it enforces run ownership and forwards per-run serving options such as
|
|
342
350
|
thinking-mode parity.
|
|
343
351
|
|
|
352
|
+
Tool parameters use a restricted JSON Schema profile. Inside JSON arrays and objects,
|
|
353
|
+
scalar types can be combined explicitly, for example `"type": ["string", "number",
|
|
354
|
+
"boolean", "null"]` for spreadsheet cells. Empty schemas (`{}`), container unions,
|
|
355
|
+
and unions on top-level function arguments are unsupported. Top-level arguments use
|
|
356
|
+
native parameter text, where a string such as `"12"` and a number would be ambiguous;
|
|
357
|
+
nested JSON preserves those types during generation, streaming, and history replay.
|
|
358
|
+
|
|
359
|
+
Qualified Qwen tool-calling routes support thinking-enabled generation. Tool calls are
|
|
360
|
+
parsed only after the first `</think>`; tool-like text inside reasoning stays in
|
|
361
|
+
`reasoning_content`. A response that ends before that boundary cannot execute tools.
|
|
362
|
+
Streaming preserves the same separation, and saved adapters retain their configured
|
|
363
|
+
thinking mode. Tools still cannot be combined with logprobs or structured outputs.
|
|
364
|
+
|
|
344
365
|
### Workload estimates (SFT)
|
|
345
366
|
|
|
346
367
|
`flash train`, `--dry-run`, and `--cost` read the pinned environment's packaged dataset
|
|
@@ -44,11 +44,19 @@ path is self-hostable end to end — see **[SELF_HOSTING.md](SELF_HOSTING.md)**.
|
|
|
44
44
|
|
|
45
45
|
## Using the hosted service
|
|
46
46
|
|
|
47
|
-
The
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
The training catalog includes Qwen3.5 0.8B, 4B, 9B, and **9B Base**, Qwen3.8 27B,
|
|
48
|
+
and Qwen3.6 35B-A3B. `Qwen/Qwen3.5-9B` is Qwen's post-trained chat model and remains
|
|
49
|
+
the default. Select `model = "Qwen/Qwen3.5-9B-Base"` to fine-tune the pretrained-only
|
|
50
|
+
checkpoint with SFT or GRPO. It has its own weights, tokenizer revision, adapters,
|
|
51
|
+
and Modal cache entry; it is never mapped to the post-trained model's FP8 weights.
|
|
52
|
+
Its native chat template supports text, images, and tool calls, but the pretrained
|
|
53
|
+
weights have not been tuned for instruction following.
|
|
54
|
+
|
|
55
|
+
Hosted serving uses the [per-model GPU placements](flash/serving/app/README.md#hosted-gpu-configuration).
|
|
56
|
+
The 9B Base checkpoint serves in BF16 on H100 with a 262,144-token context.
|
|
57
|
+
Customer-owned `flash serve` requires explicit `--provider modal` and a live-qualified
|
|
58
|
+
profile. The retired dense Qwen3.6 27B identity is never translated into Qwen3.8.
|
|
59
|
+
Training and serving both use Modal.
|
|
52
60
|
|
|
53
61
|
`flash login` is not interactive. Export `FREESOLO_API_KEY` first so the key does not appear in process listings:
|
|
54
62
|
|
|
@@ -241,6 +249,19 @@ endpoint returns `409` with a hint to deploy first. Prefer this control-plane en
|
|
|
241
249
|
directly: it enforces run ownership and forwards per-run serving options such as
|
|
242
250
|
thinking-mode parity.
|
|
243
251
|
|
|
252
|
+
Tool parameters use a restricted JSON Schema profile. Inside JSON arrays and objects,
|
|
253
|
+
scalar types can be combined explicitly, for example `"type": ["string", "number",
|
|
254
|
+
"boolean", "null"]` for spreadsheet cells. Empty schemas (`{}`), container unions,
|
|
255
|
+
and unions on top-level function arguments are unsupported. Top-level arguments use
|
|
256
|
+
native parameter text, where a string such as `"12"` and a number would be ambiguous;
|
|
257
|
+
nested JSON preserves those types during generation, streaming, and history replay.
|
|
258
|
+
|
|
259
|
+
Qualified Qwen tool-calling routes support thinking-enabled generation. Tool calls are
|
|
260
|
+
parsed only after the first `</think>`; tool-like text inside reasoning stays in
|
|
261
|
+
`reasoning_content`. A response that ends before that boundary cannot execute tools.
|
|
262
|
+
Streaming preserves the same separation, and saved adapters retain their configured
|
|
263
|
+
thinking mode. Tools still cannot be combined with logprobs or structured outputs.
|
|
264
|
+
|
|
244
265
|
### Workload estimates (SFT)
|
|
245
266
|
|
|
246
267
|
`flash train`, `--dry-run`, and `--cost` read the pinned environment's packaged dataset
|
|
@@ -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,17 @@
|
|
|
1
|
+
"""Normalize chat-template metadata from a checkpoint's own processor and tokenizer."""
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def inherit_tokenizer_chat_template(processor: Any) -> None:
|
|
7
|
+
"""Support checkpoints that publish their template only in tokenizer_config.json.
|
|
8
|
+
|
|
9
|
+
Transformers loads that template onto the tokenizer but not AutoProcessor.
|
|
10
|
+
Preserve explicit processor templates and never substitute another model's tokenizer.
|
|
11
|
+
Missing templates remain missing so the normal request validation can reject them.
|
|
12
|
+
"""
|
|
13
|
+
if getattr(processor, "chat_template", None) is None:
|
|
14
|
+
tokenizer = getattr(processor, "tokenizer", None)
|
|
15
|
+
template = getattr(tokenizer, "chat_template", None)
|
|
16
|
+
if template is not None:
|
|
17
|
+
processor.chat_template = template
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Chat-turn boundaries for pretrained checkpoints with document-level EOS metadata."""
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def chat_stop_token_ids(model: str, tokenizer: Any, *, is_chat: bool) -> list[int] | None:
|
|
7
|
+
"""Stop Base chat at im_end without changing its tokenizer or raw completion EOS."""
|
|
8
|
+
if model != "Qwen/Qwen3.5-9B-Base" or not is_chat:
|
|
9
|
+
return None
|
|
10
|
+
token_id = tokenizer.convert_tokens_to_ids("<|im_end|>")
|
|
11
|
+
if type(token_id) is not int or token_id < 0 or token_id == tokenizer.unk_token_id:
|
|
12
|
+
raise ValueError("Qwen3.5 9B Base tokenizer is missing its chat end token")
|
|
13
|
+
return [token_id]
|
|
@@ -16,6 +16,7 @@ _ON_POLICY_ALGORITHMS = frozenset({"grpo"})
|
|
|
16
16
|
_IMAGE_TRAINING_MODELS = frozenset(
|
|
17
17
|
{
|
|
18
18
|
"Qwen/Qwen3.5-9B",
|
|
19
|
+
"Qwen/Qwen3.5-9B-Base",
|
|
19
20
|
"Qwen/Qwen3.8-27B",
|
|
20
21
|
"Qwen/Qwen3.6-35B-A3B",
|
|
21
22
|
}
|
|
@@ -218,6 +219,7 @@ SERVING_MODEL_REPOS: dict[str, str] = {
|
|
|
218
219
|
"Qwen/Qwen3.5-0.8B": "Qwen/Qwen3.5-0.8B",
|
|
219
220
|
"Qwen/Qwen3.5-4B": "Qwen/Qwen3.5-4B",
|
|
220
221
|
"Qwen/Qwen3.5-9B": "Freesolo-Co/Qwen3.5-9B-FP8",
|
|
222
|
+
"Qwen/Qwen3.5-9B-Base": "Qwen/Qwen3.5-9B-Base",
|
|
221
223
|
"Qwen/Qwen3.8-27B": "Qwen/Qwen3.8-27B-FP8",
|
|
222
224
|
"Qwen/Qwen3.6-35B-A3B": "Qwen/Qwen3.6-35B-A3B",
|
|
223
225
|
}
|
|
@@ -532,6 +534,32 @@ MODELS: dict[str, ModelInfo] = {
|
|
|
532
534
|
}
|
|
533
535
|
|
|
534
536
|
|
|
537
|
+
# The pretrained checkpoint has the same architecture and native chat template as 9B,
|
|
538
|
+
# but distinct weights, EOS metadata, and adapter identity. Never serve it via the
|
|
539
|
+
# post-trained model's FP8 repository.
|
|
540
|
+
MODELS["Qwen/Qwen3.5-9B-Base"] = replace(
|
|
541
|
+
MODELS["Qwen/Qwen3.5-9B"],
|
|
542
|
+
id="Qwen/Qwen3.5-9B-Base",
|
|
543
|
+
display_name="Qwen3.5 9B Base (pretrained)",
|
|
544
|
+
managed_revision="68c46c4b3498877f3ef123c856ecfde50c39f404",
|
|
545
|
+
serving=ServingCapacity(
|
|
546
|
+
gpu="H100",
|
|
547
|
+
serve_model_id="Qwen/Qwen3.5-9B-Base",
|
|
548
|
+
max_loras=16,
|
|
549
|
+
max_cpu_loras=16,
|
|
550
|
+
max_lora_rank=128,
|
|
551
|
+
max_model_len=262144,
|
|
552
|
+
max_num_seqs=8,
|
|
553
|
+
tensor_parallel_size=1,
|
|
554
|
+
gpu_memory_utilization=0.90,
|
|
555
|
+
image_limit=MAX_IMAGES_PER_CONVERSATION,
|
|
556
|
+
),
|
|
557
|
+
notes="Pretrained-only Qwen3.5 9B; bf16 LoRA SFT/GRPO. Uses its own weights and "
|
|
558
|
+
"tokenizer, not the post-trained 9B. Native chat/thinking formatting is available for "
|
|
559
|
+
"fine-tuning; instruction following and reasoning are not post-trained. BF16 serving on H100.",
|
|
560
|
+
)
|
|
561
|
+
|
|
562
|
+
|
|
535
563
|
def list_models() -> list[ModelInfo]:
|
|
536
564
|
return sorted(MODELS.values(), key=lambda m: (m.min_vram_gb, m.id))
|
|
537
565
|
|
{freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/profiling/sft_workload.py
RENAMED
|
@@ -12,6 +12,7 @@ from pathlib import Path
|
|
|
12
12
|
from typing import Any, Protocol, TypedDict, cast
|
|
13
13
|
|
|
14
14
|
from flash.content.multimodal import NormalizedImages
|
|
15
|
+
from flash.content.processor import inherit_tokenizer_chat_template
|
|
15
16
|
from flash.content.thinking import messages_for_chat_template
|
|
16
17
|
from flash.engine.plan.recipe import RECIPE
|
|
17
18
|
from flash.engine.plan.steps import resolve_update_horizon, sft_update_steps
|
|
@@ -190,11 +191,11 @@ def _default_processor_loader(model_id: str, revision: str):
|
|
|
190
191
|
|
|
191
192
|
from flash.engine.support.huggingface import model_revision_kwargs
|
|
192
193
|
|
|
193
|
-
|
|
194
|
-
model_id,
|
|
195
|
-
trust_remote_code=True,
|
|
196
|
-
**model_revision_kwargs(revision),
|
|
194
|
+
processor = AutoProcessor.from_pretrained(
|
|
195
|
+
model_id, trust_remote_code=True, **model_revision_kwargs(revision)
|
|
197
196
|
)
|
|
197
|
+
inherit_tokenizer_chat_template(processor)
|
|
198
|
+
return processor
|
|
198
199
|
|
|
199
200
|
|
|
200
201
|
def _packing_mode(
|
|
@@ -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}"
|
{freesolo_flash_dev-1.4.6 → freesolo_flash_dev-1.4.8}/flash/engine/worker/train/rl/launch/inputs.py
RENAMED
|
@@ -22,6 +22,8 @@ import flash.engine.worker.model.decoding as _worker_decoding
|
|
|
22
22
|
import flash.engine.worker.perf as _worker_perf
|
|
23
23
|
import flash.engine.worker.train.rl.launch.config as _worker_config
|
|
24
24
|
from flash.adapters.targets import LoraTargeting, resolve_lora_targeting
|
|
25
|
+
from flash.content.processor import inherit_tokenizer_chat_template
|
|
26
|
+
from flash.content.stop_tokens import chat_stop_token_ids
|
|
25
27
|
from flash.content.structured_outputs import (
|
|
26
28
|
describe_structured_outputs,
|
|
27
29
|
parse_structured_outputs,
|
|
@@ -420,10 +422,11 @@ def _assemble_grpo_inputs(
|
|
|
420
422
|
"max_turns": int(getattr(env, "max_turns", 0) or 0) if multi_turn else 0,
|
|
421
423
|
# the child decides whether an assistant turn ended naturally or was cut off, and it has no
|
|
422
424
|
# access to the model config -- so the full halting set is resolved here and handed over.
|
|
423
|
-
#
|
|
424
|
-
#
|
|
425
|
+
# Keep every checkpoint EOS plus any chat-turn boundary the model needs. Base checkpoints
|
|
426
|
+
# can use document EOS while the environment still requires one assistant turn at a time.
|
|
425
427
|
"eos_token_ids": (
|
|
426
428
|
generation_eos_from_cached_config(model_id, model_revision, tok)
|
|
429
|
+
| frozenset(chat_stop_token_ids(model_id, tok, is_chat=True) or ())
|
|
427
430
|
if multi_turn
|
|
428
431
|
else frozenset()
|
|
429
432
|
),
|
|
@@ -532,6 +535,7 @@ def _resolve_grpo_inputs(*, context: WorkerContext):
|
|
|
532
535
|
processor = AutoProcessor.from_pretrained(
|
|
533
536
|
model_id, trust_remote_code=True, **_worker_hf.model_revision_kwargs(model_revision)
|
|
534
537
|
)
|
|
538
|
+
inherit_tokenizer_chat_template(processor)
|
|
535
539
|
tok = processor.tokenizer
|
|
536
540
|
image_pad_token_id = resolve_image_pad_token_id(processor, tok)
|
|
537
541
|
else:
|
|
@@ -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.6 → freesolo_flash_dev-1.4.8}/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(
|
|
@@ -219,6 +219,34 @@ _PROFILES: dict[str, ServingProfile] = {
|
|
|
219
219
|
modal_gpu_request="L40S",
|
|
220
220
|
modal_live_qualified=True,
|
|
221
221
|
),
|
|
222
|
+
"Qwen/Qwen3.5-9B-Base": ServingProfile(
|
|
223
|
+
model_id="Qwen/Qwen3.5-9B-Base",
|
|
224
|
+
modality="multimodal",
|
|
225
|
+
served_model="Qwen/Qwen3.5-9B-Base",
|
|
226
|
+
served_model_revision="68c46c4b3498877f3ef123c856ecfde50c39f404",
|
|
227
|
+
tokenizer_model="Qwen/Qwen3.5-9B-Base",
|
|
228
|
+
dtype="bfloat16",
|
|
229
|
+
quantization=None,
|
|
230
|
+
kv_cache_dtype="fp8",
|
|
231
|
+
max_model_len=262144,
|
|
232
|
+
max_num_seqs=8,
|
|
233
|
+
max_num_batched_tokens=None,
|
|
234
|
+
max_loras=16,
|
|
235
|
+
max_cpu_loras=16,
|
|
236
|
+
max_lora_rank=128,
|
|
237
|
+
gpu_memory_utilization=0.90,
|
|
238
|
+
cpu_offload_gb=0.0,
|
|
239
|
+
image_limit=MAX_IMAGES_PER_CONVERSATION,
|
|
240
|
+
mm_processor_cache_gb=0.0,
|
|
241
|
+
enable_tower_connector_lora=True,
|
|
242
|
+
reasoning_parser="qwen3",
|
|
243
|
+
engine_args={"enforce_eager": False},
|
|
244
|
+
tokenizer_kwargs={},
|
|
245
|
+
processor_kwargs={},
|
|
246
|
+
modal_gpu="H100",
|
|
247
|
+
modal_gpu_request="H100!",
|
|
248
|
+
modal_live_qualified=True,
|
|
249
|
+
),
|
|
222
250
|
"Qwen/Qwen3.8-27B": ServingProfile(
|
|
223
251
|
model_id="Qwen/Qwen3.8-27B",
|
|
224
252
|
modality="multimodal",
|
|
@@ -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
|
|
|
@@ -55,7 +57,8 @@ class FunctionTool:
|
|
|
55
57
|
|
|
56
58
|
|
|
57
59
|
def qualified_tool_parser(base_model: str) -> str | None:
|
|
58
|
-
|
|
60
|
+
supported = {"Qwen/Qwen3.5-9B", "Qwen/Qwen3.5-9B-Base"}
|
|
61
|
+
return TOOL_PARSER_QWEN3_CODER if base_model in supported else None
|
|
59
62
|
|
|
60
63
|
|
|
61
64
|
def normalize_tools(
|
|
@@ -137,8 +140,6 @@ def validate_tool_request_contract(
|
|
|
137
140
|
|
|
138
141
|
if not tools_active(tools, tool_choice):
|
|
139
142
|
return
|
|
140
|
-
if thinking:
|
|
141
|
-
raise error_type("tools are not supported for thinking-enabled generation")
|
|
142
143
|
if tool_parser != TOOL_PARSER_QWEN3_CODER:
|
|
143
144
|
raise error_type("this serving engine is not qualified for tool calling")
|
|
144
145
|
|
|
@@ -253,7 +254,11 @@ def validate_tool_history_replay(
|
|
|
253
254
|
# would accept a turn the parser rejects as ambiguous.
|
|
254
255
|
try:
|
|
255
256
|
_validate_template_roundtrip(
|
|
256
|
-
probe,
|
|
257
|
+
probe,
|
|
258
|
+
rendered_turn_prefix(message, message_index > last_query),
|
|
259
|
+
answer_prefix=rendered_turn_prefix(
|
|
260
|
+
message, message_index > last_query, answer_only=True
|
|
261
|
+
),
|
|
257
262
|
)
|
|
258
263
|
except ValueError as exc:
|
|
259
264
|
raise error_type(f"message {message_index} {exc}") from exc
|
|
@@ -317,7 +322,22 @@ def _normalize_schema(
|
|
|
317
322
|
if unknown:
|
|
318
323
|
raise error_type(f"{path} uses unsupported schema keyword(s): {', '.join(sorted(unknown))}")
|
|
319
324
|
schema_type = raw.get("type")
|
|
320
|
-
if type(schema_type) is
|
|
325
|
+
if type(schema_type) is list:
|
|
326
|
+
if (
|
|
327
|
+
not 1 <= len(schema_type) <= len(_SCALAR_SCHEMA_TYPES)
|
|
328
|
+
or any(
|
|
329
|
+
type(member) is not str or member not in _SCALAR_SCHEMA_TYPES
|
|
330
|
+
for member in schema_type
|
|
331
|
+
)
|
|
332
|
+
or len(set(schema_type)) != len(schema_type)
|
|
333
|
+
):
|
|
334
|
+
raise error_type(
|
|
335
|
+
f"{path}.type must be a nonempty unique list of supported scalar types"
|
|
336
|
+
)
|
|
337
|
+
if root or direct:
|
|
338
|
+
raise error_type(f"{path}.type unions are supported only inside JSON arrays or objects")
|
|
339
|
+
schema_type = list(schema_type)
|
|
340
|
+
elif type(schema_type) is not str or schema_type not in _SCHEMA_TYPES:
|
|
321
341
|
raise error_type(f"{path}.type must be one supported JSON Schema type")
|
|
322
342
|
if root and schema_type != "object":
|
|
323
343
|
raise error_type(f"{path} must be a root object schema")
|
|
@@ -498,7 +518,8 @@ def _validate_tool_result(
|
|
|
498
518
|
|
|
499
519
|
def _canonicalize_integer_values(value: Any, schema: Mapping[str, Any]) -> Any:
|
|
500
520
|
schema_type = schema["type"]
|
|
501
|
-
|
|
521
|
+
types = schema_type if type(schema_type) is list else [schema_type]
|
|
522
|
+
if "integer" in types and "number" not in types and type(value) is Decimal:
|
|
502
523
|
return value.to_integral_value()
|
|
503
524
|
if schema_type == "object":
|
|
504
525
|
properties = schema["properties"]
|
|
@@ -511,35 +532,6 @@ def _canonicalize_integer_values(value: Any, schema: Mapping[str, Any]) -> Any:
|
|
|
511
532
|
return value
|
|
512
533
|
|
|
513
534
|
|
|
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
535
|
def _load_exact_json(value: str) -> Any:
|
|
544
536
|
try:
|
|
545
537
|
decoded = json.loads(
|
|
@@ -603,6 +595,8 @@ def _historical_replay_type(value: Any) -> str:
|
|
|
603
595
|
def _validate_template_roundtrip(
|
|
604
596
|
probe: Sequence[tuple[FunctionTool, dict[str, Any], dict[str, Any]]],
|
|
605
597
|
prefix: str = "",
|
|
598
|
+
*,
|
|
599
|
+
answer_prefix: str | None = None,
|
|
606
600
|
) -> None:
|
|
607
601
|
from flash.serve.runtime.tool_calls import parse_qwen3_coder_output
|
|
608
602
|
|
|
@@ -630,6 +624,8 @@ def _validate_template_roundtrip(
|
|
|
630
624
|
size += len(blocks[-1])
|
|
631
625
|
if size > _MAX_REPLAY_TEMPLATE_CHARS:
|
|
632
626
|
raise ValueError(failure)
|
|
627
|
+
if prefix and answer_prefix is not None:
|
|
628
|
+
blocks[0] = answer_prefix
|
|
633
629
|
text = "".join(blocks)
|
|
634
630
|
replay_tools = _merged_replay_tools(probe)
|
|
635
631
|
# replay must grant exactly what a generation parse of this same text would grant. restating
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"""the text the qwen tool template renders around an assistant turn's call blocks.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
and a marker the template discards must not be validated as though it survived.
|
|
3
|
+
Replay validates the rendered answer prefix. Reasoning is counted toward the full
|
|
4
|
+
rendered size, but only text after its first close can contain executable tools.
|
|
6
5
|
"""
|
|
7
6
|
|
|
8
7
|
from __future__ import annotations
|
|
@@ -55,7 +54,9 @@ def last_query_index(messages: Sequence[Mapping[str, Any]]) -> int:
|
|
|
55
54
|
return len(messages) - 1
|
|
56
55
|
|
|
57
56
|
|
|
58
|
-
def rendered_turn_prefix(
|
|
57
|
+
def rendered_turn_prefix(
|
|
58
|
+
message: Mapping[str, Any], with_reasoning: bool, *, answer_only: bool = False
|
|
59
|
+
) -> str:
|
|
59
60
|
"""the text the template renders before this turn's call blocks."""
|
|
60
61
|
# deriving the prefix from the same normalization the prompt path applies is what keeps this
|
|
61
62
|
# exact. validating the raw request fields instead would reject a turn whose markers the
|
|
@@ -84,6 +85,8 @@ def rendered_turn_prefix(message: Mapping[str, Any], with_reasoning: bool) -> st
|
|
|
84
85
|
# earlier turn's reasoning is dropped, so including it would reject a replayable turn.
|
|
85
86
|
if with_reasoning and reasoning:
|
|
86
87
|
prefix += f"{THINK_START}\n{reasoning}\n{THINK_END}\n\n"
|
|
88
|
+
if answer_only:
|
|
89
|
+
prefix = prefix.partition(THINK_END)[2]
|
|
87
90
|
if content:
|
|
88
91
|
prefix += f"{content}\n\n"
|
|
89
92
|
return prefix
|