openai_api_rs/v1/
completion.rs1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3use std::option::Option;
4
5use crate::impl_builder_methods;
6use crate::v1::common;
7
8pub const GPT3_TEXT_DAVINCI_003: &str = "text-davinci-003";
9pub const GPT3_TEXT_DAVINCI_002: &str = "text-davinci-002";
10pub const GPT3_TEXT_CURIE_001: &str = "text-curie-001";
11pub const GPT3_TEXT_BABBAGE_001: &str = "text-babbage-001";
12pub const GPT3_TEXT_ADA_001: &str = "text-ada-001";
13pub const GPT3_TEXT_DAVINCI_001: &str = "text-davinci-001";
14pub const GPT3_DAVINCI_INSTRUCT_BETA: &str = "davinci-instruct-beta";
15pub const GPT3_DAVINCI: &str = "davinci";
16pub const GPT3_CURIE_INSTRUCT_BETA: &str = "curie-instruct-beta";
17pub const GPT3_CURIE: &str = "curie";
18pub const GPT3_ADA: &str = "ada";
19pub const GPT3_BABBAGE: &str = "babbage";
20
21#[derive(Debug, Serialize, Deserialize, Clone)]
22pub struct CompletionRequest {
23 pub model: String,
24 pub prompt: String,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub suffix: Option<String>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 pub max_tokens: Option<i32>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub temperature: Option<f32>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub top_p: Option<f32>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub n: Option<i32>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub stream: Option<bool>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub logprobs: Option<i32>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub echo: Option<bool>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub stop: Option<Vec<String>>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub presence_penalty: Option<f32>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub frequency_penalty: Option<f32>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub best_of: Option<i32>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub logit_bias: Option<HashMap<String, i32>>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub user: Option<String>,
53}
54
55impl CompletionRequest {
56 pub fn new(model: String, prompt: String) -> Self {
57 Self {
58 model,
59 prompt,
60 suffix: None,
61 max_tokens: None,
62 temperature: None,
63 top_p: None,
64 n: None,
65 stream: None,
66 logprobs: None,
67 echo: None,
68 stop: None,
69 presence_penalty: None,
70 frequency_penalty: None,
71 best_of: None,
72 logit_bias: None,
73 user: None,
74 }
75 }
76}
77
78impl_builder_methods!(
79 CompletionRequest,
80 suffix: String,
81 max_tokens: i32,
82 temperature: f32,
83 top_p: f32,
84 n: i32,
85 stream: bool,
86 logprobs: i32,
87 echo: bool,
88 stop: Vec<String>,
89 presence_penalty: f32,
90 frequency_penalty: f32,
91 best_of: i32,
92 logit_bias: HashMap<String, i32>,
93 user: String
94);
95
96#[derive(Debug, Deserialize, Serialize)]
97pub struct CompletionChoice {
98 pub text: String,
99 pub index: i64,
100 pub finish_reason: String,
101 pub logprobs: Option<LogprobResult>,
102}
103
104#[derive(Debug, Deserialize, Serialize)]
105pub struct LogprobResult {
106 pub tokens: Vec<String>,
107 pub token_logprobs: Vec<f32>,
108 pub top_logprobs: Vec<HashMap<String, f32>>,
109 pub text_offset: Vec<i32>,
110}
111
112#[derive(Debug, Deserialize, Serialize)]
113pub struct CompletionResponse {
114 pub id: String,
115 pub object: String,
116 pub created: i64,
117 pub model: String,
118 pub choices: Vec<CompletionChoice>,
119 pub usage: common::Usage,
120}