1use std::str::Utf8Error;
2
3use handlebars::RenderError;
4use llmvm_protocol::{
5 error::{ProtocolErrorType, SerializableProtocolError},
6 ProtocolError,
7};
8use thiserror::Error;
9
10#[derive(Debug, Error)]
12pub enum CoreError {
13 #[error("io error: {0}")]
14 IO(#[from] std::io::Error),
15 #[error("failed to start stdio backend: {0}")]
16 StdioBackendStart(std::io::Error),
17 #[error("template not found")]
18 TemplateNotFound,
19 #[error("utf8 error: {0}")]
20 Utf8Error(#[from] Utf8Error),
21 #[error("unable to load app data, could not find user home folder")]
22 UserHomeNotFound,
23 #[error("json serialization error: {0}")]
24 JsonSerialization(#[from] serde_json::Error),
25 #[error("toml serialization error: {0}")]
26 TomlSerialization(#[from] toml::de::Error),
27 #[error("thread not found")]
28 ThreadNotFound,
29 #[error("preset not found")]
30 PresetNotFound,
31 #[error("failed to parse model name")]
32 ModelDescriptionParse,
33 #[error("backend error (via stdio): {0}")]
34 BackendStdio(#[from] SerializableProtocolError),
35 #[error("backend error: {0}")]
36 Protocol(#[from] ProtocolError),
37 #[error("tempate render error: {0}")]
38 TemplateRender(#[from] RenderError),
39 #[error("missing generation parameters")]
40 MissingParameters,
41 #[error("missing required generation parameter: {0}")]
42 MissingParameter(&'static str),
43 #[error("failed to create http backend service")]
44 HttpServiceCreate,
45 #[error("unexpected service response type")]
46 UnexpectedServiceResponse,
47}
48
49impl Into<ProtocolError> for CoreError {
50 fn into(self) -> ProtocolError {
51 let error_type = match &self {
52 CoreError::IO(_) => ProtocolErrorType::Internal,
53 CoreError::StdioBackendStart(_) => ProtocolErrorType::Internal,
54 CoreError::TemplateNotFound => ProtocolErrorType::BadRequest,
55 CoreError::Utf8Error(_) => ProtocolErrorType::BadRequest,
56 CoreError::UserHomeNotFound => ProtocolErrorType::Internal,
57 CoreError::JsonSerialization(_) => ProtocolErrorType::BadRequest,
58 CoreError::TomlSerialization(_) => ProtocolErrorType::BadRequest,
59 CoreError::ThreadNotFound => ProtocolErrorType::NotFound,
60 CoreError::PresetNotFound => ProtocolErrorType::BadRequest,
61 CoreError::ModelDescriptionParse => ProtocolErrorType::BadRequest,
62 CoreError::BackendStdio(error) => error.error_type.clone(),
63 CoreError::Protocol(error) => error.error_type.clone(),
64 CoreError::TemplateRender(_) => ProtocolErrorType::BadRequest,
65 CoreError::MissingParameters => ProtocolErrorType::BadRequest,
66 CoreError::MissingParameter(_) => ProtocolErrorType::BadRequest,
67 CoreError::HttpServiceCreate => ProtocolErrorType::Internal,
68 CoreError::UnexpectedServiceResponse => ProtocolErrorType::Internal,
69 };
70 ProtocolError {
71 error_type,
72 error: Box::new(self),
73 }
74 }
75}