1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
10pub struct Completion {
11 pub id: String,
13 pub choices: Vec<CompletionChoice>,
15 pub created: i64,
17 pub model: String,
19 pub object: String,
21 #[serde(skip_serializing_if = "Option::is_none", default)]
23 pub system_fingerprint: Option<String>,
24 #[serde(skip_serializing_if = "Option::is_none", default)]
26 pub usage: Option<CompletionUsage>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
31pub struct Logprobs {
32 #[serde(skip_serializing_if = "Option::is_none", default)]
33 pub text_offset: Option<Vec<i64>>,
34 #[serde(skip_serializing_if = "Option::is_none", default)]
35 pub token_logprobs: Option<Vec<f64>>,
36 #[serde(skip_serializing_if = "Option::is_none", default)]
37 pub tokens: Option<Vec<String>>,
38 #[serde(skip_serializing_if = "Option::is_none", default)]
39 pub top_logprobs: Option<Vec<std::collections::HashMap<String, f64>>>,
40}
41
42#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
43#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
44#[non_exhaustive]
45pub enum CompletionChoiceFinishReason {
46 #[serde(rename = "stop")]
47 Stop,
48 #[serde(rename = "length")]
49 Length,
50 #[serde(rename = "content_filter")]
51 ContentFilter,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
55#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
56pub struct CompletionChoice {
57 pub finish_reason: CompletionChoiceFinishReason,
59 pub index: i64,
60 #[serde(skip_serializing_if = "Option::is_none", default)]
61 pub logprobs: Option<Logprobs>,
62 pub text: String,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
66#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
67pub struct CompletionCreateParamsBase {
68 pub model: Option<String>,
70 pub prompt: serde_json::Value,
72 #[serde(skip_serializing_if = "Option::is_none", default)]
74 pub best_of: Option<i64>,
75 #[serde(skip_serializing_if = "Option::is_none", default)]
77 pub echo: Option<bool>,
78 #[serde(skip_serializing_if = "Option::is_none", default)]
80 pub frequency_penalty: Option<f64>,
81 #[serde(skip_serializing_if = "Option::is_none", default)]
83 pub logit_bias: Option<std::collections::HashMap<String, i64>>,
84 #[serde(skip_serializing_if = "Option::is_none", default)]
86 pub logprobs: Option<i64>,
87 #[serde(skip_serializing_if = "Option::is_none", default)]
89 pub max_tokens: Option<i64>,
90 #[serde(skip_serializing_if = "Option::is_none", default)]
92 pub n: Option<i64>,
93 #[serde(skip_serializing_if = "Option::is_none", default)]
95 pub presence_penalty: Option<f64>,
96 #[serde(skip_serializing_if = "Option::is_none", default)]
98 pub seed: Option<i64>,
99 #[serde(skip_serializing_if = "Option::is_none", default)]
101 pub stop: Option<serde_json::Value>,
102 #[serde(skip_serializing_if = "Option::is_none", default)]
104 pub stream_options: Option<serde_json::Value>,
105 #[serde(skip_serializing_if = "Option::is_none", default)]
107 pub suffix: Option<String>,
108 #[serde(skip_serializing_if = "Option::is_none", default)]
110 pub temperature: Option<f64>,
111 #[serde(skip_serializing_if = "Option::is_none", default)]
113 pub top_p: Option<f64>,
114 #[serde(skip_serializing_if = "Option::is_none", default)]
116 pub user: Option<String>,
117}
118
119pub type CompletionCreateParams = serde_json::Value;
120
121#[derive(Debug, Clone, Serialize, Deserialize)]
123#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
124pub struct CompletionTokensDetails {
125 #[serde(skip_serializing_if = "Option::is_none", default)]
127 pub accepted_prediction_tokens: Option<i64>,
128 #[serde(skip_serializing_if = "Option::is_none", default)]
130 pub audio_tokens: Option<i64>,
131 #[serde(skip_serializing_if = "Option::is_none", default)]
133 pub reasoning_tokens: Option<i64>,
134 #[serde(skip_serializing_if = "Option::is_none", default)]
136 pub rejected_prediction_tokens: Option<i64>,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize)]
141#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
142pub struct PromptTokensDetails {
143 #[serde(skip_serializing_if = "Option::is_none", default)]
145 pub audio_tokens: Option<i64>,
146 #[serde(skip_serializing_if = "Option::is_none", default)]
148 pub cached_tokens: Option<i64>,
149}
150
151#[derive(Debug, Clone, Serialize, Deserialize)]
153#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
154pub struct CompletionUsage {
155 pub completion_tokens: i64,
157 pub prompt_tokens: i64,
159 pub total_tokens: i64,
161 #[serde(skip_serializing_if = "Option::is_none", default)]
163 pub completion_tokens_details: Option<CompletionTokensDetails>,
164 #[serde(skip_serializing_if = "Option::is_none", default)]
166 pub prompt_tokens_details: Option<PromptTokensDetails>,
167}