freesolo-flash-dev 1.2.119__tar.gz → 1.2.121__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- freesolo_flash_dev-1.2.121/CHANGELOG.md +220 -0
- freesolo_flash_dev-1.2.121/PKG-INFO +352 -0
- freesolo_flash_dev-1.2.121/README.md +269 -0
- freesolo_flash_dev-1.2.121/SELF_HOSTING.md +492 -0
- freesolo_flash_dev-1.2.121/docs/serving-contract.md +122 -0
- freesolo_flash_dev-1.2.121/flash/cli/commands/env/testing/eval.py +899 -0
- freesolo_flash_dev-1.2.121/flash/cli/commands/ops/deploy.py +695 -0
- freesolo_flash_dev-1.2.121/flash/cli/commands/serving/deploy.py +284 -0
- freesolo_flash_dev-1.2.121/flash/cli/commands/serving/identity.py +248 -0
- freesolo_flash_dev-1.2.121/flash/cli/commands/serving/status.py +89 -0
- freesolo_flash_dev-1.2.121/flash/cli/commands/serving/undeploy.py +103 -0
- freesolo_flash_dev-1.2.121/flash/cli/parsing/env.py +261 -0
- freesolo_flash_dev-1.2.121/flash/cli/parsing/models.py +136 -0
- freesolo_flash_dev-1.2.121/flash/cli/parsing/serve_parser.py +203 -0
- freesolo_flash_dev-1.2.121/flash/cli/scaffold/TRAINING.md +1815 -0
- freesolo_flash_dev-1.2.121/flash/cli/ui/render.py +795 -0
- freesolo_flash_dev-1.2.121/flash/cli/ui/tables.py +155 -0
- freesolo_flash_dev-1.2.121/flash/client/http.py +866 -0
- freesolo_flash_dev-1.2.121/flash/core/catalog.py +559 -0
- freesolo_flash_dev-1.2.121/flash/core/spec.py +863 -0
- freesolo_flash_dev-1.2.121/flash/runner/accounting/costs.py +411 -0
- freesolo_flash_dev-1.2.121/flash/runner/accounting/reconciliation.py +514 -0
- freesolo_flash_dev-1.2.121/flash/runner/lifecycle/preparation.py +633 -0
- freesolo_flash_dev-1.2.121/flash/runner/lifecycle/state.py +413 -0
- freesolo_flash_dev-1.2.121/flash/runner/lifecycle/status.py +466 -0
- freesolo_flash_dev-1.2.121/flash/runner/results/verified_revisions.py +192 -0
- freesolo_flash_dev-1.2.121/flash/runner/supervise/attach.py +976 -0
- freesolo_flash_dev-1.2.121/flash/runner/supervise/attach_reconcile.py +82 -0
- freesolo_flash_dev-1.2.121/flash/runner/supervise/deploy.py +679 -0
- freesolo_flash_dev-1.2.121/flash/runner/supervise/recovery.py +644 -0
- freesolo_flash_dev-1.2.121/flash/runner/supervise/seed_submission.py +935 -0
- freesolo_flash_dev-1.2.121/flash/runner/supervise/transitions.py +280 -0
- freesolo_flash_dev-1.2.121/flash/schema/__init__.py +913 -0
- freesolo_flash_dev-1.2.121/flash/serve/app/__main__.py +102 -0
- freesolo_flash_dev-1.2.121/flash/serve/app/bootstrap.py +165 -0
- freesolo_flash_dev-1.2.121/flash/serve/app/chat_stream.py +143 -0
- freesolo_flash_dev-1.2.121/flash/serve/app/http.py +331 -0
- freesolo_flash_dev-1.2.121/flash/serve/app/launch.py +682 -0
- freesolo_flash_dev-1.2.121/flash/serve/app/manifest.py +630 -0
- freesolo_flash_dev-1.2.121/flash/serve/app/materialize.py +998 -0
- freesolo_flash_dev-1.2.121/flash/serve/app/openai.py +269 -0
- freesolo_flash_dev-1.2.121/flash/serve/app/progress.py +113 -0
- freesolo_flash_dev-1.2.121/flash/serve/contract/errors.py +43 -0
- freesolo_flash_dev-1.2.121/flash/serve/contract/protocol.py +70 -0
- freesolo_flash_dev-1.2.121/flash/serve/contract/provenance.py +182 -0
- freesolo_flash_dev-1.2.121/flash/serve/contract/responses.py +46 -0
- freesolo_flash_dev-1.2.121/flash/serve/control/__init__.py +44 -0
- freesolo_flash_dev-1.2.121/flash/serve/control/_serialization.py +123 -0
- freesolo_flash_dev-1.2.121/flash/serve/control/_urls.py +45 -0
- freesolo_flash_dev-1.2.121/flash/serve/control/credentials.py +57 -0
- freesolo_flash_dev-1.2.121/flash/serve/control/planning.py +35 -0
- freesolo_flash_dev-1.2.121/flash/serve/control/types.py +707 -0
- freesolo_flash_dev-1.2.121/flash/serve/deployment/adapter_check.py +211 -0
- freesolo_flash_dev-1.2.121/flash/serve/deployment/deploy.py +753 -0
- freesolo_flash_dev-1.2.121/flash/serve/deployment/profiles.py +451 -0
- freesolo_flash_dev-1.2.121/flash/serve/deployment/resolve.py +392 -0
- freesolo_flash_dev-1.2.121/flash/serve/provisioning/common/records.py +556 -0
- freesolo_flash_dev-1.2.121/flash/serve/provisioning/modal/execution/lifecycle.py +115 -0
- freesolo_flash_dev-1.2.121/flash/serve/provisioning/modal/execution/operations.py +623 -0
- freesolo_flash_dev-1.2.121/flash/serve/provisioning/modal/planning/plan.py +304 -0
- freesolo_flash_dev-1.2.121/flash/serve/provisioning/modal/readiness_checks/probe.py +125 -0
- freesolo_flash_dev-1.2.121/flash/serve/provisioning/modal/readiness_checks/readiness.py +245 -0
- freesolo_flash_dev-1.2.121/flash/serve/request/openai.py +352 -0
- freesolo_flash_dev-1.2.121/flash/serve/request/transport.py +543 -0
- freesolo_flash_dev-1.2.121/flash/server/asgi/app.py +431 -0
- freesolo_flash_dev-1.2.121/flash/server/billing/charges.py +134 -0
- freesolo_flash_dev-1.2.121/flash/server/domain/ops/reconcile.py +152 -0
- freesolo_flash_dev-1.2.121/flash/server/domain/ops/serving_resources.py +50 -0
- freesolo_flash_dev-1.2.121/flash/server/domain/registry/runs.py +314 -0
- freesolo_flash_dev-1.2.121/flash/server/platform/auth.py +264 -0
- freesolo_flash_dev-1.2.121/flash/server/platform/internal_client.py +205 -0
- freesolo_flash_dev-1.2.121/flash/server/platform/runtime.py +803 -0
- freesolo_flash_dev-1.2.121/flash/server/routes/meta.py +45 -0
- freesolo_flash_dev-1.2.121/flash/server/routes/runs.py +558 -0
- freesolo_flash_dev-1.2.121/flash/server/routes/serving.py +725 -0
- freesolo_flash_dev-1.2.121/flash/server/routes/serving_chat.py +276 -0
- freesolo_flash_dev-1.2.121/flash/server/routes/serving_completion.py +249 -0
- freesolo_flash_dev-1.2.121/flash/server/routes/serving_revisions.py +177 -0
- freesolo_flash_dev-1.2.121/flash/server/routes/serving_smoke.py +606 -0
- freesolo_flash_dev-1.2.121/flash/serving/app/README.md +323 -0
- freesolo_flash_dev-1.2.121/flash/serving/app/modal_app.py +795 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/accounting/usage.py +213 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/accounting/usage_outbox.py +979 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/engine/errors.py +102 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/engine/lora_engine.py +773 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/engine/lora_entries.py +52 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/engine/support.py +234 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/http/adapter_routes.py +280 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/http/context.py +249 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/http/headers.py +64 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/http/inference_routes.py +345 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/http/router.py +142 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/http/routing.py +140 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/io/provenance.py +50 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/io/responses.py +263 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/io/schemas.py +335 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/io/streaming.py +130 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/store/access.py +99 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/store/lookup.py +118 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/store/persisted_columns.py +9 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/store/persistence.py +325 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/store/registration.py +40 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/store/registry.py +159 -0
- freesolo_flash_dev-1.2.121/flash/serving/src/store/undeploy.py +200 -0
- freesolo_flash_dev-1.2.121/pyproject.toml +325 -0
- freesolo_flash_dev-1.2.121/scripts/qualify_serving_profile.py +57 -0
- freesolo_flash_dev-1.2.121/tests/_helpers/chat_provenance.py +16 -0
- freesolo_flash_dev-1.2.121/tests/_helpers/managed_chat.py +48 -0
- freesolo_flash_dev-1.2.121/tests/conftest.py +498 -0
- freesolo_flash_dev-1.2.121/tests/serving/checkpoint_fixtures.py +71 -0
- freesolo_flash_dev-1.2.121/tests/serving/conftest.py +262 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_base_model_serving.py +286 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_chat_auth.py +241 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_checkpoint_identity_repairs.py +436 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_checkpoint_model_validation.py +226 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_engine_error_status.py +225 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_immutable_engine.py +320 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_immutable_revisions.py +195 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_immutable_schemas.py +152 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_mirror_sampling_parity.py +405 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_multimodal.py +1113 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_openai_stream_options.py +59 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_per_model_gpu.py +829 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_persistence.py +275 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_pre_first_disconnect.py +478 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_registry.py +289 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_registry_coverage.py +27 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_router.py +1558 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_router_coverage.py +306 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_router_edge_coverage.py +248 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_schemas_coverage.py +154 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_serve_reasoning_split.py +279 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_serve_structured_outputs.py +873 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_serve_thinking.py +147 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_structured_outputs.py +374 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_usage_outbox.py +1933 -0
- freesolo_flash_dev-1.2.121/tests/serving/test_usage_reporter.py +939 -0
- freesolo_flash_dev-1.2.121/tests/serving_conformance/test_contract.py +264 -0
- freesolo_flash_dev-1.2.121/tests/test_adapter_shard_completeness.py +376 -0
- freesolo_flash_dev-1.2.121/tests/test_agent_flash_cli_contract.py +291 -0
- freesolo_flash_dev-1.2.121/tests/test_cancel_remote.py +1501 -0
- freesolo_flash_dev-1.2.121/tests/test_catalog_consistency.py +241 -0
- freesolo_flash_dev-1.2.121/tests/test_chat_foundations.py +379 -0
- freesolo_flash_dev-1.2.121/tests/test_cli_commands.py +5437 -0
- freesolo_flash_dev-1.2.121/tests/test_cli_commands_coverage.py +581 -0
- freesolo_flash_dev-1.2.121/tests/test_cli_estimate.py +1231 -0
- freesolo_flash_dev-1.2.121/tests/test_cli_render_theme.py +1789 -0
- freesolo_flash_dev-1.2.121/tests/test_cli_serve_deploy.py +926 -0
- freesolo_flash_dev-1.2.121/tests/test_cli_serve_status.py +344 -0
- freesolo_flash_dev-1.2.121/tests/test_cli_serve_undeploy.py +433 -0
- freesolo_flash_dev-1.2.121/tests/test_client.py +1346 -0
- freesolo_flash_dev-1.2.121/tests/test_client_server_integration.py +347 -0
- freesolo_flash_dev-1.2.121/tests/test_client_stream_reads.py +245 -0
- freesolo_flash_dev-1.2.121/tests/test_deploy_latency.py +401 -0
- freesolo_flash_dev-1.2.121/tests/test_env_evaluations.py +3829 -0
- freesolo_flash_dev-1.2.121/tests/test_env_publish.py +1975 -0
- freesolo_flash_dev-1.2.121/tests/test_grpo_params.py +767 -0
- freesolo_flash_dev-1.2.121/tests/test_health_liveness.py +49 -0
- freesolo_flash_dev-1.2.121/tests/test_jobs.py +7337 -0
- freesolo_flash_dev-1.2.121/tests/test_lora_rank_preflight.py +722 -0
- freesolo_flash_dev-1.2.121/tests/test_mirror_sampling_parity.py +366 -0
- freesolo_flash_dev-1.2.121/tests/test_opd_resume_safety.py +1530 -0
- freesolo_flash_dev-1.2.121/tests/test_prompt_budget.py +397 -0
- freesolo_flash_dev-1.2.121/tests/test_provider_routing.py +3019 -0
- freesolo_flash_dev-1.2.121/tests/test_realized_cost.py +490 -0
- freesolo_flash_dev-1.2.121/tests/test_resume_on_retry.py +1542 -0
- freesolo_flash_dev-1.2.121/tests/test_run_registry_lifecycle.py +379 -0
- freesolo_flash_dev-1.2.121/tests/test_runmgmt.py +3701 -0
- freesolo_flash_dev-1.2.121/tests/test_serve.py +1437 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_app_bootstrap_http.py +1328 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_app_launch.py +1129 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_app_manifest.py +347 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_app_materialize.py +1088 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_app_progress.py +187 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_chat_transport.py +810 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_control.py +781 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_docs.py +69 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_modal_contract_lock.py +167 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_modal_sdk.py +1096 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_profile_qualification.py +77 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_profiles.py +403 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_provisioning_common.py +392 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_provisioning_modal.py +2967 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_reasoning_content.py +643 -0
- freesolo_flash_dev-1.2.121/tests/test_serve_resolve_provenance.py +495 -0
- freesolo_flash_dev-1.2.121/tests/test_server_api.py +8507 -0
- freesolo_flash_dev-1.2.121/tests/test_server_billing.py +889 -0
- freesolo_flash_dev-1.2.121/tests/test_server_envs_coverage.py +2073 -0
- freesolo_flash_dev-1.2.121/tests/test_server_managed_chat_requests.py +91 -0
- freesolo_flash_dev-1.2.121/tests/test_server_serving_resources.py +223 -0
- freesolo_flash_dev-1.2.121/tests/test_server_standalone.py +1201 -0
- freesolo_flash_dev-1.2.121/tests/test_serving_context_preflight.py +46 -0
- freesolo_flash_dev-1.2.121/tests/test_serving_contract.py +388 -0
- freesolo_flash_dev-1.2.121/tests/test_spec_and_validation.py +2485 -0
- freesolo_flash_dev-1.2.121/tests/test_teacher_broker.py +2356 -0
- freesolo_flash_dev-1.2.121/tests/test_train_context_preflight.py +135 -0
- freesolo_flash_dev-1.2.121/tests/test_verified_revisions.py +106 -0
- freesolo_flash_dev-1.2.121/tests/test_wandb_naming.py +167 -0
- freesolo_flash_dev-1.2.121/tests/test_warmstart_cross_repo.py +1543 -0
- freesolo_flash_dev-1.2.121/uv.lock +5817 -0
- freesolo_flash_dev-1.2.119/CHANGELOG.md +0 -205
- freesolo_flash_dev-1.2.119/PKG-INFO +0 -346
- freesolo_flash_dev-1.2.119/README.md +0 -263
- freesolo_flash_dev-1.2.119/SELF_HOSTING.md +0 -499
- freesolo_flash_dev-1.2.119/docs/serving-contract.md +0 -216
- freesolo_flash_dev-1.2.119/flash/cli/commands/env/testing/eval.py +0 -990
- freesolo_flash_dev-1.2.119/flash/cli/commands/ops/deploy.py +0 -903
- freesolo_flash_dev-1.2.119/flash/cli/commands/serving/deploy.py +0 -332
- freesolo_flash_dev-1.2.119/flash/cli/commands/serving/identity.py +0 -282
- freesolo_flash_dev-1.2.119/flash/cli/commands/serving/status.py +0 -102
- freesolo_flash_dev-1.2.119/flash/cli/commands/serving/undeploy.py +0 -177
- freesolo_flash_dev-1.2.119/flash/cli/parsing/env.py +0 -261
- freesolo_flash_dev-1.2.119/flash/cli/parsing/models.py +0 -131
- freesolo_flash_dev-1.2.119/flash/cli/parsing/serve_parser.py +0 -220
- freesolo_flash_dev-1.2.119/flash/cli/scaffold/TRAINING.md +0 -1815
- freesolo_flash_dev-1.2.119/flash/cli/ui/render.py +0 -795
- freesolo_flash_dev-1.2.119/flash/cli/ui/tables.py +0 -155
- freesolo_flash_dev-1.2.119/flash/client/http.py +0 -916
- freesolo_flash_dev-1.2.119/flash/core/catalog.py +0 -537
- freesolo_flash_dev-1.2.119/flash/core/spec.py +0 -863
- freesolo_flash_dev-1.2.119/flash/runner/accounting/costs.py +0 -407
- freesolo_flash_dev-1.2.119/flash/runner/accounting/reconciliation.py +0 -444
- freesolo_flash_dev-1.2.119/flash/runner/lifecycle/preparation.py +0 -633
- freesolo_flash_dev-1.2.119/flash/runner/lifecycle/state.py +0 -399
- freesolo_flash_dev-1.2.119/flash/runner/lifecycle/status.py +0 -438
- freesolo_flash_dev-1.2.119/flash/runner/results/verified_revisions.py +0 -169
- freesolo_flash_dev-1.2.119/flash/runner/supervise/attach.py +0 -911
- freesolo_flash_dev-1.2.119/flash/runner/supervise/deploy.py +0 -819
- freesolo_flash_dev-1.2.119/flash/runner/supervise/recovery.py +0 -641
- freesolo_flash_dev-1.2.119/flash/runner/supervise/seed_submission.py +0 -895
- freesolo_flash_dev-1.2.119/flash/runner/supervise/transitions.py +0 -339
- freesolo_flash_dev-1.2.119/flash/schema/__init__.py +0 -925
- freesolo_flash_dev-1.2.119/flash/serve/app/__main__.py +0 -102
- freesolo_flash_dev-1.2.119/flash/serve/app/bootstrap.py +0 -171
- freesolo_flash_dev-1.2.119/flash/serve/app/chat_stream.py +0 -143
- freesolo_flash_dev-1.2.119/flash/serve/app/http.py +0 -331
- freesolo_flash_dev-1.2.119/flash/serve/app/launch.py +0 -682
- freesolo_flash_dev-1.2.119/flash/serve/app/manifest.py +0 -655
- freesolo_flash_dev-1.2.119/flash/serve/app/materialize.py +0 -998
- freesolo_flash_dev-1.2.119/flash/serve/app/openai.py +0 -273
- freesolo_flash_dev-1.2.119/flash/serve/app/progress.py +0 -18
- freesolo_flash_dev-1.2.119/flash/serve/contract/errors.py +0 -73
- freesolo_flash_dev-1.2.119/flash/serve/contract/protocol.py +0 -81
- freesolo_flash_dev-1.2.119/flash/serve/contract/provenance.py +0 -168
- freesolo_flash_dev-1.2.119/flash/serve/contract/responses.py +0 -107
- freesolo_flash_dev-1.2.119/flash/serve/control/__init__.py +0 -51
- freesolo_flash_dev-1.2.119/flash/serve/control/_serialization.py +0 -143
- freesolo_flash_dev-1.2.119/flash/serve/control/_urls.py +0 -71
- freesolo_flash_dev-1.2.119/flash/serve/control/credentials.py +0 -81
- freesolo_flash_dev-1.2.119/flash/serve/control/planning.py +0 -35
- freesolo_flash_dev-1.2.119/flash/serve/control/types.py +0 -877
- freesolo_flash_dev-1.2.119/flash/serve/deployment/adapter_check.py +0 -179
- freesolo_flash_dev-1.2.119/flash/serve/deployment/deploy.py +0 -832
- freesolo_flash_dev-1.2.119/flash/serve/deployment/profiles.py +0 -373
- freesolo_flash_dev-1.2.119/flash/serve/deployment/resolve.py +0 -399
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/common/records.py +0 -572
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/modal/execution/lifecycle.py +0 -116
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/modal/execution/operations.py +0 -623
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/modal/planning/plan.py +0 -304
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/modal/readiness_checks/probe.py +0 -135
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/modal/readiness_checks/readiness.py +0 -245
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/lifecycle.py +0 -83
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/mutations.py +0 -46
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/operations.py +0 -992
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/plan.py +0 -221
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/probe.py +0 -74
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/protocol.py +0 -451
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/readiness.py +0 -683
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/resources.py +0 -316
- freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod/transport.py +0 -295
- freesolo_flash_dev-1.2.119/flash/serve/request/openai.py +0 -353
- freesolo_flash_dev-1.2.119/flash/serve/request/transport.py +0 -537
- freesolo_flash_dev-1.2.119/flash/server/asgi/app.py +0 -433
- freesolo_flash_dev-1.2.119/flash/server/billing/charges.py +0 -128
- freesolo_flash_dev-1.2.119/flash/server/domain/ops/reconcile.py +0 -146
- freesolo_flash_dev-1.2.119/flash/server/domain/ops/serving_resources.py +0 -33
- freesolo_flash_dev-1.2.119/flash/server/domain/registry/runs.py +0 -182
- freesolo_flash_dev-1.2.119/flash/server/platform/auth.py +0 -254
- freesolo_flash_dev-1.2.119/flash/server/platform/internal_client.py +0 -194
- freesolo_flash_dev-1.2.119/flash/server/platform/runtime.py +0 -799
- freesolo_flash_dev-1.2.119/flash/server/routes/meta.py +0 -47
- freesolo_flash_dev-1.2.119/flash/server/routes/runs.py +0 -553
- freesolo_flash_dev-1.2.119/flash/server/routes/serving.py +0 -724
- freesolo_flash_dev-1.2.119/flash/server/routes/serving_chat.py +0 -269
- freesolo_flash_dev-1.2.119/flash/server/routes/serving_completion.py +0 -467
- freesolo_flash_dev-1.2.119/flash/server/routes/serving_revisions.py +0 -350
- freesolo_flash_dev-1.2.119/flash/server/routes/serving_smoke.py +0 -672
- freesolo_flash_dev-1.2.119/flash/serving/app/README.md +0 -323
- freesolo_flash_dev-1.2.119/flash/serving/app/modal_app.py +0 -795
- freesolo_flash_dev-1.2.119/flash/serving/src/accounting/usage.py +0 -215
- freesolo_flash_dev-1.2.119/flash/serving/src/accounting/usage_outbox.py +0 -986
- freesolo_flash_dev-1.2.119/flash/serving/src/engine/errors.py +0 -105
- freesolo_flash_dev-1.2.119/flash/serving/src/engine/lora_engine.py +0 -767
- freesolo_flash_dev-1.2.119/flash/serving/src/engine/lora_entries.py +0 -50
- freesolo_flash_dev-1.2.119/flash/serving/src/engine/support.py +0 -242
- freesolo_flash_dev-1.2.119/flash/serving/src/http/adapter_routes.py +0 -266
- freesolo_flash_dev-1.2.119/flash/serving/src/http/context.py +0 -227
- freesolo_flash_dev-1.2.119/flash/serving/src/http/headers.py +0 -52
- freesolo_flash_dev-1.2.119/flash/serving/src/http/inference_routes.py +0 -356
- freesolo_flash_dev-1.2.119/flash/serving/src/http/router.py +0 -144
- freesolo_flash_dev-1.2.119/flash/serving/src/http/routing.py +0 -145
- freesolo_flash_dev-1.2.119/flash/serving/src/io/provenance.py +0 -69
- freesolo_flash_dev-1.2.119/flash/serving/src/io/responses.py +0 -263
- freesolo_flash_dev-1.2.119/flash/serving/src/io/schemas.py +0 -482
- freesolo_flash_dev-1.2.119/flash/serving/src/io/streaming.py +0 -134
- freesolo_flash_dev-1.2.119/flash/serving/src/store/access.py +0 -94
- freesolo_flash_dev-1.2.119/flash/serving/src/store/lookup.py +0 -118
- freesolo_flash_dev-1.2.119/flash/serving/src/store/persisted_columns.py +0 -14
- freesolo_flash_dev-1.2.119/flash/serving/src/store/persistence.py +0 -310
- freesolo_flash_dev-1.2.119/flash/serving/src/store/registration.py +0 -228
- freesolo_flash_dev-1.2.119/flash/serving/src/store/registry.py +0 -176
- freesolo_flash_dev-1.2.119/flash/serving/src/store/undeploy.py +0 -277
- freesolo_flash_dev-1.2.119/pyproject.toml +0 -325
- freesolo_flash_dev-1.2.119/tests/_helpers/chat_provenance.py +0 -28
- freesolo_flash_dev-1.2.119/tests/_helpers/managed_chat.py +0 -49
- freesolo_flash_dev-1.2.119/tests/conftest.py +0 -499
- freesolo_flash_dev-1.2.119/tests/serving/conftest.py +0 -262
- freesolo_flash_dev-1.2.119/tests/serving/test_base_model_serving.py +0 -294
- freesolo_flash_dev-1.2.119/tests/serving/test_chat_auth.py +0 -264
- freesolo_flash_dev-1.2.119/tests/serving/test_checkpoint_model_validation.py +0 -218
- freesolo_flash_dev-1.2.119/tests/serving/test_engine_error_status.py +0 -225
- freesolo_flash_dev-1.2.119/tests/serving/test_immutable_engine.py +0 -332
- freesolo_flash_dev-1.2.119/tests/serving/test_immutable_revisions.py +0 -1503
- freesolo_flash_dev-1.2.119/tests/serving/test_immutable_schemas.py +0 -147
- freesolo_flash_dev-1.2.119/tests/serving/test_mirror_sampling_parity.py +0 -396
- freesolo_flash_dev-1.2.119/tests/serving/test_multimodal.py +0 -1150
- freesolo_flash_dev-1.2.119/tests/serving/test_openai_stream_options.py +0 -59
- freesolo_flash_dev-1.2.119/tests/serving/test_per_model_gpu.py +0 -818
- freesolo_flash_dev-1.2.119/tests/serving/test_persistence.py +0 -268
- freesolo_flash_dev-1.2.119/tests/serving/test_pre_first_disconnect.py +0 -475
- freesolo_flash_dev-1.2.119/tests/serving/test_registry.py +0 -308
- freesolo_flash_dev-1.2.119/tests/serving/test_registry_coverage.py +0 -65
- freesolo_flash_dev-1.2.119/tests/serving/test_router.py +0 -1656
- freesolo_flash_dev-1.2.119/tests/serving/test_router_coverage.py +0 -294
- freesolo_flash_dev-1.2.119/tests/serving/test_router_edge_coverage.py +0 -303
- freesolo_flash_dev-1.2.119/tests/serving/test_schemas_coverage.py +0 -188
- freesolo_flash_dev-1.2.119/tests/serving/test_serve_reasoning_split.py +0 -276
- freesolo_flash_dev-1.2.119/tests/serving/test_serve_structured_outputs.py +0 -810
- freesolo_flash_dev-1.2.119/tests/serving/test_serve_thinking.py +0 -153
- freesolo_flash_dev-1.2.119/tests/serving/test_structured_outputs.py +0 -397
- freesolo_flash_dev-1.2.119/tests/serving/test_usage_outbox.py +0 -1934
- freesolo_flash_dev-1.2.119/tests/serving/test_usage_reporter.py +0 -936
- freesolo_flash_dev-1.2.119/tests/serving_conformance/__init__.py +0 -0
- freesolo_flash_dev-1.2.119/tests/serving_conformance/test_contract.py +0 -786
- freesolo_flash_dev-1.2.119/tests/test_adapter_shard_completeness.py +0 -376
- freesolo_flash_dev-1.2.119/tests/test_agent_flash_cli_contract.py +0 -291
- freesolo_flash_dev-1.2.119/tests/test_cancel_remote.py +0 -2214
- freesolo_flash_dev-1.2.119/tests/test_catalog_consistency.py +0 -217
- freesolo_flash_dev-1.2.119/tests/test_chat_foundations.py +0 -371
- freesolo_flash_dev-1.2.119/tests/test_cli_commands.py +0 -5451
- freesolo_flash_dev-1.2.119/tests/test_cli_commands_coverage.py +0 -581
- freesolo_flash_dev-1.2.119/tests/test_cli_estimate.py +0 -1230
- freesolo_flash_dev-1.2.119/tests/test_cli_render_theme.py +0 -1775
- freesolo_flash_dev-1.2.119/tests/test_cli_serve_deploy.py +0 -1071
- freesolo_flash_dev-1.2.119/tests/test_cli_serve_status.py +0 -394
- freesolo_flash_dev-1.2.119/tests/test_cli_serve_undeploy.py +0 -521
- freesolo_flash_dev-1.2.119/tests/test_client.py +0 -1411
- freesolo_flash_dev-1.2.119/tests/test_client_server_integration.py +0 -347
- freesolo_flash_dev-1.2.119/tests/test_client_stream_reads.py +0 -245
- freesolo_flash_dev-1.2.119/tests/test_deploy_alias_move_warning.py +0 -554
- freesolo_flash_dev-1.2.119/tests/test_deploy_latency.py +0 -426
- freesolo_flash_dev-1.2.119/tests/test_env_evaluations.py +0 -4337
- freesolo_flash_dev-1.2.119/tests/test_env_publish.py +0 -1962
- freesolo_flash_dev-1.2.119/tests/test_grpo_params.py +0 -767
- freesolo_flash_dev-1.2.119/tests/test_health_liveness.py +0 -49
- freesolo_flash_dev-1.2.119/tests/test_jobs.py +0 -7330
- freesolo_flash_dev-1.2.119/tests/test_lora_rank_preflight.py +0 -710
- freesolo_flash_dev-1.2.119/tests/test_mirror_sampling_parity.py +0 -365
- freesolo_flash_dev-1.2.119/tests/test_opd_resume_safety.py +0 -1528
- freesolo_flash_dev-1.2.119/tests/test_prompt_budget.py +0 -397
- freesolo_flash_dev-1.2.119/tests/test_provider_routing.py +0 -2902
- freesolo_flash_dev-1.2.119/tests/test_realized_cost.py +0 -445
- freesolo_flash_dev-1.2.119/tests/test_resume_on_retry.py +0 -1541
- freesolo_flash_dev-1.2.119/tests/test_runmgmt.py +0 -3208
- freesolo_flash_dev-1.2.119/tests/test_serve.py +0 -1555
- freesolo_flash_dev-1.2.119/tests/test_serve_app_bootstrap_http.py +0 -1246
- freesolo_flash_dev-1.2.119/tests/test_serve_app_launch.py +0 -1113
- freesolo_flash_dev-1.2.119/tests/test_serve_app_manifest.py +0 -299
- freesolo_flash_dev-1.2.119/tests/test_serve_app_materialize.py +0 -1088
- freesolo_flash_dev-1.2.119/tests/test_serve_chat_transport.py +0 -800
- freesolo_flash_dev-1.2.119/tests/test_serve_control.py +0 -942
- freesolo_flash_dev-1.2.119/tests/test_serve_modal_sdk.py +0 -1047
- freesolo_flash_dev-1.2.119/tests/test_serve_profiles.py +0 -359
- freesolo_flash_dev-1.2.119/tests/test_serve_provisioning_common.py +0 -404
- freesolo_flash_dev-1.2.119/tests/test_serve_provisioning_modal.py +0 -2932
- freesolo_flash_dev-1.2.119/tests/test_serve_provisioning_runpod.py +0 -4630
- freesolo_flash_dev-1.2.119/tests/test_serve_reasoning_content.py +0 -638
- freesolo_flash_dev-1.2.119/tests/test_serve_resolve_provenance.py +0 -498
- freesolo_flash_dev-1.2.119/tests/test_server_api.py +0 -10004
- freesolo_flash_dev-1.2.119/tests/test_server_billing.py +0 -886
- freesolo_flash_dev-1.2.119/tests/test_server_envs_coverage.py +0 -2377
- freesolo_flash_dev-1.2.119/tests/test_server_managed_chat_requests.py +0 -864
- freesolo_flash_dev-1.2.119/tests/test_server_managed_chat_revisions.py +0 -744
- freesolo_flash_dev-1.2.119/tests/test_server_serving_resources.py +0 -215
- freesolo_flash_dev-1.2.119/tests/test_server_standalone.py +0 -1098
- freesolo_flash_dev-1.2.119/tests/test_serving_context_preflight.py +0 -36
- freesolo_flash_dev-1.2.119/tests/test_serving_contract.py +0 -1017
- freesolo_flash_dev-1.2.119/tests/test_spec_and_validation.py +0 -2448
- freesolo_flash_dev-1.2.119/tests/test_teacher_broker.py +0 -2358
- freesolo_flash_dev-1.2.119/tests/test_train_context_preflight.py +0 -118
- freesolo_flash_dev-1.2.119/tests/test_verified_revisions.py +0 -237
- freesolo_flash_dev-1.2.119/tests/test_wandb_naming.py +0 -167
- freesolo_flash_dev-1.2.119/tests/test_warmstart_cross_repo.py +0 -1611
- freesolo_flash_dev-1.2.119/uv.lock +0 -5817
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.dockerignore +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.env.example +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/CODEOWNERS +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/deploy-modal-dev.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/deploy-modal.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/dev-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/production-kernel-cache-ready.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/publish-serving-image.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/.gitignore +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/Dockerfile +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/Dockerfile.serve +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/LICENSE +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/NOTICE +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/docker/extract_cudart_fix.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/docker/patch_vllm_moe_lora.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/_internal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/_internal/channel.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/_internal/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/_internal/fileio.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/_internal/logging.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/_internal/openai_sse.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/_internal/paths.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/_internal/version.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/adapters/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/adapters/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/adapters/fused_experts.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/adapters/lora_rank.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/adapters/targets.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/ops/imports.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/ops/list.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/ops/push.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/ops/retained.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/ops/setup.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/ops/setup_wandb.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/testing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/testing/episode.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/testing/eval_args.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/testing/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/testing/params.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/testing/test.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/env/testing/warnings.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/ops/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/ops/account.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/ops/catalog.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/ops/log_follow.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/ops/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/ops/runs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/ops/traces.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/ops/train.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/ops/worker_output.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/commands/serving/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/parsing/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/parsing/account.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/parsing/errors.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/parsing/main.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/parsing/traces.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/parsing/training.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/scaffold/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/ui/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/ui/cost.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/ui/env_panels.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/ui/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cli/ui/tty.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/client/freesolo_api.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/client/shapes.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/client/streaming.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/content/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/content/image_descriptors.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/content/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/content/reasoning_normalization.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/content/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/content/thinking.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/core/grpo.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/core/spec_persistence.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cost/currency.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/plan/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/plan/kv_sizing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/plan/model_config_probe.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/plan/prompt_budget.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/plan/recipe.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/plan/steps.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/plan/vram.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/profiling/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/profiling/dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/profiling/image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/profiling/reasoning_render.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/profiling/sft_image_rows.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/profiling/sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/profiling/tokenizer.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/profiling/workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/result/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/result/accounting.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/result/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/support/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/support/huggingface.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/support/verl_checkpoint.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/support/verl_policy.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/support/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/entry/opd.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/entry/rl.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/entry/sft.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/entry/worker.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/io/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/io/heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/io/hf.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/io/prefetch.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/io/wandb_log.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/model/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/model/adapter.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/model/chatml_mask.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/model/decoding.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/model/lora.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/model/packing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/runtime/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/runtime/rng.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/runtime/state.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/teacher/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/teacher/client.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/teacher/encoding.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/teacher/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/core/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/core/child/glue.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/core/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/core/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/core/lifecycle/finalize.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/core/lifecycle/ledger.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/core/lifecycle/step_timing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/entry/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/entry/backend_common.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/entry/opd_train.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/entry/opd_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/entry/prompt_rows.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/entry/rl_train.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/entry/rl_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/entry/score_batcher.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/entry/sft_train.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/entry/sft_train_runner.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/bridging/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/bridging/batching.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/bridging/bridge.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/bridging/failures.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/bridging/prompts.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/bridging/scoring.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/child/bridge.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/child/replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/child/runtime.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/child/structured.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/multiturn/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/multiturn/media.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/multiturn/validation.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/orchestration/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/orchestration/failures.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/orchestration/gkd.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/orchestration/overrides.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/orchestration/progress.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/orchestration/prompt_preparation.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/orchestration/protocol.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/orchestration/reporting.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/orchestration/state.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/opd/orchestration/validation.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/child/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/child/multiturn.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/child/patches.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/launch/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/launch/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/launch/config.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/launch/inputs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/launch/verl_config.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/rollout/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/rollout/identity.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/rollout/multi_turn.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/rollout/reward_module.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/rollout/scoring.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/rl/rollout/single_turn.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/sft/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/sft/child/entry.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/sft/child/plugin.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/sft/setup/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/sft/setup/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/train/sft/setup/config.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/verl/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/verl/capabilities.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/verl/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/verl/child_io.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/verl/diagnostics.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/verl/parallelism.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/verl/parent_work.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/engine/worker/verl/process_census.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/loading/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/loading/adapter.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/loading/base.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/loading/loader.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/loading/pull.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/loading/staged.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/meta/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/meta/cache_security.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/meta/dataset_selection.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/meta/evaluations.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/meta/identity.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/meta/namespace_listing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/package/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/package/direct_tokens.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/package/limits.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/envs/package/unpack.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/bootstrapping/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/bootstrapping/bootstrap.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/bootstrapping/console.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/bootstrapping/pip.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/bootstrapping/secrets.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/host/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/host/deadline_sleep.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/host/failmark.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/host/hostlog.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/instances/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/instances/instance.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/instances/poll.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/instances/poll_instance.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/instances/provider.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/instances/terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/net/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/net/auth.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/net/deadline.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/net/http.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/_lifecycle/net/worker.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/artifacts/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/artifacts/hf.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/artifacts/preload_runpod.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/artifacts/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/core/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/core/allocator.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/core/base.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/core/fit_errors.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/core/preflight.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/core/realized.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/core/registry.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/core/sharding.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/client/api.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/lambda_/jobs/reap.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/client/api.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/client/cost.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/client/gpus.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/execution/job_execution.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/execution/jobs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/execution/polling.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/execution/resources.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/serverless/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/runpod/serverless/endpoints.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/vast/client/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/vast/client/api.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/vast/client/auth.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/vast/client/preflight.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/vast/client/pricing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/vast/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/vast/execution/provider.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/accounting/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/accounting/artifacts.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/accounting/weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/lifecycle/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/lifecycle/attempts.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/lifecycle/deadlines.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/lifecycle/reporting.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/lifecycle/submit.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/results/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/results/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/supervise/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/supervise/errors.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/supervise/lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runner/supervise/retry_decision.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runtime_capsule/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runtime_capsule/build.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runtime_capsule/manifest.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/runtime_capsule/profiles.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/contract/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/contract/urls.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/control/_canonical.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/deployment/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/deployment/export.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/deployment/preflight.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/deployment/readiness.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/provisioning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/provisioning/common/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/provisioning/modal/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/provisioning/modal/execution/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/provisioning/modal/execution/deployment.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/provisioning/modal/execution/sdk.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/provisioning/modal/planning/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/provisioning/modal/planning/resources.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/provisioning/modal/planning/wrapper.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/provisioning/modal/readiness_checks/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/provisioning/modal/readiness_checks/teardown.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/serve/provisioning/runpod → freesolo_flash_dev-1.2.121/flash/serve/request}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/request/runtime_support.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/request/streaming.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/request/thinking.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/request/validation.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/runtime/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/runtime/adapters.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/runtime/engine.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/runtime/errors.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/runtime/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/runtime/prompt.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/runtime/sampling.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/runtime/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serve/runtime/types.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/serve/request → freesolo_flash_dev-1.2.121/flash/server/asgi}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/asgi/cli.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/server/asgi → freesolo_flash_dev-1.2.121/flash/server/billing}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/billing/retry.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/server/billing → freesolo_flash_dev-1.2.121/flash/server/domain}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/server/domain → freesolo_flash_dev-1.2.121/flash/server/domain/ops}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/domain/ops/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/server/domain/ops → freesolo_flash_dev-1.2.121/flash/server/domain/registry}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/domain/registry/checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/domain/registry/environment_registry.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/domain/registry/envs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/domain/registry/projects.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/server/domain/registry → freesolo_flash_dev-1.2.121/flash/server/domain/teacher}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/domain/teacher/broker.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/domain/teacher/errors.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/domain/teacher/requests.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/server/domain/teacher → freesolo_flash_dev-1.2.121/flash/server/platform}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/platform/db.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/platform/deps.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/platform/locks.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/server/platform → freesolo_flash_dev-1.2.121/flash/serving}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/app/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/serving → freesolo_flash_dev-1.2.121/flash/serving/src/accounting}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/accounting/usage_facts.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/serving/src/accounting → freesolo_flash_dev-1.2.121/flash/serving/src/engine}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/engine/boot.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/engine/generation.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/engine/model_config.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/engine/prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/serving/src/engine → freesolo_flash_dev-1.2.121/flash/serving/src/http}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/http/body_limit.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/serving/src/http → freesolo_flash_dev-1.2.121/flash/serving/src/io}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/io/multimodal.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/io/openai_request.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/io/openai_stream.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/io/requests.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/io/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/serving/src/io → freesolo_flash_dev-1.2.121/flash/serving/src/store}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/store/settings.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/serving/src/store/supabase_rest.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/snapshot/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/snapshot/archive.py +0 -0
- {freesolo_flash_dev-1.2.119/flash/serving/src/store → freesolo_flash_dev-1.2.121/flash/teacher}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/teacher/limits.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/teacher/provider_status.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/flash/teacher/retry_contract.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/scripts/check_file_size.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/scripts/check_function_size.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/scripts/check_rollout_identity_actor.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/scripts/check_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/scripts/check_verl_pin_exists.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/serve_launch.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/_helpers/chat_transport.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/_helpers/server_api_plugin.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/_helpers/source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/_helpers/teacher.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/capture_image_sft_processor_oracle.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/capture_qwen38_27b_metadata.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/fixtures/image_sft_processor_oracle.json +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/fixtures/qwen35_9b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/fixtures/qwen38_27b_target_metadata.json +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/fixtures/vllm_023_moe_lora/lora_context.py.gz +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/fixtures/vllm_023_moe_lora/modular_kernel.py.gz +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/fixtures/vllm_023_moe_lora/triton_moe.py.gz +0 -0
- {freesolo_flash_dev-1.2.119/flash/teacher → freesolo_flash_dev-1.2.121/tests/live}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/live/test_sft_thinking_render_live.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/serving/test_chat_authorizer.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/serving/test_fp8_config.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/serving/test_modal_deploy_identity.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/serving/test_modal_image_paths.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/serving/test_model_config.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/serving/test_prequant_config.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/serving/test_request_body_limit.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/serving/test_settings.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/serving/test_structured_outputs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/serving/test_supabase_rest_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119/tests/live → freesolo_flash_dev-1.2.121/tests/serving_conformance}/__init__.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/serving_conformance/conftest.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_build_context_contract.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_capture_qwen38_metadata.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_catalog_only_models.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_checkpoint_lifecycle.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_client_import_purity.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_console_upload.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cost_currency.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_dataset_profile.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_list_api.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_list_cli.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_list_hub.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_freesolo_api_transport.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_fused_expert_warmstart.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_grpo_checkpoint_durability.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_grpo_process_census.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_grpo_rollout_contract.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_grpo_rollout_identity.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_image_environment_capability.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_image_incremental_processor.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_image_sft_markers.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_image_sft_processor_parity.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_image_tokens.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_infisical_secrets.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_lora_rank_nested_rung.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_lora_targeting.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_lora_targeting_pinned_verl.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_opd_multiturn_eos_boundary.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_opd_multiturn_failure_exit.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_opd_replay_guard.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_opd_train.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_persisted_spec_envelope.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_rl_train.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_runtime_capsule.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_serve_app_packaging.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_serve_modal_sdk_deadlines.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_serve_modal_teardown_identity.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_serve_runtime_adapters.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_serve_runtime_engine.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_serve_runtime_package.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_serve_runtime_types.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_serving_conformance_gate.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_sft_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_sft_train.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_source_attestation_flow.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_source_layout.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_source_snapshot.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_spec_contract_bytes.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_staged_environment.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_step_timing.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_teacher_encoding_contract.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_terminal_artifacts.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_type_comment_prose.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_verl_checkpoint_export.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_verl_child_plugins.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_verl_silence_watchdog.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_vllm_moe_lora_backport.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_warmstart_image_adapters.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_workflow_contracts.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.2.119 → freesolo_flash_dev-1.2.121}/tests/test_zero2_sharding_gate.py +0 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Notable changes to `freesolo-flash`. The dev-channel package `freesolo-flash-dev` ships in
|
|
4
|
+
lockstep at the same version.
|
|
5
|
+
|
|
6
|
+
Releases happen by merging a version bump from `dev` into `main`, which publishes to PyPI
|
|
7
|
+
(`.github/workflows/publish.yml`). Versions are `MAJOR.MINOR.PATCH`.
|
|
8
|
+
|
|
9
|
+
This file starts at 1.1.35. Earlier releases are not reconstructed here; use
|
|
10
|
+
`git log` for anything before that.
|
|
11
|
+
|
|
12
|
+
## Unreleased
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- OpenAI chat serving now preserves mirror sampling controls across packaged, hosted, and managed
|
|
17
|
+
entry points: up to four indexed choices, signed seeds, frequency and presence penalties, and
|
|
18
|
+
OpenAI token logprobs. Buffered and raw SSE responses retain independent choice terminals and
|
|
19
|
+
aggregate request usage; the decoded text-only stream remains single-choice.
|
|
20
|
+
- A `flash-cli` console script, the same entry point as `flash` under a name nothing else
|
|
21
|
+
claims. The `server` and `dev` extras install `runpod-flash`, which declares its own `flash`
|
|
22
|
+
script; whichever distribution is installed last wins, so on a control-plane host
|
|
23
|
+
`pip install 'freesolo-flash[server]'` could leave `flash` running RunPod's CLI, which exits 0
|
|
24
|
+
and does nothing. `flash` is unchanged and remains correct on a base (client-only) install.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
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.
|
|
33
|
+
- Active training now exposes exactly `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
|
|
34
|
+
`Qwen/Qwen3.6-35B-A3B`. Hosted serving remains active for 9B and 35B-A3B; hosted Qwen3.8 27B
|
|
35
|
+
remains inactive. Qwen3.8 uses the immutable BF16 revision
|
|
36
|
+
`1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0` and official native block-FP8 serving revision
|
|
37
|
+
`017b9c7af6b5689d5dd426a76e0bc077eb5ca20a`, with the logical base and tokenizer provenance kept
|
|
38
|
+
distinct from the served checkpoint. The Qwen3.5 0.8B, 2B, and 4B tiers and
|
|
39
|
+
`Qwen/Qwen3.6-27B` cannot activate, while historical status, accepted billing retry,
|
|
40
|
+
cancellation, cleanup, hosted revocation, and exact identity-based undeploy remain available.
|
|
41
|
+
Qwen3.6 27B adapters are not compatible with Qwen3.8.
|
|
42
|
+
- Customer-owned serving is now Modal-only and requires explicit `--provider modal`. Modal remains
|
|
43
|
+
live-qualified for all three active models. The 27B and 35B-A3B qualifications stay bound to the
|
|
44
|
+
exact certified serving image digest. Each deployment still serves one exact base model. The 27B
|
|
45
|
+
engine keeps its `H100!` placement and distinct served checkpoint and tokenizer provenance. The
|
|
46
|
+
35B-A3B engine keeps its H200, BF16, FP8 KV, 32K context, eight-sequence, 4096 batched-token, and
|
|
47
|
+
six rank-64 LoRA-slot contract. Customer-serving RunPod commands, profiles, identities, and
|
|
48
|
+
lifecycle code are removed without a compatibility or teardown shim. Managed RunPod training,
|
|
49
|
+
serverless workers, dependencies, provider routing, artifacts, and caching are unchanged.
|
|
50
|
+
- `[train] init_from_adapter` now works for every source/target algorithm pair. SFT was rejected as
|
|
51
|
+
a warm-start target, so an adapter could be continued only by GRPO or OPD; that restriction
|
|
52
|
+
described the retired trl SFT backend, and the verl backend that replaced it loads a warm-start
|
|
53
|
+
adapter exactly like the other two. All nine combinations of `sft`, `grpo`, and `opd` are
|
|
54
|
+
supported, including same-algorithm continuation. A warm-started SFT run also inherits its
|
|
55
|
+
source's base-model pin instead of resolving its own, so it stays deployable and no longer breaks
|
|
56
|
+
when the base model's hub tip moves.
|
|
57
|
+
- Managed attempts now pin, verify, and report one immutable Flash source archive across retries and recovery.
|
|
58
|
+
- Multi-turn GRPO now clones each sibling rollout from the task state that produced its prepared
|
|
59
|
+
prompt. Environments that record randomized episode choices on the task during `start_episode`
|
|
60
|
+
are stepped and scored against the same episode the model saw, without sharing mutable state
|
|
61
|
+
between sibling rollouts.
|
|
62
|
+
- A RunPod attempt's stall window is now measured from evidence timestamps rather than from when
|
|
63
|
+
the control plane happened to look at it. The window was seeded from the moment polling started
|
|
64
|
+
and was reset again by the first status read, and a heartbeat was credited at the time it was
|
|
65
|
+
read rather than the time it was written. Every one of those is a wall-clock reading, so each
|
|
66
|
+
reattach handed a worker that was already wedged a complete fresh setup window, and a supervisor
|
|
67
|
+
that reattached repeatedly could keep a dead worker on a paid GPU until the run's wall deadline.
|
|
68
|
+
The window is now anchored to the persisted launch, a heartbeat is credited at its own timestamp
|
|
69
|
+
clamped to that launch, and only a genuine status transition counts as progress. Instance
|
|
70
|
+
polling (Vast/Lambda) already worked this way; this brings RunPod onto the same rule. A job that
|
|
71
|
+
is still queued is unaffected: the capacity wait keeps its own exemption, so a worker granted
|
|
72
|
+
late still gets its full cold-start budget.
|
|
73
|
+
- An attempt's terminal artifacts (its strict marker plus `metrics.json`) are now interpreted by
|
|
74
|
+
one shared protocol instead of being decoded separately by live instance polling and by each
|
|
75
|
+
recovery path. The two decoders disagreed about identical bytes. A marker that could not be tied
|
|
76
|
+
to the attempt was a terminal failure to the live poller but indistinguishable from "no marker
|
|
77
|
+
yet" to recovery, so the same corrupt artifact produced a different story depending on which
|
|
78
|
+
layer happened to observe it; recovery now names it rather than logging silence. Neither path
|
|
79
|
+
ever adopted such a marker as completed work, and neither does now. Recovery also computed a
|
|
80
|
+
fresh observation window for the marker and then another for `metrics.json`, so the real ceiling
|
|
81
|
+
was their sum and moved with however long the first read took; both reads now share one window,
|
|
82
|
+
which makes the bound the cutoff rather than the sum.
|
|
83
|
+
- CI runs the offline test suite on both supported interpreters (3.11 and 3.12) rather than
|
|
84
|
+
3.11 alone, and sets `HF_HUB_OFFLINE` / `TRANSFORMERS_OFFLINE` so a test that reaches the
|
|
85
|
+
network fails deterministically instead of depending on runner connectivity.
|
|
86
|
+
- Every GitHub Action is pinned to a commit SHA rather than a mutable tag.
|
|
87
|
+
- `mypy` runs in CI as an advisory (non-blocking) job.
|
|
88
|
+
|
|
89
|
+
### Fixed
|
|
90
|
+
|
|
91
|
+
- Qwen3.6 FP8 MoE serving now preserves unquantized activations for LoRA A while keeping the base
|
|
92
|
+
MoE path quantized, backporting the exact vLLM PR #42120 behavior into the pinned 0.23.0 image.
|
|
93
|
+
- GRPO publication now validates complete finite optimizer-step actor gradient norms instead of
|
|
94
|
+
masked advantage-bound spread, so valid truncated groups are not falsely rejected and deployable
|
|
95
|
+
checkpoints remain withheld until terminal evidence validation succeeds.
|
|
96
|
+
- Completed verl children now finish each captured W&B run before the W&B service shuts down,
|
|
97
|
+
avoiding teardown tracebacks, and `flash env setup` now gives every starter config explicit W&B
|
|
98
|
+
project and folder-derived run metadata.
|
|
99
|
+
|
|
100
|
+
- An ordered `[gpu] type` list is now priced over every class it declares acceptable, not just the
|
|
101
|
+
first. Allocation cost-ranks the whole set, so quoting the head alone priced a shape the run may
|
|
102
|
+
never be given — an authored `["B200", "H100"]` quoted roughly 3x the H100 the allocator would
|
|
103
|
+
really rent, and the submit-time affordability check runs on that estimate, so a run the
|
|
104
|
+
organization could afford could be refused before allocation ever got to choose. A single
|
|
105
|
+
authored class is still a hard pin, and a no-fit rejection now names every acceptable class
|
|
106
|
+
rather than whichever happened to be written first.
|
|
107
|
+
|
|
108
|
+
- A provider preference that exhausts every configured provider no longer falls back to quoting
|
|
109
|
+
hardware this plane cannot rent. The final fallback dropped the restriction and ranked the
|
|
110
|
+
registered RunPod pool regardless of credentials, so a vast-only plane could quote a B200: the
|
|
111
|
+
estimate passed affordability and the run was recorded, only for live allocation to fail. The
|
|
112
|
+
quote now raises against the eligible set, which names the real constraint.
|
|
113
|
+
|
|
114
|
+
- A GitHub token that is invalid, expired, or missing a scope now fails during preparation instead
|
|
115
|
+
of after a GPU is rented. Non-rate-limit 401 and 403 responses were left as untyped errors, which
|
|
116
|
+
the submit-time preflight treats as a transient blip worth deferring, so the run proceeded
|
|
117
|
+
through affordability and allocation and hit the same permanent credential error on the worker.
|
|
118
|
+
They are now classified permanent, like 404 and 422. The rate-limit 403 is still transient.
|
|
119
|
+
|
|
120
|
+
- A slow heartbeat upload no longer stalls every other heartbeat behind it. The throttle clock only
|
|
121
|
+
advances once a commit lands, so during a slow HuggingFace commit other callers still saw an
|
|
122
|
+
upload as due and blocked on the upload lock for up to its acquire timeout — 30s, or 120s on a
|
|
123
|
+
critical stage — which stalled the liveness daemon and delayed leaving the wrapped stage by the
|
|
124
|
+
same window. A throttled heartbeat now skips while a commit is in flight, since that commit
|
|
125
|
+
already carries the stage's state. Terminal, error, initial, and forced step commits still queue
|
|
126
|
+
and land: they carry state no later heartbeat would repair.
|
|
127
|
+
|
|
128
|
+
- A GRPO or OPD run whose rollout actor exited hard no longer wedges on a paid GPU until the
|
|
129
|
+
wall-time limit. The actor's `os._exit` bypassed verl's own prompt handler, so the prompt
|
|
130
|
+
stayed `running` forever and verl's unbounded replay poll waited on it at ~0% utilization. The
|
|
131
|
+
child now writes durable failure evidence, marks the prompt failed, cleans up, and only then
|
|
132
|
+
exits, and replay sampling fails the step on an explicit failure tag or a positively dead
|
|
133
|
+
actor instead of returning a survivor-only batch that would silently train on fewer rollouts
|
|
134
|
+
than were collected. A child that reaches the fit loop and then stops producing distinct
|
|
135
|
+
output, while the parent has no teacher or environment work in flight, is torn down with a
|
|
136
|
+
named cause rather than running silently to the limit; repeated identical lines count as
|
|
137
|
+
silence, and authoritative OOM, host-RAM, and infrastructure evidence still classifies the
|
|
138
|
+
exit first.
|
|
139
|
+
- `flash models deploy` now warns before it moves the shared `<run-id>` model id onto a
|
|
140
|
+
different checkpoint. Every checkpoint of a run is served under that one id, so deploying
|
|
141
|
+
`<run-id>/step-50` while `step-100` was live silently changed what `<run-id>` served for
|
|
142
|
+
everyone using it — which made "deploy a second checkpoint to compare" a destructive
|
|
143
|
+
operation on the first, and read as a serving regression rather than the deploy that caused
|
|
144
|
+
it. The warning names both checkpoints and points at `flash models chat <run-id>/step-N`,
|
|
145
|
+
which addresses a checkpoint directly and does not depend on where the id points. It is
|
|
146
|
+
advisory: the deploy still proceeds, the pre-deploy read is abandoned outright once it exceeds
|
|
147
|
+
a few seconds so no shape of slow plane can hold a deploy behind it, and a control plane that
|
|
148
|
+
cannot answer (or answers with a checkpoint step this client cannot read) does not fail the
|
|
149
|
+
command. A deployment whose activation outcome was never settled still warns, but without
|
|
150
|
+
naming a checkpoint: that record's step describes the incoming attempt rather than what the id
|
|
151
|
+
currently serves, and the authoritative target is server-side only, so the warning says the
|
|
152
|
+
live checkpoint cannot be determined and points at `flash models deployments`.
|
|
153
|
+
|
|
154
|
+
- A response deadline did not actually bound a response that arrived slowly. The deadline is
|
|
155
|
+
checked between reads, but each read asked for a fixed number of bytes and blocked until all of
|
|
156
|
+
them arrived, so a peer trickling a short body kept one read inside the socket timeout
|
|
157
|
+
indefinitely and the check never ran: a 2s deadline took 12s on a 42-byte body, and 61s when
|
|
158
|
+
the socket timeout was the client default. Reading whatever has already arrived lets the check
|
|
159
|
+
run, which bounds every stall shape. This affected `flash env list`, whose deadline exists to
|
|
160
|
+
stop a slow environment hub hanging the command, as well as the new pre-deploy read.
|
|
161
|
+
|
|
162
|
+
- A response deadline could still be overrun by a read that began near its end. The socket timeout
|
|
163
|
+
is installed once, when the request opens, and time spent connecting and waiting for headers is
|
|
164
|
+
charged to the deadline but not to that timeout, so a peer that delayed its headers and then
|
|
165
|
+
stalled mid-body held the call open past the deadline: 3.5s against a 2s budget. Each read now
|
|
166
|
+
re-caps the socket to the remaining budget, so the two bounds agree instead of stacking. On a
|
|
167
|
+
body still arriving this surfaces as a timeout rather than the "stalled" message; both bound the
|
|
168
|
+
call, and which one wins is a race not worth depending on.
|
|
169
|
+
|
|
170
|
+
- Commands printed for the operator to run (the resume/cancel hand-off after `flash train`,
|
|
171
|
+
usage strings, `next:` hints) now name the executable actually invoked rather than always
|
|
172
|
+
`flash`. On a host where `runpod-flash` owns the `flash` script, the printed
|
|
173
|
+
`flash runs cancel <run-id>` exited 0 without cancelling, leaving a run billing while the
|
|
174
|
+
operator believed they had stopped it. Reached through the `python -m flash.cli` escape hatch,
|
|
175
|
+
the printed command now names the interpreter that is actually running, rather than a bare
|
|
176
|
+
`python` that is absent on a python3-only host and may resolve to a different environment
|
|
177
|
+
inside a virtualenv.
|
|
178
|
+
|
|
179
|
+
- `flash env setup` scaffolded hosted-only environment instructions on every plane. A
|
|
180
|
+
self-hosted plane cannot publish to Freesolo's managed environment hub, so the generated
|
|
181
|
+
configs left `[environment] id` empty (which fails validation) beside a `flash env push`
|
|
182
|
+
command that could not work. Against a self-hosted plane the scaffold now emits the
|
|
183
|
+
`github:owner/repo@ref:path` id form, which such a plane resolves directly. Output against
|
|
184
|
+
the managed plane is unchanged.
|
|
185
|
+
|
|
186
|
+
- `flash-server` reported missing operator configuration as an unhandled ASGI startup
|
|
187
|
+
exception, so the actionable message arrived under ~20 frames of starlette/contextlib. The
|
|
188
|
+
refusing half of the preflight now runs before uvicorn starts, and `flash-server` prints
|
|
189
|
+
`error: ...` and exits 3 (uvicorn's `STARTUP_FAILURE`, which this path already used, so
|
|
190
|
+
supervision keying on it is unaffected). The advisory warnings still come from the lifespan
|
|
191
|
+
alone, so a booted plane logs them once.
|
|
192
|
+
- `flash env test` blamed the reward function for a gold answer that scored zero, when the
|
|
193
|
+
gold completion is equally likely to be at fault: with no `sft_completion` hook the replayed
|
|
194
|
+
answer is the dataset row's raw `output`, so a dataset whose `output` is a bare value fails a
|
|
195
|
+
grader that (correctly) requires a wrapper. The warning now names both candidates and prints
|
|
196
|
+
the exact text it scored, verbatim rather than through the whitespace-collapsing, 200-character
|
|
197
|
+
preview that hid the formatting faults it exists to reveal. The scaffolded `environment.py`
|
|
198
|
+
documents that `output` is also the gold assistant turn SFT trains on, and that per-row scorer
|
|
199
|
+
state belongs in `metadata`.
|
|
200
|
+
- `flash env test` labelled the replayed dataset turns as the text that scored zero, but a
|
|
201
|
+
multi-turn environment whose `step_episode` returns a `final_response_text` has that override
|
|
202
|
+
replace the episode's response before scoring, so the diagnostic named text the grader never
|
|
203
|
+
saw. It now reports what the scorer actually received, captured at the scoring call.
|
|
204
|
+
- An environment that overrode its answer to the empty string had `flash env test` report the
|
|
205
|
+
replayed turns instead: the captured text was tested for truth, so a graded `""` was
|
|
206
|
+
indistinguishable from an episode that never reached the scorer. The override propagates on
|
|
207
|
+
`is not None`, so `""` really is what the grader saw -- and an empty answer explains a zero
|
|
208
|
+
reward on its own, making it the reading a reader most needs named rather than hidden.
|
|
209
|
+
- A crashed scorer went unreported on an `echo` episode -- a row with no gold answer to replay,
|
|
210
|
+
which is also the case that leaves the GRPO gate with nothing to count. `flash env test` could
|
|
211
|
+
exit `overall: PASS` with every reward coming from a scorer that never ran. The scorer's error is
|
|
212
|
+
now surfaced for any policy.
|
|
213
|
+
- A scorer that crashed behind the SDK's guard reached `flash env test` as a bare `0.000000`,
|
|
214
|
+
indistinguishable from a judged-wrong answer, because the adapter kept only
|
|
215
|
+
`RewardResult.score`. The new `FreesoloEnvironment.reward_with_error` returns the reward and the
|
|
216
|
+
discarded error from a single scoring call, so a missing runtime dependency names itself without
|
|
217
|
+
re-scoring the episode -- which would bill a paid judge twice and, for a non-deterministic
|
|
218
|
+
scorer, could report an error that did not produce the printed reward.
|
|
219
|
+
- Two tests resolved Hugging Face model metadata over the network and passed only on a
|
|
220
|
+
connected runner. They now stub the resolver like their siblings already did.
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: freesolo-flash-dev
|
|
3
|
+
Version: 1.2.121
|
|
4
|
+
Summary: Flash — managed LoRA post-training (SFT/GRPO/OPD) for Freesolo environments, driven by the `flash` CLI
|
|
5
|
+
Project-URL: Homepage, https://github.com/freesolo-co/flash
|
|
6
|
+
Project-URL: Repository, https://github.com/freesolo-co/flash
|
|
7
|
+
Author: Freesolo
|
|
8
|
+
License-Expression: Apache-2.0
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
License-File: NOTICE
|
|
11
|
+
Keywords: fine-tuning,freesolo,grpo,llm,lora,rl,sft
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Requires-Python: <3.13,>=3.11
|
|
19
|
+
Provides-Extra: dev
|
|
20
|
+
Requires-Dist: datasets>=2.19; extra == 'dev'
|
|
21
|
+
Requires-Dist: fastapi<1,>=0.136; extra == 'dev'
|
|
22
|
+
Requires-Dist: freesolo>=0.4.2; extra == 'dev'
|
|
23
|
+
Requires-Dist: httpx>=0.27; extra == 'dev'
|
|
24
|
+
Requires-Dist: huggingface-hub>=1.2.0; extra == 'dev'
|
|
25
|
+
Requires-Dist: jsonschema>=4.23; extra == 'dev'
|
|
26
|
+
Requires-Dist: mypy>=1.13.0; extra == 'dev'
|
|
27
|
+
Requires-Dist: packaging<27,>=24; extra == 'dev'
|
|
28
|
+
Requires-Dist: pillow>=11; extra == 'dev'
|
|
29
|
+
Requires-Dist: pytest>=9.0.3; extra == 'dev'
|
|
30
|
+
Requires-Dist: referencing>=0.28.4; extra == 'dev'
|
|
31
|
+
Requires-Dist: regex>=2024.11.6; extra == 'dev'
|
|
32
|
+
Requires-Dist: ruff<0.17,>=0.6; extra == 'dev'
|
|
33
|
+
Requires-Dist: runpod-flash<2,>=1.19; extra == 'dev'
|
|
34
|
+
Requires-Dist: tiktoken>=0.12; extra == 'dev'
|
|
35
|
+
Requires-Dist: tokenizers>=0.22; extra == 'dev'
|
|
36
|
+
Requires-Dist: transformers<5.13,>=5.8; extra == 'dev'
|
|
37
|
+
Requires-Dist: uvicorn<1,>=0.52; extra == 'dev'
|
|
38
|
+
Provides-Extra: gpu
|
|
39
|
+
Requires-Dist: accelerate>=1.4; extra == 'gpu'
|
|
40
|
+
Requires-Dist: bitsandbytes>=0.49; extra == 'gpu'
|
|
41
|
+
Requires-Dist: datasets>=2.19; extra == 'gpu'
|
|
42
|
+
Requires-Dist: freesolo>=0.4.2; extra == 'gpu'
|
|
43
|
+
Requires-Dist: huggingface-hub>=1.2.0; extra == 'gpu'
|
|
44
|
+
Requires-Dist: peft>=0.19; extra == 'gpu'
|
|
45
|
+
Requires-Dist: tiktoken>=0.12; extra == 'gpu'
|
|
46
|
+
Requires-Dist: tokenizers>=0.22; extra == 'gpu'
|
|
47
|
+
Requires-Dist: torch==2.10.0; extra == 'gpu'
|
|
48
|
+
Requires-Dist: transformers<5.13,>=5.8; extra == 'gpu'
|
|
49
|
+
Requires-Dist: uv>=0.5; extra == 'gpu'
|
|
50
|
+
Requires-Dist: vllm==0.19.1; extra == 'gpu'
|
|
51
|
+
Provides-Extra: serve-runtime
|
|
52
|
+
Requires-Dist: fastapi<0.137,>=0.136; extra == 'serve-runtime'
|
|
53
|
+
Requires-Dist: huggingface-hub>=1.2.0; extra == 'serve-runtime'
|
|
54
|
+
Requires-Dist: pillow>=11.0.0; extra == 'serve-runtime'
|
|
55
|
+
Requires-Dist: safetensors<1,>=0.8; extra == 'serve-runtime'
|
|
56
|
+
Requires-Dist: transformers<5.13,>=5.8; extra == 'serve-runtime'
|
|
57
|
+
Requires-Dist: uvicorn<1,>=0.52; extra == 'serve-runtime'
|
|
58
|
+
Requires-Dist: vllm==0.23.0; extra == 'serve-runtime'
|
|
59
|
+
Provides-Extra: server
|
|
60
|
+
Requires-Dist: datasets>=2.19; extra == 'server'
|
|
61
|
+
Requires-Dist: fastapi<1,>=0.136; extra == 'server'
|
|
62
|
+
Requires-Dist: freesolo>=0.4.2; extra == 'server'
|
|
63
|
+
Requires-Dist: httpx>=0.27; extra == 'server'
|
|
64
|
+
Requires-Dist: huggingface-hub>=1.2.0; extra == 'server'
|
|
65
|
+
Requires-Dist: jsonschema>=4.23; extra == 'server'
|
|
66
|
+
Requires-Dist: modal==1.5.4; extra == 'server'
|
|
67
|
+
Requires-Dist: pillow>=11; extra == 'server'
|
|
68
|
+
Requires-Dist: referencing>=0.28.4; extra == 'server'
|
|
69
|
+
Requires-Dist: regex>=2024.11.6; extra == 'server'
|
|
70
|
+
Requires-Dist: runpod-flash<2,>=1.19; extra == 'server'
|
|
71
|
+
Requires-Dist: transformers<5.13,>=5.8; extra == 'server'
|
|
72
|
+
Requires-Dist: uvicorn<1,>=0.52; extra == 'server'
|
|
73
|
+
Provides-Extra: serving
|
|
74
|
+
Requires-Dist: fastapi<1,>=0.136; extra == 'serving'
|
|
75
|
+
Requires-Dist: httpx>=0.27.0; extra == 'serving'
|
|
76
|
+
Requires-Dist: modal==1.5.4; extra == 'serving'
|
|
77
|
+
Requires-Dist: orjson>=3.10.0; extra == 'serving'
|
|
78
|
+
Requires-Dist: pillow>=11; extra == 'serving'
|
|
79
|
+
Requires-Dist: pydantic-settings>=2.6.0; extra == 'serving'
|
|
80
|
+
Requires-Dist: pydantic>=2.7.0; extra == 'serving'
|
|
81
|
+
Requires-Dist: python-dotenv>=1.0.0; extra == 'serving'
|
|
82
|
+
Description-Content-Type: text/markdown
|
|
83
|
+
|
|
84
|
+
# Flash
|
|
85
|
+
|
|
86
|
+
LoRA post-training for open-weight models: SFT, GRPO, and on-policy distillation. You
|
|
87
|
+
describe a run in a TOML file, Flash allocates a GPU, trains, streams checkpoints, and
|
|
88
|
+
serves the resulting adapter.
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
pip install freesolo-flash
|
|
92
|
+
export FREESOLO_API_KEY=fslo_...
|
|
93
|
+
flash login
|
|
94
|
+
flash train run.toml
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
The allocator picks the cheapest validated GPU class that fits the run, then supervises it
|
|
98
|
+
server-side: stall watchdog, bounded auto-retry resuming from the last streamed checkpoint,
|
|
99
|
+
and endpoint GC.
|
|
100
|
+
|
|
101
|
+
## What this repository is
|
|
102
|
+
|
|
103
|
+
Flash is the **client and control plane** for Freesolo's hosted post-training service:
|
|
104
|
+
|
|
105
|
+
| Path | What it is |
|
|
106
|
+
| ------------------ | ----------------------------------------------------------------- |
|
|
107
|
+
| `flash/cli/` | the `flash` CLI — no declared runtime dependencies\* |
|
|
108
|
+
| `flash/server/` | the FastAPI control plane — run submission, auth, project scoping |
|
|
109
|
+
| `flash/engine/` | the GPU worker and training recipes — verl + colocated vLLM |
|
|
110
|
+
| `flash/providers/` | the GPU substrate — pricing, allocation, submit/poll |
|
|
111
|
+
| `flash/envs/` | environment loading |
|
|
112
|
+
|
|
113
|
+
\* `pip install freesolo-flash` pulls nothing. Commands that run an environment **locally** —
|
|
114
|
+
`flash env test` and `flash env eval` — do need the `freesolo` SDK, which they import at the
|
|
115
|
+
point of use; install it with `pip install freesolo`.
|
|
116
|
+
|
|
117
|
+
Two components stay Freesolo-operated and are **not** in this repository:
|
|
118
|
+
|
|
119
|
+
| Component | Where it lives | Self-hosted equivalent |
|
|
120
|
+
| ------------------------- | ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- |
|
|
121
|
+
| Multi-tenant identity | `api.freesolo.co`; verifies keys and owns projects/orgs | `FLASH_STANDALONE=1` runs single-tenant on your own key |
|
|
122
|
+
| Hosted Multi-LoRA serving | `serve.freesolo.co`, deployed from `flash/serving/`; `flash/serve/` owns the client and shared runtime | `flash serve deploy` provisions serving in your own Modal account |
|
|
123
|
+
|
|
124
|
+
So there are three ways to use Flash: against the **hosted service**, **self-hosted** against
|
|
125
|
+
your own GPU accounts, or as **training and provider code to read and modify**. The training
|
|
126
|
+
path is self-hostable end to end — see **[SELF_HOSTING.md](SELF_HOSTING.md)**.
|
|
127
|
+
|
|
128
|
+
## Using the hosted service
|
|
129
|
+
|
|
130
|
+
The active training catalog is `Qwen/Qwen3.5-9B`, `Qwen/Qwen3.8-27B`, and
|
|
131
|
+
`Qwen/Qwen3.6-35B-A3B`. Hosted serving is active for 9B and 35B-A3B; hosted Qwen3.8 27B remains
|
|
132
|
+
inactive. The retired dense Qwen3.6 27B identity is never translated into Qwen3.8. Customer-owned
|
|
133
|
+
Modal supports all three active models; 27B and 35B-A3B are bound to the certified serving image
|
|
134
|
+
digest. Customer-owned `flash serve` requires explicit `--provider modal`. Customer-serving RunPod
|
|
135
|
+
commands and deployment identities are unsupported, with no migration or teardown shim. Managed
|
|
136
|
+
RunPod training remains supported and unchanged.
|
|
137
|
+
|
|
138
|
+
`flash login` is not interactive. Export `FREESOLO_API_KEY` first so the key does not appear in process listings:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
pip install freesolo-flash
|
|
142
|
+
export FREESOLO_API_KEY=fslo_...
|
|
143
|
+
flash login # validates the key, stores it in ~/.flash/config.json
|
|
144
|
+
flash whoami # confirm the identity behind it
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Every run names an environment, which supplies the task data and the reward or SFT target.
|
|
148
|
+
Environments are published under a project, which scopes them to an organization:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
flash projects create my-project # returns a project uuid
|
|
152
|
+
flash projects list # look up existing uuids
|
|
153
|
+
flash env setup # scaffold environment.py + dataset/train.jsonl
|
|
154
|
+
flash env push --project PROJECT_UUID --name my-env . # returns an environment id
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Every training TOML carries a required top-level `project`, validated against the
|
|
158
|
+
authenticated organization before Flash allocates anything:
|
|
159
|
+
|
|
160
|
+
```toml
|
|
161
|
+
project = "your-project-uuid"
|
|
162
|
+
model = "Qwen/Qwen3.5-9B"
|
|
163
|
+
algorithm = "sft"
|
|
164
|
+
|
|
165
|
+
[environment]
|
|
166
|
+
id = "your-org/your-project/my-env"
|
|
167
|
+
|
|
168
|
+
[train]
|
|
169
|
+
epochs = 1
|
|
170
|
+
max_examples = 1000
|
|
171
|
+
lora_rank = 32 # lora_alpha defaults to 2 x lora_rank; set it to override
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
flash train run.toml # submit, prints a run id
|
|
176
|
+
flash runs status RUN_ID # follow 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
|
+
```
|
|
180
|
+
|
|
181
|
+
Run management lives under `flash runs` (`list`, `status`, `log`, `cancel`, `checkpoint`)
|
|
182
|
+
and serving under `flash models` (`deploy`, `chat`, `deployments`, `undeploy`, `export`).
|
|
183
|
+
`flash models` lists supported base models — six curated Qwen checkpoints — and `flash gpus`
|
|
184
|
+
lists GPU classes with estimated $/hr.
|
|
185
|
+
|
|
186
|
+
Intermediate RL checkpoints are deployable: list them with `flash runs checkpoint RUN_ID`,
|
|
187
|
+
then pass `RUN_ID/step-N` as the checkpoint id. To copy a finished adapter into your own
|
|
188
|
+
HuggingFace repo:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
export HF_TOKEN=hf_...
|
|
192
|
+
flash models export --adapter-id RUN_ID/final --repository your-org/your-repo
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
There are no built-in task environments — the environment you push defines the task.
|
|
196
|
+
Single-turn and bounded multi-turn environments are supported.
|
|
197
|
+
|
|
198
|
+
### Calling a deployed adapter from your own app
|
|
199
|
+
|
|
200
|
+
Deploy once with `flash models deploy RUN_ID/final`, then POST chat requests with your API key:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
export RUN_ID=flash-1782194170-ce1cfcff
|
|
204
|
+
export FREESOLO_API_KEY=fslo_...
|
|
205
|
+
|
|
206
|
+
curl -X POST "https://flash.freesolo.co/v1/runs/$RUN_ID/chat" \
|
|
207
|
+
-H "Authorization: Bearer $FREESOLO_API_KEY" \
|
|
208
|
+
-H "Content-Type: application/json" \
|
|
209
|
+
-d "{\"checkpoint_id\": \"$RUN_ID/final\", \"messages\": [{\"role\": \"user\", \"content\": \"hello\"}], \"max_tokens\": 256}"
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
The response uses the OpenAI chat-completions shape; read `choices[0].message.content`. The
|
|
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
|
+
directly: it enforces run ownership and forwards per-run serving options such as
|
|
216
|
+
thinking-mode parity.
|
|
217
|
+
|
|
218
|
+
### Workload estimates (SFT)
|
|
219
|
+
|
|
220
|
+
`flash train`, `--dry-run`, and `--cost` read the pinned environment's packaged dataset
|
|
221
|
+
without importing `environment.py`. `dataset/train.jsonl` is the canonical default;
|
|
222
|
+
`dataset/train.json` also works, and `[environment.params] split` or `dataset_path` can
|
|
223
|
+
select another packaged file.
|
|
224
|
+
|
|
225
|
+
The estimate tokenizes raw `input`/`output` fields plus the statically readable training
|
|
226
|
+
contract. Environment-added prompts, few-shot examples, tool schemas, filters, and
|
|
227
|
+
transformations are **not** executed, so real training can retain fewer rows, truncate more
|
|
228
|
+
often, and cost more than the estimate. If no readable dataset exists, cost, dry-run, and
|
|
229
|
+
submit all fail before GPU allocation rather than billing a profiling run.
|
|
230
|
+
|
|
231
|
+
## Working on the code
|
|
232
|
+
|
|
233
|
+
The test suite is CPU-only and offline by default. No GPU, no network, no credentials:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
uv sync --extra server --dev
|
|
237
|
+
uv run ruff check .
|
|
238
|
+
uv run ruff format --check .
|
|
239
|
+
uv run pytest -q
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
CI (`.github/workflows/ci.yml`) runs those on both supported interpreters (3.11 and 3.12),
|
|
243
|
+
plus two size gates and a serial pass for timing-sensitive tests:
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
uv run python scripts/check_file_size.py # no module in flash/ over 1000 lines
|
|
247
|
+
uv run python scripts/check_function_size.py # no function in flash/ over 150 lines
|
|
248
|
+
uv run pytest -q -m wallclock # asserts on real elapsed time; runs alone
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
`mypy` also runs in CI but is **advisory** — it reports existing type errors without failing
|
|
252
|
+
the build. Formatting is gated, so run `uv run ruff format .` before you push.
|
|
253
|
+
|
|
254
|
+
> **The `flash` command can belong to something else.** The `server` and `dev` extras install
|
|
255
|
+
> `runpod-flash`, which declares its own `flash` console script; whichever installs last wins,
|
|
256
|
+
> and RunPod's exits 0 while doing nothing. Use **`flash-cli`** — the same entry point under a
|
|
257
|
+
> name nothing else claims — or `python -m flash.cli` from a checkout. A base
|
|
258
|
+
> `pip install freesolo-flash` is unaffected.
|
|
259
|
+
|
|
260
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for the branching model — in short, **pull requests go
|
|
261
|
+
into `dev`**.
|
|
262
|
+
|
|
263
|
+
### Layout
|
|
264
|
+
|
|
265
|
+
- `flash/core/catalog.py` — curated model catalog (Qwen3.5, Qwen3.8 dense, and Qwen3.6 MoE), VRAM
|
|
266
|
+
sizing, and each model's `thinking` capability
|
|
267
|
+
- `flash/schema/`, `flash/core/spec.py` — TOML to `JobSpec`
|
|
268
|
+
- `flash/runner/` — server-side run supervisor (durable job handle, retries, cost guard)
|
|
269
|
+
- `flash/providers/` — GPU substrate behind the `base.Provider` protocol, with `allocator.py`
|
|
270
|
+
picking the cheapest fitting class
|
|
271
|
+
- `flash/engine/` — the on-GPU worker (verl + colocated vLLM rollouts) and the shared recipe.
|
|
272
|
+
SFT targets and RL rewards route through the active environment, so task-specific grading
|
|
273
|
+
lives with the example, not in the engine
|
|
274
|
+
- `flash/envs/` — environment registry and the Freesolo SDK adapter
|
|
275
|
+
- `flash/serve/` — serving client, shared runtime, and customer-owned provider deployment
|
|
276
|
+
- `flash/serving/` — the hosted multi-LoRA Modal app behind `serve.freesolo.co`
|
|
277
|
+
- `flash/server/` — the FastAPI control plane (run via the separate `flash-server` command)
|
|
278
|
+
- `tests/` — pytest suite, CPU-only and offline
|
|
279
|
+
|
|
280
|
+
Within `flash/engine/worker/`, trainers live under `train/`, split by algorithm (`sft/`,
|
|
281
|
+
`rl/`, `opd/`) over a shared `core/`. Each carries a `child/` holding stdlib-only modules
|
|
282
|
+
**copied** into the verl subprocess rather than imported — flash and verl pin incompatible
|
|
283
|
+
torch/vllm versions, so neither can import the other.
|
|
284
|
+
|
|
285
|
+
## Self-hosting
|
|
286
|
+
|
|
287
|
+
Run your own control plane against your own GPU accounts, with no Freesolo backend involved.
|
|
288
|
+
**[SELF_HOSTING.md](SELF_HOSTING.md) is the full guide**; the short version:
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
pip install 'freesolo-flash[server]' # the base install is client-only
|
|
292
|
+
|
|
293
|
+
export FLASH_STANDALONE=1
|
|
294
|
+
export FREESOLO_INTERNAL_KEY=$(openssl rand -hex 32)
|
|
295
|
+
export HF_TOKEN=hf_...
|
|
296
|
+
export FLASH_HF_NAMESPACE=your-hf-username # a namespace your HF_TOKEN can write to
|
|
297
|
+
export RUNPOD_API_KEY=... # or LAMBDA_API_KEY, or VAST_API_KEY
|
|
298
|
+
|
|
299
|
+
flash-server --host 0.0.0.0 --port 8080
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
You need **one** of RunPod, Lambda, or Vast. Providers whose key is unset are never
|
|
303
|
+
considered, and the allocator only proposes classes it can actually provision. Startup fails
|
|
304
|
+
only when all three are missing.
|
|
305
|
+
|
|
306
|
+
`FLASH_STANDALONE=1` stops the plane calling out for project, environment, and billing
|
|
307
|
+
validation, and trusts `FREESOLO_INTERNAL_KEY` as a single-tenant operator credential.
|
|
308
|
+
External bearer tokens are rejected rather than accepted unverified. A standalone plane is
|
|
309
|
+
**single-tenant** — whoever holds that key can spend your GPU budget, so keep it off
|
|
310
|
+
untrusted networks. See [the security model](SELF_HOSTING.md#the-security-model).
|
|
311
|
+
|
|
312
|
+
`flash serve deploy` provisions serving in your own Modal account and requires explicit
|
|
313
|
+
`--provider modal`. Each deployment owns one exact base model and its compatible adapters; another
|
|
314
|
+
base model requires another deployment. Customer-serving RunPod identities are unsupported.
|
|
315
|
+
It implements the same contract `flash/serve/` speaks; [docs/serving-contract.md](docs/serving-contract.md)
|
|
316
|
+
documents it if you would rather write your own.
|
|
317
|
+
|
|
318
|
+
The GPU worker image is public and published under an explicit CUDA tag, not `latest`:
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
docker pull ghcr.io/freesolo-co/flash-worker:cu128
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Release channels
|
|
325
|
+
|
|
326
|
+
Two channels are published to PyPI from the _same source_, distinguished by one line in
|
|
327
|
+
`flash/_internal/channel.py`:
|
|
328
|
+
|
|
329
|
+
| Channel | PyPI package | CLI | Default plane | Published on |
|
|
330
|
+
| ------- | -------------------- | ----------- | ----------------------- | -------------------------------------- |
|
|
331
|
+
| prod | `freesolo-flash` | `flash` | `flash.freesolo.co` | a version bump merged to `main` |
|
|
332
|
+
| dev | `freesolo-flash-dev` | `flash-dev` | `flash-dev.freesolo.co` | a push to `dev` with an unused version |
|
|
333
|
+
|
|
334
|
+
Each environment holds exactly **one** channel: both packages ship the same import package
|
|
335
|
+
with one baked `CHANNEL` line, so installing both makes the later install win for _both_
|
|
336
|
+
CLIs. For side-by-side prod and staging, use a virtualenv per channel (or `pipx`).
|
|
337
|
+
|
|
338
|
+
Within a commit, `[project].version` and `[tool.flash-dev].version` must match (CI enforces
|
|
339
|
+
this), so cutting a release bumps both. The **published** channels still differ, because dev
|
|
340
|
+
publishes on merge to `dev` while prod publishes only once `dev` is promoted to `main`.
|
|
341
|
+
|
|
342
|
+
Either CLI honours an explicit `FLASH_API_URL` or `login --api-url`; the channel only sets
|
|
343
|
+
the default.
|
|
344
|
+
|
|
345
|
+
## Contributing
|
|
346
|
+
|
|
347
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md). Security issues: [SECURITY.md](SECURITY.md) — do not
|
|
348
|
+
open a public issue.
|
|
349
|
+
|
|
350
|
+
## License
|
|
351
|
+
|
|
352
|
+
Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
|