From bf4d6b8aeb5b1cd9a9ea85c5bbdd62fc4b142898 Mon Sep 17 00:00:00 2001 From: kenobijon Date: Tue, 21 Jul 2026 17:15:53 -0500 Subject: [PATCH 1/2] Price C2PA-blind Veo per delivered tier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Veo manifests never expose the model variant, so any variant-based floor is an assumption, not a detection. Drop the guessing: Veo videos are priced by delivered tier alone (_VEO_TIER_PRICES, audio-independent) — 480p $0.07 and 720p $0.152 match Seedance fast (same resolution, same multiplier), and 1080p prices at $0.40/s, the veo-3.1 standard 1080p rate, reflecting that Veo's real price rises with resolution. Multipliers: 1.53x / 2.25x / 3.65x. MODEL_TIER_PRICES stays as the live Veo price reference and becomes the pricing source again if variants ever become distinguishable. --- gas/evaluation/rewards.py | 63 +++++++++++++++------------------------ 1 file changed, 24 insertions(+), 39 deletions(-) diff --git a/gas/evaluation/rewards.py b/gas/evaluation/rewards.py index 1be1d32f..5b21ff59 100644 --- a/gas/evaluation/rewards.py +++ b/gas/evaluation/rewards.py @@ -15,8 +15,8 @@ # # C2PA blindness note: several providers do NOT expose the model variant in their # C2PA manifests. All Veo (any provider) returns None. All Runway proprietary -# models share the same "RunwayML" softwareAgent. Veo videos are priced by a -# resolution/audio floor (see MODEL_TIER_PRICES); other unknowns get the baseline. +# models share the same "RunwayML" softwareAgent. Veo videos are priced +# per delivered tier (see _VEO_TIER_PRICES); other unknowns get the baseline. GENERATOR_MODEL_PRICES: Dict[str, float] = { # Google Veo family (C2PA: no variant exposed — all return None → tier floor) "google/veo-3.1-lite": 0.03, # cheapest Veo — used as baseline @@ -36,20 +36,15 @@ # "RunwayML": 0.05, # re-enable when gen4.5 signature is fixed } -# Per-(resolution tier, audio) USD/s prices for models whose C2PA manifests -# hide the variant (the Veo family). A Veo video is priced as the floor -# variant (_VEO_FLOOR_MODEL) at its observed (tier, audio) combination. -# Since challenges request a tier and rewards use min(observed, requested), -# overshooting a request never pays more. +# Per-(resolution tier, audio) USD/s prices parsed from OpenRouter +# pricing_skus (the un-suffixed duration_seconds SKU is the 1080p default; +# _720p/_4k suffixes are explicit tiers). Defaults mirror live values as of +# 2026-07; live SKUs are merged on top at module load. # -# Keys mirror OpenRouter pricing_skus: the un-suffixed duration_seconds SKU is -# the 1080p default; _720p/_4k suffixes are explicit tiers. Defaults below -# mirror live values as of 2026-07; live SKUs are merged on top at module load. -# -# 4K entries are inert for now: "4K" is not a video tier (never requested, and -# 4K output classifies as 1080p — see resolution_tiers.py), so no lookup ever -# reaches them. They are kept because the live SKU merge re-adds them anyway, -# and they become active again the moment 4K is added back to the video tiers. +# NOTE: not currently consulted for pricing — C2PA-blind Veo is priced via +# _VEO_TIER_PRICES instead. Retained as the live +# price reference, and it becomes the pricing source again if Veo variants +# ever become distinguishable (manifest signal or a 4K capability probe). MODEL_TIER_PRICES: Dict[str, Dict[Tuple[str, bool], float]] = { "google/veo-3.1-lite": { ("720p", False): 0.03, ("720p", True): 0.05, @@ -66,17 +61,17 @@ }, } -# Models priced via the tier floor when C2PA gives model_name=None. -_TIER_FLOOR_FAMILY_PREFIX = "google/veo" - -# The variant a C2PA-blind Veo generation is priced as. Google's manifests -# hide the variant, so some assumption is unavoidable: flooring at lite -# (cheapest) is maximally arbitrage-safe but credits every real fast/full -# generation at lite rates; flooring at fast (the middle variant) bounds a -# lite miner's overcredit at ~2x on price while Google-certified content — -# cryptographic proof of real, paid generation — earns a fair mid-family -# rate. Volume is demand-limited, so this doesn't reorder model choice. -_VEO_FLOOR_MODEL = "google/veo-3.1-fast" +# Per-tier USD/s prices for C2PA-blind Veo generations (model_name=None). +# Google's manifests never expose the variant, so pricing is by delivered +# tier only (audio-independent): 480p/720p match Seedance fast's rates +# (same resolution, same multiplier), and 1080p reflects that Veo's real +# price rises with resolution — $0.40/s is the veo-3.1 standard 1080p rate +# (also Seedance full's 720p rate), i.e. a 3.65x multiplier. +_VEO_TIER_PRICES: Dict[str, float] = { + "480p": 0.07, + "720p": 0.152, + "1080p": 0.40, +} # Per-tier USD/s prices for named models (C2PA exposes model_name). # OpenRouter publishes no Seedance pricing SKUs, so these come from provider @@ -258,10 +253,8 @@ def _get_video_generation_price(generation: Dict[str, Any]) -> float: Named models (Seedance et al. expose model_name via C2PA) use their per-tier quoted prices (NAMED_MODEL_TIER_PRICES), falling back to pixel-ratio scaling of their flat 720p reference. C2PA-blind - generations (model_name=None — the Veo family) are priced as the floor - variant (_VEO_FLOOR_MODEL) at the video's (tier, audio) combination; - tiers below the family's minimum output price at its cheapest - producible combo. + generations (model_name=None — the Veo family) are priced per + delivered tier via _VEO_TIER_PRICES, audio-independent. """ tier = effective_tier( generation.get("observed_resolution"), @@ -289,15 +282,7 @@ def _get_video_generation_price(generation: Dict[str, Any]) -> float: if tier is None: return _GENERATOR_BASELINE_PRICE - has_audio = bool(generation.get("has_audio")) - floor_table = MODEL_TIER_PRICES.get(_VEO_FLOOR_MODEL, {}) - price = floor_table.get((tier, has_audio)) - if price is None: - # Tier below the family's minimum output (Veo can't produce sub-720p, - # so a 480p-tier request still costs the miner a real 720p - # generation): match Seedance fast's 480p rate so the bottom tier - # pays the same regardless of family. - price = NAMED_MODEL_TIER_PRICES["dreamina-seedance-2-0-fast"]["480p"] + price = _VEO_TIER_PRICES.get(tier, max(_VEO_TIER_PRICES.values())) return max(price, _GENERATOR_BASELINE_PRICE) From e5e5d8eada6c19a615eba8433b2a57a7feabe1f6 Mon Sep 17 00:00:00 2001 From: dylan Date: Tue, 21 Jul 2026 22:29:44 +0000 Subject: [PATCH 2/2] bump version --- VERSION | 2 +- gas/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index fa423416..2391fa01 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.9.4 +4.9.5 diff --git a/gas/__init__.py b/gas/__init__.py index 1c13c99b..5ad2022b 100644 --- a/gas/__init__.py +++ b/gas/__init__.py @@ -1,4 +1,4 @@ -__version__ = "4.9.4" +__version__ = "4.9.5" version_split = __version__.split(".") __spec_version__ = (