File size: 1,874 Bytes
0ab3d49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
use serde::{Deserialize, Serialize};

use crate::{app::constant::COMMA, chat::constant::AVAILABLE_MODELS};

#[derive(Deserialize)]
pub struct BuildKeyRequest {
    pub auth_token: String,
    #[serde(default)]
    pub disable_vision: Option<bool>,
    #[serde(default)]
    pub enable_slow_pool: Option<bool>,
    #[serde(default)]
    pub usage_check_models: Option<UsageCheckModelConfig>,
    #[serde(default)]
    pub include_web_references: Option<bool>,
}
pub struct UsageCheckModelConfig {
    pub model_type: UsageCheckModelType,
    pub model_ids: Vec<&'static str>,
}

impl<'de> Deserialize<'de> for UsageCheckModelConfig {
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
    where
        D: serde::Deserializer<'de>,
    {
        #[derive(Deserialize)]
        struct Helper {
            #[serde(rename = "type")]
            model_type: UsageCheckModelType,
            #[serde(default)]
            model_ids: String,
        }

        let helper = Helper::deserialize(deserializer)?;

        let model_ids = if helper.model_ids.is_empty() {
            Vec::new()
        } else {
            helper
                .model_ids
                .split(COMMA)
                .filter_map(|model| {
                    let model = model.trim();
                    AVAILABLE_MODELS
                        .iter()
                        .find(|m| m.id == model)
                        .map(|m| m.id)
                })
                .collect()
        };

        Ok(UsageCheckModelConfig {
            model_type: helper.model_type,
            model_ids,
        })
    }
}

#[derive(Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum UsageCheckModelType {
    Default,
    Disabled,
    All,
    Custom,
}

#[derive(Serialize)]
#[serde(rename_all = "lowercase")]
pub enum BuildKeyResponse {
    Key(String),
    Error(String),
}