1mod csv;
8mod docx;
9mod html;
10mod json;
11mod markdown;
12mod pdf;
13mod sitemap;
14mod text;
15mod web_scraper;
16
17pub use csv::CSVLoader;
18pub use docx::DocxLoader;
19pub use html::HTMLLoader;
20pub use json::JSONLoader;
21pub use markdown::MarkdownLoader;
22pub use pdf::PDFLoader;
23pub use sitemap::SitemapLoader;
24pub use text::TextLoader;
25pub use web_scraper::WebScraperLoader;
26
27use async_trait::async_trait;
28use lc_vector_stores::Document;
29
30#[derive(Debug, thiserror::Error)]
32#[non_exhaustive]
33pub enum LoaderError {
34 #[error("IO error: {0}")]
36 IoError(#[from] std::io::Error),
37
38 #[error("CSV parse error: {0}")]
40 CsvError(String),
41
42 #[error("PDF parse error: {0}")]
44 PdfError(String),
45
46 #[error("JSON parse error: {0}")]
48 JsonError(String),
49
50 #[error("unknown error: {0}")]
52 Other(String),
53}
54
55impl From<pdf_extract::Error> for LoaderError {
56 fn from(err: pdf_extract::Error) -> Self {
57 LoaderError::PdfError(err.to_string())
58 }
59}
60
61#[async_trait]
65pub trait DocumentLoader: Send + Sync {
66 async fn load(&self) -> Result<Vec<Document>, LoaderError>;
71}