File size: 7,175 Bytes
3c2af29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
use super::model::Model;

macro_rules! def_pub_const {
    ($name:ident, $value:expr) => {
        pub const $name: &'static str = $value;
    };
}
def_pub_const!(ERR_UNSUPPORTED_GIF, "不支持动态 GIF");
def_pub_const!(
    ERR_UNSUPPORTED_IMAGE_FORMAT,
    "不支持的图片格式,仅支持 PNG、JPEG、WEBP 和非动态 GIF"
);
def_pub_const!(ERR_NODATA, "No data");

const MODEL_OBJECT: &str = "model";
const CREATED: &i64 = &1706659200;

def_pub_const!(ANTHROPIC, "anthropic");
def_pub_const!(CURSOR, "cursor");
def_pub_const!(GOOGLE, "google");
def_pub_const!(OPENAI, "openai");
def_pub_const!(DEEPSEEK, "deepseek");

def_pub_const!(CLAUDE_3_5_SONNET, "claude-3.5-sonnet");
def_pub_const!(GPT_4, "gpt-4");
def_pub_const!(GPT_4O, "gpt-4o");
def_pub_const!(CLAUDE_3_OPUS, "claude-3-opus");
def_pub_const!(CURSOR_FAST, "cursor-fast");
def_pub_const!(CURSOR_SMALL, "cursor-small");
def_pub_const!(GPT_3_5_TURBO, "gpt-3.5-turbo");
def_pub_const!(GPT_4_TURBO_2024_04_09, "gpt-4-turbo-2024-04-09");
def_pub_const!(GPT_4O_128K, "gpt-4o-128k");
def_pub_const!(GEMINI_1_5_FLASH_500K, "gemini-1.5-flash-500k");
def_pub_const!(CLAUDE_3_HAIKU_200K, "claude-3-haiku-200k");
def_pub_const!(CLAUDE_3_5_SONNET_200K, "claude-3-5-sonnet-200k");
def_pub_const!(CLAUDE_3_5_SONNET_20241022, "claude-3-5-sonnet-20241022");
def_pub_const!(GPT_4O_MINI, "gpt-4o-mini");
def_pub_const!(O1_MINI, "o1-mini");
def_pub_const!(O1_PREVIEW, "o1-preview");
def_pub_const!(O1, "o1");
def_pub_const!(CLAUDE_3_5_HAIKU, "claude-3.5-haiku");
def_pub_const!(GEMINI_EXP_1206, "gemini-exp-1206");
def_pub_const!(
    GEMINI_2_0_FLASH_THINKING_EXP,
    "gemini-2.0-flash-thinking-exp"
);
def_pub_const!(GEMINI_2_0_FLASH_EXP, "gemini-2.0-flash-exp");
def_pub_const!(DEEPSEEK_V3, "deepseek-v3");
def_pub_const!(DEEPSEEK_R1, "deepseek-r1");

// #[derive(Clone, PartialEq, rkyv::Archive, rkyv::Deserialize, rkyv::Serialize)]
// pub enum ModelType {
//     Claude35Sonnet,
//     Gpt4,
//     Gpt4o,
//     Claude3Opus,
//     CursorFast,
//     CursorSmall,
//     Gpt35Turbo,
//     Gpt4Turbo202404,
//     Gpt4o128k,
//     Gemini15Flash500k,
//     Claude3Haiku200k,
//     Claude35Sonnet200k,
//     Claude35Sonnet20241022,
//     Gpt4oMini,
//     O1Mini,
//     O1Preview,
//     O1,
//     Claude35Haiku,
//     GeminiExp1206,
//     Gemini20FlashThinkingExp,
//     Gemini20FlashExp,
//     DeepseekV3,
//     DeepseekR1,
// }

macro_rules! create_model {
    ($($id:expr, $owner:expr),* $(,)?) => {
        pub const AVAILABLE_MODELS: [Model; count!($( ($id, $owner) )*)] = [
            $(
                Model {
                    id: $id,
                    created: CREATED,
                    object: MODEL_OBJECT,
                    owned_by: $owner,
                },
            )*
        ];
    };
}

macro_rules! count {
    () => (0);
    (($id:expr, $owner:expr) $( ($id2:expr, $owner2:expr) )*) => (1 + count!($( ($id2, $owner2) )*));
}

// impl ModelType {
//     pub fn as_str_name(&self) -> &'static str {
//         match self {
//             ModelType::Claude35Sonnet => CLAUDE_3_5_SONNET,
//             ModelType::Gpt4 => GPT_4,
//             ModelType::Gpt4o => GPT_4O,
//             ModelType::Claude3Opus => CLAUDE_3_OPUS,
//             ModelType::CursorFast => CURSOR_FAST,
//             ModelType::CursorSmall => CURSOR_SMALL,
//             ModelType::Gpt35Turbo => GPT_3_5_TURBO,
//             ModelType::Gpt4Turbo202404 => GPT_4_TURBO_2024_04_09,
//             ModelType::Gpt4o128k => GPT_4O_128K,
//             ModelType::Gemini15Flash500k => GEMINI_1_5_FLASH_500K,
//             ModelType::Claude3Haiku200k => CLAUDE_3_HAIKU_200K,
//             ModelType::Claude35Sonnet200k => CLAUDE_3_5_SONNET_200K,
//             ModelType::Claude35Sonnet20241022 => CLAUDE_3_5_SONNET_20241022,
//             ModelType::Gpt4oMini => GPT_4O_MINI,
//             ModelType::O1Mini => O1_MINI,
//             ModelType::O1Preview => O1_PREVIEW,
//             ModelType::O1 => O1,
//             ModelType::Claude35Haiku => CLAUDE_3_5_HAIKU,
//             ModelType::GeminiExp1206 => GEMINI_EXP_1206,
//             ModelType::Gemini20FlashThinkingExp => GEMINI_2_0_FLASH_THINKING_EXP,
//             ModelType::Gemini20FlashExp => GEMINI_2_0_FLASH_EXP,
//             ModelType::DeepseekV3 => DEEPSEEK_V3,
//             ModelType::DeepseekR1 => DEEPSEEK_R1,
//         }
//     }

//     pub fn from_str_name(id :&str) -> Option<ModelType> {
//         match id {
//             CLAUDE_3_5_SONNET => Some(ModelType::Claude35Sonnet),
//             GPT_4 => Some(ModelType::Gpt4),
//             GPT_4O => Some(ModelType::Gpt4o),
//             CLAUDE_3_OPUS => Some(ModelType::Claude3Opus),
//             CURSOR_FAST => Some(ModelType::CursorFast),
//             CURSOR_SMALL => Some(ModelType::CursorSmall),
//             GPT_3_5_TURBO => Some(ModelType::Gpt35Turbo),
//             GPT_4_TURBO_2024_04_09 => Some(ModelType::Gpt4Turbo202404),
//             GPT_4O_128K => Some(ModelType::Gpt4o128k),
//             GEMINI_1_5_FLASH_500K => Some(ModelType::Gemini15Flash500k),
//             CLAUDE_3_HAIKU_200K => Some(ModelType::Claude3Haiku200k),
//             CLAUDE_3_5_SONNET_200K => Some(ModelType::Claude35Sonnet200k),
//             CLAUDE_3_5_SONNET_20241022 => Some(ModelType::Claude35Sonnet20241022),
//             GPT_4O_MINI => Some(ModelType::Gpt4oMini),
//             O1_MINI => Some(ModelType::O1Mini),
//             O1_PREVIEW => Some(ModelType::O1Preview),
//             O1 => Some(ModelType::O1),
//             CLAUDE_3_5_HAIKU => Some(ModelType::Claude35Haiku),
//             GEMINI_EXP_1206 => Some(ModelType::GeminiExp1206),
//             GEMINI_2_0_FLASH_THINKING_EXP => Some(ModelType::Gemini20FlashThinkingExp),
//             GEMINI_2_0_FLASH_EXP => Some(ModelType::Gemini20FlashExp),
//             DEEPSEEK_V3 => Some(ModelType::DeepseekV3),
//             DEEPSEEK_R1 => Some(ModelType::DeepseekR1),
//             _ => None,
//         }
//     }
// }

create_model!(
    CLAUDE_3_5_SONNET, ANTHROPIC,
    GPT_4, OPENAI,
    GPT_4O, OPENAI,
    CLAUDE_3_OPUS, ANTHROPIC,
    CURSOR_FAST, CURSOR,
    CURSOR_SMALL, CURSOR,
    GPT_3_5_TURBO, OPENAI,
    GPT_4_TURBO_2024_04_09, OPENAI,
    GPT_4O_128K, OPENAI,
    GEMINI_1_5_FLASH_500K, GOOGLE,
    CLAUDE_3_HAIKU_200K, ANTHROPIC,
    CLAUDE_3_5_SONNET_200K, ANTHROPIC,
    CLAUDE_3_5_SONNET_20241022, ANTHROPIC,
    GPT_4O_MINI, OPENAI,
    O1_MINI, OPENAI,
    O1_PREVIEW, OPENAI,
    O1, OPENAI,
    CLAUDE_3_5_HAIKU, ANTHROPIC,
    GEMINI_EXP_1206, GOOGLE,
    GEMINI_2_0_FLASH_THINKING_EXP, GOOGLE,
    GEMINI_2_0_FLASH_EXP, GOOGLE,
    DEEPSEEK_V3, DEEPSEEK,
    DEEPSEEK_R1, DEEPSEEK,
);

pub const USAGE_CHECK_MODELS: [&str; 11] = [
    CLAUDE_3_5_SONNET_20241022,
    CLAUDE_3_5_SONNET,
    GEMINI_EXP_1206,
    GPT_4,
    GPT_4_TURBO_2024_04_09,
    GPT_4O,
    CLAUDE_3_5_HAIKU,
    GPT_4O_128K,
    GEMINI_1_5_FLASH_500K,
    CLAUDE_3_HAIKU_200K,
    CLAUDE_3_5_SONNET_200K,
];

pub const LONG_CONTEXT_MODELS: [&str; 4] = [
    GPT_4O_128K,
    GEMINI_1_5_FLASH_500K,
    CLAUDE_3_HAIKU_200K,
    CLAUDE_3_5_SONNET_200K,
];

// include!("constant/models.rs");