freesolo-flash-dev 1.0.5__tar.gz → 1.0.6__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.0.5 → freesolo_flash_dev-1.0.6}/PKG-INFO +1 -1
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/render.py +1 -1
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/base.py +4 -21
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/schema/__init__.py +3 -3
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/reconcile.py +2 -1
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/pyproject.toml +2 -2
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_render_theme.py +43 -1
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_gpus.py +8 -6
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_spec_and_validation.py +4 -4
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/uv.lock +1 -1
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.claude/skills/verify/SKILL.md +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.dockerignore +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.env.example +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/notify-tests-repo.yml +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.gitignore +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/Dockerfile +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/LICENSE +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/README.md +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/_channel.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/_fileio.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/_logging.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/_update_check.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/adapter_artifacts.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/catalog.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/_tty.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/commands.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/env_setup.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/envpush.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cli/training_doc.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/client/config.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/client/http.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/diagnostics.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/accounting.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/chalk_kernels.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/multiturn_reward_scoring.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/multiturn_rollout.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/recipe.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/steps.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/structured_outputs.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/vram.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/_pkg.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/adapter.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/decoding.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/finalize.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/gpu_setup.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/grpo.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/grpo_multimodal.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/grpo_perturn_trainer.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/heartbeat.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/hf.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/kernel_warmup.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/lora.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/opd.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/opd_gkd.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/opd_vllm.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/packing.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/attn.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/loraplus.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/rl.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/rng.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/sft.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/teacher.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/tokenizer_align.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/wandb_log.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker_entrypoint.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/adapter.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/archive.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/archive_policy.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/base.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/loader.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/pull.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/envs/registry.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/lora_rank.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/multimodal.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/opd_retry_contract.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_auth.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_deadline.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_hf_artifacts.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_hf_retry.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_http.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_instance.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_instance_bootstrap.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_instance_poll.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_instance_provider.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_poll.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_worker.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/allocator.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/api.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/auth.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/gpus.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/preflight.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/pricing.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/preflight.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/realized.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/api.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/auth.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/cost.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/gpus.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/jobs.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/keys.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/preflight.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/preload.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/pricing.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/slots.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/train/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/runpod/train/endpoints.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/api.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/auth.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/preflight.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/vast/pricing.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/py.typed +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/runner/checkpoints.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/runner/deploy.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/runner/lifecycle.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/runner/verified_revisions.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/serve/deploy.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/serve/export.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/serve/pricing.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/serve/urls.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/_deps.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/_internal_client.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/_locks.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/_runtime.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/app.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/auth.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/billing.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/billing_retry.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/checkpoints.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/db.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/environment_registry.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/envs.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/server/run_registry.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/spec.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/infisical-entrypoint.sh +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/_helpers/vast.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/conftest.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/fixtures/math_eval.jsonl +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/fixtures/math_train.jsonl +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_accounting_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_async_uploads.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_b200_rollout_opt.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_base_model_provenance.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cancel_remote.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_chalk_kernels.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_charge_pricing.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_commands_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_main_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cli_render_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_client.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_client_stream_reads.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_controlled_experiment_repairs.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_cost_rewards.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_deploy_latency.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_cache_evict.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_download.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_download_api.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_pull_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_pull_loader_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_pull_managed_control_plane.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_export.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_grpo_mask_aware.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_grpo_perturn.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_grpo_sleep_gate.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_health_liveness.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_hf_retry.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_instance_bootstrap_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_jobs.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_lambda_api_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_lora_rank_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_lora_rank_preflight.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multimodal_input_grads.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multimodal_training.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_image_rollout.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_per_turn_reward.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_rollout.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_rollout_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_rollout_records.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_multiturn_rollout_request_policy.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_named_reward_metrics.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_opd.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_opd_full_state_resume.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_opd_resume_safety.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_opd_vllm.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_open_model_policy.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_packing_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_provider_preflight_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_provider_routing.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_repo_cleanup.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_resume_on_retry.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_runmgmt.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_runpod_slots.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_api.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_app_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_auth_singleflight.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_checkpoints_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_envs_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_server_locks_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_serving_context_preflight.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_serving_contract.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_serving_pricing_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_serving_schema_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_sft_activation_shaping.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_sft_example_selection.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_sft_max_context.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_sft_tokenize_cache.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_single_turn_multimodal_grpo.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_structured_outputs.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_train_context_preflight.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_training_controls.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_update_check.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vast_api.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vast_api_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vast_offers.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vast_provider_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vast_runner.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_verified_revisions.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_version.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_wandb_log_coverage.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_warmstart_adapter_download.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/tests/test_worker_thinking.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: freesolo-flash-dev
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.6
|
|
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
|
|
@@ -440,7 +440,7 @@ def gpus_table(rows: list[tuple[str, int, float | None]], tip: str) -> str:
|
|
|
440
440
|
|
|
441
441
|
def gpu_label(spec: dict, remote: dict) -> str:
|
|
442
442
|
"""Human-facing GPU label. Provider metadata stays internal."""
|
|
443
|
-
return remote.get("
|
|
443
|
+
return remote.get("allocated_gpu") or (spec.get("gpu") or {}).get("type", "")
|
|
444
444
|
|
|
445
445
|
|
|
446
446
|
def runs_table(runs: list[dict]) -> str:
|
|
@@ -137,19 +137,6 @@ GPU_CLASSES: tuple[GpuClass, ...] = (
|
|
|
137
137
|
)
|
|
138
138
|
|
|
139
139
|
GPU_INFO: dict[str, GpuClass] = {g.name: g for g in GPU_CLASSES}
|
|
140
|
-
LEGACY_GPU_CLASSES: tuple[GpuClass, ...] = (
|
|
141
|
-
GpuClass(
|
|
142
|
-
"RTX A6000",
|
|
143
|
-
"NVIDIA_RTX_A6000",
|
|
144
|
-
48,
|
|
145
|
-
"a6000",
|
|
146
|
-
"sm86",
|
|
147
|
-
0.49,
|
|
148
|
-
lambda_name="gpu_1x_a6000",
|
|
149
|
-
vast_name="RTX A6000",
|
|
150
|
-
),
|
|
151
|
-
)
|
|
152
|
-
_GPU_INFO_ALL: dict[str, GpuClass] = {**GPU_INFO, **{g.name: g for g in LEGACY_GPU_CLASSES}}
|
|
153
140
|
KNOWN = tuple(GPU_INFO)
|
|
154
141
|
VALIDATED = tuple(g.name for g in GPU_CLASSES if g.validated)
|
|
155
142
|
|
|
@@ -204,7 +191,7 @@ def _alias_keys(name: str) -> set[str]:
|
|
|
204
191
|
|
|
205
192
|
|
|
206
193
|
_ALIAS_TARGETS: dict[str, set[str]] = {}
|
|
207
|
-
for _info in
|
|
194
|
+
for _info in GPU_INFO.values():
|
|
208
195
|
for _provider_name in (_info.name, _info.vast_name, *_info.vast_aliases):
|
|
209
196
|
if not _provider_name:
|
|
210
197
|
continue
|
|
@@ -214,7 +201,7 @@ _ALIASES: dict[str, str] = {
|
|
|
214
201
|
key: next(iter(targets)) for key, targets in _ALIAS_TARGETS.items() if len(targets) == 1
|
|
215
202
|
}
|
|
216
203
|
# exact canonical names always resolve to themselves even if a provider spelling collides with them.
|
|
217
|
-
_ALIASES.update({_info.name.lower(): _info.name for _info in
|
|
204
|
+
_ALIASES.update({_info.name.lower(): _info.name for _info in GPU_INFO.values()})
|
|
218
205
|
# full marketing names (nvidia-smi / runpod api) and historical aliases not covered by generic rules.
|
|
219
206
|
_ALIASES.update(
|
|
220
207
|
{
|
|
@@ -264,11 +251,7 @@ class UnreconciledCreateError(RuntimeError):
|
|
|
264
251
|
|
|
265
252
|
|
|
266
253
|
def canonical_gpu(name: str) -> str:
|
|
267
|
-
"""Normalize a friendly GPU name to
|
|
268
|
-
|
|
269
|
-
Retired classes resolve for teardown/pricing compatibility but stay absent from ``GPU_INFO`` so
|
|
270
|
-
allocation, display, and provider offer matching do not select them.
|
|
271
|
-
"""
|
|
254
|
+
"""Normalize a friendly GPU name to a managed GPU class; raise otherwise."""
|
|
272
255
|
key = (name or "").strip().lower()
|
|
273
256
|
if key in _ALIASES:
|
|
274
257
|
return _ALIASES[key]
|
|
@@ -276,7 +259,7 @@ def canonical_gpu(name: str) -> str:
|
|
|
276
259
|
|
|
277
260
|
|
|
278
261
|
def get_gpu_info(name: str) -> GpuClass:
|
|
279
|
-
return
|
|
262
|
+
return GPU_INFO[canonical_gpu(name)]
|
|
280
263
|
|
|
281
264
|
|
|
282
265
|
def gpu_classes_for(identity_attr: str) -> list[GpuClass]:
|
|
@@ -397,9 +397,9 @@ def spec_from_dict(raw: dict[str, Any], run_id: str | None = None) -> JobSpec:
|
|
|
397
397
|
# exact_type it suggests might not be provisionable there.
|
|
398
398
|
if "type" in gpu_raw and not exact_type and not gpu_provider:
|
|
399
399
|
authored_type_raw = gpu_raw["type"]
|
|
400
|
-
# only an active validated class is a usable exact_type pin; an unrecognized string
|
|
401
|
-
#
|
|
402
|
-
#
|
|
400
|
+
# only an active validated class is a usable exact_type pin; an unrecognized string must
|
|
401
|
+
# not be echoed back as an exact_type, since the exact_type validation above would then
|
|
402
|
+
# reject the very config the note suggested.
|
|
403
403
|
pinnable: str | None = None
|
|
404
404
|
if isinstance(authored_type_raw, str):
|
|
405
405
|
try:
|
|
@@ -106,6 +106,7 @@ def reconcile_run(status: runner.RunStatus, *, now: float | None = None) -> bool
|
|
|
106
106
|
later cycle (within the window) retries once the provider invoice settles."""
|
|
107
107
|
now = time.time() if now is None else now
|
|
108
108
|
remote = status.remote or {}
|
|
109
|
+
spec = status.spec or {}
|
|
109
110
|
# raw persisted RunStatus.remote may omit started_ts or contain a falsey value. 0.0 means an
|
|
110
111
|
# unknown launch rather than the epoch; falling back to created_at prevents inflated flat-rate
|
|
111
112
|
# instance billing.
|
|
@@ -126,7 +127,7 @@ def reconcile_run(status: runner.RunStatus, *, now: float | None = None) -> bool
|
|
|
126
127
|
"runId": status.run_id,
|
|
127
128
|
"realizedCostUsd": realized.realized_usd,
|
|
128
129
|
"provider": realized.provider,
|
|
129
|
-
"gpu": remote.get("allocated_gpu") or
|
|
130
|
+
"gpu": remote.get("allocated_gpu") or (spec.get("gpu") or {}).get("type"),
|
|
130
131
|
"costByResource": realized.by_resource,
|
|
131
132
|
"wallSeconds": realized.wall_seconds,
|
|
132
133
|
"costBasis": "realized",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "freesolo-flash-dev"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.6"
|
|
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).
|
|
@@ -116,7 +116,7 @@ artifacts = ["flash/py.typed"]
|
|
|
116
116
|
# auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
|
|
117
117
|
# PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
|
|
118
118
|
# dev-channel release = bump this (and [project].version) and merge to `dev`.
|
|
119
|
-
version = "1.0.
|
|
119
|
+
version = "1.0.6"
|
|
120
120
|
|
|
121
121
|
[tool.pytest.ini_options]
|
|
122
122
|
pythonpath = ["."]
|
|
@@ -88,7 +88,7 @@ def test_runs_and_status_hide_provider_names(monkeypatch) -> None:
|
|
|
88
88
|
"run_id": "flash-1",
|
|
89
89
|
"state": "done",
|
|
90
90
|
"spec": {"model": "Qwen/Qwen3.5-4B", "algorithm": "grpo"},
|
|
91
|
-
"remote": {"
|
|
91
|
+
"remote": {"allocated_gpu": "RTX 4090", "provider": "runpod", "flash_arm": "runpod"},
|
|
92
92
|
}
|
|
93
93
|
runs = render.runs_table([run])
|
|
94
94
|
status = render.run_status(run)
|
|
@@ -100,6 +100,48 @@ def test_runs_and_status_hide_provider_names(monkeypatch) -> None:
|
|
|
100
100
|
assert "flash_arm" not in status.lower()
|
|
101
101
|
|
|
102
102
|
|
|
103
|
+
def test_runs_and_status_prefer_allocated_gpu(monkeypatch) -> None:
|
|
104
|
+
monkeypatch.setenv("FLASH_STYLE", "1")
|
|
105
|
+
monkeypatch.setenv("NO_COLOR", "1")
|
|
106
|
+
|
|
107
|
+
allocated_run = {
|
|
108
|
+
"run_id": "flash-allocated",
|
|
109
|
+
"state": "done",
|
|
110
|
+
"spec": {
|
|
111
|
+
"model": "Qwen/Qwen3.5-4B",
|
|
112
|
+
"algorithm": "grpo",
|
|
113
|
+
"gpu": {"type": "RTX Pro 6000"},
|
|
114
|
+
},
|
|
115
|
+
"remote": {"allocated_gpu": "B200"},
|
|
116
|
+
}
|
|
117
|
+
runs = render.runs_table([allocated_run])
|
|
118
|
+
status = render.run_status(allocated_run)
|
|
119
|
+
status_panel = status.split("details", 1)[0]
|
|
120
|
+
assert "B200" in runs
|
|
121
|
+
assert "B200" in status_panel
|
|
122
|
+
assert "RTX Pro 6000" not in runs
|
|
123
|
+
assert "RTX Pro 6000" not in status_panel
|
|
124
|
+
|
|
125
|
+
spec_only_run = {
|
|
126
|
+
"run_id": "flash-spec-only",
|
|
127
|
+
"state": "done",
|
|
128
|
+
"spec": {"gpu": {"type": "RTX Pro 6000"}},
|
|
129
|
+
}
|
|
130
|
+
assert "RTX Pro 6000" in render.runs_table([spec_only_run])
|
|
131
|
+
assert "RTX Pro 6000" in render.run_status(spec_only_run)
|
|
132
|
+
|
|
133
|
+
# the removed legacy remote["gpu"] key is no longer honored: the label resolves from the
|
|
134
|
+
# authoritative allocated_gpu or the provisional spec type, never the dead key.
|
|
135
|
+
legacy_key_run = {
|
|
136
|
+
"run_id": "flash-legacy-key",
|
|
137
|
+
"state": "done",
|
|
138
|
+
"spec": {"gpu": {"type": "RTX Pro 6000"}},
|
|
139
|
+
"remote": {"gpu": "B200"},
|
|
140
|
+
}
|
|
141
|
+
assert "B200" not in render.runs_table([legacy_key_run])
|
|
142
|
+
assert "RTX Pro 6000" in render.runs_table([legacy_key_run])
|
|
143
|
+
|
|
144
|
+
|
|
103
145
|
def test_color_respects_no_color(monkeypatch) -> None:
|
|
104
146
|
monkeypatch.setenv("FLASH_STYLE", "1")
|
|
105
147
|
monkeypatch.setenv("TERM", "xterm-256color")
|
|
@@ -64,12 +64,14 @@ def test_vast_gpu_for_offer_accepts_h100_pcie_alias():
|
|
|
64
64
|
assert vast_gpu_for_offer("Tesla T4", 16 * 1024) is None
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
def
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
assert "RTX A6000" not in
|
|
67
|
+
def test_removed_gpu_class_is_unmanaged():
|
|
68
|
+
# RTX A6000 was a retired class kept only to resolve legacy records; it is now fully removed, so
|
|
69
|
+
# it is not a managed class and resolves nowhere (no special retired-but-known status remains).
|
|
70
|
+
from flash.providers.base import KNOWN, UnsupportedGpuError, canonical_gpu
|
|
71
|
+
|
|
72
|
+
assert "RTX A6000" not in KNOWN
|
|
73
|
+
with pytest.raises(UnsupportedGpuError):
|
|
74
|
+
canonical_gpu("RTX A6000")
|
|
73
75
|
|
|
74
76
|
|
|
75
77
|
def test_expanded_gpu_table():
|
|
@@ -682,7 +682,7 @@ def test_gpu_constraints_reject_unknown_unsupported_or_undersized_values() -> No
|
|
|
682
682
|
spec_from_dict(_raw(**{"gpu.provider": "aws"}))
|
|
683
683
|
with pytest.raises(ConfigError, match=r"gpu\.exact_type"):
|
|
684
684
|
spec_from_dict(_raw(**{"gpu.exact_type": "Tesla T4"}))
|
|
685
|
-
with pytest.raises(ConfigError, match="
|
|
685
|
+
with pytest.raises(ConfigError, match=r"unsupported gpu 'RTX A6000'"):
|
|
686
686
|
spec_from_dict(_raw(**{"gpu.exact_type": "RTX A6000"}))
|
|
687
687
|
with pytest.raises(ConfigError, match="requires at least"):
|
|
688
688
|
spec_from_dict(
|
|
@@ -730,8 +730,8 @@ def test_gpu_type_override_warning_requires_an_authored_hint(capsys) -> None:
|
|
|
730
730
|
assert "`flash gpus` to list valid classes" in invalid_warning
|
|
731
731
|
assert 'add exact_type = "H10O"' not in invalid_warning
|
|
732
732
|
|
|
733
|
-
#
|
|
734
|
-
#
|
|
733
|
+
# an unrecognized type hint (e.g. a removed/retired class name) must be treated like any unknown
|
|
734
|
+
# string and never echoed back as an exact_type the schema would immediately reject.
|
|
735
735
|
spec_from_dict(_raw(**{"gpu.type": "RTX A6000"}))
|
|
736
736
|
retired_warning = capsys.readouterr().err
|
|
737
737
|
assert "[gpu] type='RTX A6000' is not an active GPU class and was ignored" in retired_warning
|
|
@@ -764,7 +764,7 @@ def test_persisted_gpu_type_is_canonicalized_and_validated() -> None:
|
|
|
764
764
|
JobSpec.from_dict({"gpu": {"type": 1}})
|
|
765
765
|
with pytest.raises(ValueError, match=r"gpu\.type: unsupported gpu 'H10O'"):
|
|
766
766
|
JobSpec.from_dict({"gpu": {"type": "H10O"}})
|
|
767
|
-
with pytest.raises(ValueError, match="
|
|
767
|
+
with pytest.raises(ValueError, match=r"unsupported gpu 'RTX A6000'"):
|
|
768
768
|
JobSpec.from_dict({"gpu": {"type": "RTX A6000"}})
|
|
769
769
|
|
|
770
770
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/bake-kernel-cache.yml
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.github/workflows/main-source-guard.yml
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/.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
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/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
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/grpo_multimodal.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/engine/worker/grpo_perturn_trainer.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
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/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
|
|
File without changes
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/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
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/_instance_bootstrap.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/jobs/__init__.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/flash/providers/lambdalabs/jobs/builders.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-1.0.5 → freesolo_flash_dev-1.0.6}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|