use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize)]
pub struct GeminiRequest {
#[serde(rename = "systemInstruction", skip_serializing_if = "Option::is_none")]
pub system_instruction: Option<GeminiSystemInstruction>,
pub contents: Vec<GeminiContent>,
#[serde(rename = "generationConfig")]
pub generation_config: GeminiGenerationConfig,
}
#[derive(Debug, Serialize)]
pub struct GeminiSystemInstruction {
pub parts: Vec<GeminiPart>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct GeminiContent {
pub role: Option<String>,
pub parts: Vec<GeminiPart>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct GeminiPart {
pub text: String,
}
#[derive(Debug, Serialize)]
pub struct GeminiGenerationConfig {
pub temperature: f32,
#[serde(rename = "maxOutputTokens", skip_serializing_if = "Option::is_none")]
pub max_output_tokens: Option<u32>,
#[serde(rename = "responseMimeType", skip_serializing_if = "Option::is_none")]
pub response_mime_type: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct GeminiResponse {
pub candidates: Option<Vec<GeminiCandidate>>,
#[serde(rename = "usageMetadata")]
pub usage_metadata: Option<GeminiUsage>,
}
#[derive(Debug, Deserialize)]
pub struct GeminiCandidate {
pub content: Option<GeminiContent>,
}
#[derive(Debug, Deserialize)]
pub struct GeminiUsage {
#[serde(rename = "promptTokenCount")]
pub prompt_token_count: Option<u64>,
#[serde(rename = "candidatesTokenCount")]
pub candidates_token_count: Option<u64>,
}
#[derive(Debug, Serialize)]
pub struct OpenAiMessage {
pub role: String,
pub content: String,
}
#[derive(Debug, Serialize)]
pub struct OpenAiResponseFormat {
#[serde(rename = "type")]
pub format_type: String,
}
#[derive(Debug, Serialize)]
pub struct OpenAiRequest {
pub model: String,
pub messages: Vec<OpenAiMessage>,
pub temperature: f32,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_tokens: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub response_format: Option<OpenAiResponseFormat>,
}
#[derive(Debug, Deserialize)]
pub struct OpenAiUsage {
pub prompt_tokens: Option<u64>,
pub completion_tokens: Option<u64>,
}
#[derive(Debug, Deserialize)]
pub struct OpenAiResponse {
pub choices: Option<Vec<OpenAiChoice>>,
pub usage: Option<OpenAiUsage>,
}
#[derive(Debug, Deserialize)]
pub struct OpenAiChoice {
pub message: Option<OpenAiChoiceMessage>,
}
#[derive(Debug, Deserialize)]
pub struct OpenAiChoiceMessage {
pub content: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct AnthropicMessage {
pub role: String,
pub content: String,
}
#[derive(Debug, Serialize)]
pub struct AnthropicRequest {
pub model: String,
pub max_tokens: u32,
pub temperature: f32,
pub system: String,
pub messages: Vec<AnthropicMessage>,
}
#[derive(Debug, Deserialize)]
pub struct AnthropicUsage {
pub input_tokens: Option<u64>,
pub output_tokens: Option<u64>,
}
#[derive(Debug, Deserialize)]
pub struct AnthropicResponse {
pub content: Option<Vec<AnthropicContent>>,
pub usage: Option<AnthropicUsage>,
}
#[derive(Debug, Deserialize)]
pub struct AnthropicContent {
#[serde(rename = "type")]
pub block_type: Option<String>,
pub text: Option<String>,
}