use velesdb_core::agent::AgentMemoryError;
use velesdb_core::Error as CoreError;
use crate::embedder::EmbedError;
use crate::extract::ExtractError;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ErrorCategory {
InvalidInput,
NotFound,
Internal,
}
#[derive(Debug, thiserror::Error)]
pub enum MemoryError {
#[error("storage error: {0}")]
Storage(#[from] CoreError),
#[error("memory error: {0}")]
Memory(#[from] AgentMemoryError),
#[error("fact text must not be empty")]
EmptyFact,
#[error("memory {0} does not exist")]
UnknownMemory(u64),
#[error("metadata key '{0}' is reserved")]
ReservedKey(String),
#[error("embedding error: {0}")]
Embed(#[from] EmbedError),
#[error("extraction error: {0}")]
Extract(#[from] ExtractError),
#[error("invalid filter field: {0}")]
InvalidFilter(String),
#[error("invalid relation label: {0}")]
InvalidRelation(String),
}
impl MemoryError {
#[must_use]
pub fn category(&self) -> ErrorCategory {
match self {
Self::EmptyFact
| Self::ReservedKey(_)
| Self::InvalidFilter(_)
| Self::InvalidRelation(_) => ErrorCategory::InvalidInput,
Self::UnknownMemory(_) => ErrorCategory::NotFound,
Self::Storage(_) | Self::Memory(_) | Self::Embed(_) | Self::Extract(_) => {
ErrorCategory::Internal
}
}
}
}