Skip to main content

llm_multimodal/
error.rs

1use std::time::Duration;
2
3use thiserror::Error;
4
5pub type MultiModalResult<T> = Result<T, MultiModalError>;
6
7#[derive(Debug, Error)]
8pub enum MediaConnectorError {
9    #[error("unsupported media scheme: {0}")]
10    UnsupportedScheme(String),
11    #[error("invalid media URL: {0}")]
12    InvalidUrl(String),
13    #[error("media domain '{0}' is not in the allow list")]
14    DisallowedDomain(String),
15    #[error("local media path is not allowed: {0}")]
16    DisallowedLocalPath(String),
17    #[error("HTTP error while fetching media: {0}")]
18    Http(#[from] reqwest::Error),
19    #[error("I/O error while reading media: {0}")]
20    Io(#[from] std::io::Error),
21    #[error("base64 decode error: {0}")]
22    Base64Decode(#[from] base64::DecodeError),
23    #[error("data URL parse error: {0}")]
24    DataUrl(String),
25    #[error("media decode task failed: {0}")]
26    Blocking(#[from] tokio::task::JoinError),
27    #[error("image decode error: {0}")]
28    Image(#[from] image::ImageError),
29    #[error("media fetch timed out after {0:?}")]
30    Timeout(Duration),
31}
32
33#[derive(Debug, Error)]
34pub enum MultiModalError {
35    #[error(transparent)]
36    Media(#[from] MediaConnectorError),
37    #[error("unsupported content part: {0}")]
38    UnsupportedContent(&'static str),
39    #[error("tracker task join error: {0}")]
40    Join(#[from] tokio::task::JoinError),
41    #[error("tracker validation error: {0}")]
42    Validation(String),
43}