openai_dive/v1/
models.rs

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);