Add GPT-5 support through OpenAI API

This commit is contained in:
Richard Feldman 2025-08-07 14:18:15 -04:00 committed by Joseph T. Lyons
parent 1934e5c23e
commit bf6f715961
2 changed files with 29 additions and 2 deletions

View file

@ -673,7 +673,10 @@ pub fn count_open_ai_tokens(
| Model::O1 | Model::O1
| Model::O3 | Model::O3
| Model::O3Mini | Model::O3Mini
| Model::O4Mini => tiktoken_rs::num_tokens_from_messages(model.id(), &messages), | Model::O4Mini
| Model::Five
| Model::FiveMini
| Model::FiveNano => tiktoken_rs::num_tokens_from_messages(model.id(), &messages),
} }
.map(|tokens| tokens as u64) .map(|tokens| tokens as u64)
}) })

View file

@ -74,6 +74,12 @@ pub enum Model {
O3, O3,
#[serde(rename = "o4-mini")] #[serde(rename = "o4-mini")]
O4Mini, O4Mini,
#[serde(rename = "gpt-5")]
Five,
#[serde(rename = "gpt-5-mini")]
FiveMini,
#[serde(rename = "gpt-5-nano")]
FiveNano,
#[serde(rename = "custom")] #[serde(rename = "custom")]
Custom { Custom {
@ -105,6 +111,9 @@ impl Model {
"o3-mini" => Ok(Self::O3Mini), "o3-mini" => Ok(Self::O3Mini),
"o3" => Ok(Self::O3), "o3" => Ok(Self::O3),
"o4-mini" => Ok(Self::O4Mini), "o4-mini" => Ok(Self::O4Mini),
"gpt-5" => Ok(Self::Five),
"gpt-5-mini" => Ok(Self::FiveMini),
"gpt-5-nano" => Ok(Self::FiveNano),
invalid_id => anyhow::bail!("invalid model id '{invalid_id}'"), invalid_id => anyhow::bail!("invalid model id '{invalid_id}'"),
} }
} }
@ -123,6 +132,9 @@ impl Model {
Self::O3Mini => "o3-mini", Self::O3Mini => "o3-mini",
Self::O3 => "o3", Self::O3 => "o3",
Self::O4Mini => "o4-mini", Self::O4Mini => "o4-mini",
Self::Five => "gpt-5",
Self::FiveMini => "gpt-5-mini",
Self::FiveNano => "gpt-5-nano",
Self::Custom { name, .. } => name, Self::Custom { name, .. } => name,
} }
} }
@ -141,6 +153,9 @@ impl Model {
Self::O3Mini => "o3-mini", Self::O3Mini => "o3-mini",
Self::O3 => "o3", Self::O3 => "o3",
Self::O4Mini => "o4-mini", Self::O4Mini => "o4-mini",
Self::Five => "gpt-5",
Self::FiveMini => "gpt-5-mini",
Self::FiveNano => "gpt-5-nano",
Self::Custom { Self::Custom {
name, display_name, .. name, display_name, ..
} => display_name.as_ref().unwrap_or(name), } => display_name.as_ref().unwrap_or(name),
@ -161,6 +176,9 @@ impl Model {
Self::O3Mini => 200_000, Self::O3Mini => 200_000,
Self::O3 => 200_000, Self::O3 => 200_000,
Self::O4Mini => 200_000, Self::O4Mini => 200_000,
Self::Five => 256_000,
Self::FiveMini => 256_000,
Self::FiveNano => 256_000,
Self::Custom { max_tokens, .. } => *max_tokens, Self::Custom { max_tokens, .. } => *max_tokens,
} }
} }
@ -182,6 +200,9 @@ impl Model {
Self::O3Mini => Some(100_000), Self::O3Mini => Some(100_000),
Self::O3 => Some(100_000), Self::O3 => Some(100_000),
Self::O4Mini => Some(100_000), Self::O4Mini => Some(100_000),
Self::Five => Some(65_536),
Self::FiveMini => Some(65_536),
Self::FiveNano => Some(65_536),
} }
} }
@ -197,7 +218,10 @@ impl Model {
| Self::FourOmniMini | Self::FourOmniMini
| Self::FourPointOne | Self::FourPointOne
| Self::FourPointOneMini | Self::FourPointOneMini
| Self::FourPointOneNano => true, | Self::FourPointOneNano
| Self::Five
| Self::FiveMini
| Self::FiveNano => true,
Self::O1 | Self::O3 | Self::O3Mini | Self::O4Mini | Model::Custom { .. } => false, Self::O1 | Self::O3 | Self::O3Mini | Self::O4Mini | Model::Custom { .. } => false,
} }
} }