freesolo-flash-dev 1.1.2__tar.gz → 1.1.3__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.1.2 → freesolo_flash_dev-1.1.3}/PKG-INFO +1 -1
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd_train.py +8 -2
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_opd_train.py +122 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/uv.lock +1 -1
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.dockerignore +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.env.example +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/dependabot.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.gitignore +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/CODE_OF_CONDUCT.md +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/CONTRIBUTING.md +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/Dockerfile +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/LICENSE +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/NOTICE +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/README.md +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/SECURITY.md +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/SELF_HOSTING.md +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/deploy/infisical/Dockerfile +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/deploy/infisical/README.md +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/deploy/infisical/entrypoint.sh +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/_channel.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/_fileio.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/_logging.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/_paths.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/adapter_artifacts.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/catalog.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/TRAINING.md +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/_tty.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/commands.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/env_eval.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/env_setup.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/env_test.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/envpush.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/render.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/traces.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cli/training_doc.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/diagnostics.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/accounting.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/multiturn_reward_scoring.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/recipe.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/reward_profile.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/rollout_profile.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/sft_workload.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/steps.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/vram.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/_pkg.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/adapter.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/backend_common.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/decoding.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/finalize.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/grpo.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/grpo_multiturn.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/grpo_plugin.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/heartbeat.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/hf.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/lora.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/multiturn_glue.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd_gkd.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd_multiturn.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd_plugin.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/opd_structured.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/packing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/attn.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/loraplus.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/rl.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/rl_train.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/rng.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/rollout_samples.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/sft.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/sft_profile.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/sft_train.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/teacher.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/teacher_encoding.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/wandb_log.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/adapter.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/archive.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/archive_policy.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/base.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/evaluations.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/loader.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/pull.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/envs/registry.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/lora_rank.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/multimodal.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/opd_limits.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/opd_retry_contract.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/opd_validation.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_auth.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_deadline.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_hf_artifacts.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_hf_retry.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_http.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_instance.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_instance_bootstrap.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_instance_poll.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_instance_provider.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_poll.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_worker.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/allocator.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/base.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/api.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/auth.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/gpus.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/preflight.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/pricing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/preflight.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/realized.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/api.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/auth.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/cost.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/gpus.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/jobs.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/keys.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/preflight.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/pricing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/slots.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/train/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/runpod/train/endpoints.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/api.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/auth.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/preflight.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/vast/pricing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/weight_cache_preload.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/runner/checkpoints.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/runner/deploy.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/runner/lifecycle.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/runner/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/deploy.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/export.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/preflight.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/pricing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/serve/urls.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/_deps.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/_internal_client.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/_locks.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/_runtime.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/app.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/auth.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/billing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/billing_retry.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/checkpoints.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/db.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/environment_registry.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/envs.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/projects.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/reconcile.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/routes/teacher.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/run_registry.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/server/teacher_broker.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/spec.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/thinking.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/workload_profile.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/scripts/scrub_history.sh +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/_helpers/profile.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/fixtures/math_eval.jsonl +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/fixtures/math_train.jsonl +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_async_uploads.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_backend_common.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cancel_remote.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_credential_shadowing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_gpus_flag.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_traces.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cli_wandb_warning.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_config_env_vars.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_cost_rewards.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_evaluations.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_ref_pinning.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_env_test.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_gpu_type_single_field.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_grpo_resident_sizing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_grpo_reward_batching.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_infisical_overlay.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_jobs.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_managed_config_fields.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_multi_gpu_gate.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_multimodal_input_grads.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_opd_limits.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_opd_resume_safety.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_open_model_policy.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_parasail_teacher.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_projects.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_provider_routing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_resume_on_retry.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_reward_profile.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_rl_train.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_rollout_profile_quote.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_rollout_profile_sampling.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_rollout_samples.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_rollout_workload_profile.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_runmgmt.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_runpod_slots.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serve_reasoning_content.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_api.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_server_standalone.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serving_pricing_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_chunked_nll.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_profile_worker.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_train.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_sft_workload.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_step_floor.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_step_metrics.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_teacher_broker.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_vram_architecture.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_wandb_link.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_wandb_log_coverage.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_warmstart_error_attribution.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_workload_profile.py +0 -0
- {freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/tests/test_workload_profile_lifecycle.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.3
|
|
4
4
|
Summary: Flash — managed LoRA post-training (SFT/GRPO/OPD) for Freesolo environments, driven by the `flash` CLI
|
|
5
5
|
Project-URL: Homepage, https://github.com/freesolo-co/flash
|
|
6
6
|
Project-URL: Repository, https://github.com/freesolo-co/flash
|
|
@@ -1057,9 +1057,15 @@ class _TeacherAlignmentBridge:
|
|
|
1057
1057
|
)
|
|
1058
1058
|
context_messages = [dict(message) for message in session["messages"]]
|
|
1059
1059
|
state = session["state"]
|
|
1060
|
-
self.active_env.record_model_turn(state, completion_text)
|
|
1061
|
-
session["messages"].append({"role": "assistant", "content": completion_text})
|
|
1062
1060
|
terminal = bool(payload.get("truncated")) or bool(skip_reason)
|
|
1061
|
+
# an unusable turn is excluded from teacher scoring below (see the `scorable` filter),
|
|
1062
|
+
# so showing it to the environment buys nothing and can cost the whole run: an env that
|
|
1063
|
+
# parses or validates each action may raise on a truncated or empty action, turning a
|
|
1064
|
+
# routine no-signal rollout into a permanent paid failure. the grpo bridge already
|
|
1065
|
+
# returns before its own `record_model_turn` on exactly this predicate.
|
|
1066
|
+
if not terminal:
|
|
1067
|
+
self.active_env.record_model_turn(state, completion_text)
|
|
1068
|
+
session["messages"].append({"role": "assistant", "content": completion_text})
|
|
1063
1069
|
messages: list[dict] = []
|
|
1064
1070
|
next_prefix = [*accepted_prefix, *response_ids]
|
|
1065
1071
|
if not terminal:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "freesolo-flash-dev"
|
|
3
|
-
version = "1.1.
|
|
3
|
+
version = "1.1.3"
|
|
4
4
|
description ="Flash — managed LoRA post-training (SFT/GRPO/OPD) for Freesolo environments, driven by the `flash` CLI"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
# RunPod Flash supports Python 3.11-3.12 (not 3.13 yet).
|
|
@@ -121,7 +121,7 @@ artifacts = ["flash/py.typed"]
|
|
|
121
121
|
# auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
|
|
122
122
|
# PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
|
|
123
123
|
# dev-channel release = bump this (and [project].version) and merge to `dev`.
|
|
124
|
-
version = "1.1.
|
|
124
|
+
version = "1.1.3"
|
|
125
125
|
|
|
126
126
|
[tool.pytest.ini_options]
|
|
127
127
|
pythonpath = ["."]
|
|
@@ -2415,6 +2415,128 @@ def test_stop_trimming_slices_response_ids_and_forced_mask_identically():
|
|
|
2415
2415
|
assert kept_forced == [True, False]
|
|
2416
2416
|
|
|
2417
2417
|
|
|
2418
|
+
class _RecordingEnv:
|
|
2419
|
+
"""Environment that records every turn it is shown, and rejects an empty action.
|
|
2420
|
+
|
|
2421
|
+
the rejection is the point: a real environment that parses each action is entitled to raise on
|
|
2422
|
+
a truncated or empty one, and that is what turns a no-signal rollout into a paid run failure.
|
|
2423
|
+
"""
|
|
2424
|
+
|
|
2425
|
+
def __init__(self):
|
|
2426
|
+
self.recorded: list[str] = []
|
|
2427
|
+
|
|
2428
|
+
def new_rollout_state(self, _example):
|
|
2429
|
+
return {"messages": [{"role": "user", "content": "q"}], "prompt": None}
|
|
2430
|
+
|
|
2431
|
+
def record_model_turn(self, state, content):
|
|
2432
|
+
if not content.strip():
|
|
2433
|
+
raise ValueError("environment rejects an empty action")
|
|
2434
|
+
self.recorded.append(content)
|
|
2435
|
+
return state
|
|
2436
|
+
|
|
2437
|
+
def env_reply(self, _messages, _state):
|
|
2438
|
+
return [{"role": "user", "content": "next"}]
|
|
2439
|
+
|
|
2440
|
+
def rollout_done(self, _state, _turn_limit):
|
|
2441
|
+
return False
|
|
2442
|
+
|
|
2443
|
+
|
|
2444
|
+
class _MultiTurnBridgeTokenizer(_BridgeTokenizer):
|
|
2445
|
+
"""``_BridgeTokenizer`` plus the chat-template surface the env-glue tokenizer needs."""
|
|
2446
|
+
|
|
2447
|
+
def apply_chat_template(self, messages, **_kwargs):
|
|
2448
|
+
return "".join(str(message.get("content", "")) for message in messages)
|
|
2449
|
+
|
|
2450
|
+
def __call__(self, text, **_kwargs):
|
|
2451
|
+
return {"input_ids": [ord(char) % 64 for char in text]}
|
|
2452
|
+
|
|
2453
|
+
|
|
2454
|
+
def _multiturn_bridge(env, *, max_turns=4):
|
|
2455
|
+
return _TeacherAlignmentBridge(
|
|
2456
|
+
prompts=[
|
|
2457
|
+
_BridgePrompt(
|
|
2458
|
+
student_messages=[{"role": "user", "content": "q"}],
|
|
2459
|
+
teacher_messages=[{"role": "user", "content": "q"}],
|
|
2460
|
+
prompt_ids=(10, 11),
|
|
2461
|
+
image_descriptors=(),
|
|
2462
|
+
package_root=None,
|
|
2463
|
+
example=object(),
|
|
2464
|
+
)
|
|
2465
|
+
],
|
|
2466
|
+
tokenizer=_MultiTurnBridgeTokenizer(),
|
|
2467
|
+
teacher=object(),
|
|
2468
|
+
thinking_prefill="",
|
|
2469
|
+
eos_token_ids=frozenset({99}),
|
|
2470
|
+
stop_sequences=(),
|
|
2471
|
+
mutation_callback=lambda: None,
|
|
2472
|
+
active_env=env,
|
|
2473
|
+
multi_turn=True,
|
|
2474
|
+
max_turns=max_turns,
|
|
2475
|
+
)
|
|
2476
|
+
|
|
2477
|
+
|
|
2478
|
+
def test_an_unusable_opd_turn_is_never_shown_to_the_environment():
|
|
2479
|
+
"""A truncated or skipped turn must not reach ``record_model_turn``.
|
|
2480
|
+
|
|
2481
|
+
such a turn is already excluded from teacher scoring, so showing it to the environment buys no
|
|
2482
|
+
signal and can cost the whole paid run: an env that validates each action may raise on it. the
|
|
2483
|
+
grpo bridge returns before its own ``record_model_turn`` on exactly this predicate.
|
|
2484
|
+
"""
|
|
2485
|
+
env = _RecordingEnv()
|
|
2486
|
+
bridge = _multiturn_bridge(env)
|
|
2487
|
+
bridge.start_multiturn(
|
|
2488
|
+
index=0, session_id="s1", prompt_ids=[10, 11], raw_prompt=[{"role": "user", "content": "q"}]
|
|
2489
|
+
)
|
|
2490
|
+
|
|
2491
|
+
response = bridge.step_multiturn(
|
|
2492
|
+
{
|
|
2493
|
+
"session_id": "s1",
|
|
2494
|
+
"turn_ordinal": 0,
|
|
2495
|
+
"accepted_prefix": [10, 11],
|
|
2496
|
+
"raw_response_ids": [],
|
|
2497
|
+
"response_ids": [],
|
|
2498
|
+
"completion_text": "",
|
|
2499
|
+
"termination": "truncated",
|
|
2500
|
+
"stop_reason": "length",
|
|
2501
|
+
"truncated": True,
|
|
2502
|
+
"skip_reason": "truncated_rollout",
|
|
2503
|
+
}
|
|
2504
|
+
)
|
|
2505
|
+
|
|
2506
|
+
assert env.recorded == [], "an unusable turn was pushed into environment state"
|
|
2507
|
+
assert response["terminal"] is True
|
|
2508
|
+
# the turn is still accounted for -- it is skipped, not erased
|
|
2509
|
+
assert bridge.truncated_rollouts == 1
|
|
2510
|
+
assert bridge.skip_counts == {"truncated_rollout": 1}
|
|
2511
|
+
|
|
2512
|
+
|
|
2513
|
+
def test_a_usable_opd_turn_still_reaches_the_environment():
|
|
2514
|
+
"""The guard must key on the unusable predicate, not disable multi-turn recording."""
|
|
2515
|
+
env = _RecordingEnv()
|
|
2516
|
+
bridge = _multiturn_bridge(env)
|
|
2517
|
+
bridge.start_multiturn(
|
|
2518
|
+
index=0, session_id="s1", prompt_ids=[10, 11], raw_prompt=[{"role": "user", "content": "q"}]
|
|
2519
|
+
)
|
|
2520
|
+
|
|
2521
|
+
response = bridge.step_multiturn(
|
|
2522
|
+
{
|
|
2523
|
+
"session_id": "s1",
|
|
2524
|
+
"turn_ordinal": 0,
|
|
2525
|
+
"accepted_prefix": [10, 11],
|
|
2526
|
+
"raw_response_ids": [65],
|
|
2527
|
+
"response_ids": [65],
|
|
2528
|
+
"completion_text": "A",
|
|
2529
|
+
"termination": "stop",
|
|
2530
|
+
"stop_reason": "stop",
|
|
2531
|
+
"truncated": False,
|
|
2532
|
+
"skip_reason": "",
|
|
2533
|
+
}
|
|
2534
|
+
)
|
|
2535
|
+
|
|
2536
|
+
assert env.recorded == ["A"]
|
|
2537
|
+
assert response["terminal"] is False
|
|
2538
|
+
|
|
2539
|
+
|
|
2418
2540
|
def test_multimodal_bridge_rejects_managed_teacher_scoring():
|
|
2419
2541
|
bridge = _TeacherAlignmentBridge(
|
|
2420
2542
|
prompts=[
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/ISSUE_TEMPLATE/feature_request.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/bake-kernel-cache.yml
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/main-source-guard.yml
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/.github/workflows/notify-tests-repo.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/multiturn_reward_scoring.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/perf/diagnostics.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/rollout_samples.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/teacher_encoding.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/engine/worker/tokenizer_align.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/_instance_bootstrap.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/jobs/__init__.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/jobs/builders.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.1.2 → freesolo_flash_dev-1.1.3}/flash/providers/lambdalabs/preflight.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|