use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct RagSection {
pub enabled: Option<bool>,
pub max_tokens: Option<usize>,
#[serde(default)]
pub alcove: AlcoveRagSection,
pub bridge: Option<BridgeRagSection>,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct AlcoveRagSection {
pub enabled: Option<bool>,
pub docs_root: Option<String>,
pub max_results: Option<usize>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BridgeRagSection {
pub enabled: Option<bool>,
pub url: String,
pub token: Option<String>,
pub max_results: Option<usize>,
}
#[derive(Debug, Clone)]
pub struct RagConfig {
pub max_tokens: Option<usize>,
pub alcove: Option<AlcoveRagConfig>,
pub bridge: Option<BridgeRagConfig>,
}
#[derive(Debug, Clone)]
pub struct AlcoveRagConfig {
pub enabled: bool,
pub docs_root: Option<String>,
pub max_results: Option<usize>,
}
#[derive(Debug, Clone)]
pub struct BridgeRagConfig {
pub enabled: bool,
pub url: String,
pub token: Option<String>,
pub max_results: Option<usize>,
}
impl RagConfig {
pub fn from_section(section: &RagSection) -> Option<Self> {
if !section.enabled.unwrap_or(true) {
return None;
}
Some(Self {
max_tokens: section.max_tokens,
alcove: Some(AlcoveRagConfig {
enabled: section.alcove.enabled.unwrap_or(true),
docs_root: section.alcove.docs_root.clone(),
max_results: section.alcove.max_results,
}),
bridge: section.bridge.as_ref().map(|b| BridgeRagConfig {
enabled: b.enabled.unwrap_or(true),
url: b.url.clone(),
token: b.token.clone(),
max_results: b.max_results,
}),
})
}
}