gproxy_protocol/protocol/openai/common/
model_ids.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
4#[serde(untagged)]
5#[non_exhaustive]
6pub enum OpenAiModelId {
7 Known(OpenAiModelIdKnown),
8 Unknown(String),
9}
10
11impl<'de> serde::Deserialize<'de> for OpenAiModelId {
15 fn deserialize<D: serde::Deserializer<'de>>(d: D) -> Result<Self, D::Error> {
16 crate::protocol::extensible::deserialize_extensible(d, Self::Known, Self::Unknown)
17 }
18}
19
20impl From<String> for OpenAiModelId {
21 fn from(value: String) -> Self {
22 Self::Unknown(value)
23 }
24}
25
26#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
27#[non_exhaustive]
28pub enum OpenAiModelIdKnown {
29 #[serde(rename = "gpt-6-astra")]
30 Gpt6Astra,
31 #[serde(rename = "gpt-5.6")]
32 Gpt56,
33 #[serde(rename = "gpt-5.6-sol")]
34 Gpt56Sol,
35 #[serde(rename = "gpt-5.6-terra")]
36 Gpt56Terra,
37 #[serde(rename = "gpt-5.6-luna")]
38 Gpt56Luna,
39 #[serde(rename = "gpt-5.5")]
40 Gpt55,
41 #[serde(rename = "gpt-5.4")]
42 Gpt54,
43 #[serde(rename = "gpt-5.4-mini")]
44 Gpt54Mini,
45 #[serde(rename = "gpt-5.4-nano")]
46 Gpt54Nano,
47 #[serde(rename = "gpt-5.4-mini-2026-03-17")]
48 Gpt54Mini20260317,
49 #[serde(rename = "gpt-5.4-nano-2026-03-17")]
50 Gpt54Nano20260317,
51 #[serde(rename = "gpt-5.3-codex-spark")]
52 Gpt53CodexSpark,
53 #[serde(rename = "gpt-5.3-chat-latest")]
54 Gpt53ChatLatest,
55 #[serde(rename = "gpt-5.2")]
56 Gpt52,
57 #[serde(rename = "gpt-5.2-2025-12-11")]
58 Gpt5220251211,
59 #[serde(rename = "gpt-5.2-chat-latest")]
60 Gpt52ChatLatest,
61 #[serde(rename = "gpt-5.2-pro")]
62 Gpt52Pro,
63 #[serde(rename = "gpt-5.2-pro-2025-12-11")]
64 Gpt52Pro20251211,
65 #[serde(rename = "gpt-5.1")]
66 Gpt51,
67 #[serde(rename = "gpt-5.1-2025-11-13")]
68 Gpt5120251113,
69 #[serde(rename = "gpt-5.1-codex")]
70 Gpt51Codex,
71 #[serde(rename = "gpt-5.1-mini")]
72 Gpt51Mini,
73 #[serde(rename = "gpt-5.1-chat-latest")]
74 Gpt51ChatLatest,
75 #[serde(rename = "gpt-5")]
76 Gpt5,
77 #[serde(rename = "gpt-5-mini")]
78 Gpt5Mini,
79 #[serde(rename = "gpt-5-nano")]
80 Gpt5Nano,
81 #[serde(rename = "gpt-5-2025-08-07")]
82 Gpt520250807,
83 #[serde(rename = "gpt-5-mini-2025-08-07")]
84 Gpt5Mini20250807,
85 #[serde(rename = "gpt-5-nano-2025-08-07")]
86 Gpt5Nano20250807,
87 #[serde(rename = "gpt-5-chat-latest")]
88 Gpt5ChatLatest,
89 #[serde(rename = "gpt-4.1")]
90 Gpt41,
91 #[serde(rename = "gpt-4.1-mini")]
92 Gpt41Mini,
93 #[serde(rename = "gpt-4.1-nano")]
94 Gpt41Nano,
95 #[serde(rename = "gpt-4.1-2025-04-14")]
96 Gpt4120250414,
97 #[serde(rename = "gpt-4.1-mini-2025-04-14")]
98 Gpt41Mini20250414,
99 #[serde(rename = "gpt-4.1-nano-2025-04-14")]
100 Gpt41Nano20250414,
101 #[serde(rename = "o4-mini")]
102 O4Mini,
103 #[serde(rename = "o4-mini-2025-04-16")]
104 O4Mini20250416,
105 #[serde(rename = "o3")]
106 O3,
107 #[serde(rename = "o3-2025-04-16")]
108 O320250416,
109 #[serde(rename = "o3-mini")]
110 O3Mini,
111 #[serde(rename = "o3-mini-2025-01-31")]
112 O3Mini20250131,
113 #[serde(rename = "o1")]
114 O1,
115 #[serde(rename = "o1-2024-12-17")]
116 O120241217,
117 #[serde(rename = "o1-preview")]
118 O1Preview,
119 #[serde(rename = "o1-preview-2024-09-12")]
120 O1Preview20240912,
121 #[serde(rename = "o1-mini")]
122 O1Mini,
123 #[serde(rename = "o1-mini-2024-09-12")]
124 O1Mini20240912,
125 #[serde(rename = "gpt-4o")]
126 Gpt4o,
127 #[serde(rename = "gpt-4o-2024-11-20")]
128 Gpt4o20241120,
129 #[serde(rename = "gpt-4o-2024-08-06")]
130 Gpt4o20240806,
131 #[serde(rename = "gpt-4o-2024-05-13")]
132 Gpt4o20240513,
133 #[serde(rename = "gpt-4o-audio-preview")]
134 Gpt4oAudioPreview,
135 #[serde(rename = "gpt-4o-audio-preview-2024-10-01")]
136 Gpt4oAudioPreview20241001,
137 #[serde(rename = "gpt-4o-audio-preview-2024-12-17")]
138 Gpt4oAudioPreview20241217,
139 #[serde(rename = "gpt-4o-audio-preview-2025-06-03")]
140 Gpt4oAudioPreview20250603,
141 #[serde(rename = "gpt-4o-mini-audio-preview")]
142 Gpt4oMiniAudioPreview,
143 #[serde(rename = "gpt-4o-mini-audio-preview-2024-12-17")]
144 Gpt4oMiniAudioPreview20241217,
145 #[serde(rename = "gpt-4o-search-preview")]
146 Gpt4oSearchPreview,
147 #[serde(rename = "gpt-4o-mini-search-preview")]
148 Gpt4oMiniSearchPreview,
149 #[serde(rename = "gpt-4o-search-preview-2025-03-11")]
150 Gpt4oSearchPreview20250311,
151 #[serde(rename = "gpt-4o-mini-search-preview-2025-03-11")]
152 Gpt4oMiniSearchPreview20250311,
153 #[serde(rename = "chatgpt-4o-latest")]
154 ChatGpt4oLatest,
155 #[serde(rename = "codex-mini-latest")]
156 CodexMiniLatest,
157 #[serde(rename = "gpt-4o-mini")]
158 Gpt4oMini,
159 #[serde(rename = "gpt-4o-mini-2024-07-18")]
160 Gpt4oMini20240718,
161 #[serde(rename = "gpt-4-turbo")]
162 Gpt4Turbo,
163 #[serde(rename = "gpt-4-turbo-2024-04-09")]
164 Gpt4Turbo20240409,
165 #[serde(rename = "gpt-4-0125-preview")]
166 Gpt40125Preview,
167 #[serde(rename = "gpt-4-turbo-preview")]
168 Gpt4TurboPreview,
169 #[serde(rename = "gpt-4-1106-preview")]
170 Gpt41106Preview,
171 #[serde(rename = "gpt-4-vision-preview")]
172 Gpt4VisionPreview,
173 #[serde(rename = "gpt-4")]
174 Gpt4,
175 #[serde(rename = "gpt-4-0314")]
176 Gpt40314,
177 #[serde(rename = "gpt-4-0613")]
178 Gpt40613,
179 #[serde(rename = "gpt-4-32k")]
180 Gpt432k,
181 #[serde(rename = "gpt-4-32k-0314")]
182 Gpt432k0314,
183 #[serde(rename = "gpt-4-32k-0613")]
184 Gpt432k0613,
185 #[serde(rename = "gpt-3.5-turbo")]
186 Gpt35Turbo,
187 #[serde(rename = "gpt-3.5-turbo-16k")]
188 Gpt35Turbo16k,
189 #[serde(rename = "gpt-3.5-turbo-0301")]
190 Gpt35Turbo0301,
191 #[serde(rename = "gpt-3.5-turbo-0613")]
192 Gpt35Turbo0613,
193 #[serde(rename = "gpt-3.5-turbo-1106")]
194 Gpt35Turbo1106,
195 #[serde(rename = "gpt-3.5-turbo-0125")]
196 Gpt35Turbo0125,
197 #[serde(rename = "gpt-3.5-turbo-16k-0613")]
198 Gpt35Turbo16k0613,
199 #[serde(rename = "o1-pro")]
200 O1Pro,
201 #[serde(rename = "o1-pro-2025-03-19")]
202 O1Pro20250319,
203 #[serde(rename = "o3-pro")]
204 O3Pro,
205 #[serde(rename = "o3-pro-2025-06-10")]
206 O3Pro20250610,
207 #[serde(rename = "o3-deep-research")]
208 O3DeepResearch,
209 #[serde(rename = "o3-deep-research-2025-06-26")]
210 O3DeepResearch20250626,
211 #[serde(rename = "o4-mini-deep-research")]
212 O4MiniDeepResearch,
213 #[serde(rename = "o4-mini-deep-research-2025-06-26")]
214 O4MiniDeepResearch20250626,
215 #[serde(rename = "computer-use-preview")]
216 ComputerUsePreview,
217 #[serde(rename = "computer-use-preview-2025-03-11")]
218 ComputerUsePreview20250311,
219 #[serde(rename = "gpt-5-codex")]
220 Gpt5Codex,
221 #[serde(rename = "gpt-5-pro")]
222 Gpt5Pro,
223 #[serde(rename = "gpt-5-pro-2025-10-06")]
224 Gpt5Pro20251006,
225 #[serde(rename = "gpt-5.1-codex-max")]
226 Gpt51CodexMax,
227 #[serde(rename = "text-embedding-ada-002")]
228 TextEmbeddingAda002,
229 #[serde(rename = "text-embedding-3-small")]
230 TextEmbedding3Small,
231 #[serde(rename = "text-embedding-3-large")]
232 TextEmbedding3Large,
233 #[serde(rename = "whisper-1")]
234 Whisper1,
235 #[serde(rename = "gpt-transcribe")]
236 GptTranscribe,
237 #[serde(rename = "gpt-4o-transcribe")]
238 Gpt4oTranscribe,
239 #[serde(rename = "gpt-4o-mini-transcribe")]
240 Gpt4oMiniTranscribe,
241 #[serde(rename = "gpt-4o-mini-transcribe-2025-12-15")]
242 Gpt4oMiniTranscribe20251215,
243 #[serde(rename = "gpt-4o-transcribe-diarize")]
244 Gpt4oTranscribeDiarize,
245 #[serde(rename = "tts-1")]
246 Tts1,
247 #[serde(rename = "tts-1-hd")]
248 Tts1Hd,
249 #[serde(rename = "gpt-4o-mini-tts")]
250 Gpt4oMiniTts,
251 #[serde(rename = "gpt-4o-mini-tts-2025-12-15")]
252 Gpt4oMiniTts20251215,
253 #[serde(rename = "gpt-image-1.5")]
254 GptImage15,
255 #[serde(rename = "dall-e-2")]
256 DallE2,
257 #[serde(rename = "dall-e-3")]
258 DallE3,
259 #[serde(rename = "gpt-image-1")]
260 GptImage1,
261 #[serde(rename = "gpt-image-1-mini")]
262 GptImage1Mini,
263 #[serde(rename = "chatgpt-image-latest")]
264 ChatGptImageLatest,
265 #[serde(rename = "omni-moderation-latest")]
266 OmniModerationLatest,
267}