use async_trait::async_trait;
use crate::domain::knowledge_gap::KnowledgeGap;
use crate::domain::paper::Paper;
use crate::domain::research_report::ResearchReport;
use crate::error::Result;
#[async_trait]
pub trait ResearchEngine: Send + Sync {
async fn analyze_gaps(&self, topic_id: &str) -> Result<Vec<KnowledgeGap>>;
async fn extract_keywords(&self, papers: &[Paper]) -> Result<Vec<(String, String)>>;
async fn generate_report(&self, title: &str, topic_ids: &[String]) -> Result<ResearchReport>;
}