use foundation_core::extensions::result_ext::BoxedError;
#[cfg(all(feature = "llamacpp", not(target_family = "wasm")))]
pub mod llama;
#[cfg(all(feature = "llamacpp", not(target_family = "wasm")))]
pub use llama::LlamaError;
#[derive(Debug)]
pub enum GenerationError {
Failed(BoxedError),
#[cfg(all(feature = "llamacpp", not(target_family = "wasm")))]
Llama(LlamaError),
#[cfg(feature = "candle")]
Candle(candle_core::Error),
Tokenizer(String),
Backend(String),
Generic(String),
}
impl From<BoxedError> for GenerationError {
fn from(e: BoxedError) -> Self {
GenerationError::Failed(e)
}
}
impl From<String> for GenerationError {
fn from(e: String) -> Self {
GenerationError::Generic(e)
}
}
#[cfg(feature = "candle")]
impl From<candle_core::Error> for GenerationError {
fn from(e: candle_core::Error) -> Self {
GenerationError::Candle(e)
}
}
impl core::fmt::Display for GenerationError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
GenerationError::Failed(e) => write!(f, "Generation failed: {e}"),
#[cfg(all(feature = "llamacpp", not(target_family = "wasm")))]
GenerationError::Llama(e) => write!(f, "llama.cpp: {e}"),
#[cfg(feature = "candle")]
GenerationError::Candle(e) => write!(f, "Candle error: {e}"),
GenerationError::Tokenizer(msg) => write!(f, "Tokenizer error: {msg}"),
GenerationError::Backend(msg) => write!(f, "Backend error: {msg}"),
GenerationError::Generic(msg) => write!(f, "Generation error: {msg}"),
}
}
}
impl std::error::Error for GenerationError {}
pub type GenerationResult<T> = std::result::Result<T, GenerationError>;
#[derive(Debug)]
pub enum ModelErrors {
NotFound(String),
FailedLoading(BoxedError),
#[cfg(all(feature = "llamacpp", not(target_family = "wasm")))]
Llama(LlamaError),
CandleModelLoad(String),
UnsupportedArchitecture(String),
}
impl core::fmt::Display for ModelErrors {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
ModelErrors::NotFound(name) => write!(f, "Model not found: {name}"),
ModelErrors::FailedLoading(e) => write!(f, "Model failed to load: {e}"),
#[cfg(all(feature = "llamacpp", not(target_family = "wasm")))]
ModelErrors::Llama(e) => write!(f, "llama.cpp: {e}"),
ModelErrors::CandleModelLoad(msg) => write!(f, "Candle model load error: {msg}"),
ModelErrors::UnsupportedArchitecture(arch) => {
write!(f, "Unsupported architecture: {arch}")
}
}
}
}
impl std::error::Error for ModelErrors {}
pub type ModelResult<T> = std::result::Result<T, ModelErrors>;
#[derive(Debug)]
pub enum ModelProviderErrors {
NotFound(String),
FailedFetching(BoxedError),
ModelErrors(ModelErrors),
}
impl From<ModelErrors> for ModelProviderErrors {
fn from(e: ModelErrors) -> Self {
ModelProviderErrors::ModelErrors(e)
}
}
impl core::fmt::Display for ModelProviderErrors {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
ModelProviderErrors::NotFound(name) => write!(f, "Not found: {name}"),
ModelProviderErrors::FailedFetching(e) => write!(f, "Fetch failed: {e}"),
ModelProviderErrors::ModelErrors(e) => write!(f, "Model error: {e}"),
}
}
}
impl std::error::Error for ModelProviderErrors {}
pub type ModelProviderResult<T> = std::result::Result<T, ModelProviderErrors>;
#[derive(Debug)]
pub enum FoundationAIErrors {
ModelErrors(ModelErrors),
GenerationErrors(GenerationError),
RegistryErrors(ModelProviderErrors),
}
impl From<ModelErrors> for FoundationAIErrors {
fn from(e: ModelErrors) -> Self {
FoundationAIErrors::ModelErrors(e)
}
}
impl From<GenerationError> for FoundationAIErrors {
fn from(e: GenerationError) -> Self {
FoundationAIErrors::GenerationErrors(e)
}
}
impl From<ModelProviderErrors> for FoundationAIErrors {
fn from(e: ModelProviderErrors) -> Self {
FoundationAIErrors::RegistryErrors(e)
}
}
impl core::fmt::Display for FoundationAIErrors {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
FoundationAIErrors::ModelErrors(e) => write!(f, "Model error: {e}"),
FoundationAIErrors::GenerationErrors(e) => write!(f, "Generation error: {e}"),
FoundationAIErrors::RegistryErrors(e) => write!(f, "Registry error: {e}"),
}
}
}
impl std::error::Error for FoundationAIErrors {}
pub type FoundationAIResult<T> = std::result::Result<T, FoundationAIErrors>;