Add support for OpenAI GPT-4.1 models (#28708)

Umesh Yadav , Danilo Leal , and Bennet Bo Fenner created

Release Notes:

- Add support for OpenAI GPT-4.1 via Copilot Chat and OpenAI API

---------

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>

Change summary

crates/copilot/src/copilot_chat.rs                  |  7 +++++
crates/language_model/src/model/cloud_model.rs      |  3 ++
crates/language_models/src/provider/copilot_chat.rs |  1 
crates/open_ai/src/open_ai.rs                       | 21 +++++++++++++++
4 files changed, 32 insertions(+)

Detailed changes

crates/copilot/src/copilot_chat.rs 🔗

@@ -33,6 +33,8 @@ pub enum Model {
     Gpt4o,
     #[serde(alias = "gpt-4", rename = "gpt-4")]
     Gpt4,
+    #[serde(alias = "gpt-4.1", rename = "gpt-4.1")]
+    Gpt4_1,
     #[serde(alias = "gpt-3.5-turbo", rename = "gpt-3.5-turbo")]
     Gpt3_5Turbo,
     #[serde(alias = "o1", rename = "o1")]
@@ -57,6 +59,7 @@ impl Model {
         match self {
             Self::Gpt4o
             | Self::Gpt4
+            | Self::Gpt4_1
             | Self::Gpt3_5Turbo
             | Self::Claude3_5Sonnet
             | Self::Claude3_7Sonnet
@@ -69,6 +72,7 @@ impl Model {
         match id {
             "gpt-4o" => Ok(Self::Gpt4o),
             "gpt-4" => Ok(Self::Gpt4),
+            "gpt-4.1" => Ok(Self::Gpt4_1),
             "gpt-3.5-turbo" => Ok(Self::Gpt3_5Turbo),
             "o1" => Ok(Self::O1),
             "o3-mini" => Ok(Self::O3Mini),
@@ -84,6 +88,7 @@ impl Model {
         match self {
             Self::Gpt3_5Turbo => "gpt-3.5-turbo",
             Self::Gpt4 => "gpt-4",
+            Self::Gpt4_1 => "gpt-4.1",
             Self::Gpt4o => "gpt-4o",
             Self::O3Mini => "o3-mini",
             Self::O1 => "o1",
@@ -98,6 +103,7 @@ impl Model {
         match self {
             Self::Gpt3_5Turbo => "GPT-3.5",
             Self::Gpt4 => "GPT-4",
+            Self::Gpt4_1 => "GPT-4.1",
             Self::Gpt4o => "GPT-4o",
             Self::O3Mini => "o3-mini",
             Self::O1 => "o1",
@@ -112,6 +118,7 @@ impl Model {
         match self {
             Self::Gpt4o => 64_000,
             Self::Gpt4 => 32_768,
+            Self::Gpt4_1 => 1_047_576,
             Self::Gpt3_5Turbo => 12_288,
             Self::O3Mini => 64_000,
             Self::O1 => 20_000,

crates/language_model/src/model/cloud_model.rs 🔗

@@ -83,6 +83,9 @@ impl CloudModel {
                 | open_ai::Model::FourTurbo
                 | open_ai::Model::FourOmni
                 | open_ai::Model::FourOmniMini
+                | open_ai::Model::FourPointOne
+                | open_ai::Model::FourPointOneMini
+                | open_ai::Model::FourPointOneNano
                 | open_ai::Model::O1Mini
                 | open_ai::Model::O1Preview
                 | open_ai::Model::O1

crates/language_models/src/provider/copilot_chat.rs 🔗

@@ -215,6 +215,7 @@ impl LanguageModel for CopilotChatLanguageModel {
                 let model = match self.model {
                     CopilotChatModel::Gpt4o => open_ai::Model::FourOmni,
                     CopilotChatModel::Gpt4 => open_ai::Model::Four,
+                    CopilotChatModel::Gpt4_1 => open_ai::Model::FourPointOne,
                     CopilotChatModel::Gpt3_5Turbo => open_ai::Model::ThreePointFiveTurbo,
                     CopilotChatModel::O1 | CopilotChatModel::O3Mini => open_ai::Model::Four,
                     CopilotChatModel::Claude3_5Sonnet

crates/open_ai/src/open_ai.rs 🔗

@@ -71,6 +71,12 @@ pub enum Model {
     FourOmni,
     #[serde(rename = "gpt-4o-mini", alias = "gpt-4o-mini")]
     FourOmniMini,
+    #[serde(rename = "gpt-4.1", alias = "gpt-4.1")]
+    FourPointOne,
+    #[serde(rename = "gpt-4.1-mini", alias = "gpt-4.1-mini")]
+    FourPointOneMini,
+    #[serde(rename = "gpt-4.1-nano", alias = "gpt-4.1-nano")]
+    FourPointOneNano,
     #[serde(rename = "o1", alias = "o1")]
     O1,
     #[serde(rename = "o1-preview", alias = "o1-preview")]
@@ -99,6 +105,9 @@ impl Model {
             "gpt-4-turbo-preview" => Ok(Self::FourTurbo),
             "gpt-4o" => Ok(Self::FourOmni),
             "gpt-4o-mini" => Ok(Self::FourOmniMini),
+            "gpt-4.1" => Ok(Self::FourPointOne),
+            "gpt-4.1-mini" => Ok(Self::FourPointOneMini),
+            "gpt-4.1-nano" => Ok(Self::FourPointOneNano),
             "o1" => Ok(Self::O1),
             "o1-preview" => Ok(Self::O1Preview),
             "o1-mini" => Ok(Self::O1Mini),
@@ -114,6 +123,9 @@ impl Model {
             Self::FourTurbo => "gpt-4-turbo",
             Self::FourOmni => "gpt-4o",
             Self::FourOmniMini => "gpt-4o-mini",
+            Self::FourPointOne => "gpt-4.1",
+            Self::FourPointOneMini => "gpt-4.1-mini",
+            Self::FourPointOneNano => "gpt-4.1-nano",
             Self::O1 => "o1",
             Self::O1Preview => "o1-preview",
             Self::O1Mini => "o1-mini",
@@ -129,6 +141,9 @@ impl Model {
             Self::FourTurbo => "gpt-4-turbo",
             Self::FourOmni => "gpt-4o",
             Self::FourOmniMini => "gpt-4o-mini",
+            Self::FourPointOne => "gpt-4.1",
+            Self::FourPointOneMini => "gpt-4.1-mini",
+            Self::FourPointOneNano => "gpt-4.1-nano",
             Self::O1 => "o1",
             Self::O1Preview => "o1-preview",
             Self::O1Mini => "o1-mini",
@@ -146,6 +161,9 @@ impl Model {
             Self::FourTurbo => 128_000,
             Self::FourOmni => 128_000,
             Self::FourOmniMini => 128_000,
+            Self::FourPointOne => 1_047_576,
+            Self::FourPointOneMini => 1_047_576,
+            Self::FourPointOneNano => 1_047_576,
             Self::O1 => 200_000,
             Self::O1Preview => 128_000,
             Self::O1Mini => 128_000,
@@ -173,6 +191,9 @@ impl Model {
             | Self::FourTurbo
             | Self::FourOmni
             | Self::FourOmniMini
+            | Self::FourPointOne
+            | Self::FourPointOneMini
+            | Self::FourPointOneNano
             | Self::O1
             | Self::O1Preview
             | Self::O1Mini => true,