From 35c3daaecfd2be76ad74a282164d4323c35ff599 Mon Sep 17 00:00:00 2001 From: Richard Feldman Date: Thu, 11 Dec 2025 16:17:58 -0500 Subject: [PATCH] Add GPT-5.2 support (cherry-pick to preview) (#44662) Cherry-pick of 541e08683565f9e4e950ef3895bd28048fd4f317 to preview ---- --- crates/language_models/src/provider/open_ai.rs | 8 ++++++-- crates/open_ai/src/open_ai.rs | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/crates/language_models/src/provider/open_ai.rs b/crates/language_models/src/provider/open_ai.rs index 32ee95ce9bd423bf7f66efc1bc7440455380ab5c..403b025f518681f335f28e35d11450bef046fca2 100644 --- a/crates/language_models/src/provider/open_ai.rs +++ b/crates/language_models/src/provider/open_ai.rs @@ -278,6 +278,7 @@ impl LanguageModel for OpenAiLanguageModel { | Model::FiveMini | Model::FiveNano | Model::FivePointOne + | Model::FivePointTwo | Model::O1 | Model::O3 | Model::O4Mini => true, @@ -675,8 +676,11 @@ pub fn count_open_ai_tokens( | Model::O4Mini | Model::Five | Model::FiveMini - | Model::FiveNano => tiktoken_rs::num_tokens_from_messages(model.id(), &messages), // GPT-5.1 doesn't have tiktoken support yet; fall back on gpt-4o tokenizer - Model::FivePointOne => tiktoken_rs::num_tokens_from_messages("gpt-5", &messages), + | Model::FiveNano => tiktoken_rs::num_tokens_from_messages(model.id(), &messages), + // GPT-5.1 and 5.2 don't have dedicated tiktoken support; use gpt-5 tokenizer + Model::FivePointOne | Model::FivePointTwo => { + tiktoken_rs::num_tokens_from_messages("gpt-5", &messages) + } } .map(|tokens| tokens as u64) }) diff --git a/crates/open_ai/src/open_ai.rs b/crates/open_ai/src/open_ai.rs index 8ed70c9dd514cb59f5c7a160169031cbc28428e6..d8b472254383b673e9a9e60b728d2ae585a69b90 100644 --- a/crates/open_ai/src/open_ai.rs +++ b/crates/open_ai/src/open_ai.rs @@ -87,6 +87,8 @@ pub enum Model { FiveNano, #[serde(rename = "gpt-5.1")] FivePointOne, + #[serde(rename = "gpt-5.2")] + FivePointTwo, #[serde(rename = "custom")] Custom { name: String, @@ -123,6 +125,7 @@ impl Model { "gpt-5-mini" => Ok(Self::FiveMini), "gpt-5-nano" => Ok(Self::FiveNano), "gpt-5.1" => Ok(Self::FivePointOne), + "gpt-5.2" => Ok(Self::FivePointTwo), invalid_id => anyhow::bail!("invalid model id '{invalid_id}'"), } } @@ -145,6 +148,7 @@ impl Model { Self::FiveMini => "gpt-5-mini", Self::FiveNano => "gpt-5-nano", Self::FivePointOne => "gpt-5.1", + Self::FivePointTwo => "gpt-5.2", Self::Custom { name, .. } => name, } } @@ -167,6 +171,7 @@ impl Model { Self::FiveMini => "gpt-5-mini", Self::FiveNano => "gpt-5-nano", Self::FivePointOne => "gpt-5.1", + Self::FivePointTwo => "gpt-5.2", Self::Custom { name, display_name, .. } => display_name.as_ref().unwrap_or(name), @@ -191,6 +196,7 @@ impl Model { Self::FiveMini => 272_000, Self::FiveNano => 272_000, Self::FivePointOne => 400_000, + Self::FivePointTwo => 400_000, Self::Custom { max_tokens, .. } => *max_tokens, } } @@ -216,6 +222,7 @@ impl Model { Self::FiveMini => Some(128_000), Self::FiveNano => Some(128_000), Self::FivePointOne => Some(128_000), + Self::FivePointTwo => Some(128_000), } } @@ -244,6 +251,7 @@ impl Model { | Self::Five | Self::FiveMini | Self::FivePointOne + | Self::FivePointTwo | Self::FiveNano => true, Self::O1 | Self::O3 | Self::O3Mini | Self::O4Mini | Model::Custom { .. } => false, }