Skip to main content

gproxy_protocol/protocol/openai/common/
model_ids.rs

1use 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
11// Manual Deserialize: this field rides in EVERY chat stream event; the derived
12// untagged fallback formatted (then discarded) an error listing all ~100 known
13// model ids per miss (see `protocol::extensible`).
14impl<'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}