use thiserror::Error;
pub type DistributedResult<T> = Result<T, DistributedError>;
#[derive(Error, Debug)]
pub enum DistributedError {
#[error("Expert not found: {0}")]
ExpertNotFound(String),
#[error("Remote call failed: {0}")]
RemoteCallFailed(String),
#[error("Operation timed out after {0}ms")]
Timeout(u64),
#[error("No peers available for {0}")]
NoPeersAvailable(String),
#[error("Averaging failed: {0}")]
AveragingFailed(String),
#[error("Routing failed: {0}")]
RoutingFailed(String),
#[error("All retries exhausted: {0}")]
RetriesExhausted(String),
#[error("Network error: {0}")]
NetworkError(String),
#[error("Compression error: {0}")]
CompressionError(String),
#[error("Tensor error: {0}")]
TensorError(String),
#[error("Internal error: {0}")]
Internal(String),
}
impl From<kwaai_p2p::P2PError> for DistributedError {
fn from(err: kwaai_p2p::P2PError) -> Self {
DistributedError::NetworkError(err.to_string())
}
}
impl From<kwaai_compression::CompressionError> for DistributedError {
fn from(err: kwaai_compression::CompressionError) -> Self {
DistributedError::CompressionError(err.to_string())
}
}
impl From<candle_core::Error> for DistributedError {
fn from(err: candle_core::Error) -> Self {
DistributedError::TensorError(err.to_string())
}
}