use crate::document::NodeId;
use crate::llm::LlmClient;
use super::{SummaryGenerator, SummaryStrategyConfig};
pub struct FullStrategy {
generator: Box<dyn SummaryGenerator>,
config: SummaryStrategyConfig,
}
impl FullStrategy {
pub fn new(client: LlmClient) -> Self {
Self {
generator: Box::new(super::LlmSummaryGenerator::new(client)),
config: SummaryStrategyConfig::default(),
}
}
pub fn with_generator(generator: Box<dyn SummaryGenerator>) -> Self {
Self {
generator,
config: SummaryStrategyConfig::default(),
}
}
pub fn with_config(mut self, config: SummaryStrategyConfig) -> Self {
self.config = config;
self
}
pub fn should_generate(&self, _node_id: NodeId, content_tokens: usize) -> bool {
content_tokens >= self.config.min_content_tokens
}
pub async fn generate(&self, title: &str, content: &str) -> crate::llm::LlmResult<String> {
self.generator.generate(title, content).await
}
pub fn config(&self) -> &SummaryStrategyConfig {
&self.config
}
}
impl std::fmt::Debug for FullStrategy {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("FullStrategy")
.field("config", &self.config)
.finish()
}
}