use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct GeminiRequest {
pub model: String,
pub contents: Vec<Content>,
#[serde(rename = "generationConfig", skip_serializing_if = "Option::is_none")]
pub config: Option<GenerationConfig>,
#[serde(skip_serializing_if = "Option::is_none")]
pub system_instruction: Option<Content>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct GeminiEmbedRequest {
pub model: String,
pub content: Content,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct GeminiEmbedRequests {
pub requests: Vec<GeminiEmbedRequest>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Content {
pub parts: Vec<Part>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(untagged)]
pub enum Part {
Text { text: String },
Image { inline_data: Option<ImageContent> },
}
impl Part {
pub fn text(text: &str) -> Self {
Part::Text {
text: text.to_string(),
}
}
pub fn image(inline_data: Option<ImageContent>) -> Self {
Part::Image { inline_data }
}
}
#[derive(Debug, Deserialize)]
pub struct Candidate {
pub content: Content,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ImageContent {
pub mime_type: String,
pub data: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct GenerationConfig {
#[serde(rename = "responseModalities")]
pub response_modalities: Vec<String>,
}
#[derive(Debug, Serialize)]
pub struct VideoGenRequest {
pub instances: Vec<VideoPrompt>,
pub parameters: VideoParameters,
}
#[derive(Debug, Serialize)]
pub struct VideoPrompt {
pub prompt: String,
}
#[derive(Debug, Serialize)]
pub struct VideoParameters {
#[serde(rename = "aspectRatio")]
pub aspect_ratio: String,
#[serde(rename = "personGeneration")]
pub person_generation: String,
}
#[derive(Debug, Serialize)]
pub struct TtsRequest {
pub model: String,
pub contents: Vec<Content>,
#[serde(rename = "generationConfig")]
pub generation_config: TtsGenerationConfig,
#[serde(skip_serializing_if = "Option::is_none")]
pub system_instruction: Option<Content>,
}
#[derive(Debug, Serialize)]
pub struct TtsGenerationConfig {
#[serde(rename = "responseModalities")]
pub response_modalities: Vec<String>,
#[serde(rename = "speechConfig")]
pub speech_config: SpeechConfig,
}
#[derive(Debug, Serialize)]
pub struct SpeechConfig {
#[serde(rename = "voiceConfig")]
pub voice_config: VoiceConfig,
}
#[derive(Debug, Serialize)]
pub struct VoiceConfig {
#[serde(rename = "prebuiltVoiceConfig")]
pub prebuilt_voice_config: PrebuiltVoiceConfig,
}
#[derive(Debug, Serialize)]
pub struct PrebuiltVoiceConfig {
#[serde(rename = "voiceName")]
pub voice_name: String,
}