next_web_ai/chat/prompt/
chat_options.rs

1use next_web_core::DynClone;
2
3use crate::model::model_options::ModelOptions;
4
5pub trait ChatOptions
6where
7    Self: DynClone + ModelOptions,
8{
9    fn get_model(&self) -> &str;
10
11    fn get_frequency_penalty(&self) -> f64;
12
13    fn get_max_tokens(&self) -> u64;
14
15    fn get_presence_penalty(&self) -> f64;
16
17    fn get_stop_sequences(&self) -> &Vec<String>;
18
19    fn get_temperature(&self) -> f64;
20
21    fn get_top_k(&self) -> u64;
22
23    fn get_top_p(&self) -> u64;
24
25    fn set_model(&mut self, model: &str);
26
27    fn set_frequency_penalty(&mut self, frequency_penalty: f64);
28
29    fn set_max_tokens(&mut self, max_tokens: u64);
30
31    fn set_presence_penalty(&mut self, presence_penalty: f64);
32
33    fn set_stop_sequences(&mut self, stop_sequences: Vec<String>);
34
35    fn set_temperature(&mut self, temperature: f64);
36
37    fn set_top_k(&mut self, top_k: u64);
38
39    fn set_top_p(&mut self, top_p: u64);
40}
41
42next_web_core::clone_trait_object!(ChatOptions);
43
44#[derive(Clone, Default)]
45pub struct DefaultChatOptions {
46    pub model: String,
47    pub frequency_penalty: f64,
48    pub max_tokens: u64,
49    pub presence_penalty: f64,
50    pub stop_sequences: Vec<String>,
51    pub temperature: f64,
52    pub top_k: u64,
53    pub top_p: u64,
54}
55
56impl ChatOptions for DefaultChatOptions {
57    fn get_model(&self) -> &str {
58        &self.model
59    }
60
61    fn get_frequency_penalty(&self) -> f64 {
62        self.frequency_penalty
63    }
64
65    fn get_max_tokens(&self) -> u64 {
66        self.max_tokens
67    }
68
69    fn get_presence_penalty(&self) -> f64 {
70        self.presence_penalty
71    }
72
73    fn get_stop_sequences(&self) -> &Vec<String> {
74        &self.stop_sequences
75    }
76
77    fn get_temperature(&self) -> f64 {
78        self.temperature
79    }
80
81    fn get_top_k(&self) -> u64 {
82        self.top_k
83    }
84
85    fn get_top_p(&self) -> u64 {
86        self.top_p
87    }
88
89    fn set_model(&mut self, model: &str) {
90        self.model = model.to_string();
91    }
92
93    fn set_frequency_penalty(&mut self, frequency_penalty: f64) {
94        self.frequency_penalty = frequency_penalty;
95    }
96
97    fn set_max_tokens(&mut self, max_tokens: u64) {
98        self.max_tokens = max_tokens;
99    }
100
101    fn set_presence_penalty(&mut self, presence_penalty: f64) {
102        self.presence_penalty = presence_penalty;
103    }
104
105    fn set_stop_sequences(&mut self, stop_sequences: Vec<String>) {
106        self.stop_sequences = stop_sequences;
107    }
108
109    fn set_temperature(&mut self, temperature: f64) {
110        self.temperature = temperature;
111    }
112
113    fn set_top_k(&mut self, top_k: u64) {
114        self.top_k = top_k;
115    }
116
117    fn set_top_p(&mut self, top_p: u64) {
118        self.top_p = top_p;
119    }
120}
121
122impl ModelOptions for DefaultChatOptions {}