freesolo-flash-dev 0.2.32__tar.gz → 0.2.33__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-0.2.32 → freesolo_flash_dev-0.2.33}/PKG-INFO +1 -1
- freesolo_flash_dev-0.2.33/flash/serve/pricing.py +94 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/pyproject.toml +2 -2
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_serving_contract.py +36 -3
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/uv.lock +1 -1
- freesolo_flash_dev-0.2.32/flash/serve/pricing.py +0 -58
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.dockerignore +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.env.example +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/auto-rebake.yml +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/bake-kernel-cache.yml +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/ci.yml +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/main-source-guard.yml +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/publish-dev.yml +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/publish-image.yml +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/publish.yml +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/version-parity.yml +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/worker-image.yml +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.gitignore +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/Dockerfile +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/Dockerfile.worker +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/LICENSE +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/README.md +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/build/kernel_cache/.gitignore +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/build/kernel_cache/.keep +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docker/Dockerfile.kernelcache +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docker/Dockerfile.kernelcache.relayer +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docker/bake_kernel_cache.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docker/bake_pod_entry.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docker/kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docker/make_rp_handler.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-style/README.md +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-style/generate.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-style/index.html +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-style/preview.png +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-style/themed-errors.png +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-theme/README.md +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-theme/before-after-dark.png +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-theme/before-after-light.png +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-theme/gallery-dark.png +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-theme/gallery-light.png +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-theme/help-dark.png +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-theme/help-light.png +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/kernel-cache.md +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/_channel.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/_fileio.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/_logging.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/_update_check.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/catalog.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/cli/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/cli/__main__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/cli/commands.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/cli/envpush.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/cli/render.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/cli/training_doc.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/client/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/client/config.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/client/http.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/client/runtime_secrets.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/client/specs.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/cost/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/cost/analytical.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/cost/facts.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/cost/spec.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/cost/types.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/accounting.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/chalk_kernels.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/multiturn_rollout.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/recipe.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/vram.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/__main__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/_pkg.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/adapter.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/decoding.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/finalize.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/gpu_setup.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/grpo.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/heartbeat.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/hf.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/kernel_warmup.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/lora.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/packing.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/perf/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/perf/attn.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/perf/diagnostics.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/perf/lifecycle.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/perf/liger.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/perf/loraplus.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/perf/memory.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/rl.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/sft.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/wandb_log.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/envs/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/envs/adapter.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/envs/base.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/envs/pull.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/envs/registry.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/_auth.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/_http.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/_instance.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/_instance_bootstrap.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/_poll.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/allocator.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/base.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/api.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/auth.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/gpus.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/jobs/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/jobs/builders.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/preflight.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/pricing.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/train.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/preflight.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/realized.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/api.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/auth.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/cost.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/gpus.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/jobs.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/keys.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/preflight.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/preload.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/pricing.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/slots.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/train/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/train/deps.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/train/endpoints.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/py.typed +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/runner/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/runner/checkpoints.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/runner/deploy.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/runner/lifecycle.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/schema/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/schema/fields.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/serve/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/serve/deploy.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/serve/export.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/__main__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/_deps.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/_internal_client.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/_locks.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/_runtime.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/app.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/auth.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/billing.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/billing_retry.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/checkpoints.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/db.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/environment_registry.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/envs.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/reconcile.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/routes/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/routes/envs.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/routes/meta.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/routes/runs.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/routes/serving.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/server/run_registry.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/spec.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/infisical-entrypoint.sh +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/scripts/build_dev_dist.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/_helpers/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/_helpers/runner.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/_helpers/specs.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/conftest.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/fixtures/math_eval.jsonl +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/fixtures/math_train.jsonl +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/live/__init__.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/live/conftest.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/live/test_lambda_live.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/live/test_runpod_live.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_agent_flash_cli_contract.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_algorithms.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_allocator.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_b200_rollout_opt.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_backend_jobspec_contract.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_billing_retry.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cancel_remote.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_catalog_consistency.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_chalk_kernels.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_checkpoints.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cli_commands.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cli_errors.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cli_estimate.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cli_help.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cli_managed.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cli_render_theme.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_client.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_client_server_integration.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_config_overrides.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cost_analytical.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cost_equation.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cost_estimate.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cost_hardware.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cost_models.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_cost_rewards.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_dev_channel.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_disk_gb.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_endpoint_name.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_env_delete.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_env_no_install.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_env_publish.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_env_pull.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_env_push.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_env_rate_limit_resolve.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_envs_coverage.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_export.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_flash_mvp.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_flash_worker.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_flashinfer_cache_dirs.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_github_urlopen_retry.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_gpus.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_grpo_mask_aware.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_grpo_params.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_grpo_sleep_gate.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_idle_endpoint_reaper.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_internal_client.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_jobs.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_kernel_cache.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_kernel_fingerprint.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_kv_util.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_lambda_runner.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_logging.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_login_perms.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_managed_hf_repo.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_metrics_schema_agent_contract.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_mig_guard.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_multiturn_rollout.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_oom_escalate_gpu.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_open_model_policy.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_orchestrator_flash.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_packing.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_poll_helpers.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_preflight.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_provider_routing.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_provider_teardown_robustness.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_providers_symmetry.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_realized_cost.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_resolve_params_b.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_resume_on_retry.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_runmgmt.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_runpod_api_delete.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_runpod_key_fingerprint.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_runpod_key_waterfall.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_runpod_slots.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_serve.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_server_api.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_server_billing.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_server_db.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_sft_gc_off.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_spec_and_validation.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_thinking_config.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_update_check.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_verifiers.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_version.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_vl_warmstart_adapter_keys.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_vl_warmstart_recombine.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_vl_weight_sync.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_wandb_naming.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_warmstart_cross_repo.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_weight_cache.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_worker_dryrun.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_worker_hardexit.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_worker_image.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_worker_init_heartbeat.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/tests/test_worker_stack.py +0 -0
- {freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/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: 0.2.
|
|
3
|
+
Version: 0.2.33
|
|
4
4
|
Summary: Flash — managed LoRA post-training (SFT/GRPO) 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
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"""Serving token prices for Flash deployments (per 1M tokens)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
|
|
7
|
+
from flash.catalog import MODELS
|
|
8
|
+
|
|
9
|
+
SERVING_MARKUP = 1.20
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass(frozen=True)
|
|
13
|
+
class ServingPrice:
|
|
14
|
+
model_id: str
|
|
15
|
+
typical_input_usd_per_mtok: float
|
|
16
|
+
typical_output_usd_per_mtok: float
|
|
17
|
+
typical_cached_input_usd_per_mtok: float
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
def billed_input_usd_per_mtok(self) -> float:
|
|
21
|
+
return self.typical_input_usd_per_mtok * SERVING_MARKUP
|
|
22
|
+
|
|
23
|
+
@property
|
|
24
|
+
def billed_output_usd_per_mtok(self) -> float:
|
|
25
|
+
return self.typical_output_usd_per_mtok * SERVING_MARKUP
|
|
26
|
+
|
|
27
|
+
@property
|
|
28
|
+
def billed_cached_input_usd_per_mtok(self) -> float:
|
|
29
|
+
return self.typical_cached_input_usd_per_mtok * SERVING_MARKUP
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
SERVING_PRICES: dict[str, ServingPrice] = {
|
|
33
|
+
"openbmb/MiniCPM5-1B": ServingPrice(
|
|
34
|
+
model_id="openbmb/MiniCPM5-1B",
|
|
35
|
+
typical_input_usd_per_mtok=0.01,
|
|
36
|
+
typical_output_usd_per_mtok=0.05,
|
|
37
|
+
typical_cached_input_usd_per_mtok=0.002,
|
|
38
|
+
),
|
|
39
|
+
"Qwen/Qwen3.5-0.8B": ServingPrice(
|
|
40
|
+
model_id="Qwen/Qwen3.5-0.8B",
|
|
41
|
+
typical_input_usd_per_mtok=0.01,
|
|
42
|
+
typical_output_usd_per_mtok=0.05,
|
|
43
|
+
typical_cached_input_usd_per_mtok=0.002,
|
|
44
|
+
),
|
|
45
|
+
"Qwen/Qwen3.5-2B": ServingPrice(
|
|
46
|
+
model_id="Qwen/Qwen3.5-2B",
|
|
47
|
+
typical_input_usd_per_mtok=0.02,
|
|
48
|
+
typical_output_usd_per_mtok=0.10,
|
|
49
|
+
typical_cached_input_usd_per_mtok=0.004,
|
|
50
|
+
),
|
|
51
|
+
"Qwen/Qwen3.5-4B": ServingPrice(
|
|
52
|
+
model_id="Qwen/Qwen3.5-4B",
|
|
53
|
+
typical_input_usd_per_mtok=0.03,
|
|
54
|
+
typical_output_usd_per_mtok=0.15,
|
|
55
|
+
typical_cached_input_usd_per_mtok=0.006,
|
|
56
|
+
),
|
|
57
|
+
"Qwen/Qwen3.5-9B": ServingPrice(
|
|
58
|
+
model_id="Qwen/Qwen3.5-9B",
|
|
59
|
+
typical_input_usd_per_mtok=0.10,
|
|
60
|
+
typical_output_usd_per_mtok=0.15,
|
|
61
|
+
typical_cached_input_usd_per_mtok=0.020,
|
|
62
|
+
),
|
|
63
|
+
"Qwen/Qwen3.6-35B-A3B": ServingPrice(
|
|
64
|
+
model_id="Qwen/Qwen3.6-35B-A3B",
|
|
65
|
+
typical_input_usd_per_mtok=0.15,
|
|
66
|
+
typical_output_usd_per_mtok=1.00,
|
|
67
|
+
typical_cached_input_usd_per_mtok=0.050,
|
|
68
|
+
),
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def serving_price(model_id: str) -> ServingPrice:
|
|
73
|
+
try:
|
|
74
|
+
return SERVING_PRICES[model_id]
|
|
75
|
+
except KeyError as exc:
|
|
76
|
+
raise ValueError(f"unknown serving model {model_id!r}") from exc
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def serving_price_rows() -> list[dict[str, float | str]]:
|
|
80
|
+
rows: list[dict[str, float | str]] = []
|
|
81
|
+
for model_id in sorted(MODELS):
|
|
82
|
+
price = serving_price(model_id)
|
|
83
|
+
rows.append(
|
|
84
|
+
{
|
|
85
|
+
"model_id": model_id,
|
|
86
|
+
"typical_input_usd_per_mtok": price.typical_input_usd_per_mtok,
|
|
87
|
+
"typical_output_usd_per_mtok": price.typical_output_usd_per_mtok,
|
|
88
|
+
"typical_cached_input_usd_per_mtok": price.typical_cached_input_usd_per_mtok,
|
|
89
|
+
"billed_input_usd_per_mtok": price.billed_input_usd_per_mtok,
|
|
90
|
+
"billed_output_usd_per_mtok": price.billed_output_usd_per_mtok,
|
|
91
|
+
"billed_cached_input_usd_per_mtok": price.billed_cached_input_usd_per_mtok,
|
|
92
|
+
}
|
|
93
|
+
)
|
|
94
|
+
return rows
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "freesolo-flash-dev"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.33"
|
|
4
4
|
description = "Flash — managed LoRA post-training (SFT/GRPO) 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).
|
|
@@ -111,7 +111,7 @@ artifacts = ["flash/py.typed"]
|
|
|
111
111
|
# auto-published by .github/workflows/publish-dev.yml: a push to `dev` whose version isn't yet on
|
|
112
112
|
# PyPI publishes it; pushes that don't change it find it already published and no-op. So cutting a
|
|
113
113
|
# dev-channel release = bump this (and [project].version) and merge to `dev`.
|
|
114
|
-
version = "0.2.
|
|
114
|
+
version = "0.2.33"
|
|
115
115
|
|
|
116
116
|
[tool.pytest.ini_options]
|
|
117
117
|
pythonpath = ["."]
|
|
@@ -141,7 +141,7 @@ def test_deployment_roundtrip_dict():
|
|
|
141
141
|
assert "mode" not in data
|
|
142
142
|
|
|
143
143
|
|
|
144
|
-
def
|
|
144
|
+
def test_serving_prices_cover_catalog():
|
|
145
145
|
from flash.catalog import MODELS
|
|
146
146
|
from flash.serve.pricing import SERVING_MARKUP, SERVING_PRICES, serving_price_rows
|
|
147
147
|
|
|
@@ -150,11 +150,44 @@ def test_serving_prices_cover_catalog_and_apply_markup():
|
|
|
150
150
|
rows = serving_price_rows()
|
|
151
151
|
assert len(rows) == len(MODELS)
|
|
152
152
|
for row in rows:
|
|
153
|
+
assert row["typical_input_usd_per_mtok"] > 0
|
|
154
|
+
assert row["typical_output_usd_per_mtok"] > 0
|
|
155
|
+
assert row["typical_cached_input_usd_per_mtok"] > 0
|
|
156
|
+
assert row["billed_input_usd_per_mtok"] > 0
|
|
157
|
+
assert row["billed_output_usd_per_mtok"] > 0
|
|
158
|
+
assert row["billed_cached_input_usd_per_mtok"] > 0
|
|
159
|
+
assert row["billed_cached_input_usd_per_mtok"] < row["billed_input_usd_per_mtok"]
|
|
153
160
|
assert row["billed_input_usd_per_mtok"] == pytest.approx(
|
|
154
|
-
row["
|
|
161
|
+
row["typical_input_usd_per_mtok"] * SERVING_MARKUP
|
|
155
162
|
)
|
|
156
163
|
assert row["billed_output_usd_per_mtok"] == pytest.approx(
|
|
157
|
-
row["
|
|
164
|
+
row["typical_output_usd_per_mtok"] * SERVING_MARKUP
|
|
165
|
+
)
|
|
166
|
+
assert row["billed_cached_input_usd_per_mtok"] == pytest.approx(
|
|
167
|
+
row["typical_cached_input_usd_per_mtok"] * SERVING_MARKUP
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def test_serving_prices_pin_public_rates_plus_markup():
|
|
172
|
+
from flash.serve.pricing import SERVING_MARKUP, SERVING_PRICES
|
|
173
|
+
|
|
174
|
+
typical = {
|
|
175
|
+
"openbmb/MiniCPM5-1B": (0.01, 0.05, 0.002),
|
|
176
|
+
"Qwen/Qwen3.5-0.8B": (0.01, 0.05, 0.002),
|
|
177
|
+
"Qwen/Qwen3.5-2B": (0.02, 0.10, 0.004),
|
|
178
|
+
"Qwen/Qwen3.5-4B": (0.03, 0.15, 0.006),
|
|
179
|
+
"Qwen/Qwen3.5-9B": (0.10, 0.15, 0.020),
|
|
180
|
+
"Qwen/Qwen3.6-35B-A3B": (0.15, 1.00, 0.050),
|
|
181
|
+
}
|
|
182
|
+
for model_id, (input_rate, output_rate, cached_rate) in typical.items():
|
|
183
|
+
price = SERVING_PRICES[model_id]
|
|
184
|
+
assert price.typical_input_usd_per_mtok == pytest.approx(input_rate)
|
|
185
|
+
assert price.typical_output_usd_per_mtok == pytest.approx(output_rate)
|
|
186
|
+
assert price.typical_cached_input_usd_per_mtok == pytest.approx(cached_rate)
|
|
187
|
+
assert price.billed_input_usd_per_mtok == pytest.approx(input_rate * SERVING_MARKUP)
|
|
188
|
+
assert price.billed_output_usd_per_mtok == pytest.approx(output_rate * SERVING_MARKUP)
|
|
189
|
+
assert price.billed_cached_input_usd_per_mtok == pytest.approx(
|
|
190
|
+
cached_rate * SERVING_MARKUP
|
|
158
191
|
)
|
|
159
192
|
|
|
160
193
|
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"""Serving token prices for Flash deployments (per 1M tokens)."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from dataclasses import dataclass
|
|
6
|
-
|
|
7
|
-
from flash.catalog import MODELS
|
|
8
|
-
|
|
9
|
-
SERVING_MARKUP = 1.20
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@dataclass(frozen=True)
|
|
13
|
-
class ServingPrice:
|
|
14
|
-
model_id: str
|
|
15
|
-
base_input_usd_per_mtok: float
|
|
16
|
-
base_output_usd_per_mtok: float
|
|
17
|
-
|
|
18
|
-
@property
|
|
19
|
-
def billed_input_usd_per_mtok(self) -> float:
|
|
20
|
-
return self.base_input_usd_per_mtok * SERVING_MARKUP
|
|
21
|
-
|
|
22
|
-
@property
|
|
23
|
-
def billed_output_usd_per_mtok(self) -> float:
|
|
24
|
-
return self.base_output_usd_per_mtok * SERVING_MARKUP
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
SERVING_PRICES: dict[str, ServingPrice] = {
|
|
28
|
-
"openbmb/MiniCPM5-1B": ServingPrice("openbmb/MiniCPM5-1B", 0.05, 0.10),
|
|
29
|
-
"Qwen/Qwen3.5-0.8B": ServingPrice("Qwen/Qwen3.5-0.8B", 0.05, 0.10),
|
|
30
|
-
"Qwen/Qwen3.5-2B": ServingPrice("Qwen/Qwen3.5-2B", 0.10, 0.20),
|
|
31
|
-
"Qwen/Qwen3.5-4B": ServingPrice("Qwen/Qwen3.5-4B", 0.20, 0.40),
|
|
32
|
-
"Qwen/Qwen3.5-9B": ServingPrice("Qwen/Qwen3.5-9B", 0.50, 1.00),
|
|
33
|
-
# MoE but serves on B200 → priced ~4x the 9B.
|
|
34
|
-
"Qwen/Qwen3.6-35B-A3B": ServingPrice("Qwen/Qwen3.6-35B-A3B", 2.00, 4.00),
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def serving_price(model_id: str) -> ServingPrice:
|
|
39
|
-
try:
|
|
40
|
-
return SERVING_PRICES[model_id]
|
|
41
|
-
except KeyError as exc:
|
|
42
|
-
raise ValueError(f"unknown serving model {model_id!r}") from exc
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def serving_price_rows() -> list[dict[str, float | str]]:
|
|
46
|
-
rows: list[dict[str, float | str]] = []
|
|
47
|
-
for model_id in sorted(MODELS):
|
|
48
|
-
price = serving_price(model_id)
|
|
49
|
-
rows.append(
|
|
50
|
-
{
|
|
51
|
-
"model_id": model_id,
|
|
52
|
-
"base_input_usd_per_mtok": price.base_input_usd_per_mtok,
|
|
53
|
-
"base_output_usd_per_mtok": price.base_output_usd_per_mtok,
|
|
54
|
-
"billed_input_usd_per_mtok": price.billed_input_usd_per_mtok,
|
|
55
|
-
"billed_output_usd_per_mtok": price.billed_output_usd_per_mtok,
|
|
56
|
-
}
|
|
57
|
-
)
|
|
58
|
-
return rows
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/bake-kernel-cache.yml
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/main-source-guard.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/.github/workflows/version-parity.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
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docker/Dockerfile.kernelcache.relayer
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-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-theme/before-after-dark.png
RENAMED
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/docs/cli-theme/before-after-light.png
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
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/kernel_warmup.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/perf/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/perf/diagnostics.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/perf/lifecycle.py
RENAMED
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/engine/worker/perf/loraplus.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-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/_instance_bootstrap.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/jobs/__init__.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/jobs/builders.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/preflight.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/lambdalabs/pricing.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
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/train/__init__.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/train/deps.py
RENAMED
|
File without changes
|
{freesolo_flash_dev-0.2.32 → freesolo_flash_dev-0.2.33}/flash/providers/runpod/train/endpoints.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
|