wyoming-whisper-rs/src/error.rs
Yuniru Yuni 3a1fd683d6
refactor: delete errors for state-id
because it's already deleted from state management.
2023-04-25 22:59:13 +09:00

113 lines
3.9 KiB
Rust

use std::ffi::{c_int, NulError};
use std::str::Utf8Error;
/// Whisper tends to output errors to stderr, so if an error occurs, check stderr.
#[derive(Debug, Copy, Clone)]
pub enum WhisperError {
/// Failed to create a new context.
InitError,
/// User didn't initialize spectrogram
SpectrogramNotInitialized,
/// Encode was not called.
EncodeNotComplete,
/// Decode was not called.
DecodeNotComplete,
/// Failed to calculate the spectrogram for some reason.
UnableToCalculateSpectrogram,
/// Failed to evaluate model.
UnableToCalculateEvaluation,
/// Failed to run the encoder
FailedToEncode,
/// Failed to run the decoder
FailedToDecode,
/// Invalid number of mel bands.
InvalidMelBands,
/// Invalid thread count
InvalidThreadCount,
/// Invalid UTF-8 detected in a string from Whisper.
InvalidUtf8 {
error_len: Option<usize>,
valid_up_to: usize,
},
/// A null byte was detected in a user-provided string.
NullByteInString { idx: usize },
/// Whisper returned a null pointer.
NullPointer,
/// Generic whisper error. Varies depending on the function.
GenericError(c_int),
/// Whisper failed to convert the provided text into tokens.
InvalidText,
/// Creating a state pointer failed. Check stderr for more information.
FailedToCreateState,
}
impl From<Utf8Error> for WhisperError {
fn from(e: Utf8Error) -> Self {
Self::InvalidUtf8 {
error_len: e.error_len(),
valid_up_to: e.valid_up_to(),
}
}
}
impl From<NulError> for WhisperError {
fn from(e: NulError) -> Self {
Self::NullByteInString {
idx: e.nul_position(),
}
}
}
impl std::fmt::Display for WhisperError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
use WhisperError::*;
match self {
InitError => write!(f, "Failed to create a new whisper context."),
SpectrogramNotInitialized => write!(f, "User didn't initialize spectrogram."),
EncodeNotComplete => write!(f, "Encode was not called."),
DecodeNotComplete => write!(f, "Decode was not called."),
UnableToCalculateSpectrogram => {
write!(f, "Failed to calculate the spectrogram for some reason.")
}
UnableToCalculateEvaluation => write!(f, "Failed to evaluate model."),
FailedToEncode => write!(f, "Failed to run the encoder."),
FailedToDecode => write!(f, "Failed to run the decoder."),
InvalidMelBands => write!(f, "Invalid number of mel bands."),
InvalidThreadCount => write!(f, "Invalid thread count."),
InvalidUtf8 {
valid_up_to,
error_len: Some(len),
} => write!(
f,
"Invalid UTF-8 detected in a string from Whisper. Index: {}, Length: {}.",
valid_up_to, len
),
InvalidUtf8 {
valid_up_to,
error_len: None,
} => write!(
f,
"Invalid UTF-8 detected in a string from Whisper. Index: {}.",
valid_up_to
),
NullByteInString { idx } => write!(
f,
"A null byte was detected in a user-provided string. Index: {}",
idx
),
NullPointer => write!(f, "Whisper returned a null pointer."),
InvalidText => write!(
f,
"Whisper failed to convert the provided text into tokens."
),
FailedToCreateState => write!(f, "Creating a state pointer failed."),
GenericError(c_int) => write!(
f,
"Generic whisper error. Varies depending on the function. Error code: {}",
c_int
),
}
}
}
impl std::error::Error for WhisperError {}