use std::collections::HashMap;
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct Parameters {
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub result_format: Option<String>,
#[builder(setter(strip_option))]
#[builder(default=None)]
pub translation_options: Option<TranslationOptions>,
#[deprecated(
since = "0.5.0",
note = "Stream control is now unified under the top-level `stream` parameter in request objects. This parameter will be ignored."
)]
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub incremental_output: Option<bool>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub tools: Option<Vec<FunctionCall>>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub parallel_tool_calls: Option<bool>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub thinking_budget: Option<usize>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub enable_search: Option<bool>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub search_options: Option<SearchOptions>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub enable_thinking: Option<bool>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub response_format: Option<ResponseFormat>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
repetition_penalty: Option<f64>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
presence_penalty: Option<f64>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
vl_high_resolution_images: Option<bool>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
vl_enable_image_hw_output: Option<bool>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
watermark:Option<bool>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
negative_prompt: Option<String>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
seed: Option<i32>,
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct ResponseFormat {
#[builder(setter(into, strip_option))]
#[serde(rename = "type")]
pub type_: String,
}
impl ParametersBuilder {
pub fn functions<V>(&mut self, value: V) -> &mut Self
where
V: Into<Vec<FunctionCall>>,
{
self.tools(value)
}
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct FunctionCall {
#[builder(setter(into, strip_option))]
#[serde(rename = "type")]
pub typ: Option<String>,
#[builder(setter(into, strip_option))]
#[serde(rename = "function")]
pub function: Option<Function>,
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
#[builder(setter(into, strip_option))]
pub struct Function {
name: String,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
description: Option<String>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
parameters: Option<FunctionParameters>,
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct FunctionParameters {
#[serde(rename = "type")]
pub typ: String,
properties: HashMap<String, Value>,
required: Option<Vec<String>>,
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
#[builder(setter(into, strip_option))]
pub struct SearchOptions {
#[builder(default=None)]
pub forced_search: Option<bool>,
#[builder(default=None)]
pub enable_source: Option<bool>,
#[builder(default=None)]
pub enable_citation: Option<bool>,
#[builder(default=None)]
pub citation_format: Option<String>,
#[builder(default=None)]
pub search_strategy: Option<String>,
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct StreamOptions {
pub include_usage: bool,
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct TranslationOptions {
#[builder(setter(into))]
pub source_lang: String,
#[builder(setter(into))]
pub target_lang: String,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub terms: Option<Vec<Term>>,
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct Term {
pub source: String,
pub target: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Usage {
#[serde(skip_serializing_if = "Option::is_none")]
pub input_tokens: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_tokens: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub total_tokens: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image_tokens: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_tokens: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub audio_tokens: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt_tokens_details: Option<PromptTokensDetails>,
#[serde(skip_serializing_if = "Option::is_none")]
pub input_tokens_details: Option<InputTokensDetails>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output_tokens_details: Option<OutputTokensDetails>,
#[serde(skip_serializing_if = "Option::is_none")]
pub characters: Option<i32>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InputTokensDetails {
text_tokens: Option<i32>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct OutputTokensDetails {
audio_tokens: Option<i32>,
text_tokens: Option<i32>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct PromptTokensDetails {
pub prompt_tokens: Option<i32>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum TaskStatus {
#[serde(rename = "PENDING")]
Pending,
#[serde(rename = "RUNNING")]
Running,
#[serde(rename = "SUCCEEDED")]
Succeeded,
#[serde(rename = "FAILED")]
Failed,
#[serde(rename = "CANCELED")]
Canceled,
#[serde(rename = "UNKNOWN")]
Unknown,
}