/*
* OpenAI API
*
* APIs for sampling from and fine-tuning language models
*
* The version of the OpenAPI document: 1.2.0
*
* Generated by: https://openapi-generator.tech
*/
#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)]
pub struct CreateAnswerRequest {
/// ID of the model to use for completion. You can select one of `ada`, `babbage`, `curie`, or `davinci`.
#[serde(rename = "model")]
pub model: String,
/// Question to get answered.
#[serde(rename = "question")]
pub question: String,
/// List of (question, answer) pairs that will help steer the model towards the tone and answer format you'd like. We recommend adding 2 to 3 examples.
#[serde(rename = "examples")]
pub examples: Vec<Vec<String>>,
/// A text snippet containing the contextual information used to generate the answers for the `examples` you provide.
#[serde(rename = "examples_context")]
pub examples_context: String,
/// List of documents from which the answer for the input `question` should be derived. If this is an empty list, the question will be answered based on the question-answer examples. You should specify either `documents` or a `file`, but not both.
#[serde(rename = "documents", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub documents: Option<Option<Vec<String>>>,
/// The ID of an uploaded file that contains documents to search over. See [upload file](/docs/api-reference/files/upload) for how to upload a file of the desired format and purpose. You should specify either `documents` or a `file`, but not both.
#[serde(rename = "file", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub file: Option<Option<String>>,
/// ID of the model to use for [Search](/docs/api-reference/searches/create). You can select one of `ada`, `babbage`, `curie`, or `davinci`.
#[serde(rename = "search_model", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub search_model: Option<Option<String>>,
/// The maximum number of documents to be ranked by [Search](/docs/api-reference/searches/create) when using `file`. Setting it to a higher value leads to improved accuracy but with increased latency and cost.
#[serde(rename = "max_rerank", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub max_rerank: Option<Option<i32>>,
/// What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.
#[serde(rename = "temperature", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub temperature: Option<Option<f32>>,
/// Include the log probabilities on the `logprobs` most likely tokens, as well the chosen tokens. For example, if `logprobs` is 5, the API will return a list of the 5 most likely tokens. The API will always return the `logprob` of the sampled token, so there may be up to `logprobs+1` elements in the response. The maximum value for `logprobs` is 5. If you need more than this, please contact us through our [Help center](https://help.openai.com) and describe your use case. When `logprobs` is set, `completion` will be automatically added into `expand` to get the logprobs.
#[serde(rename = "logprobs", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub logprobs: Option<Option<i32>>,
/// The maximum number of tokens allowed for the generated answer
#[serde(rename = "max_tokens", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub max_tokens: Option<Option<i32>>,
#[serde(rename = "stop", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub stop: Option<Option<Box<crate::models::CreateAnswerRequestStop>>>,
/// How many answers to generate for each question.
#[serde(rename = "n", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub n: Option<Option<i32>>,
/// Modify the likelihood of specified tokens appearing in the completion. Accepts a json object that maps tokens (specified by their token ID in the GPT tokenizer) to an associated bias value from -100 to 100. You can use this [tokenizer tool](/tokenizer?view=bpe) (which works for both GPT-2 and GPT-3) to convert text to token IDs. Mathematically, the bias is added to the logits generated by the model prior to sampling. The exact effect will vary per model, but values between -1 and 1 should decrease or increase likelihood of selection; values like -100 or 100 should result in a ban or exclusive selection of the relevant token. As an example, you can pass `{\"50256\": -100}` to prevent the <|endoftext|> token from being generated.
#[serde(rename = "logit_bias", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub logit_bias: Option<Option<serde_json::Value>>,
/// A special boolean flag for showing metadata. If set to `true`, each document entry in the returned JSON will contain a \"metadata\" field. This flag only takes effect when `file` is set.
#[serde(rename = "return_metadata", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub return_metadata: Option<Option<bool>>,
/// If set to `true`, the returned JSON will include a \"prompt\" field containing the final prompt that was used to request a completion. This is mainly useful for debugging purposes.
#[serde(rename = "return_prompt", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub return_prompt: Option<Option<bool>>,
/// If an object name is in the list, we provide the full information of the object; otherwise, we only provide the object ID. Currently we support `completion` and `file` objects for expansion.
#[serde(rename = "expand", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
pub expand: Option<Option<Vec<serde_json::Value>>>,
/// A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. [Learn more](/docs/guides/safety-best-practices/end-user-ids).
#[serde(rename = "user", skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
}
impl CreateAnswerRequest {
pub fn new(model: String, question: String, examples: Vec<Vec<String>>, examples_context: String) -> CreateAnswerRequest {
CreateAnswerRequest {
model,
question,
examples,
examples_context,
documents: None,
file: None,
search_model: None,
max_rerank: None,
temperature: None,
logprobs: None,
max_tokens: None,
stop: None,
n: None,
logit_bias: None,
return_metadata: None,
return_prompt: None,
expand: None,
user: None,
}
}
}