use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::RerankerConfig;
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct CodeSearchConfig {
#[serde(default = "CodeSearchConfig::default_enabled")]
pub enabled: bool,
#[serde(default = "CodeSearchConfig::default_max_characters")]
#[schemars(range(min = 64))]
pub max_characters: usize,
#[serde(default = "CodeSearchConfig::default_overlap")]
#[schemars(range(min = 0))]
pub overlap: usize,
#[serde(default = "CodeSearchConfig::default_embed")]
pub embed: bool,
#[serde(default)]
pub reranker: RerankerConfig,
}
impl CodeSearchConfig {
pub fn validate(&self) -> Result<(), String> {
if self.overlap >= self.max_characters {
return Err(format!(
"[code_search] overlap ({}) must be less than max_characters ({}); an overlap \
>= max_characters collapses the chunker step to 1 character",
self.overlap, self.max_characters
));
}
Ok(())
}
fn default_enabled() -> bool {
true
}
fn default_max_characters() -> usize {
1500
}
fn default_overlap() -> usize {
200
}
fn default_embed() -> bool {
true
}
}
impl Default for CodeSearchConfig {
fn default() -> Self {
Self {
enabled: Self::default_enabled(),
max_characters: Self::default_max_characters(),
overlap: Self::default_overlap(),
embed: Self::default_embed(),
reranker: RerankerConfig::default(),
}
}
}