use lc_rag::RetrieverError;
use lc_vector_stores::Document;
#[derive(Debug, Clone, PartialEq)]
pub enum RagDecision {
NoRetrieval,
SingleSearch,
MultiQuery,
}
impl std::fmt::Display for RagDecision {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
RagDecision::NoRetrieval => write!(f, "no_retrieval"),
RagDecision::SingleSearch => write!(f, "single_search"),
RagDecision::MultiQuery => write!(f, "multi_query"),
}
}
}
#[derive(Debug, Clone)]
pub struct AdaptiveRAGResult {
pub answer: String,
pub decision: RagDecision,
pub sources: Vec<Document>,
}
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum AdaptiveRAGError {
#[error("LLM error: {0}")]
Llm(String),
#[error("retrieval error: {0}")]
Retrieval(#[from] RetrieverError),
#[error("decision parse error: {0}")]
DecisionParse(String),
}