use serde::{Deserialize, Serialize};
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum AdvisorCacheTtl {
#[serde(rename = "5m")]
FiveMinutes,
#[serde(rename = "1h")]
OneHour,
}
impl AdvisorCacheTtl {
pub fn as_str(self) -> &'static str {
match self {
Self::FiveMinutes => "5m",
Self::OneHour => "1h",
}
}
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct AdvisorCachingConfig {
#[serde(default = "default_advisor_caching_enabled")]
pub enabled: bool,
#[serde(default = "default_advisor_cache_ttl")]
pub ttl: AdvisorCacheTtl,
}
impl Default for AdvisorCachingConfig {
fn default() -> Self {
Self {
enabled: default_advisor_caching_enabled(),
ttl: default_advisor_cache_ttl(),
}
}
}
#[inline]
const fn default_advisor_caching_enabled() -> bool {
false
}
#[inline]
fn default_advisor_cache_ttl() -> AdvisorCacheTtl {
AdvisorCacheTtl::FiveMinutes
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AdvisorConfig {
#[serde(default = "default_advisor_enabled")]
pub enabled: bool,
#[serde(default)]
pub model: String,
#[serde(default)]
pub max_uses: Option<u32>,
#[serde(default)]
pub max_tokens: Option<u32>,
#[serde(default)]
pub caching: Option<AdvisorCachingConfig>,
}
impl Default for AdvisorConfig {
fn default() -> Self {
Self {
enabled: default_advisor_enabled(),
model: String::new(),
max_uses: None,
max_tokens: None,
caching: None,
}
}
}
#[inline]
const fn default_advisor_enabled() -> bool {
false
}