use serde::{Deserialize, Serialize};
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(tag = "mode", rename_all = "snake_case")]
pub enum ThinkingConfig {
Extended {
budget_tokens: u32,
},
Adaptive {
#[serde(default, skip_serializing_if = "Option::is_none")]
effort: Option<ThinkingEffort>,
},
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum ThinkingEffort {
Low,
#[default]
Medium,
High,
}
#[non_exhaustive]
#[derive(Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq, Default)]
#[serde(rename_all = "snake_case")]
pub enum CacheTtl {
#[default]
Ephemeral,
#[serde(rename = "1h")]
OneHour,
}
impl CacheTtl {
#[must_use]
pub fn requires_beta(self) -> bool {
match self {
Self::OneHour => true,
Self::Ephemeral => false,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum GeminiThinkingLevel {
Minimal,
Low,
Medium,
High,
}