openai_api_rs/v1/
completion.rs

1use 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}