1#[derive(Debug, thiserror::Error)]
3pub enum RagError {
4 #[error("Retrieval error: {0}")]
6 Retrieve(String),
7
8 #[error("Generation error: {0}")]
10 Generation(String),
11
12 #[error("Context overflow: {used}/{max} tokens")]
14 ContextOverflow {
15 used: usize,
17 max: usize,
19 },
20
21 #[error("No results found for query: {0}")]
23 NoResults(String),
24
25 #[error("Embedding error: {0}")]
27 Embedding(String),
28
29 #[error("Store error: {0}")]
31 Store(String),
32
33 #[error("Rerank error: {0}")]
35 Rerank(String),
36
37 #[error("Chunking error: {0}")]
39 Chunking(String),
40
41 #[error("Query preprocessing error: {0}")]
43 QueryPreprocessing(String),
44
45 #[error("Configuration error: {0}")]
47 Config(String),
48
49 #[error("Provider error: {0}")]
51 Provider(String),
52
53 #[error("Template not found: {0}")]
55 TemplateNotFound(String),
56
57 #[error("Namespace not found: {0}")]
59 NamespaceNotFound(String),
60}
61
62impl RagError {
63 pub fn is_retryable(&self) -> bool {
65 matches!(self, RagError::Retrieve(_) | RagError::Generation(_) | RagError::Store(_))
66 }
67}