elizaos_plugin_copilot_proxy/
types.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
7#[serde(rename_all = "lowercase")]
8pub enum ChatRole {
9 System,
11 User,
13 Assistant,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct ChatMessage {
20 pub role: ChatRole,
22 pub content: Option<String>,
24}
25
26impl ChatMessage {
27 pub fn system(content: impl Into<String>) -> Self {
29 Self {
30 role: ChatRole::System,
31 content: Some(content.into()),
32 }
33 }
34
35 pub fn user(content: impl Into<String>) -> Self {
37 Self {
38 role: ChatRole::User,
39 content: Some(content.into()),
40 }
41 }
42
43 pub fn assistant(content: impl Into<String>) -> Self {
45 Self {
46 role: ChatRole::Assistant,
47 content: Some(content.into()),
48 }
49 }
50}
51
52#[derive(Debug, Clone, Serialize)]
54pub struct ChatCompletionRequest {
55 pub model: String,
57 pub messages: Vec<ChatMessage>,
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub max_tokens: Option<u32>,
62 #[serde(skip_serializing_if = "Option::is_none")]
64 pub temperature: Option<f32>,
65 #[serde(skip_serializing_if = "Option::is_none")]
67 pub top_p: Option<f32>,
68 #[serde(skip_serializing_if = "Option::is_none")]
70 pub frequency_penalty: Option<f32>,
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub presence_penalty: Option<f32>,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub stop: Option<Vec<String>>,
77 #[serde(skip_serializing_if = "Option::is_none")]
79 pub stream: Option<bool>,
80}
81
82impl ChatCompletionRequest {
83 pub fn new(model: impl Into<String>, messages: Vec<ChatMessage>) -> Self {
85 Self {
86 model: model.into(),
87 messages,
88 max_tokens: None,
89 temperature: None,
90 top_p: None,
91 frequency_penalty: None,
92 presence_penalty: None,
93 stop: None,
94 stream: None,
95 }
96 }
97
98 pub fn max_tokens(mut self, tokens: u32) -> Self {
100 self.max_tokens = Some(tokens);
101 self
102 }
103
104 pub fn temperature(mut self, temp: f32) -> Self {
106 self.temperature = Some(temp);
107 self
108 }
109
110 pub fn top_p(mut self, p: f32) -> Self {
112 self.top_p = Some(p);
113 self
114 }
115
116 pub fn frequency_penalty(mut self, penalty: f32) -> Self {
118 self.frequency_penalty = Some(penalty);
119 self
120 }
121
122 pub fn presence_penalty(mut self, penalty: f32) -> Self {
124 self.presence_penalty = Some(penalty);
125 self
126 }
127
128 pub fn stop(mut self, sequences: Vec<String>) -> Self {
130 self.stop = Some(sequences);
131 self
132 }
133}
134
135#[derive(Debug, Clone, Deserialize)]
137pub struct ChatCompletionChoice {
138 pub index: u32,
140 pub message: ChatMessage,
142 pub finish_reason: Option<String>,
144}
145
146#[derive(Debug, Clone, Deserialize)]
148pub struct TokenUsage {
149 pub prompt_tokens: u32,
151 pub completion_tokens: u32,
153 pub total_tokens: u32,
155}
156
157#[derive(Debug, Clone, Deserialize)]
159pub struct ChatCompletionResponse {
160 pub id: String,
162 pub object: String,
164 pub created: u64,
166 pub model: String,
168 pub choices: Vec<ChatCompletionChoice>,
170 pub usage: Option<TokenUsage>,
172}
173
174#[derive(Debug, Clone)]
176pub struct TextGenerationParams {
177 pub prompt: String,
179 pub system: Option<String>,
181 pub model: Option<String>,
183 pub temperature: Option<f32>,
185 pub max_tokens: Option<u32>,
187 pub frequency_penalty: Option<f32>,
189 pub presence_penalty: Option<f32>,
191 pub stop: Option<Vec<String>>,
193}
194
195impl TextGenerationParams {
196 pub fn new(prompt: impl Into<String>) -> Self {
198 Self {
199 prompt: prompt.into(),
200 system: None,
201 model: None,
202 temperature: None,
203 max_tokens: None,
204 frequency_penalty: None,
205 presence_penalty: None,
206 stop: None,
207 }
208 }
209
210 pub fn system(mut self, system: impl Into<String>) -> Self {
212 self.system = Some(system.into());
213 self
214 }
215
216 pub fn model(mut self, model: impl Into<String>) -> Self {
218 self.model = Some(model.into());
219 self
220 }
221
222 pub fn temperature(mut self, temp: f32) -> Self {
224 self.temperature = Some(temp);
225 self
226 }
227
228 pub fn max_tokens(mut self, tokens: u32) -> Self {
230 self.max_tokens = Some(tokens);
231 self
232 }
233
234 pub fn frequency_penalty(mut self, penalty: f32) -> Self {
236 self.frequency_penalty = Some(penalty);
237 self
238 }
239
240 pub fn presence_penalty(mut self, penalty: f32) -> Self {
242 self.presence_penalty = Some(penalty);
243 self
244 }
245
246 pub fn stop(mut self, sequences: Vec<String>) -> Self {
248 self.stop = Some(sequences);
249 self
250 }
251}
252
253#[derive(Debug, Clone)]
255pub struct TextGenerationResult {
256 pub text: String,
258 pub usage: Option<TokenUsage>,
260}
261
262#[derive(Debug, Clone, Deserialize)]
264pub struct ModelInfo {
265 pub id: String,
267 pub object: String,
269 pub created: u64,
271 pub owned_by: String,
273}
274
275#[derive(Debug, Clone, Deserialize)]
277pub struct ModelsResponse {
278 pub object: String,
280 pub data: Vec<ModelInfo>,
282}