next_web_ai/chat/prompt/
chat_options.rs1use 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 {}