use clap::Args;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Args, Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, deny_unknown_fields)]
pub struct DocumentsCliOverrides {
#[arg(long = "documents-enabled", env = "BASEMIND_DOCUMENTS_ENABLED")]
pub enabled: Option<bool>,
#[arg(
long = "documents-max-characters",
env = "BASEMIND_DOCUMENTS_MAX_CHARACTERS"
)]
pub max_characters: Option<usize>,
#[arg(long = "documents-overlap", env = "BASEMIND_DOCUMENTS_OVERLAP")]
pub overlap: Option<usize>,
#[arg(
long = "documents-embedding-preset",
env = "BASEMIND_DOCUMENTS_EMBEDDING_PRESET"
)]
pub embedding_preset: Option<String>,
#[arg(long = "documents-embed", env = "BASEMIND_DOCUMENTS_EMBED")]
pub embed: Option<bool>,
#[arg(
long = "documents-language-auto-detect",
env = "BASEMIND_DOCUMENTS_LANGUAGE_AUTO_DETECT"
)]
pub language_auto_detect: Option<bool>,
#[arg(
long = "documents-language-min-confidence",
env = "BASEMIND_DOCUMENTS_LANGUAGE_MIN_CONFIDENCE"
)]
pub language_min_confidence: Option<f64>,
#[arg(
long = "documents-language-detect-multiple",
env = "BASEMIND_DOCUMENTS_LANGUAGE_DETECT_MULTIPLE"
)]
pub language_detect_multiple: Option<bool>,
#[arg(
long = "documents-reranker-enabled",
env = "BASEMIND_DOCUMENTS_RERANKER_ENABLED"
)]
pub reranker_enabled: Option<bool>,
#[arg(
long = "documents-reranker-preset",
env = "BASEMIND_DOCUMENTS_RERANKER_PRESET"
)]
pub reranker_preset: Option<String>,
#[arg(
long = "documents-reranker-top-k",
env = "BASEMIND_DOCUMENTS_RERANKER_TOP_K"
)]
pub reranker_top_k: Option<usize>,
#[arg(
long = "documents-keywords-enabled",
env = "BASEMIND_DOCUMENTS_KEYWORDS_ENABLED"
)]
pub keywords_enabled: Option<bool>,
#[arg(
long = "documents-keywords-max-keywords",
env = "BASEMIND_DOCUMENTS_KEYWORDS_MAX_KEYWORDS"
)]
pub keywords_max_keywords: Option<usize>,
#[arg(
long = "documents-keywords-min-score",
env = "BASEMIND_DOCUMENTS_KEYWORDS_MIN_SCORE"
)]
pub keywords_min_score: Option<f32>,
#[arg(long = "documents-ner-enabled", env = "BASEMIND_DOCUMENTS_NER_ENABLED")]
pub ner_enabled: Option<bool>,
#[arg(
long = "documents-summarization-enabled",
env = "BASEMIND_DOCUMENTS_SUMMARIZATION_ENABLED"
)]
pub summarization_enabled: Option<bool>,
#[arg(
long = "documents-summarization-strategy",
env = "BASEMIND_DOCUMENTS_SUMMARIZATION_STRATEGY"
)]
pub summarization_strategy: Option<String>,
#[arg(
long = "documents-summarization-max-tokens",
env = "BASEMIND_DOCUMENTS_SUMMARIZATION_MAX_TOKENS"
)]
pub summarization_max_tokens: Option<u32>,
#[arg(
long = "documents-output-format",
env = "BASEMIND_DOCUMENTS_OUTPUT_FORMAT"
)]
pub output_format: Option<String>,
#[arg(long = "llm-model", env = "BASEMIND_LLM_MODEL")]
pub llm_model: Option<String>,
#[arg(
long = "llm-api-key",
env = "BASEMIND_LLM_API_KEY",
hide_env_values = true
)]
pub llm_api_key: Option<String>,
#[arg(long = "llm-base-url", env = "BASEMIND_LLM_BASE_URL")]
pub llm_base_url: Option<String>,
#[arg(long = "llm-temperature", env = "BASEMIND_LLM_TEMPERATURE")]
pub llm_temperature: Option<f64>,
#[arg(long = "llm-timeout-secs", env = "BASEMIND_LLM_TIMEOUT_SECS")]
pub llm_timeout_secs: Option<u64>,
#[arg(long = "llm-max-retries", env = "BASEMIND_LLM_MAX_RETRIES")]
pub llm_max_retries: Option<u32>,
#[arg(long = "llm-max-tokens", env = "BASEMIND_LLM_MAX_TOKENS")]
pub llm_max_tokens: Option<u64>,
}
impl DocumentsCliOverrides {
pub fn empty() -> Self {
Self::default()
}
pub fn any(&self) -> bool {
self.enabled.is_some()
|| self.max_characters.is_some()
|| self.overlap.is_some()
|| self.embedding_preset.is_some()
|| self.embed.is_some()
|| self.language_auto_detect.is_some()
|| self.language_min_confidence.is_some()
|| self.language_detect_multiple.is_some()
|| self.reranker_enabled.is_some()
|| self.reranker_preset.is_some()
|| self.reranker_top_k.is_some()
|| self.keywords_enabled.is_some()
|| self.keywords_max_keywords.is_some()
|| self.keywords_min_score.is_some()
|| self.ner_enabled.is_some()
|| self.summarization_enabled.is_some()
|| self.summarization_strategy.is_some()
|| self.summarization_max_tokens.is_some()
|| self.output_format.is_some()
|| self.llm_model.is_some()
|| self.llm_api_key.is_some()
|| self.llm_base_url.is_some()
|| self.llm_temperature.is_some()
|| self.llm_timeout_secs.is_some()
|| self.llm_max_retries.is_some()
|| self.llm_max_tokens.is_some()
}
}