From 41fa6253227c2db6e7cebf69d52a73392d6484ba Mon Sep 17 00:00:00 2001 From: kenneth-berri Date: Thu, 12 Nov 2026 14:58:24 -0800 Subject: [PATCH] feat(model-catalog): read output_cost_per_video in the rust registry check (#51433) * feat(model-catalog): read output_cost_per_video in the rust registry check Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * test(model-catalog): keep FLAT_KEY_PATTERN and the parser in agreement on output_cost_per_video Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- litellm/rust/crates/cost/src/price/meter.rs | 1 + litellm/rust/crates/model-catalog/src/schema.rs | 4 +++- litellm/rust/crates/model-catalog/src/wire/flat_key.rs | 5 +++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/litellm/rust/crates/cost/src/price/meter.rs b/litellm/rust/crates/cost/src/price/meter.rs index 705ac97894c..887711fe1ed 100644 --- a/litellm/rust/crates/cost/src/price/meter.rs +++ b/litellm/rust/crates/cost/src/price/meter.rs @@ -50,6 +50,7 @@ pub enum OutputUnit { Pixel, Second(Option), VideoSecond, + Video, BillableUnit, } diff --git a/litellm/rust/crates/model-catalog/src/schema.rs b/litellm/rust/crates/model-catalog/src/schema.rs index 2fc0aa70184..408863062b0 100644 --- a/litellm/rust/crates/model-catalog/src/schema.rs +++ b/litellm/rust/crates/model-catalog/src/schema.rs @@ -64,7 +64,7 @@ struct RegistryDocument { pub(crate) const FLAT_KEY_PATTERN: &str = concat!( r"^(", r"input_cost_per_((audio_|image_|video_)?token|character|image|pixel|query|request|second|text_message|audio_per_second|video_per_second(_above_\d+s_interval)?)", - r"|output_cost_per_((audio_|image_|video_|reasoning_)?token|character|image(_\d+(\.\d+)?K?)?|pixel|second(_\d+[pk])?|video_per_second|billable_unit)", + r"|output_cost_per_((audio_|image_|video_|reasoning_)?token|character|image(_\d+(\.\d+)?K?)?|pixel|second(_\d+[pk])?|video|video_per_second|billable_unit)", r"|cache_read_input_(audio_|image_|video_)?token_cost", r"|explicit_cache_read_input_token_cost", r"|cache_creation_input_(audio_|image_|video_)?token_cost(_above_1hr|_above_12hr)?", @@ -204,6 +204,8 @@ mod tests { #[case::explicit_cache_read("explicit_cache_read_input_token_cost")] #[case::billable_unit("output_cost_per_billable_unit")] #[case::billable_unit_is_output_only("input_cost_per_billable_unit")] + #[case::video("output_cost_per_video")] + #[case::video_is_output_only("input_cost_per_video")] #[case::wall_clock("cost_per_second")] #[case::unused_meter("cost_per_token")] #[case::other_currency("input_dbu_cost_per_token")] diff --git a/litellm/rust/crates/model-catalog/src/wire/flat_key.rs b/litellm/rust/crates/model-catalog/src/wire/flat_key.rs index 638a5349f05..b3a2c39acba 100644 --- a/litellm/rust/crates/model-catalog/src/wire/flat_key.rs +++ b/litellm/rust/crates/model-catalog/src/wire/flat_key.rs @@ -210,6 +210,7 @@ fn output_unit(unit: &str) -> Option { "pixel" => Some(OutputUnit::Pixel), "second" => Some(OutputUnit::Second(None)), "video_per_second" => Some(OutputUnit::VideoSecond), + "video" => Some(OutputUnit::Video), "billable_unit" => Some(OutputUnit::BillableUnit), _ => None, } @@ -314,6 +315,10 @@ mod tests { Some(TierSuffix::Batches) ) )] + #[case::video( + "output_cost_per_video", + key(Meter::Output(OutputUnit::Video), Band::Base, None) + )] #[case::wall_clock("cost_per_second", key(Meter::WallClockSecond, Band::Base, None))] #[case::browser_open( "browser_open_cost_per_request",