mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-14 12:02:27 +08:00
When a channel pricing entry left image_output_price empty, GetModelPricingWithChannel and the pricing resolver zeroed the image output price and marked it explicit, so image output tokens were billed at $0. image_input_price followed the same "unset means zero" rule and fell back to the text input price instead of the catalog image input price. A channel that lists an image model such as gpt-image-2 in token mode without filling in prices therefore generated images without charging for image output tokens, while the available-channels view (#2475) displayed the catalog image price for the same entry. #2930 wanted an explicit 0 on the channel to stop falling back to the catalog; the change applied the same treatment to unset values as well. Treat the two image fields like every other token price field: - Set on the channel (including 0): override the catalog. An explicit image_output_price keeps ImageOutputPriceExplicit, so 0 stays free. - Left empty: keep the catalog price (LiteLLM or built-in fallback). If the catalog has none, computeTokenBreakdown still falls back to the text input/output price. The admin UI saves an empty field as null and only an entered 0 as 0, so the two cases stay distinguishable. The flat, interval and GetModelPricingWithChannel paths now share applyChannelImagePriceOverrides. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>