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
#[derive(Debug, Clone, PartialEq)]
pub struct ChatConfig {
    pub model: Model,
    pub temperature: f64,
}

impl Default for ChatConfig {
    fn default() -> Self {
        Self {
            model: Default::default(),
            temperature: 0.5,
        }
    }
}

impl ChatConfig {
    pub fn set_model(mut self, model: Model) -> Self {
        self.model = model;
        self
    }
    pub fn set_temprature(mut self, temprature: f64) -> Self {
        self.temperature = temprature;
        self
    }
    pub fn build(self) -> Self {
        self
    }
}

#[derive(Debug, Default, Copy, Clone, PartialEq, PartialOrd)]
#[allow(non_camel_case_types)]
pub enum Model {
    #[default]
    Gpt35Turbo,
    Gpt35Turbo_0301,
    Gpt4,
    Gpt4_32k,
    Gpt4_0314,
    Gpt4_32k_0314,
    Custom(&'static str),
}

impl AsRef<str> for Model {
    fn as_ref(&self) -> &'static str {
        match self {
            Model::Gpt35Turbo => "gpt-3.5-turbo",
            Model::Gpt35Turbo_0301 => "gpt-3.5-turbo-0301",
            Model::Gpt4 => "gpt-4",
            Model::Gpt4_32k => "gpt-4-32k",
            Model::Gpt4_0314 => "gpt-4-0314",
            Model::Gpt4_32k_0314 => "gpt-4-32k-0314",
            Model::Custom(custom) => custom,
        }
    }
}