openai_protocol/
completion.rs1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::{Map, Value};
5
6use super::common::*;
7
8#[derive(Debug, Clone, Deserialize, Serialize)]
13pub struct CompletionRequest {
14 pub model: String,
16
17 pub prompt: StringOrArray,
19
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub suffix: Option<String>,
23
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub max_tokens: Option<u32>,
27
28 #[serde(skip_serializing_if = "Option::is_none")]
30 pub temperature: Option<f32>,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub top_p: Option<f32>,
35
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub n: Option<u32>,
39
40 #[serde(default)]
42 pub stream: bool,
43
44 #[serde(skip_serializing_if = "Option::is_none")]
46 pub stream_options: Option<StreamOptions>,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub logprobs: Option<u32>,
51
52 #[serde(default)]
54 pub echo: bool,
55
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub stop: Option<StringOrArray>,
59
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub presence_penalty: Option<f32>,
63
64 #[serde(skip_serializing_if = "Option::is_none")]
66 pub frequency_penalty: Option<f32>,
67
68 #[serde(skip_serializing_if = "Option::is_none")]
70 pub best_of: Option<u32>,
71
72 #[serde(skip_serializing_if = "Option::is_none")]
74 pub logit_bias: Option<HashMap<String, f32>>,
75
76 #[serde(skip_serializing_if = "Option::is_none")]
78 pub user: Option<String>,
79
80 #[serde(skip_serializing_if = "Option::is_none")]
82 pub seed: Option<i64>,
83
84 #[serde(skip_serializing_if = "Option::is_none")]
87 pub top_k: Option<i32>,
88
89 #[serde(skip_serializing_if = "Option::is_none")]
91 pub min_p: Option<f32>,
92
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub min_tokens: Option<u32>,
96
97 #[serde(skip_serializing_if = "Option::is_none")]
99 pub repetition_penalty: Option<f32>,
100
101 #[serde(skip_serializing_if = "Option::is_none")]
103 pub regex: Option<String>,
104
105 #[serde(skip_serializing_if = "Option::is_none")]
107 pub ebnf: Option<String>,
108
109 #[serde(skip_serializing_if = "Option::is_none")]
111 pub json_schema: Option<String>,
112
113 #[serde(skip_serializing_if = "Option::is_none")]
115 pub stop_token_ids: Option<Vec<u32>>,
116
117 #[serde(default)]
119 pub no_stop_trim: bool,
120
121 #[serde(default)]
123 pub ignore_eos: bool,
124
125 #[serde(default = "default_true")]
127 pub skip_special_tokens: bool,
128
129 #[serde(skip_serializing_if = "Option::is_none")]
131 pub lora_path: Option<String>,
132
133 #[serde(skip_serializing_if = "Option::is_none")]
135 pub session_params: Option<HashMap<String, Value>>,
136
137 #[serde(default)]
139 pub return_hidden_states: bool,
140
141 #[serde(skip_serializing_if = "Option::is_none")]
143 pub sampling_seed: Option<u64>,
144
145 #[serde(flatten)]
147 pub other: Map<String, Value>,
148}
149
150impl GenerationRequest for CompletionRequest {
151 fn is_stream(&self) -> bool {
152 self.stream
153 }
154
155 fn get_model(&self) -> Option<&str> {
156 Some(&self.model)
157 }
158
159 fn extract_text_for_routing(&self) -> String {
160 match &self.prompt {
161 StringOrArray::String(s) => s.clone(),
162 StringOrArray::Array(v) => v.join(" "),
163 }
164 }
165}
166
167#[derive(Debug, Clone, Deserialize, Serialize)]
172pub struct CompletionResponse {
173 pub id: String,
174 pub object: String, pub created: u64,
176 pub model: String,
177 pub choices: Vec<CompletionChoice>,
178 #[serde(skip_serializing_if = "Option::is_none")]
179 pub usage: Option<Usage>,
180 #[serde(skip_serializing_if = "Option::is_none")]
181 pub system_fingerprint: Option<String>,
182}
183
184#[derive(Debug, Clone, Deserialize, Serialize)]
185pub struct CompletionChoice {
186 pub text: String,
187 pub index: u32,
188 #[serde(skip_serializing_if = "Option::is_none")]
189 pub logprobs: Option<LogProbs>,
190 pub finish_reason: Option<String>, #[serde(skip_serializing_if = "Option::is_none")]
193 pub matched_stop: Option<Value>, }
195
196#[derive(Debug, Clone, Deserialize, Serialize)]
197pub struct CompletionStreamResponse {
198 pub id: String,
199 pub object: String, pub created: u64,
201 pub choices: Vec<CompletionStreamChoice>,
202 pub model: String,
203 #[serde(skip_serializing_if = "Option::is_none")]
204 pub system_fingerprint: Option<String>,
205}
206
207#[derive(Debug, Clone, Deserialize, Serialize)]
208pub struct CompletionStreamChoice {
209 pub text: String,
210 pub index: u32,
211 #[serde(skip_serializing_if = "Option::is_none")]
212 pub logprobs: Option<LogProbs>,
213 pub finish_reason: Option<String>,
214}