freesolo-flash-dev 1.2.121__tar.gz → 1.2.122__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/PKG-INFO +1 -1
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/docs/serving-contract.md +1 -1
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/core/catalog.py +1 -1
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/app/README.md +10 -9
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/app/modal_app.py +6 -2
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/accounting/usage.py +10 -9
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/model_config.py +31 -29
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/prequant_config.py +4 -4
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_model_config.py +16 -11
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_per_model_gpu.py +10 -8
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_prequant_config.py +7 -6
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_usage_outbox.py +14 -24
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_usage_reporter.py +17 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_catalog_consistency.py +2 -2
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve.py +40 -4
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/uv.lock +1 -1
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.env.example +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/deploy-modal-dev.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/deploy-modal.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/dev-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/production-kernel-cache-ready.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/publish-serving-image.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/CHANGELOG.md +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/Dockerfile +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/Dockerfile.serve +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/README.md +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/docker/patch_vllm_moe_lora.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/_internal/openai_sse.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/_internal/version.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/adapters/targets.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/imports.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/list.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/push.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/retained.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/setup.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/episode.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/eval.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/params.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/test.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/warnings.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/account.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/catalog.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/deploy.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/log_follow.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/runs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/traces.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/train.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/worker_output.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/serving/deploy.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/serving/identity.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/serving/status.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/commands/serving/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/account.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/env.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/errors.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/main.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/models.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/serve_parser.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/traces.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/training.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/scaffold/TRAINING.md +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/ui/render.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/ui/tables.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/content/image_descriptors.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/content/reasoning_normalization.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/core/grpo.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/core/spec.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cost/currency.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/support/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/support/huggingface.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/support/verl_checkpoint.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/support/verl_policy.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/support/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/entry/worker.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/runtime/state.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/backend_common.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/opd_train.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/opd_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/score_batcher.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/sft_train.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/child/patches.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/launch/config.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/setup/config.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/capabilities.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/process_census.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/loading/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/loading/adapter.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/loading/base.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/loading/loader.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/loading/pull.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/loading/staged.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/meta/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/meta/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/meta/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/meta/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/meta/identity.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/meta/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/package/direct_tokens.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/host/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/host/failmark.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/host/hostlog.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/instance.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/poll.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/provider.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/net/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/net/auth.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/net/deadline.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/net/http.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/net/worker.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/core/allocator.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/core/base.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/core/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/core/preflight.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/core/realized.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/core/registry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/core/sharding.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/api.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/jobs/reap.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/api.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/cost.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/job_execution.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/jobs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/polling.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/resources.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/serverless/endpoints.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/vast/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/vast/client/api.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/vast/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/vast/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/vast/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/vast/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/vast/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/accounting/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/accounting/costs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/accounting/reconciliation.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/accounting/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/attempts.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/preparation.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/reporting.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/state.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/status.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/submit.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/results/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/attach.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/attach_reconcile.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/deploy.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/errors.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/recovery.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/retry_decision.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/seed_submission.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/transitions.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/runtime_capsule/profiles.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/app/__main__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/app/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/app/chat_stream.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/app/http.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/app/launch.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/app/manifest.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/app/materialize.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/app/openai.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/app/progress.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/contract/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/contract/errors.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/contract/protocol.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/contract/provenance.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/contract/responses.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/contract/urls.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/control/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/control/_canonical.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/control/_serialization.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/control/_urls.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/control/credentials.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/control/planning.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/control/types.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/adapter_check.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/deploy.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/export.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/preflight.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/profiles.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/readiness.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/resolve.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/common/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/common/records.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/execution/operations.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/planning/plan.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/planning/resources.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/request/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/request/openai.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/request/runtime_support.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/request/streaming.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/request/thinking.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/request/transport.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/request/validation.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/adapters.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/engine.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/errors.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/prompt.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/sampling.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/types.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/asgi/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/asgi/app.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/asgi/cli.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/billing/charges.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/ops/reconcile.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/ops/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/ops/serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/environment_registry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/envs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/projects.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/runs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/teacher/broker.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/teacher/errors.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/domain/teacher/requests.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/platform/auth.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/platform/internal_client.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/platform/runtime.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/routes/serving_chat.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/routes/serving_completion.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/routes/serving_revisions.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/routes/serving_smoke.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/accounting/usage_facts.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/accounting/usage_outbox.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/boot.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/errors.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/generation.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/lora_engine.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/lora_entries.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/support.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/adapter_routes.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/body_limit.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/context.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/headers.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/inference_routes.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/router.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/routing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/openai_request.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/openai_stream.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/provenance.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/requests.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/responses.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/schemas.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/streaming.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/access.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/lookup.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/persisted_columns.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/persistence.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/registration.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/registry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/settings.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/supabase_rest.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/snapshot/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/snapshot/archive.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/teacher/provider_status.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/scripts/check_rollout_identity_actor.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/scripts/check_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/scripts/qualify_serving_profile.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/serve_launch.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/_helpers/chat_provenance.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/_helpers/chat_transport.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/_helpers/managed_chat.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/_helpers/server_api_plugin.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/_helpers/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/capture_qwen38_27b_metadata.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/checkpoint_fixtures.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/conftest.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_base_model_serving.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_chat_auth.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_chat_authorizer.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_checkpoint_identity_repairs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_checkpoint_model_validation.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_engine_error_status.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_fp8_config.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_immutable_engine.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_immutable_revisions.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_immutable_schemas.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_mirror_sampling_parity.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_modal_deploy_identity.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_modal_image_paths.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_multimodal.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_openai_stream_options.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_persistence.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_pre_first_disconnect.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_registry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_registry_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_request_body_limit.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_router.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_router_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_router_edge_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_schemas_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_serve_reasoning_split.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_serve_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_serve_thinking.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_settings.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_structured_outputs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_supabase_rest_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving_conformance/__init__.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving_conformance/conftest.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving_conformance/test_contract.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_adapter_shard_completeness.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cancel_remote.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_capture_qwen38_metadata.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_chat_foundations.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_serve_deploy.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_serve_status.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cost_currency.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_grpo_checkpoint_durability.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_grpo_process_census.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_grpo_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_grpo_rollout_identity.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_image_environment_capability.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_image_incremental_processor.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_jobs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_lora_rank_nested_rung.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_lora_targeting.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_lora_targeting_pinned_verl.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_mirror_sampling_parity.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_opd_multiturn_failure_exit.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_opd_replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_opd_resume_safety.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_opd_train.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_provider_routing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_resume_on_retry.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_rl_train.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_run_registry_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_runmgmt.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_bootstrap_http.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_launch.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_manifest.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_materialize.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_packaging.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_progress.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_chat_transport.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_control.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_docs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_modal_contract_lock.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_modal_sdk.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_modal_sdk_deadlines.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_modal_teardown_identity.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_profile_qualification.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_profiles.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_provisioning_common.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_provisioning_modal.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_resolve_provenance.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_runtime_adapters.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_runtime_engine.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_runtime_package.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serve_runtime_types.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_server_api.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_server_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_server_managed_chat_requests.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_server_serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_server_standalone.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serving_conformance_gate.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_sft_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_sft_train.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_source_attestation_flow.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_staged_environment.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_teacher_broker.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_vllm_moe_lora_backport.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_warmstart_image_adapters.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.122
|
|
4
4
|
Summary: Flash — managed LoRA post-training (SFT/GRPO/OPD) for Freesolo environments, driven by the `flash` CLI
|
|
5
5
|
Project-URL: Homepage, https://github.com/freesolo-co/flash
|
|
6
6
|
Project-URL: Repository, https://github.com/freesolo-co/flash
|
|
@@ -10,7 +10,7 @@ adapters. A different base model requires a separate deployment. Use
|
|
|
10
10
|
Customer-owned Modal is live-qualified for `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
|
|
11
11
|
`Qwen/Qwen3.6-35B-A3B`. The 27B and 35B-A3B qualifications are bound to the exact certified serving
|
|
12
12
|
image digest; another digest remains available for offline planning but cannot allocate Modal.
|
|
13
|
-
Hosted Qwen3.8 27B
|
|
13
|
+
Hosted Qwen3.8 27B is active on H100. Its customer-owned engine runs on `H100!` and serves the pinned
|
|
14
14
|
`Qwen/Qwen3.8-27B-FP8` checkpoint while preserving `Qwen/Qwen3.8-27B` as the distinct logical base
|
|
15
15
|
and tokenizer provenance. The 35B-A3B engine serves BF16 weights on one H200 with FP8 KV cache, a
|
|
16
16
|
32K context, eight sequences, a 4096 batched-token cap, and six rank-64 LoRA slots.
|
|
@@ -208,7 +208,7 @@ class ModelInfo:
|
|
|
208
208
|
DEFAULT_MODEL = "Qwen/Qwen3.5-9B"
|
|
209
209
|
|
|
210
210
|
# the checkpoint each public catalog model loads for customer-owned serving. hosted activation is
|
|
211
|
-
# a separate allowlist in flash.serving.src.engine.model_config
|
|
211
|
+
# a separate allowlist in flash.serving.src.engine.model_config.
|
|
212
212
|
SERVING_MODEL_REPOS: dict[str, str] = {
|
|
213
213
|
"Qwen/Qwen3.5-9B": "Freesolo-Co/Qwen3.5-9B-FP8",
|
|
214
214
|
"Qwen/Qwen3.8-27B": "Qwen/Qwen3.8-27B-FP8",
|
|
@@ -150,13 +150,12 @@ GPUs, so there's nothing to tune at deploy time:
|
|
|
150
150
|
checkpoints are VL-preserving (each VL-unified base's vision tower + MoE router gates stay in
|
|
151
151
|
original precision) and already published to the operator HF org. Native FP8 tensor cores need
|
|
152
152
|
compute capability ≥ 8.9; every dense FP8 tier runs on an L4, L40S, or H100 (all native). No serving
|
|
153
|
-
tier runs on A100 now that the 35B is bf16 on H200. The
|
|
154
|
-
|
|
153
|
+
tier runs on A100 now that the 35B is bf16 on H200. The 27B serves the official native FP8
|
|
154
|
+
checkpoint on an H100.
|
|
155
155
|
|
|
156
156
|
- **The real memory lever — LoRA buffers:** vLLM PRE-ALLOCATES the GPU LoRA buffers at `max_loras ×
|
|
157
157
|
max_lora_rank`, regardless of how many adapters load. Both are linear levers. The qualified 9B runs
|
|
158
|
-
**16 × 128** on L40S
|
|
159
|
-
qualification. The 35B MoE runs **6 × 64** bf16 on H200. Adapters trained above the effective rank are rejected at load; a base regularly serving
|
|
158
|
+
**16 × 128** on L40S and the 27B runs **16 × 64** on H100. The 35B MoE runs **6 × 64** bf16 on H200. Adapters trained above the effective rank are rejected at load; a base regularly serving
|
|
160
159
|
more distinct adapters than its hot limit pays a swap latency from the CPU pool unless its hot
|
|
161
160
|
limit equals `MAX_CPU_LORAS`.
|
|
162
161
|
|
|
@@ -174,17 +173,19 @@ cold-boot smoke test first.
|
|
|
174
173
|
| Base model | Checkpoint | GPU | Hot LoRA shape | Context |
|
|
175
174
|
| ------------------------- | -------------------------------------------- | --------- | -------------- | ------- |
|
|
176
175
|
| Qwen3.5-9B | owned FP8 (`Freesolo-Co/*-FP8`) | **L40S**§ | 16 × 128 | 32768 |
|
|
177
|
-
| Qwen3.8-27B
|
|
176
|
+
| Qwen3.8-27B | official native FP8 (`Qwen/Qwen3.8-27B-FP8`) | **H100**‡ | 16 × 64 | 32768 |
|
|
178
177
|
| Qwen3.6-35B-A3B (MoE, VL) | official **bf16** (`Qwen/Qwen3.6-35B-A3B`) | **H200**† | 6 × 64 | 32768 |
|
|
179
178
|
|
|
180
179
|
§ 9B (L40S) runs **16 × 128** at 32k context with `max_num_seqs=8`, CUDA graphs
|
|
181
180
|
(`enforce_eager=False`), and `gpu_memory_utilization=0.90`. Its rank-128 × 16 buffer OOMed an L4 and
|
|
182
181
|
2×L4 in the real-GPU sweep, so it runs on the 48 GiB L40S, the cheapest Ada card that fits it at 32k.
|
|
183
182
|
|
|
184
|
-
‡
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
183
|
+
‡ 27B (H100, 80 GiB) runs **16 × 64** at 32k with `max_num_seqs=8`, CUDA graphs
|
|
184
|
+
(`enforce_eager=False`), and `gpu_memory_utilization=0.90`, qualified by a real-GPU canary on the exact
|
|
185
|
+
immutable official FP8 checkpoint: weights loaded at 44.25 GiB, leaving 23.07 GiB of KV cache
|
|
186
|
+
(350,981 tokens, 10.71x concurrency at 32k) after a 0.35 GiB graph capture. Cold boot is about 20 min
|
|
187
|
+
(load + 137 s torch.compile + 442 s warmup dominated by the FlashInfer GDN JIT), all cached on the
|
|
188
|
+
serving volume. Qwen3.6-27B measurements do not qualify or predict the Qwen3.8 checkpoint.
|
|
188
189
|
|
|
189
190
|
† 35B-A3B runs **bf16 on an H200** (141 GiB) at **6 × 64**, the one serving path that gives a flash
|
|
190
191
|
adapter its full all-expert LoRA AND CUDA graphs at speed. It gets rank 64 like the 27B
|
|
@@ -138,8 +138,12 @@ def scaledown_window_for(gpu: str) -> int:
|
|
|
138
138
|
# gpu model engines scale to zero. inference and adapter registration remote calls start the matching
|
|
139
139
|
# parameter-bound engine on demand.
|
|
140
140
|
MIN_CONTAINERS = 0
|
|
141
|
-
#
|
|
142
|
-
|
|
141
|
+
# At most 3 GPUs per base model. `base_model` is a modal.parameter(), and Modal gives each distinct
|
|
142
|
+
# parameter value its own container pool with its own autoscaling accounting, so this bound applies
|
|
143
|
+
# PER MODEL rather than across the catalog. Engines are TENSOR_PARALLEL_SIZE 1 on a single-card `gpu=`
|
|
144
|
+
# request, so one container is exactly one GPU and 3 containers is exactly 3 GPUs. Raising this bounds
|
|
145
|
+
# spend per model, not total spend: N models can still reach 3N GPUs.
|
|
146
|
+
MAX_CONTAINERS = 3
|
|
143
147
|
# Concurrent requests packed onto one base-model GPU before Modal autoscales a new (costly) one.
|
|
144
148
|
# A real-GPU sweep (scripts/gpu_canary.py::sweep_concurrency on A10G/Qwen2.5-1.5B) showed vLLM
|
|
145
149
|
# throughput scaling near-linearly with no saturation through 128 concurrent, while TTFT stayed
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/accounting/usage.py
RENAMED
|
@@ -24,16 +24,17 @@ from flash.serving.src.accounting.usage_outbox import (
|
|
|
24
24
|
from flash.serving.src.io.schemas import AdapterRecord
|
|
25
25
|
|
|
26
26
|
FREESOLO_PRICING_SOURCE = "freesolo_backend_catalog"
|
|
27
|
-
FREESOLO_PRICING_VERSION = "2026-08-
|
|
27
|
+
FREESOLO_PRICING_VERSION = "2026-08-27.1"
|
|
28
|
+
# (prompt, completion, cached prompt) usd per million tokens, one entry per active hosted model.
|
|
29
|
+
# these are the charged customer rates, set 5% below the lowest healthy comparable openrouter fp8
|
|
30
|
+
# listing for each model and token category. they are NOT cost-plus: no markup is applied, and they
|
|
31
|
+
# currently sit below the recorded cost basis, so do not reintroduce a multiplier here until measured
|
|
32
|
+
# b200 economics establish a lower truthful cost basis.
|
|
28
33
|
_FREESOLO_USD_PER_MTOK: dict[str, tuple[str, str, str]] = {
|
|
29
|
-
"Qwen/Qwen3.5-
|
|
30
|
-
"Qwen/Qwen3.
|
|
31
|
-
"Qwen/Qwen3.
|
|
32
|
-
"Qwen/Qwen3.5-9B": ("0.114", "0.19", "0.023"),
|
|
33
|
-
"Qwen/Qwen3.6-27B": ("0.4254", "3.055", "0.14"),
|
|
34
|
-
"Qwen/Qwen3.6-35B-A3B": ("0.198", "1.265", "0.066"),
|
|
34
|
+
"Qwen/Qwen3.5-9B": ("0.095", "0.1425", "0.0276"),
|
|
35
|
+
"Qwen/Qwen3.8-27B": ("0.3325", "2.4225", "0.03325"),
|
|
36
|
+
"Qwen/Qwen3.6-35B-A3B": ("0.095", "0.9025", "0.0475"),
|
|
35
37
|
}
|
|
36
|
-
_FREESOLO_MARKUP = Decimal("1.2")
|
|
37
38
|
_USD_PER_MTOK_DIVISOR = Decimal("1000000")
|
|
38
39
|
|
|
39
40
|
|
|
@@ -173,7 +174,7 @@ def freesolo_price(base_model: str) -> CapturedPrice:
|
|
|
173
174
|
raise ValueError(f"no durable serving price for base model {base_model!r}") from exc
|
|
174
175
|
|
|
175
176
|
def per_token(rate: str) -> str:
|
|
176
|
-
return format(Decimal(rate)
|
|
177
|
+
return format(Decimal(rate) / _USD_PER_MTOK_DIVISOR, "f")
|
|
177
178
|
|
|
178
179
|
return CapturedPrice(
|
|
179
180
|
source=FREESOLO_PRICING_SOURCE,
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/model_config.py
RENAMED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
The serving app runs one vLLM GPU engine per base model, each on the Modal GPU class set by its
|
|
4
4
|
catalog ``gpu`` (see below). Adapters and routing key off the logical ``base_model``; the engine
|
|
5
5
|
loads its configured checkpoint at that checkpoint's own dtype. The active dense 9B uses Freesolo
|
|
6
|
-
compressed-tensors FP8
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
compressed-tensors FP8 and the active dense 27B uses the official Qwen FP8 checkpoint. The active
|
|
7
|
+
35B-A3B MoE serves base bf16 weights because its fused-MoE LoRA path will not compile on FP8, as
|
|
8
|
+
detailed below.
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
from __future__ import annotations
|
|
@@ -27,15 +27,14 @@ from flash.serving.src.engine.prequant_config import (
|
|
|
27
27
|
# `engine` (optional): per-model vLLM engine-arg overrides (LoRA buffer shape, scheduler/memory caps,
|
|
28
28
|
# language_model_only, …). The engine's LOADED checkpoint is NOT in here — it is resolved centrally by
|
|
29
29
|
# ``serve_model_for`` from ``src.prequant_config`` and injected into the overrides as ``serve_model_id``.
|
|
30
|
-
# active models resolve through prequant_config unless an exact validated override is present.
|
|
31
|
-
# pending 27b candidate carries its own immutable checkpoint pin without entering active resolution.
|
|
30
|
+
# active models resolve through prequant_config unless an exact validated override is present.
|
|
32
31
|
# ⚠ serve_model_id is pointed only at checkpoints VERIFIED to exist (a missing repo 404-crash-loops
|
|
33
32
|
# the engine — the reason this mechanism was removed once); the owned repos are VL-preserving FP8
|
|
34
33
|
# checkpoints published to the operator HF org.
|
|
35
34
|
#
|
|
36
35
|
# sizing rationale. preallocated lora buffers and loaded checkpoint weights dominate engine vram.
|
|
37
|
-
# the active 9b uses 16 rank-128 slots on l40s
|
|
38
|
-
#
|
|
36
|
+
# the active 9b uses 16 rank-128 slots on l40s, the active 27b uses 16 rank-64 slots on h100, and the
|
|
37
|
+
# active 35b moe uses 6 rank-64 slots on h200.
|
|
39
38
|
# - Qwen3.6-35B-A3B (vision-language MoE; arch ``Qwen3_5MoeForConditionalGeneration``) -> H200
|
|
40
39
|
# (141 GiB) with the base bf16 weights, 6 x 64 LoRA at 32k. bf16 (not FP8) is the one path giving
|
|
41
40
|
# full-expert LoRA + CUDA graphs because the fused-MoE LoRA path won't compile on fp8e4nv. see the
|
|
@@ -108,32 +107,35 @@ SERVING_MODELS: list[dict[str, Any]] = [
|
|
|
108
107
|
# the complete model and LoRA load is about 108 GiB on the 141 GiB H200.
|
|
109
108
|
},
|
|
110
109
|
},
|
|
110
|
+
# 27B dense on an H100 (80 GiB). the real-GPU canary measured the load at 44.25 GiB -- above the
|
|
111
|
+
# FP8 weight size alone, because the vision tower and the non-quantized tensors stay bf16 -- which
|
|
112
|
+
# still leaves 23.07 GiB of KV cache (350,981 tokens, 10.71x concurrency at 32k) after the 16
|
|
113
|
+
# rank-64 LoRA buffers and a 0.35 GiB graph capture. every repository here is pinned to an
|
|
114
|
+
# immutable revision so a served engine cannot silently follow an upstream retag; note the model
|
|
115
|
+
# pin names a commit in the -FP8 repo while the tokenizer/processor pins name one in the base
|
|
116
|
+
# repo, which are separate sha namespaces.
|
|
117
|
+
{
|
|
118
|
+
"base_model": "Qwen/Qwen3.8-27B",
|
|
119
|
+
"image_input_limit": 4,
|
|
120
|
+
"gpu": "H100",
|
|
121
|
+
"engine": {
|
|
122
|
+
"model_revision": "017b9c7af6b5689d5dd426a76e0bc077eb5ca20a",
|
|
123
|
+
"tokenizer_model": "Qwen/Qwen3.8-27B",
|
|
124
|
+
"tokenizer_revision": "1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0",
|
|
125
|
+
"processor_revision": "1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0",
|
|
126
|
+
"gpu_memory_utilization": 0.90,
|
|
127
|
+
"max_loras": 16,
|
|
128
|
+
"max_lora_rank": 64,
|
|
129
|
+
"max_model_len": 32768,
|
|
130
|
+
"max_num_seqs": 8,
|
|
131
|
+
"enforce_eager": False,
|
|
132
|
+
"reasoning_parser": "qwen3",
|
|
133
|
+
},
|
|
134
|
+
},
|
|
111
135
|
]
|
|
112
136
|
|
|
113
137
|
_BY_MODEL: dict[str, dict[str, Any]] = {m["base_model"]: m for m in SERVING_MODELS}
|
|
114
138
|
|
|
115
|
-
# inert descriptor for the exact pending canary. activation means moving this descriptor into
|
|
116
|
-
# SERVING_MODELS, not consulting a second runtime allowlist.
|
|
117
|
-
_QWEN38_HOSTED_CANDIDATE: dict[str, Any] = {
|
|
118
|
-
"base_model": "Qwen/Qwen3.8-27B",
|
|
119
|
-
"image_input_limit": 4,
|
|
120
|
-
"gpu": "H100",
|
|
121
|
-
"engine": {
|
|
122
|
-
"serve_model_id": "Qwen/Qwen3.8-27B-FP8",
|
|
123
|
-
"model_revision": "017b9c7af6b5689d5dd426a76e0bc077eb5ca20a",
|
|
124
|
-
"tokenizer_model": "Qwen/Qwen3.8-27B",
|
|
125
|
-
"tokenizer_revision": "1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0",
|
|
126
|
-
"processor_revision": "1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0",
|
|
127
|
-
"gpu_memory_utilization": 0.90,
|
|
128
|
-
"max_loras": 16,
|
|
129
|
-
"max_lora_rank": 64,
|
|
130
|
-
"max_model_len": 32768,
|
|
131
|
-
"max_num_seqs": 8,
|
|
132
|
-
"enforce_eager": False,
|
|
133
|
-
"reasoning_parser": "qwen3",
|
|
134
|
-
},
|
|
135
|
-
}
|
|
136
|
-
|
|
137
139
|
|
|
138
140
|
def base_models() -> list[str]:
|
|
139
141
|
return [model["base_model"] for model in SERVING_MODELS]
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"""Prequantized checkpoint mapping for active hosted serving.
|
|
2
2
|
|
|
3
|
-
The 9B loads a Freesolo-owned compressed-tensors FP8 checkpoint. The
|
|
4
|
-
official FP8 default, although the validated engine
|
|
5
|
-
full-expert LoRA and CUDA graphs coexist.
|
|
6
|
-
without entering this active mapping.
|
|
3
|
+
The 9B loads a Freesolo-owned compressed-tensors FP8 checkpoint. The 27B loads its official FP8
|
|
4
|
+
checkpoint. The 35B MoE mapping remains its official FP8 default, although the validated engine
|
|
5
|
+
override serves the base bf16 weights so full-expert LoRA and CUDA graphs coexist.
|
|
7
6
|
"""
|
|
8
7
|
|
|
9
8
|
from __future__ import annotations
|
|
@@ -15,6 +14,7 @@ OWNED_FP8_MODEL_REPOS: dict[str, str] = {
|
|
|
15
14
|
|
|
16
15
|
# official qwen checkpoints active in hosted serving.
|
|
17
16
|
OFFICIAL_FP8_MODEL_REPOS: dict[str, str] = {
|
|
17
|
+
"Qwen/Qwen3.8-27B": "Qwen/Qwen3.8-27B-FP8",
|
|
18
18
|
"Qwen/Qwen3.6-35B-A3B": "Qwen/Qwen3.6-35B-A3B-FP8",
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "freesolo-flash-dev"
|
|
3
|
-
version = "1.2.
|
|
3
|
+
version = "1.2.122"
|
|
4
4
|
description ="Flash — managed LoRA post-training (SFT/GRPO/OPD) for Freesolo environments, driven by the `flash` CLI"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
# RunPod Flash supports Python 3.11-3.12 (not 3.13 yet).
|
|
@@ -196,7 +196,7 @@ artifacts = ["flash/py.typed"]
|
|
|
196
196
|
# auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
|
|
197
197
|
# PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
|
|
198
198
|
# dev-channel release = bump this (and [project].version) and merge to `dev`.
|
|
199
|
-
version = "1.2.
|
|
199
|
+
version = "1.2.122"
|
|
200
200
|
|
|
201
201
|
[tool.pytest.ini_options]
|
|
202
202
|
pythonpath = ["."]
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_model_config.py
RENAMED
|
@@ -5,7 +5,6 @@ from __future__ import annotations
|
|
|
5
5
|
import pytest
|
|
6
6
|
|
|
7
7
|
from flash.serving.src.engine.model_config import (
|
|
8
|
-
_QWEN38_HOSTED_CANDIDATE,
|
|
9
8
|
SERVING_MODELS,
|
|
10
9
|
base_models,
|
|
11
10
|
engine_overrides_for,
|
|
@@ -21,6 +20,7 @@ from flash.serving.src.engine.model_config import (
|
|
|
21
20
|
def test_catalog_has_only_canary_qualified_active_models() -> None:
|
|
22
21
|
assert set(base_models()) == {
|
|
23
22
|
"Qwen/Qwen3.5-9B",
|
|
23
|
+
"Qwen/Qwen3.8-27B",
|
|
24
24
|
"Qwen/Qwen3.6-35B-A3B",
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -35,6 +35,7 @@ def test_every_catalog_model_has_an_intentional_image_classification() -> None:
|
|
|
35
35
|
image_models = {model for model in base_models() if supports_image_input(model)}
|
|
36
36
|
assert image_models == {
|
|
37
37
|
"Qwen/Qwen3.5-9B",
|
|
38
|
+
"Qwen/Qwen3.8-27B",
|
|
38
39
|
"Qwen/Qwen3.6-35B-A3B",
|
|
39
40
|
}
|
|
40
41
|
assert all(image_limit_for(model) == 4 for model in image_models)
|
|
@@ -86,6 +87,7 @@ def test_dense_models_serve_fp8_and_35b_serves_bf16_base() -> None:
|
|
|
86
87
|
# serve_model_for() resolves it and engine_overrides_for() injects it as serve_model_id.
|
|
87
88
|
expected_fp8 = {
|
|
88
89
|
"Qwen/Qwen3.5-9B": "Freesolo-Co/Qwen3.5-9B-FP8",
|
|
90
|
+
"Qwen/Qwen3.8-27B": "Qwen/Qwen3.8-27B-FP8",
|
|
89
91
|
}
|
|
90
92
|
for base, ckpt in expected_fp8.items():
|
|
91
93
|
assert serve_model_for(base) == ckpt
|
|
@@ -121,18 +123,21 @@ def test_9b_has_l40s_rank128_serving_overrides() -> None:
|
|
|
121
123
|
) # CUDA graphs on (~10x faster decode on this hybrid GDN model)
|
|
122
124
|
|
|
123
125
|
|
|
124
|
-
def
|
|
126
|
+
def test_qwen38_27b_is_active_on_h100_with_pinned_immutable_revisions() -> None:
|
|
127
|
+
# 27B is a FULLY ACTIVE hosted tier: every active lookup resolves it, and its served checkpoint,
|
|
128
|
+
# tokenizer and processor stay pinned to immutable revisions so a served engine cannot follow an
|
|
129
|
+
# upstream retag. The rank-64 x 16 LoRA shape at 32k is what the H100 (80 GiB) was sized for.
|
|
125
130
|
base_model = "Qwen/Qwen3.8-27B"
|
|
126
|
-
|
|
127
|
-
assert
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
assert base_model
|
|
131
|
-
assert
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
active_lookup(base_model)
|
|
131
|
+
|
|
132
|
+
assert base_model in base_models()
|
|
133
|
+
assert is_supported_base_model(base_model) is True
|
|
134
|
+
assert gpu_for(base_model) == "H100"
|
|
135
|
+
assert image_limit_for(base_model) == 4
|
|
136
|
+
assert serve_model_for(base_model) == "Qwen/Qwen3.8-27B-FP8"
|
|
137
|
+
|
|
138
|
+
ov = engine_overrides_for(base_model)
|
|
135
139
|
assert ov["serve_model_id"] == "Qwen/Qwen3.8-27B-FP8"
|
|
140
|
+
assert ov["tokenizer_model"] == base_model
|
|
136
141
|
assert ov["max_loras"] == 16
|
|
137
142
|
assert ov["max_lora_rank"] == 64
|
|
138
143
|
assert ov["max_model_len"] == 32768
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_per_model_gpu.py
RENAMED
|
@@ -410,6 +410,7 @@ def test_one_engine_class_per_distinct_engine_key(modal_app_module):
|
|
|
410
410
|
"""a loraengine class is built for each active gpu tier and concurrency key."""
|
|
411
411
|
assert set(modal_app_module.ENGINE_BY_KEY) == {
|
|
412
412
|
("L40S", 16),
|
|
413
|
+
("H100", 16),
|
|
413
414
|
("H200", 16),
|
|
414
415
|
}
|
|
415
416
|
|
|
@@ -446,11 +447,12 @@ def test_9b_routes_to_l40s(modal_app_module):
|
|
|
446
447
|
assert by_key[("L40S", 16)].__name__ == "LoraEngine_L40S_c16"
|
|
447
448
|
|
|
448
449
|
|
|
449
|
-
def
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
450
|
+
def test_27b_routes_to_h100(modal_app_module):
|
|
451
|
+
"""The dense 27B runs its FP8 checkpoint on the H100 tier (8-seq -> (H100, 16))."""
|
|
452
|
+
by_key = modal_app_module.ENGINE_BY_KEY
|
|
453
|
+
assert gpu_for("Qwen/Qwen3.8-27B") == "H100"
|
|
454
|
+
assert modal_app_module._engine_cls_for("Qwen/Qwen3.8-27B") is by_key[("H100", 16)]
|
|
455
|
+
assert by_key[("H100", 16)].pinned_gpu == "H100"
|
|
454
456
|
|
|
455
457
|
|
|
456
458
|
def test_35b_moe_routes_to_h200(modal_app_module):
|
|
@@ -796,14 +798,14 @@ def test_load_prequant_checkpoint_for_9b(modal_app_module, monkeypatch, tmp_path
|
|
|
796
798
|
assert getattr(args, "max_num_batched_tokens", None) is None
|
|
797
799
|
|
|
798
800
|
|
|
799
|
-
def
|
|
801
|
+
def test_qwen38_immutable_args_fail_closed_when_vllm_drops_revision_support():
|
|
800
802
|
from flash.serving.src.engine import boot
|
|
801
|
-
from flash.serving.src.engine.model_config import
|
|
803
|
+
from flash.serving.src.engine.model_config import engine_overrides_for
|
|
802
804
|
|
|
803
805
|
with pytest.raises(RuntimeError, match=r"cannot pin.*missing engine args"):
|
|
804
806
|
boot._required_immutable_args(
|
|
805
807
|
"Qwen/Qwen3.8-27B",
|
|
806
|
-
|
|
808
|
+
engine_overrides_for("Qwen/Qwen3.8-27B"),
|
|
807
809
|
{"model"},
|
|
808
810
|
)
|
|
809
811
|
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_prequant_config.py
RENAMED
|
@@ -13,7 +13,7 @@ from flash.serving.src.engine.prequant_config import (
|
|
|
13
13
|
)
|
|
14
14
|
|
|
15
15
|
OWNED_9B = "Qwen/Qwen3.5-9B"
|
|
16
|
-
|
|
16
|
+
DENSE_27B = "Qwen/Qwen3.8-27B"
|
|
17
17
|
MOE_35B = "Qwen/Qwen3.6-35B-A3B"
|
|
18
18
|
|
|
19
19
|
|
|
@@ -21,20 +21,21 @@ def test_owned_fp8_contains_only_the_freesolo_9b_checkpoint() -> None:
|
|
|
21
21
|
assert OWNED_FP8_MODEL_REPOS == {OWNED_9B: "Freesolo-Co/Qwen3.5-9B-FP8"}
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
def
|
|
24
|
+
def test_official_fp8_contains_the_active_27b_and_35b_moe_defaults() -> None:
|
|
25
25
|
assert OFFICIAL_FP8_MODEL_REPOS == {
|
|
26
|
+
DENSE_27B: "Qwen/Qwen3.8-27B-FP8",
|
|
26
27
|
MOE_35B: "Qwen/Qwen3.6-35B-A3B-FP8",
|
|
27
28
|
}
|
|
28
|
-
assert PENDING_27B not in FP8_SERVE_MODEL_REPOS
|
|
29
29
|
assert set(FP8_SERVE_MODEL_REPOS) == set(base_models())
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
def test_fp8_serve_model_for_resolves_every_active_base_without_translation() -> None:
|
|
33
33
|
assert fp8_serve_model_for(OWNED_9B) == "Freesolo-Co/Qwen3.5-9B-FP8"
|
|
34
|
+
assert fp8_serve_model_for(DENSE_27B) == "Qwen/Qwen3.8-27B-FP8"
|
|
34
35
|
assert fp8_serve_model_for(MOE_35B) == "Qwen/Qwen3.6-35B-A3B-FP8"
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
# the retired 3.6-27B is a DIFFERENT model from the active 3.8-27B and stays unresolvable.
|
|
37
|
+
with pytest.raises(ValueError, match="Allowed models"):
|
|
38
|
+
fp8_serve_model_for("Qwen/Qwen3.6-27B")
|
|
38
39
|
|
|
39
40
|
|
|
40
41
|
def test_fp8_serve_model_for_rejects_unknown_base() -> None:
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_usage_outbox.py
RENAMED
|
@@ -34,6 +34,7 @@ from flash.serving.src.accounting.usage_outbox import (
|
|
|
34
34
|
UsageEvent,
|
|
35
35
|
UsageOutboxError,
|
|
36
36
|
)
|
|
37
|
+
from flash.serving.src.engine.model_config import base_models
|
|
37
38
|
from flash.serving.src.http.inference_routes import _discard_prepared_stream
|
|
38
39
|
from flash.serving.src.http.router import AdapterRouter, build_serving_app
|
|
39
40
|
from flash.serving.src.io.schemas import AdapterRecord
|
|
@@ -184,41 +185,30 @@ class _Store(OfflineUsageStore):
|
|
|
184
185
|
|
|
185
186
|
|
|
186
187
|
def test_freesolo_prices_match_committed_catalog_fixed_point_contract() -> None:
|
|
188
|
+
# The charged per-token rate is the launch per-Mtok price divided by 1e6 with NO markup applied,
|
|
189
|
+
# so each value below is exactly its published rate shifted six places. Retired models are absent:
|
|
190
|
+
# the table is exactly the active hosted set.
|
|
187
191
|
expected = {
|
|
188
|
-
"Qwen/Qwen3.5-0.8B": {
|
|
189
|
-
"prompt_token_usd": "0.000000012",
|
|
190
|
-
"cached_prompt_token_usd": "0.0000000024",
|
|
191
|
-
"completion_token_usd": "0.00000006",
|
|
192
|
-
},
|
|
193
|
-
"Qwen/Qwen3.5-2B": {
|
|
194
|
-
"prompt_token_usd": "0.000000024",
|
|
195
|
-
"cached_prompt_token_usd": "0.0000000048",
|
|
196
|
-
"completion_token_usd": "0.00000012",
|
|
197
|
-
},
|
|
198
|
-
"Qwen/Qwen3.5-4B": {
|
|
199
|
-
"prompt_token_usd": "0.000000036",
|
|
200
|
-
"cached_prompt_token_usd": "0.0000000072",
|
|
201
|
-
"completion_token_usd": "0.00000018",
|
|
202
|
-
},
|
|
203
192
|
"Qwen/Qwen3.5-9B": {
|
|
204
|
-
"prompt_token_usd": "0.
|
|
193
|
+
"prompt_token_usd": "0.000000095",
|
|
205
194
|
"cached_prompt_token_usd": "0.0000000276",
|
|
206
|
-
"completion_token_usd": "0.
|
|
195
|
+
"completion_token_usd": "0.0000001425",
|
|
207
196
|
},
|
|
208
|
-
"Qwen/Qwen3.
|
|
209
|
-
"prompt_token_usd": "0.
|
|
210
|
-
"cached_prompt_token_usd": "0.
|
|
211
|
-
"completion_token_usd": "0.
|
|
197
|
+
"Qwen/Qwen3.8-27B": {
|
|
198
|
+
"prompt_token_usd": "0.0000003325",
|
|
199
|
+
"cached_prompt_token_usd": "0.00000003325",
|
|
200
|
+
"completion_token_usd": "0.0000024225",
|
|
212
201
|
},
|
|
213
202
|
"Qwen/Qwen3.6-35B-A3B": {
|
|
214
|
-
"prompt_token_usd": "0.
|
|
215
|
-
"cached_prompt_token_usd": "0.
|
|
216
|
-
"completion_token_usd": "0.
|
|
203
|
+
"prompt_token_usd": "0.000000095",
|
|
204
|
+
"cached_prompt_token_usd": "0.0000000475",
|
|
205
|
+
"completion_token_usd": "0.0000009025",
|
|
217
206
|
},
|
|
218
207
|
}
|
|
219
208
|
decimal_string = re.compile(r"^(0|[1-9][0-9]*)(\.[0-9]+)?$")
|
|
220
209
|
|
|
221
210
|
assert set(_FREESOLO_USD_PER_MTOK) == set(expected)
|
|
211
|
+
assert set(_FREESOLO_USD_PER_MTOK) == set(base_models())
|
|
222
212
|
for model, snapshot in expected.items():
|
|
223
213
|
actual = freesolo_price(model).snapshot
|
|
224
214
|
assert actual == snapshot
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/tests/serving/test_usage_reporter.py
RENAMED
|
@@ -124,6 +124,23 @@ def test_lora_engine_scales_to_zero_by_default(modal_app_module):
|
|
|
124
124
|
assert modal_app_module.app.function.call_args.kwargs["min_containers"] == 1
|
|
125
125
|
|
|
126
126
|
|
|
127
|
+
def test_every_gpu_engine_is_capped_at_three_containers(modal_app_module):
|
|
128
|
+
# At most 3 GPUs per base model. `base_model` is a modal.parameter(), so Modal gives each distinct
|
|
129
|
+
# value its own container pool with its own autoscaling accounting -- the cap therefore binds PER
|
|
130
|
+
# MODEL, not across the catalog. Engines are tensor-parallel 1 on a single-card `gpu=` request, so
|
|
131
|
+
# one container is exactly one GPU. Asserted on the kwargs modal is actually CALLED with, because a
|
|
132
|
+
# ceiling that never reaches `app.cls` does not bound anything.
|
|
133
|
+
assert modal_app_module.MAX_CONTAINERS == 3
|
|
134
|
+
|
|
135
|
+
cls_calls = [call.kwargs for call in modal_app_module.app.cls.call_args_list]
|
|
136
|
+
assert len(cls_calls) == len(modal_app_module.ENGINE_BY_KEY)
|
|
137
|
+
assert all(kwargs["max_containers"] == 3 for kwargs in cls_calls)
|
|
138
|
+
|
|
139
|
+
# The cpu router is deliberately UNCAPPED: it is the front door that triggers cold engines, and
|
|
140
|
+
# capping it would throttle every model at once rather than bounding gpu spend per model.
|
|
141
|
+
assert "max_containers" not in modal_app_module.app.function.call_args.kwargs
|
|
142
|
+
|
|
143
|
+
|
|
127
144
|
def test_scaledown_window_is_per_tier_and_cheaper_tiers_release_sooner(modal_app_module):
|
|
128
145
|
# The whole point of the table: an idle container bills at the full gpu rate, so a cheap
|
|
129
146
|
# fast-booting tier must not hold a card as long as the 35B's ~1010s-boot H200 does.
|
|
@@ -136,7 +136,7 @@ def test_public_rows_prune_unset_serving_capacity_fields():
|
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
|
|
139
|
-
def
|
|
139
|
+
def test_serving_repos_cover_public_catalog_and_hosted_activation() -> None:
|
|
140
140
|
assert SERVING_MODEL_REPOS == {
|
|
141
141
|
"Qwen/Qwen3.5-9B": "Freesolo-Co/Qwen3.5-9B-FP8",
|
|
142
142
|
"Qwen/Qwen3.8-27B": "Qwen/Qwen3.8-27B-FP8",
|
|
@@ -145,7 +145,7 @@ def test_serving_repos_cover_public_catalog_without_hosted_activation() -> None:
|
|
|
145
145
|
assert MODELS["Qwen/Qwen3.8-27B"].serving is not None
|
|
146
146
|
from flash.serving.src.engine.model_config import SERVING_MODELS
|
|
147
147
|
|
|
148
|
-
assert "Qwen/Qwen3.8-27B"
|
|
148
|
+
assert "Qwen/Qwen3.8-27B" in {entry["base_model"] for entry in SERVING_MODELS}
|
|
149
149
|
|
|
150
150
|
|
|
151
151
|
def test_qwen38_27b_fixture_binds_checkpoint_metadata() -> None:
|
|
@@ -245,9 +245,16 @@ def test_deploy_9b_dry_run_is_not_rejected():
|
|
|
245
245
|
assert dep.to_dict()["state"] == "dry_run"
|
|
246
246
|
|
|
247
247
|
|
|
248
|
-
def
|
|
248
|
+
def test_deploy_inactive_model_rejects_before_rank_resolution_or_dry_run_success(monkeypatch):
|
|
249
|
+
# The hosted-activation guard must fire FIRST: before rank validation and before any artifact is
|
|
250
|
+
# shaped, so an inactive model cannot reach a dry-run success or a paid path. Uses a model absent
|
|
251
|
+
# from the hosted catalog -- 27B is active, so it is no longer a witness for this rejection.
|
|
249
252
|
import flash.serve.deployment.adapter_check as adapter_check
|
|
250
253
|
import flash.serve.deployment.deploy as deploy
|
|
254
|
+
from flash.serving.src.engine.model_config import is_supported_base_model
|
|
255
|
+
|
|
256
|
+
inactive_model = "Qwen/Qwen3.5-99B"
|
|
257
|
+
assert not is_supported_base_model(inactive_model)
|
|
251
258
|
|
|
252
259
|
monkeypatch.setattr(
|
|
253
260
|
adapter_check,
|
|
@@ -262,15 +269,44 @@ def test_deploy_27b_rejects_before_rank_resolution_or_dry_run_success(monkeypatc
|
|
|
262
269
|
|
|
263
270
|
with pytest.raises(ValueError, match="not active in hosted serving"):
|
|
264
271
|
deploy.deploy_adapter(
|
|
265
|
-
run_id="
|
|
266
|
-
model=
|
|
272
|
+
run_id="q99",
|
|
273
|
+
model=inactive_model,
|
|
267
274
|
hf_repo="org/repo",
|
|
268
|
-
adapter_prefix="sft/
|
|
275
|
+
adapter_prefix="sft/q99/seed0",
|
|
269
276
|
dry_run=True,
|
|
270
277
|
lora_rank=64,
|
|
271
278
|
)
|
|
272
279
|
|
|
273
280
|
|
|
281
|
+
def test_deploy_27b_is_active_and_reaches_rank_validation(monkeypatch):
|
|
282
|
+
# The complement of the guard test: 27B is now an ACTIVE hosted tier, so it must pass the
|
|
283
|
+
# activation gate and proceed into rank validation rather than being rejected up front.
|
|
284
|
+
import flash.serve.deployment.adapter_check as adapter_check
|
|
285
|
+
import flash.serve.deployment.deploy as deploy
|
|
286
|
+
from flash.serving.src.engine.model_config import is_supported_base_model
|
|
287
|
+
|
|
288
|
+
assert is_supported_base_model("Qwen/Qwen3.8-27B")
|
|
289
|
+
|
|
290
|
+
reached = []
|
|
291
|
+
monkeypatch.setattr(
|
|
292
|
+
adapter_check,
|
|
293
|
+
"validate_serving_lora_rank",
|
|
294
|
+
lambda *args, **kwargs: reached.append(args[0]),
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
dep = deploy.deploy_adapter(
|
|
298
|
+
run_id="q27",
|
|
299
|
+
model="Qwen/Qwen3.8-27B",
|
|
300
|
+
hf_repo="org/repo",
|
|
301
|
+
adapter_prefix="sft/q27/seed0",
|
|
302
|
+
dry_run=True,
|
|
303
|
+
lora_rank=64,
|
|
304
|
+
)
|
|
305
|
+
|
|
306
|
+
assert reached == ["Qwen/Qwen3.8-27B"]
|
|
307
|
+
assert dep.to_dict()["state"] == "dry_run"
|
|
308
|
+
|
|
309
|
+
|
|
274
310
|
def test_deploy_rejects_lora_rank_above_serving_cap():
|
|
275
311
|
from flash.core.catalog import serving_lora_rank_cap
|
|
276
312
|
from flash.serve.deployment.deploy import deploy_adapter
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/ISSUE_TEMPLATE/bug_report.yml
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/ISSUE_TEMPLATE/feature_request.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/bake-kernel-cache.yml
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/deploy-modal-dev.yml
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/deploy-modal.yml
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/dev-kernel-cache.yml
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/main-source-guard.yml
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.2.121 → freesolo_flash_dev-1.2.122}/.github/workflows/notify-tests-repo.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|