freesolo-flash-dev 1.2.120__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.120 → freesolo_flash_dev-1.2.122}/CHANGELOG.md +5 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/PKG-INFO +9 -9
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/README.md +8 -8
- freesolo_flash_dev-1.2.122/docs/serving-contract.md +122 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/eval.py +30 -121
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/deploy.py +11 -219
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/serving/identity.py +8 -13
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/env.py +1 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/models.py +14 -9
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/scaffold/TRAINING.md +15 -15
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/ui/render.py +11 -11
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/ui/tables.py +2 -2
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/client/http.py +27 -77
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/core/catalog.py +1 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/core/spec.py +1 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/accounting/costs.py +4 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/accounting/reconciliation.py +105 -35
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/preparation.py +3 -3
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/state.py +15 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/status.py +28 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/results/verified_revisions.py +66 -43
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/attach.py +118 -53
- freesolo_flash_dev-1.2.122/flash/runner/supervise/attach_reconcile.py +82 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/deploy.py +67 -207
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/recovery.py +4 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/seed_submission.py +43 -3
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/transitions.py +72 -131
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/schema/__init__.py +21 -33
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/app/bootstrap.py +7 -14
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/app/chat_stream.py +1 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/app/http.py +2 -2
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/app/manifest.py +27 -52
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/app/materialize.py +4 -4
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/app/openai.py +2 -6
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/contract/errors.py +0 -30
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/contract/protocol.py +4 -15
- freesolo_flash_dev-1.2.122/flash/serve/contract/provenance.py +182 -0
- freesolo_flash_dev-1.2.122/flash/serve/contract/responses.py +46 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/control/__init__.py +0 -2
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/control/_serialization.py +1 -11
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/control/types.py +14 -55
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/adapter_check.py +39 -7
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/deploy.py +108 -187
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/resolve.py +9 -16
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/common/records.py +6 -13
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/readiness_checks/probe.py +4 -14
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/request/openai.py +2 -3
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/request/transport.py +20 -14
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/asgi/app.py +3 -5
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/billing/charges.py +8 -2
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/ops/reconcile.py +9 -3
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/runs.py +138 -6
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/platform/auth.py +10 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/platform/internal_client.py +12 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/platform/runtime.py +4 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/routes/meta.py +1 -3
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/routes/runs.py +6 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/routes/serving.py +54 -53
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/routes/serving_chat.py +26 -19
- freesolo_flash_dev-1.2.122/flash/server/routes/serving_completion.py +249 -0
- freesolo_flash_dev-1.2.122/flash/server/routes/serving_revisions.py +177 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/routes/serving_smoke.py +19 -85
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/app/README.md +18 -17
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/app/modal_app.py +15 -11
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/accounting/usage.py +18 -19
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/accounting/usage_outbox.py +4 -11
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/errors.py +0 -3
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/lora_engine.py +58 -52
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/lora_entries.py +9 -7
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/model_config.py +31 -29
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/prequant_config.py +4 -4
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/support.py +12 -20
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/adapter_routes.py +51 -37
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/context.py +27 -5
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/headers.py +12 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/inference_routes.py +14 -25
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/router.py +2 -4
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/routing.py +24 -29
- freesolo_flash_dev-1.2.122/flash/serving/src/io/provenance.py +50 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/responses.py +2 -2
- freesolo_flash_dev-1.2.122/flash/serving/src/io/schemas.py +335 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/streaming.py +9 -13
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/access.py +10 -5
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/lookup.py +15 -15
- freesolo_flash_dev-1.2.122/flash/serving/src/store/persisted_columns.py +9 -0
- freesolo_flash_dev-1.2.122/flash/serving/src/store/persistence.py +325 -0
- freesolo_flash_dev-1.2.122/flash/serving/src/store/registration.py +40 -0
- freesolo_flash_dev-1.2.122/flash/serving/src/store/registry.py +159 -0
- freesolo_flash_dev-1.2.122/flash/serving/src/store/undeploy.py +200 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/pyproject.toml +2 -2
- freesolo_flash_dev-1.2.122/tests/_helpers/chat_provenance.py +16 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/_helpers/managed_chat.py +4 -5
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/conftest.py +0 -1
- freesolo_flash_dev-1.2.122/tests/serving/checkpoint_fixtures.py +71 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/conftest.py +1 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_base_model_serving.py +41 -49
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_chat_auth.py +26 -49
- freesolo_flash_dev-1.2.122/tests/serving/test_checkpoint_identity_repairs.py +436 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_checkpoint_model_validation.py +23 -15
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_engine_error_status.py +3 -3
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_immutable_engine.py +54 -66
- freesolo_flash_dev-1.2.122/tests/serving/test_immutable_revisions.py +195 -0
- freesolo_flash_dev-1.2.122/tests/serving/test_immutable_schemas.py +152 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_mirror_sampling_parity.py +13 -4
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_model_config.py +16 -11
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_multimodal.py +86 -123
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_openai_stream_options.py +2 -2
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_per_model_gpu.py +52 -39
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_persistence.py +93 -86
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_pre_first_disconnect.py +14 -11
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_prequant_config.py +7 -6
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_registry.py +60 -79
- freesolo_flash_dev-1.2.122/tests/serving/test_registry_coverage.py +27 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_router.py +186 -284
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_router_coverage.py +23 -11
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_router_edge_coverage.py +35 -90
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_schemas_coverage.py +38 -72
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_serve_reasoning_split.py +60 -57
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_serve_structured_outputs.py +103 -40
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_serve_thinking.py +9 -15
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_structured_outputs.py +4 -27
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_usage_outbox.py +30 -41
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_usage_reporter.py +75 -55
- freesolo_flash_dev-1.2.122/tests/serving_conformance/test_contract.py +264 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_adapter_shard_completeness.py +2 -2
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_agent_flash_cli_contract.py +2 -2
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cancel_remote.py +290 -1003
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_catalog_consistency.py +2 -2
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_chat_foundations.py +47 -39
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_commands.py +72 -86
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_commands_coverage.py +11 -11
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_estimate.py +4 -3
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_render_theme.py +22 -8
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_serve_deploy.py +8 -9
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_client.py +135 -200
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_client_server_integration.py +2 -2
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_client_stream_reads.py +10 -10
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_deploy_latency.py +24 -49
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_evaluations.py +87 -595
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_publish.py +17 -4
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_grpo_params.py +14 -14
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_health_liveness.py +1 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_jobs.py +24 -17
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_lora_rank_preflight.py +1 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_mirror_sampling_parity.py +19 -18
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_opd_resume_safety.py +3 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_prompt_budget.py +3 -3
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_provider_routing.py +122 -5
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_realized_cost.py +45 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_resume_on_retry.py +7 -6
- freesolo_flash_dev-1.2.122/tests/test_run_registry_lifecycle.py +379 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_runmgmt.py +497 -4
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve.py +185 -267
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_bootstrap_http.py +22 -25
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_launch.py +1 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_manifest.py +6 -9
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_materialize.py +3 -3
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_chat_transport.py +101 -91
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_control.py +17 -47
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_modal_contract_lock.py +7 -7
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_provisioning_common.py +2 -14
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_provisioning_modal.py +9 -16
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_reasoning_content.py +7 -2
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_resolve_provenance.py +9 -12
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_server_api.py +544 -2041
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_server_billing.py +4 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_server_envs_coverage.py +34 -338
- freesolo_flash_dev-1.2.122/tests/test_server_managed_chat_requests.py +91 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_server_serving_resources.py +2 -2
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_server_standalone.py +103 -0
- freesolo_flash_dev-1.2.122/tests/test_serving_contract.py +388 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_spec_and_validation.py +40 -18
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_teacher_broker.py +0 -2
- freesolo_flash_dev-1.2.122/tests/test_verified_revisions.py +106 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_wandb_naming.py +1 -1
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_warmstart_cross_repo.py +18 -86
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/uv.lock +1 -1
- freesolo_flash_dev-1.2.120/docs/serving-contract.md +0 -229
- freesolo_flash_dev-1.2.120/flash/serve/contract/provenance.py +0 -168
- freesolo_flash_dev-1.2.120/flash/serve/contract/responses.py +0 -107
- freesolo_flash_dev-1.2.120/flash/server/routes/serving_completion.py +0 -467
- freesolo_flash_dev-1.2.120/flash/server/routes/serving_revisions.py +0 -350
- freesolo_flash_dev-1.2.120/flash/serving/src/io/provenance.py +0 -69
- freesolo_flash_dev-1.2.120/flash/serving/src/io/schemas.py +0 -482
- freesolo_flash_dev-1.2.120/flash/serving/src/store/persisted_columns.py +0 -14
- freesolo_flash_dev-1.2.120/flash/serving/src/store/persistence.py +0 -310
- freesolo_flash_dev-1.2.120/flash/serving/src/store/registration.py +0 -228
- freesolo_flash_dev-1.2.120/flash/serving/src/store/registry.py +0 -176
- freesolo_flash_dev-1.2.120/flash/serving/src/store/undeploy.py +0 -277
- freesolo_flash_dev-1.2.120/tests/_helpers/chat_provenance.py +0 -28
- freesolo_flash_dev-1.2.120/tests/serving/test_immutable_revisions.py +0 -1503
- freesolo_flash_dev-1.2.120/tests/serving/test_immutable_schemas.py +0 -147
- freesolo_flash_dev-1.2.120/tests/serving/test_registry_coverage.py +0 -65
- freesolo_flash_dev-1.2.120/tests/serving_conformance/test_contract.py +0 -786
- freesolo_flash_dev-1.2.120/tests/test_deploy_alias_move_warning.py +0 -554
- freesolo_flash_dev-1.2.120/tests/test_server_managed_chat_requests.py +0 -864
- freesolo_flash_dev-1.2.120/tests/test_server_managed_chat_revisions.py +0 -744
- freesolo_flash_dev-1.2.120/tests/test_serving_contract.py +0 -1017
- freesolo_flash_dev-1.2.120/tests/test_verified_revisions.py +0 -237
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.env.example +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/deploy-modal-dev.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/deploy-modal.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/dev-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/production-kernel-cache-ready.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/publish-serving-image.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/Dockerfile +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/Dockerfile.serve +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/docker/patch_vllm_moe_lora.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/_internal/openai_sse.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/_internal/version.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/adapters/targets.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/imports.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/list.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/push.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/retained.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/setup.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/episode.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/params.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/test.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/warnings.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/account.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/catalog.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/log_follow.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/runs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/traces.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/train.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/ops/worker_output.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/serving/deploy.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/serving/status.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/serving/undeploy.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/account.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/errors.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/main.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/serve_parser.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/traces.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/parsing/training.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/content/image_descriptors.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/content/reasoning_normalization.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/core/grpo.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cost/currency.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/support/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/support/huggingface.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/support/verl_checkpoint.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/support/verl_policy.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/support/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/entry/worker.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/runtime/state.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/backend_common.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/opd_train.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/opd_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/score_batcher.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/sft_train.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/child/patches.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/launch/config.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/train/sft/setup/config.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/capabilities.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/engine/worker/verl/process_census.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/loading/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/loading/adapter.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/loading/base.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/loading/loader.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/loading/pull.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/loading/staged.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/meta/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/meta/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/meta/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/meta/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/meta/identity.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/meta/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/package/direct_tokens.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/host/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/host/failmark.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/host/hostlog.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/instance.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/poll.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/provider.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/net/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/net/auth.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/net/deadline.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/net/http.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/_lifecycle/net/worker.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/core/allocator.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/core/base.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/core/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/core/preflight.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/core/realized.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/core/registry.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/core/sharding.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/api.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/lambda_/jobs/reap.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/api.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/cost.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/job_execution.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/jobs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/polling.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/execution/resources.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/runpod/serverless/endpoints.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/vast/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/vast/client/api.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/vast/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/vast/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/vast/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/vast/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/vast/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/accounting/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/accounting/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/attempts.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/reporting.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/lifecycle/submit.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/errors.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runner/supervise/retry_decision.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/runtime_capsule/profiles.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/app/__main__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/app/launch.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/app/progress.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/contract/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/contract/urls.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/control/_canonical.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/control/_urls.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/control/credentials.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/control/planning.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/export.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/preflight.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/profiles.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/deployment/readiness.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/common/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/execution/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/execution/operations.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/planning/plan.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/planning/resources.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/request/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/request/runtime_support.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/request/streaming.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/request/thinking.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/request/validation.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/adapters.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/engine.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/errors.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/prompt.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/sampling.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serve/runtime/types.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/asgi/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/asgi/cli.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/billing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/ops/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/ops/serving_resources.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/environment_registry.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/envs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/registry/projects.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/teacher/broker.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/teacher/errors.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/domain/teacher/requests.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/platform/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/accounting/usage_facts.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/boot.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/engine/generation.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/http/body_limit.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/openai_request.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/openai_stream.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/requests.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/io/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/settings.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/serving/src/store/supabase_rest.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/snapshot/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/snapshot/archive.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/teacher/provider_status.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/scripts/check_rollout_identity_actor.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/scripts/check_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/scripts/qualify_serving_profile.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/serve_launch.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/_helpers/chat_transport.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/_helpers/server_api_plugin.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/_helpers/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/capture_qwen38_27b_metadata.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_chat_authorizer.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_fp8_config.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_modal_deploy_identity.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_modal_image_paths.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_request_body_limit.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_settings.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_structured_outputs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving/test_supabase_rest_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving_conformance/__init__.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/serving_conformance/conftest.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_capture_qwen38_metadata.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_serve_status.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_serve_undeploy.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cost_currency.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_grpo_checkpoint_durability.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_grpo_process_census.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_grpo_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_grpo_rollout_identity.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_image_environment_capability.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_image_incremental_processor.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_lora_rank_nested_rung.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_lora_targeting.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_lora_targeting_pinned_verl.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_opd_multiturn_failure_exit.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_opd_replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_opd_train.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_rl_train.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_packaging.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_app_progress.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_docs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_modal_sdk.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_modal_sdk_deadlines.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_modal_teardown_identity.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_profile_qualification.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_profiles.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_runtime_adapters.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_runtime_engine.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_runtime_package.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serve_runtime_types.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serving_conformance_gate.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_sft_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_sft_train.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_source_attestation_flow.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_staged_environment.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_vllm_moe_lora_backport.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_warmstart_image_adapters.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -25,6 +25,11 @@ This file starts at 1.1.35. Earlier releases are not reconstructed here; use
|
|
|
25
25
|
|
|
26
26
|
### Changed
|
|
27
27
|
|
|
28
|
+
- Run-backed adapters now use only explicit permanent checkpoint identities, `<run_id>/final` and
|
|
29
|
+
`<run_id>/step-N`. Bare run aliases, composite source-revision identities, activation, implicit
|
|
30
|
+
checkpoint fallback, and public artifact provenance have been removed across hosted, managed, and
|
|
31
|
+
customer-owned serving. Checkpoint bindings are write-once, exact undeploy preserves siblings,
|
|
32
|
+
and customer-owned manifests use schema v2.
|
|
28
33
|
- Active training now exposes exactly `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
|
|
29
34
|
`Qwen/Qwen3.6-35B-A3B`. Hosted serving remains active for 9B and 35B-A3B; hosted Qwen3.8 27B
|
|
30
35
|
remains inactive. Qwen3.8 uses the immutable BF16 revision
|
|
@@ -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
|
|
@@ -174,8 +174,8 @@ lora_rank = 32 # lora_alpha defaults to 2 x lora_rank; set it to ov
|
|
|
174
174
|
```bash
|
|
175
175
|
flash train run.toml # submit, prints a run id
|
|
176
176
|
flash runs status RUN_ID # follow it
|
|
177
|
-
flash models deploy RUN_ID # serve the
|
|
178
|
-
flash models chat RUN_ID -m "hello" # talk to it
|
|
177
|
+
flash models deploy RUN_ID/final # serve the final checkpoint
|
|
178
|
+
flash models chat RUN_ID/final -m "hello" # talk to it
|
|
179
179
|
```
|
|
180
180
|
|
|
181
181
|
Run management lives under `flash runs` (`list`, `status`, `log`, `cancel`, `checkpoint`)
|
|
@@ -184,12 +184,12 @@ and serving under `flash models` (`deploy`, `chat`, `deployments`, `undeploy`, `
|
|
|
184
184
|
lists GPU classes with estimated $/hr.
|
|
185
185
|
|
|
186
186
|
Intermediate RL checkpoints are deployable: list them with `flash runs checkpoint RUN_ID`,
|
|
187
|
-
then pass `RUN_ID/step-N` as the
|
|
187
|
+
then pass `RUN_ID/step-N` as the checkpoint id. To copy a finished adapter into your own
|
|
188
188
|
HuggingFace repo:
|
|
189
189
|
|
|
190
190
|
```bash
|
|
191
191
|
export HF_TOKEN=hf_...
|
|
192
|
-
flash models export --adapter-id RUN_ID --repository your-org/your-repo
|
|
192
|
+
flash models export --adapter-id RUN_ID/final --repository your-org/your-repo
|
|
193
193
|
```
|
|
194
194
|
|
|
195
195
|
There are no built-in task environments — the environment you push defines the task.
|
|
@@ -197,7 +197,7 @@ Single-turn and bounded multi-turn environments are supported.
|
|
|
197
197
|
|
|
198
198
|
### Calling a deployed adapter from your own app
|
|
199
199
|
|
|
200
|
-
Deploy once with `flash models deploy RUN_ID`, then POST chat requests with your API key:
|
|
200
|
+
Deploy once with `flash models deploy RUN_ID/final`, then POST chat requests with your API key:
|
|
201
201
|
|
|
202
202
|
```bash
|
|
203
203
|
export RUN_ID=flash-1782194170-ce1cfcff
|
|
@@ -206,12 +206,12 @@ export FREESOLO_API_KEY=fslo_...
|
|
|
206
206
|
curl -X POST "https://flash.freesolo.co/v1/runs/$RUN_ID/chat" \
|
|
207
207
|
-H "Authorization: Bearer $FREESOLO_API_KEY" \
|
|
208
208
|
-H "Content-Type: application/json" \
|
|
209
|
-
-d
|
|
209
|
+
-d "{\"checkpoint_id\": \"$RUN_ID/final\", \"messages\": [{\"role\": \"user\", \"content\": \"hello\"}], \"max_tokens\": 256}"
|
|
210
210
|
```
|
|
211
211
|
|
|
212
212
|
The response uses the OpenAI chat-completions shape; read `choices[0].message.content`. The
|
|
213
|
-
|
|
214
|
-
hint to deploy first. Prefer this control-plane endpoint over calling the serving backend
|
|
213
|
+
checkpoint id is the permanent serving identity. If that checkpoint is not deployed yet, the
|
|
214
|
+
endpoint returns `409` with a hint to deploy first. Prefer this control-plane endpoint over calling the serving backend
|
|
215
215
|
directly: it enforces run ownership and forwards per-run serving options such as
|
|
216
216
|
thinking-mode parity.
|
|
217
217
|
|
|
@@ -91,8 +91,8 @@ lora_rank = 32 # lora_alpha defaults to 2 x lora_rank; set it to ov
|
|
|
91
91
|
```bash
|
|
92
92
|
flash train run.toml # submit, prints a run id
|
|
93
93
|
flash runs status RUN_ID # follow it
|
|
94
|
-
flash models deploy RUN_ID # serve the
|
|
95
|
-
flash models chat RUN_ID -m "hello" # talk to it
|
|
94
|
+
flash models deploy RUN_ID/final # serve the final checkpoint
|
|
95
|
+
flash models chat RUN_ID/final -m "hello" # talk to it
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
Run management lives under `flash runs` (`list`, `status`, `log`, `cancel`, `checkpoint`)
|
|
@@ -101,12 +101,12 @@ and serving under `flash models` (`deploy`, `chat`, `deployments`, `undeploy`, `
|
|
|
101
101
|
lists GPU classes with estimated $/hr.
|
|
102
102
|
|
|
103
103
|
Intermediate RL checkpoints are deployable: list them with `flash runs checkpoint RUN_ID`,
|
|
104
|
-
then pass `RUN_ID/step-N` as the
|
|
104
|
+
then pass `RUN_ID/step-N` as the checkpoint id. To copy a finished adapter into your own
|
|
105
105
|
HuggingFace repo:
|
|
106
106
|
|
|
107
107
|
```bash
|
|
108
108
|
export HF_TOKEN=hf_...
|
|
109
|
-
flash models export --adapter-id RUN_ID --repository your-org/your-repo
|
|
109
|
+
flash models export --adapter-id RUN_ID/final --repository your-org/your-repo
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
There are no built-in task environments — the environment you push defines the task.
|
|
@@ -114,7 +114,7 @@ Single-turn and bounded multi-turn environments are supported.
|
|
|
114
114
|
|
|
115
115
|
### Calling a deployed adapter from your own app
|
|
116
116
|
|
|
117
|
-
Deploy once with `flash models deploy RUN_ID`, then POST chat requests with your API key:
|
|
117
|
+
Deploy once with `flash models deploy RUN_ID/final`, then POST chat requests with your API key:
|
|
118
118
|
|
|
119
119
|
```bash
|
|
120
120
|
export RUN_ID=flash-1782194170-ce1cfcff
|
|
@@ -123,12 +123,12 @@ export FREESOLO_API_KEY=fslo_...
|
|
|
123
123
|
curl -X POST "https://flash.freesolo.co/v1/runs/$RUN_ID/chat" \
|
|
124
124
|
-H "Authorization: Bearer $FREESOLO_API_KEY" \
|
|
125
125
|
-H "Content-Type: application/json" \
|
|
126
|
-
-d
|
|
126
|
+
-d "{\"checkpoint_id\": \"$RUN_ID/final\", \"messages\": [{\"role\": \"user\", \"content\": \"hello\"}], \"max_tokens\": 256}"
|
|
127
127
|
```
|
|
128
128
|
|
|
129
129
|
The response uses the OpenAI chat-completions shape; read `choices[0].message.content`. The
|
|
130
|
-
|
|
131
|
-
hint to deploy first. Prefer this control-plane endpoint over calling the serving backend
|
|
130
|
+
checkpoint id is the permanent serving identity. If that checkpoint is not deployed yet, the
|
|
131
|
+
endpoint returns `409` with a hint to deploy first. Prefer this control-plane endpoint over calling the serving backend
|
|
132
132
|
directly: it enforces run ownership and forwards per-run serving options such as
|
|
133
133
|
thinking-mode parity.
|
|
134
134
|
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# The Flash serving contract
|
|
2
|
+
|
|
3
|
+
`flash models deploy`, `chat`, `evaluate`, and `undeploy` use an HTTP serving backend and one public
|
|
4
|
+
identity for every run-backed adapter. `flash/serve/` owns the client, shared runtime, and
|
|
5
|
+
customer-owned provider deployment. Freesolo's hosted backend (`flash/serving/`) is another
|
|
6
|
+
implementation of this contract. A deployment serves one exact base model and its compatible LoRA
|
|
7
|
+
adapters. A different base model requires a separate deployment. Use
|
|
8
|
+
`flash serve deploy --provider modal` to provision one in your own Modal account.
|
|
9
|
+
|
|
10
|
+
Customer-owned Modal is live-qualified for `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
|
|
11
|
+
`Qwen/Qwen3.6-35B-A3B`. The 27B and 35B-A3B qualifications are bound to the exact certified serving
|
|
12
|
+
image digest; another digest remains available for offline planning but cannot allocate Modal.
|
|
13
|
+
Hosted Qwen3.8 27B is active on H100. Its customer-owned engine runs on `H100!` and serves the pinned
|
|
14
|
+
`Qwen/Qwen3.8-27B-FP8` checkpoint while preserving `Qwen/Qwen3.8-27B` as the distinct logical base
|
|
15
|
+
and tokenizer provenance. The 35B-A3B engine serves BF16 weights on one H200 with FP8 KV cache, a
|
|
16
|
+
32K context, eight sequences, a 4096 batched-token cap, and six rank-64 LoRA slots.
|
|
17
|
+
|
|
18
|
+
Customer-owned `flash serve` is Modal-only and requires the explicit provider argument. Historical
|
|
19
|
+
customer-serving RunPod deployment identities are unsupported, with no migration, status, undeploy,
|
|
20
|
+
or teardown shim. Managed RunPod training remains supported and unchanged. Retired Qwen3.6 27B is
|
|
21
|
+
never translated into Qwen3.8 27B.
|
|
22
|
+
|
|
23
|
+
Run-backed adapters use only:
|
|
24
|
+
|
|
25
|
+
- `<run_id>/final`
|
|
26
|
+
- `<run_id>/step-N`
|
|
27
|
+
|
|
28
|
+
The grammar is exact. Bare run ids, omitted checkpoints, padded steps, whitespace, extra path segments, and old composite identities are rejected. A run id is grouping and authorization metadata only.
|
|
29
|
+
|
|
30
|
+
## Permanent checkpoint binding
|
|
31
|
+
|
|
32
|
+
`POST /adapters` registers one exact checkpoint:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"adapter_id": "run-abc/step-10",
|
|
37
|
+
"checkpoint": "run-abc/step-10",
|
|
38
|
+
"run_id": "run-abc",
|
|
39
|
+
"checkpoint_step": 10,
|
|
40
|
+
"repo_id": "acme/artifacts",
|
|
41
|
+
"repo_type": "dataset",
|
|
42
|
+
"subfolder": "sft/run-abc/adapter",
|
|
43
|
+
"artifact_revision": "<private-40-hex-source-commit>",
|
|
44
|
+
"artifact_digest": "<private-64-hex-content-digest>",
|
|
45
|
+
"artifact_fingerprint": "<private-64-hex-binding-fingerprint>",
|
|
46
|
+
"base_model": "Qwen/Qwen3.5-9B",
|
|
47
|
+
"lora_rank": 16,
|
|
48
|
+
"org_id": "org-id",
|
|
49
|
+
"thinking": false,
|
|
50
|
+
"structured_outputs": null
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The registration schema is closed. Lifecycle fields are server-owned. The first registration binds the org-scoped checkpoint to its private source location, content identity, base model, LoRA shape, and serving defaults. An identical retry is idempotent. Any changed immutable fact returns `409`, and undeploy never frees the identity for reuse.
|
|
55
|
+
|
|
56
|
+
Private artifact revision, digest, repository, and subfolder exist only for deterministic retrieval and cache integrity. They are not model identities and do not appear in public chat provenance, evaluation identities, analytics, or billing payloads.
|
|
57
|
+
|
|
58
|
+
## Authentication and health
|
|
59
|
+
|
|
60
|
+
Customer-owned deployments use `Authorization: Bearer <FLASH_SERVING_KEY>`. Freesolo-hosted serving uses `X-Freesolo-Internal-Key` for internal control operations and Freesolo API-key authorization for caller traffic. Credentials are compared without exposing them and are removed from cross-origin redirects.
|
|
61
|
+
|
|
62
|
+
`GET /healthz` does not load a model. Dynamic hosted serving advertises permanent checkpoint identity support. Customer-owned deployments receive an immutable manifest at boot and expose no dynamic registration surface.
|
|
63
|
+
|
|
64
|
+
## Readiness and routing
|
|
65
|
+
|
|
66
|
+
Registration returns `200` or `202`. `GET /adapters/{checkpoint_id}` reports lifecycle for that exact binding. A checkpoint becomes routable only after its exact adapter load succeeds and the generation-fenced durable row is promoted to `ready`.
|
|
67
|
+
|
|
68
|
+
Routing is direct. `POST /v1/chat/completions` requires the exact checkpoint id as `model`. There is no alias lookup, activation operation, current checkpoint, implicit final, first checkpoint, or sole-checkpoint fallback. Tenant authorization is checked against the checkpoint binding's owning organization before dispatch.
|
|
69
|
+
|
|
70
|
+
The packaged, hosted, and managed OpenAI entry points retain the shared strict sampling grammar:
|
|
71
|
+
|
|
72
|
+
- `n` is an exact integer from 1 through 4, and `n > 1` requires `temperature > 0`.
|
|
73
|
+
- `seed` is null or a signed 64-bit integer, excluding `-1`.
|
|
74
|
+
- frequency and presence penalties are finite values from -2 through 2.
|
|
75
|
+
- `logprobs` is a strict boolean and `top_logprobs` is an integer from 0 through 20.
|
|
76
|
+
- thinking-enabled adapters reject logprobs.
|
|
77
|
+
|
|
78
|
+
## Public provenance
|
|
79
|
+
|
|
80
|
+
Successful run-backed responses identify only the permanent checkpoint:
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"freesolo": {
|
|
85
|
+
"checkpoint_id": "run-abc/step-10"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Hosted responses also send `X-Freesolo-Checkpoint`. Customer-owned responses expose `checkpoint_id` in `flash_provenance`. Stream and buffered responses must attest to the same checkpoint. Private source commits and digests are never returned.
|
|
91
|
+
|
|
92
|
+
## Undeploy and cleanup
|
|
93
|
+
|
|
94
|
+
`DELETE /adapters/{checkpoint_id}` disables exactly one checkpoint:
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"ok": true,
|
|
99
|
+
"checkpoint_id": "run-abc/step-10",
|
|
100
|
+
"run_id": "run-abc",
|
|
101
|
+
"disabled_checkpoints": ["run-abc/step-10"]
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Sibling checkpoints remain independently ready and callable. Run-wide cleanup is a separately named internal administrative operation that first enumerates the run's exact checkpoint bindings.
|
|
106
|
+
|
|
107
|
+
## Customer-owned deployments
|
|
108
|
+
|
|
109
|
+
Manifest schema v2 keys adapters by checkpoint id. It keeps the private source commit, exact file table, and aggregate digest for hydration and cache verification, but publishes only checkpoint identities through `/v1/models` and chat provenance. Manifest and deployment identity v1 are rejected rather than translated.
|
|
110
|
+
|
|
111
|
+
Modal deployments retain their existing provider topology, lifecycle fencing, direct authenticated HTTPS endpoint, capacity validation, and teardown behavior.
|
|
112
|
+
|
|
113
|
+
## Cross-repository schema dependency
|
|
114
|
+
|
|
115
|
+
Flash expects the coordinated Freesolo migration to provide:
|
|
116
|
+
|
|
117
|
+
- `flash.hosted_lora_adapters` with explicit checkpoint and private binding columns;
|
|
118
|
+
- `public.bind_hosted_checkpoint(...)` for atomic insert-or-identical-read semantics;
|
|
119
|
+
- lifecycle-only mutable updates protected by immutable-field database enforcement;
|
|
120
|
+
- accounting RPCs accepting `checkpoint_id` and private `artifact_fingerprint` without legacy identity fields.
|
|
121
|
+
|
|
122
|
+
The old and new binaries are not compatible. Deploy them only through the documented maintenance-window cutover.
|
{freesolo_flash_dev-1.2.120 → freesolo_flash_dev-1.2.122}/flash/cli/commands/env/testing/eval.py
RENAMED
|
@@ -202,12 +202,7 @@ def _score_case(
|
|
|
202
202
|
)
|
|
203
203
|
|
|
204
204
|
|
|
205
|
-
# the server's own names for a record that is serving traffic versus one still coming up
|
|
206
|
-
# (flash/server/routes/serving.py). a busy record's `adapter_revision` is the INCOMING revision.
|
|
207
205
|
_READY_DEPLOYMENT_STATES = frozenset({"ready", "deployed"})
|
|
208
|
-
# a busy redeploy may still serve its predecessor, which the public listing hides.
|
|
209
|
-
# `/v1/deployments` excludes only `undeployed`/`dry_run`, so only `ready` and `busy`
|
|
210
|
-
# may answer; other returned states fail closed (flash/cli/commands/__init__.py).
|
|
211
206
|
_BUSY_DEPLOYMENT_STATES = frozenset({"queued", "smoke_testing", "reconciling"})
|
|
212
207
|
|
|
213
208
|
|
|
@@ -328,10 +323,6 @@ def _generate_concurrently(
|
|
|
328
323
|
pending.put((index, prompt))
|
|
329
324
|
outstanding = pending.qsize()
|
|
330
325
|
if outstanding:
|
|
331
|
-
# warm the step-selector capability once before workers start. only successful
|
|
332
|
-
# `/v1/health` checks are cached, so cold workers would multiply a transient or
|
|
333
|
-
# unsupported failure. failures propagate here; only `RUN/step-N` triggers the check.
|
|
334
|
-
client.warm_chat_step_selector(target)
|
|
335
326
|
finished: queue.SimpleQueue = queue.SimpleQueue()
|
|
336
327
|
aborted = threading.Event()
|
|
337
328
|
abort_lock = threading.Lock()
|
|
@@ -555,114 +546,37 @@ def _print_report(report: EvalSuiteReport) -> None:
|
|
|
555
546
|
|
|
556
547
|
|
|
557
548
|
def _resolve_evaluation_target(
|
|
558
|
-
args, client, parsed,
|
|
559
|
-
) -> tuple[str, int | None]:
|
|
560
|
-
"""
|
|
561
|
-
evaluation_target = args.target
|
|
562
|
-
if parsed is None:
|
|
563
|
-
return evaluation_target, None
|
|
549
|
+
args, client, parsed, api_error, client_error
|
|
550
|
+
) -> tuple[str, object, int | None]:
|
|
551
|
+
"""require the exact requested checkpoint to have verified ready authority."""
|
|
564
552
|
|
|
565
|
-
run_id,
|
|
553
|
+
run_id, _ = parsed
|
|
566
554
|
try:
|
|
567
|
-
|
|
555
|
+
run = client.get_run(run_id)
|
|
568
556
|
except (api_error, client_error) as exc:
|
|
569
557
|
if getattr(args, "debug", False):
|
|
570
558
|
raise
|
|
571
|
-
_err(f"env eval failed: could not resolve
|
|
572
|
-
return
|
|
573
|
-
if deployment is None:
|
|
574
|
-
_err(f"env eval failed: run {args.target} is not deployed")
|
|
575
|
-
return evaluation_target, _err("overall: FAIL")
|
|
576
|
-
deployment_state = deployment.get("state")
|
|
577
|
-
servable_states = _READY_DEPLOYMENT_STATES | _BUSY_DEPLOYMENT_STATES
|
|
578
|
-
if want_step is not None:
|
|
579
|
-
# pinned steps resolve through the verified ledger, not the deployment record
|
|
580
|
-
# (`flash/server/routes/serving.py`). allow `failed`, which preserves that ledger;
|
|
581
|
-
# revocation-failed and undeploy paths invalidate it in `flash/runner/supervise/deploy.py`.
|
|
582
|
-
servable_states = servable_states | {"failed"}
|
|
583
|
-
if deployment_state not in servable_states:
|
|
584
|
-
# having a record is not having a servable one: the listing keeps terminal states like
|
|
585
|
-
# `failed` and `revocation_failed`, and the chat route has no ready predecessor to fall
|
|
586
|
-
# back to for them, so every case 409s. that spends a whole suite of generation failures
|
|
587
|
-
# to learn what one target error says now. a step that genuinely is not in the ledger
|
|
588
|
-
# still gets one 409 naming the deployed steps, not a suite of them.
|
|
589
|
-
_err(
|
|
590
|
-
f"env eval failed: run {args.target} deployment is {deployment_state or 'unknown'}"
|
|
591
|
-
f"; run `{CLI_NAME} models deploy {run_id}` first"
|
|
592
|
-
)
|
|
593
|
-
return evaluation_target, _err("overall: FAIL")
|
|
594
|
-
# a busy record names the rollout target, not the hidden predecessor still serving.
|
|
595
|
-
# leave the user's target unpinned so the chat route can resolve private rollback state or
|
|
596
|
-
# return the correct 409 when nothing serves.
|
|
597
|
-
resolved = None
|
|
598
|
-
if deployment_state in _READY_DEPLOYMENT_STATES:
|
|
599
|
-
candidate = deployment.get("adapter_revision")
|
|
600
|
-
resolved = parse_adapter_revision(candidate) if isinstance(candidate, str) else None
|
|
601
|
-
if resolved is None or resolved[0] != run_id:
|
|
602
|
-
_err(
|
|
603
|
-
f"env eval failed: deployment for {run_id} has no valid immutable adapter revision"
|
|
604
|
-
)
|
|
605
|
-
return evaluation_target, _err("overall: FAIL")
|
|
606
|
-
# `RUN/step-N` is not immutable: multiple revisions may share a step. pin only when the
|
|
607
|
-
# live deployment is that step; otherwise the server-only verified ledger may still resolve
|
|
608
|
-
# an older step, and the chat route must decide ambiguity.
|
|
609
|
-
if resolved is not None and (want_step is None or resolved[1] == want_step):
|
|
610
|
-
evaluation_target = candidate.strip()
|
|
611
|
-
print(f"resolved evaluation target {args.target} to {evaluation_target}")
|
|
612
|
-
elif args.upload and want_step is not None:
|
|
613
|
-
# uploaded reports must name immutable weights. the CLI cannot resolve an ambiguous
|
|
614
|
-
# `RUN/step-N`: the verified ledger is server-only and chat does not echo the revision.
|
|
615
|
-
# refuse before generation; bare aliases remain valid because they mean the currently
|
|
616
|
-
# serving revision, including a busy predecessor.
|
|
617
|
-
_err(
|
|
618
|
-
f"env eval failed: cannot upload results for {args.target}: the immutable "
|
|
619
|
-
"revision that will answer it is not knowable here. re-run with the full "
|
|
620
|
-
f"revision from `{CLI_NAME} models deployments`, or pass --no-upload"
|
|
621
|
-
)
|
|
622
|
-
return evaluation_target, _err("overall: FAIL")
|
|
623
|
-
return evaluation_target, None
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
def _load_evaluation_run_spec(
|
|
627
|
-
args, client, revision, parsed, api_error, client_error
|
|
628
|
-
) -> tuple[object, int | None]:
|
|
629
|
-
"""Load the target run specification phase."""
|
|
630
|
-
# one run lookup supplies its training environment, reasoning mode, and owning project.
|
|
631
|
-
# these are target-run properties, not fallbacks, and reading once avoids one lookup per case.
|
|
632
|
-
spec = None
|
|
633
|
-
target_run_id = (revision or parsed or (None,))[0]
|
|
634
|
-
if not target_run_id:
|
|
635
|
-
return spec, None
|
|
636
|
-
try:
|
|
637
|
-
spec = client.get_run(target_run_id).get("spec")
|
|
638
|
-
except client_error as exc:
|
|
639
|
-
# `ApiError` subclasses `ClientError`, so one handler must preserve retryable 5xx/429.
|
|
640
|
-
# both arms abort because the run's environment is required; they differ only in
|
|
641
|
-
# whether retrying can help.
|
|
642
|
-
if getattr(args, "debug", False):
|
|
643
|
-
raise
|
|
644
|
-
answered_definitively = (
|
|
645
|
-
isinstance(exc, api_error) and exc.status < 500 and exc.status != 429
|
|
646
|
-
)
|
|
647
|
-
if answered_definitively:
|
|
648
|
-
_err(
|
|
649
|
-
f"env eval failed: could not read the target run {target_run_id}: {exc}. "
|
|
650
|
-
"its published environment is what supplies the suites to score."
|
|
651
|
-
)
|
|
652
|
-
else:
|
|
653
|
-
_err(
|
|
654
|
-
f"env eval failed: could not reach the control plane for {target_run_id}: "
|
|
655
|
-
f"{exc}. retry once it is reachable."
|
|
656
|
-
)
|
|
657
|
-
return spec, _err("overall: FAIL")
|
|
559
|
+
_err(f"env eval failed: could not resolve verified checkpoints for {run_id}: {exc}")
|
|
560
|
+
return args.target, None, _err("overall: FAIL")
|
|
658
561
|
except Exception as exc:
|
|
659
|
-
# anything else is not a transport fault, so it is not retryable either. broad, so an
|
|
660
|
-
# unexpected client shape cannot crash a command the user asked for.
|
|
661
562
|
if getattr(args, "debug", False):
|
|
662
563
|
raise
|
|
663
|
-
_err(f"env eval failed: could not
|
|
664
|
-
return
|
|
665
|
-
|
|
564
|
+
_err(f"env eval failed: could not resolve verified checkpoints for {run_id}: {exc}")
|
|
565
|
+
return args.target, None, _err("overall: FAIL")
|
|
566
|
+
verified = run.get("verified_checkpoints") if isinstance(run, dict) else None
|
|
567
|
+
if not isinstance(verified, list) or any(not isinstance(item, str) for item in verified):
|
|
568
|
+
_err(f"env eval failed: control plane returned invalid checkpoint authority for {run_id}")
|
|
569
|
+
return args.target, None, _err("overall: FAIL")
|
|
570
|
+
if args.target not in verified:
|
|
571
|
+
_err(f"env eval failed: checkpoint {args.target} has not passed deployment verification")
|
|
572
|
+
return args.target, None, _err("overall: FAIL")
|
|
573
|
+
return args.target, run, None
|
|
574
|
+
|
|
575
|
+
|
|
576
|
+
def _load_evaluation_run_spec(run: object) -> object:
|
|
577
|
+
"""load the target run specification from the verified authority record."""
|
|
578
|
+
|
|
579
|
+
return run.get("spec") if isinstance(run, dict) else None
|
|
666
580
|
|
|
667
581
|
|
|
668
582
|
def _resolve_evaluation_project(args, project_id, spec, client_error) -> tuple[str, int | None]:
|
|
@@ -892,17 +806,16 @@ def cmd_env_eval(args) -> int:
|
|
|
892
806
|
load_freesolo_environment,
|
|
893
807
|
)
|
|
894
808
|
from flash.envs.loading.pull import pull_environment_package_from_archive
|
|
895
|
-
from flash.schema import
|
|
809
|
+
from flash.schema import parse_checkpoint_ref
|
|
896
810
|
|
|
897
811
|
if args.project and not args.upload:
|
|
898
812
|
return _err("--project cannot be combined with --no-upload")
|
|
899
813
|
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
if revision is None and parsed is None:
|
|
814
|
+
parsed = parse_checkpoint_ref(args.target)
|
|
815
|
+
if parsed is None:
|
|
903
816
|
return _err(
|
|
904
817
|
f"invalid evaluation target {args.target!r} "
|
|
905
|
-
"(expected
|
|
818
|
+
"(expected <run_id>/final or <run_id>/step-N)"
|
|
906
819
|
)
|
|
907
820
|
|
|
908
821
|
# an explicitly named project is fully settled before anything else happens, including before a
|
|
@@ -925,17 +838,13 @@ def cmd_env_eval(args) -> int:
|
|
|
925
838
|
return _err("overall: FAIL")
|
|
926
839
|
|
|
927
840
|
client = client_from_config()
|
|
928
|
-
evaluation_target, exit_code = _resolve_evaluation_target(
|
|
929
|
-
args, client, parsed,
|
|
841
|
+
evaluation_target, run, exit_code = _resolve_evaluation_target(
|
|
842
|
+
args, client, parsed, ApiError, ClientError
|
|
930
843
|
)
|
|
931
844
|
if exit_code is not None:
|
|
932
845
|
return exit_code
|
|
933
846
|
|
|
934
|
-
spec
|
|
935
|
-
args, client, revision, parsed, ApiError, ClientError
|
|
936
|
-
)
|
|
937
|
-
if exit_code is not None:
|
|
938
|
-
return exit_code
|
|
847
|
+
spec = _load_evaluation_run_spec(run)
|
|
939
848
|
|
|
940
849
|
# graders must see what training graded, so the run's own `thinking` decides whether the
|
|
941
850
|
# reasoning is stripped first (see `_scored_response`).
|