use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use crate::openai::create_chat_completions::types::{
self, ChatCompletionClaudeThinkingConfig, ChatCompletionGeminiExtraThinkingConfig, HttpMethod,
};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OpenAiChatCompletionsRequest {
pub method: HttpMethod,
pub path: PathParameters,
pub query: QueryParameters,
pub headers: RequestHeaders,
pub body: RequestBody,
}
impl Default for OpenAiChatCompletionsRequest {
fn default() -> Self {
Self {
method: HttpMethod::Post,
path: PathParameters::default(),
query: QueryParameters::default(),
headers: RequestHeaders::default(),
body: RequestBody::default(),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct PathParameters {}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct QueryParameters {}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct RequestHeaders {
#[serde(flatten, default, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: BTreeMap<String, String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct RequestBody {
pub messages: Vec<types::ChatCompletionMessageParam>,
pub model: types::Model,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub audio: Option<types::ChatCompletionAudioParam>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub frequency_penalty: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub function_call: Option<types::ChatCompletionFunctionCallOptionParam>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub functions: Option<Vec<types::ChatCompletionLegacyFunction>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub logit_bias: Option<types::LogitBias>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub logprobs: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_completion_tokens: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_tokens: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<types::Metadata>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub modalities: Option<Vec<types::ChatCompletionModality>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub n: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub parallel_tool_calls: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prediction: Option<types::ChatCompletionPredictionContent>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub presence_penalty: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prompt_cache_key: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prompt_cache_retention: Option<types::ChatCompletionPromptCacheRetention>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reasoning_effort: Option<types::ChatCompletionReasoningEffort>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub response_format: Option<types::ChatCompletionResponseFormat>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub safety_identifier: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub seed: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub service_tier: Option<types::ChatCompletionServiceTier>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub stop: Option<types::ChatCompletionStop>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub store: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub stream: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub stream_options: Option<types::ChatCompletionStreamOptions>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub temperature: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tool_choice: Option<types::ChatCompletionToolChoiceOption>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tools: Option<Vec<types::ChatCompletionTool>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub top_logprobs: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub top_p: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub verbosity: Option<types::ChatCompletionVerbosity>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub thinking: Option<ChatCompletionClaudeThinkingConfig>,
#[serde(
rename = "thinking_config",
default,
skip_serializing_if = "Option::is_none"
)]
pub thinking_config: Option<ChatCompletionGeminiExtraThinkingConfig>,
#[serde(
rename = "cached_content",
default,
skip_serializing_if = "Option::is_none"
)]
pub cached_content: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub web_search_options: Option<types::ChatCompletionWebSearchOptions>,
}