scouter_evaluate/
error.rs1use pyo3::exceptions::PyRuntimeError;
2use pyo3::PyErr;
3use thiserror::Error;
4use tracing::error;
5
6#[derive(Error, Debug)]
7pub enum EvaluationError {
8 #[error("Invalid response type. Expected Score")]
9 InvalidResponseError,
10
11 #[error(transparent)]
12 WorkflowError(#[from] potato_head::WorkflowError),
13
14 #[error(transparent)]
15 PyErr(#[from] pyo3::PyErr),
16
17 #[error("{0}")]
18 DowncastError(String),
19
20 #[error(transparent)]
21 JoinError(#[from] tokio::task::JoinError),
22
23 #[error("Missing key: {0}")]
24 MissingKeyError(String),
25
26 #[error("Invalid context type. Context must be a PyDict or a Pydantic BaseModel")]
27 MustBeDictOrBaseModel,
28
29 #[error(transparent)]
30 IoError(#[from] std::io::Error),
31
32 #[error(transparent)]
33 TypeError(#[from] scouter_types::error::TypeError),
34
35 #[error("Invalid embedder type. Expected an instance of Embedder")]
36 InvalidEmbedderType,
37
38 #[error("No results found in evaluation results")]
39 NoResultsFound,
40
41 #[error(transparent)]
42 ShapeError(#[from] ndarray::ShapeError),
43
44 #[error(transparent)]
45 DataProfileError(#[from] scouter_profile::error::DataProfileError),
46
47 #[error(transparent)]
48 SerdeError(#[from] serde_json::Error),
49}
50
51impl From<EvaluationError> for PyErr {
52 fn from(err: EvaluationError) -> PyErr {
53 let msg = err.to_string();
54 error!("{}", msg);
55 PyRuntimeError::new_err(msg)
56 }
57}
58
59impl<'a> From<pyo3::DowncastError<'a, 'a>> for EvaluationError {
60 fn from(err: pyo3::DowncastError) -> Self {
61 EvaluationError::DowncastError(err.to_string())
62 }
63}