use super::*;
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct ToolSearchConfig {
pub enabled: bool,
pub threshold: usize,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[serde(rename_all = "snake_case")]
pub enum PromptCacheStrategy {
#[default]
Auto,
Explicit,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct PromptCacheConfig {
pub enabled: bool,
#[serde(default)]
pub strategy: PromptCacheStrategy,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub gemini_cached_content: Option<String>,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct CacheDiagnosticsConfig {
pub enabled: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub previous_message_id: Option<String>,
}
#[derive(Debug, Clone, Default)]
#[non_exhaustive]
pub struct LlmCallConfig {
pub reasoning_state: Option<crate::reasoning_updates::ReasoningState>,
pub model: String,
pub temperature: Option<f32>,
pub max_tokens: Option<u32>,
pub tools: Vec<ToolDefinition>,
pub reasoning_effort: Option<crate::model::ReasoningEffort>,
pub speed: Option<String>,
pub verbosity: Option<String>,
pub metadata: HashMap<String, String>,
pub previous_response_id: Option<String>,
pub provider_opaque_context: Option<ProviderOpaqueContext>,
pub tool_search: Option<ToolSearchConfig>,
pub prompt_cache: Option<PromptCacheConfig>,
pub driver_options: HashMap<String, serde_json::Value>,
pub parallel_tool_calls: Option<bool>,
pub volatile_suffix_len: usize,
pub extra_headers: Vec<(String, String)>,
pub cache_diagnostics: Option<CacheDiagnosticsConfig>,
pub capture_request: bool,
pub limits: crate::turn_collector::TurnLimits,
pub response_format: Option<crate::structured_output::ResponseFormat>,
pub background_call: crate::background_call::BackgroundCallContext,
}
impl LlmCallConfig {
pub fn new(model: impl Into<String>) -> Self {
Self {
model: model.into(),
..Default::default()
}
}
}