1use serde::{Deserialize, Serialize};
2
3#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
4pub enum FlagshipModel {
5 #[serde(rename = "gpt-4.1")]
6 Gpt41,
7 #[serde(rename = "gpt-4o")]
8 Gpt4O,
9 #[serde(rename = "gpt-4o-audio-preview")]
10 Gpt4OAudioPreview,
11}
12
13#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
14pub enum CostOptimizedModel {
15 #[serde(rename = "o4-mini")]
16 O4Mini,
17 #[serde(rename = "gpt-4.1-nano")]
18 Gpt41Nano,
19 #[serde(rename = "gpt-4o-mini")]
20 Gpt4OMini,
21}
22
23#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
24pub enum ReasoningModel {
25 #[serde(rename = "o4-mini")]
26 O4Mini,
27 #[serde(rename = "o3-mini")]
28 O3Mini,
29}
30
31#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
32pub enum ToolModel {
33 #[serde(rename = "gpt-4o-search-preview")]
34 Gpt4OSearchPreview,
35 #[serde(rename = "gpt-4o-mini-search-preview")]
36 Gpt4OMiniSearchPreview,
37 #[serde(rename = "computer-use-preview")]
38 ComputerUsePreview,
39}
40
41#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
42pub enum ModerationModel {
43 #[serde(rename = "omni-moderation-latest")]
44 OmniModerationLatest,
45}
46
47#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
48pub enum EmbeddingModel {
49 #[serde(rename = "text-embedding-3-small")]
50 TextEmbedding3Small,
51 #[serde(rename = "text-embedding-3-large")]
52 TextEmbedding3Large,
53}
54
55#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
56pub enum TranscriptionModel {
57 #[serde(rename = "gpt-4o-transcribe")]
58 Gpt4OTranscribe,
59 #[serde(rename = "whisper-1")]
60 Whisper1,
61}
62
63#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
64pub enum TTSModel {
65 #[serde(rename = "gpt-4o-mini-tts")]
66 Gpt4OMiniTts,
67 #[serde(rename = "tts-1")]
68 Tts1,
69 #[serde(rename = "tts-1-hd")]
70 Tts1HD,
71}
72
73#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
74pub enum ImageModel {
75 #[serde(rename = "gpt-image-1")]
76 GptImage1,
77 #[serde(rename = "dall-e-3")]
78 DallE3,
79 #[serde(rename = "dall-e-2")]
80 DallE2,
81}
82
83macro_rules! impl_display {
84 ($t:ty) => {
85 impl std::fmt::Display for $t {
86 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
87 let json_str = serde_json::to_string(self).unwrap();
88 let trimmed_str = json_str.trim_matches('"');
89 write!(f, "{}", trimmed_str)
90 }
91 }
92 };
93}
94
95impl_display!(FlagshipModel);
96impl_display!(CostOptimizedModel);
97impl_display!(ReasoningModel);
98impl_display!(ToolModel);
99impl_display!(ModerationModel);
100impl_display!(EmbeddingModel);
101impl_display!(TranscriptionModel);
102impl_display!(TTSModel);
103impl_display!(ImageModel);