freesolo-flash 0.2.2__tar.gz → 0.2.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-0.2.2 → freesolo_flash-0.2.3}/PKG-INFO +1 -1
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/__init__.py +1 -1
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/schema/fields.py +8 -2
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/pyproject.toml +1 -1
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/.dockerignore +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/.env.example +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/.github/workflows/ci.yml +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/.github/workflows/publish.yml +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/.gitignore +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/Dockerfile +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/Dockerfile.worker +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/LICENSE +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/README.md +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/docker/make_rp_handler.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/_fileio.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/_logging.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/catalog.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/cli/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/cli/main/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/cli/main/__main__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/cli/main/commands.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/cli/main/envpush.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/client/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/client/config.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/client/http.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/client/specs.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/engine/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/engine/accounting.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/engine/chalk_kernels.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/engine/multiturn_rollout.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/engine/recipe.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/engine/vram.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/engine/worker/lora.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/engine/worker/perf.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/envs/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/envs/adapter/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/envs/adapter/rubric.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/envs/base.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/envs/registry.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/mcp/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/mcp/server.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/_auth.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/_http.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/_poll.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/allocator.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/base.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/preflight.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/runpod/api.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/runpod/auth.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/runpod/gpus.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/runpod/jobs.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/runpod/preflight.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/runpod/pricing.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/runpod/train/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/runpod/train/deps.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/runpod/train/endpoints.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/vast/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/vast/_bootstrap.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/vast/api.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/vast/auth.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/vast/gpus.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/vast/jobs/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/vast/jobs/builders.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/vast/preflight.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/vast/pricing.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/providers/vast/train.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/py.typed +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/runner/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/runner/deploy.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/runner/lifecycle.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/schema/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/serve/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/serve/deploy.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/server/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/server/__main__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/server/app.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/server/auth.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/server/db.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/server/envs.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/flash/spec.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/_helpers/runner.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/_helpers/specs.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/_helpers/vast.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/conftest.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/fixtures/math_eval.jsonl +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/fixtures/math_train.jsonl +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/live/__init__.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/live/conftest.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/live/test_vast_live.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_agent_slm_cli_contract.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_algorithms.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_allocator.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_cancel_remote.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_chalk_kernels.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_cli_commands.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_cli_errors.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_cli_managed.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_client.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_config_overrides.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_disk_gb.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_env_install.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_env_publish.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_env_push.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_flash_worker.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_gpus.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_grpo_params.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_jobs.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_logging.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_login_perms.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_multiturn_rollout.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_open_model_policy.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_preflight.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_pricing_cache.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_provider_routing.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_runmgmt.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_serve.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_serve_modes.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_server_api.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_thinking_config.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_vast_api.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_vast_offers.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_vast_runner.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_verifiers.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_version.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_worker_stack.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/tests/test_worker_thinking.py +0 -0
- {freesolo_flash-0.2.2 → freesolo_flash-0.2.3}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: freesolo-flash
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: Flash — managed LoRA post-training (SFT/GRPO) for verifiers 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
|
|
@@ -201,9 +201,15 @@ def _wandb_spec(raw: Any) -> WandbSpec:
|
|
|
201
201
|
)
|
|
202
202
|
values: dict[str, str] = {}
|
|
203
203
|
for key in _WANDB_KEYS:
|
|
204
|
-
|
|
204
|
+
val = raw.get(key)
|
|
205
|
+
# Absent OR null means "unset". A serialized JobSpec round-trips unset wandb fields as
|
|
206
|
+
# null (``asdict`` emits ``{"project": null, "run_name": null}``), so re-parsing a spec —
|
|
207
|
+
# which is exactly what the control plane does on submit, ``spec_from_dict(spec.to_dict())``
|
|
208
|
+
# — must accept null without demanding a value, or every run that omits ``[wandb]`` is
|
|
209
|
+
# rejected. Only an explicitly-set value is validated: a bare ""/whitespace is a real
|
|
210
|
+
# config mistake worth flagging.
|
|
211
|
+
if val is None:
|
|
205
212
|
continue
|
|
206
|
-
val = raw[key]
|
|
207
213
|
if not isinstance(val, str) or not val.strip():
|
|
208
214
|
raise ConfigError(f"[wandb] {key} must be a non-empty string")
|
|
209
215
|
values[key] = val.strip()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "freesolo-flash"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.3"
|
|
4
4
|
description = "Flash — managed LoRA post-training (SFT/GRPO) for verifiers environments, driven by the `flash` CLI"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
# RunPod Flash supports Python 3.10-3.12 (not 3.13 yet).
|
|
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
|
|
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
|
|
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
|