Skip to main content

objectiveai_api/vector/completions/
error.rs

1//! Error types for vector completion operations.
2
3/// Errors that can occur during vector completion creation.
4#[derive(Debug, thiserror::Error)]
5pub enum Error {
6    /// The profile weights are invalid.
7    #[error("invalid profile: {0}")]
8    InvalidProfile(String),
9    /// Failed to fetch votes from a previous completion for retry.
10    #[error("fetch retry error: {0}")]
11    FetchRetry(objectiveai::error::ResponseError),
12    /// The completion specified for retry was not found.
13    #[error("retry not found")]
14    RetryNotFound,
15    /// Failed to fetch a vote from the global cache.
16    #[error("fetch cache vote error: {0}")]
17    FetchCacheVote(objectiveai::error::ResponseError),
18    /// Failed to fetch the Ensemble definition.
19    #[error("fetch ensemble error: {0}")]
20    FetchEnsemble(objectiveai::error::ResponseError),
21    /// The requested Ensemble was not found.
22    #[error("ensemble not found")]
23    EnsembleNotFound,
24    /// The provided Ensemble definition is invalid.
25    #[error("invalid ensemble: {0}")]
26    InvalidEnsemble(String),
27    /// Vector completions require at least two response options.
28    #[error("expected two or more request vector responses, got {0}")]
29    ExpectedTwoOrMoreRequestVectorResponses(usize),
30}
31
32impl objectiveai::error::StatusError for Error {
33    fn status(&self) -> u16 {
34        match self {
35            Error::InvalidProfile(_) => 400,
36            Error::FetchRetry(e) => e.status(),
37            Error::RetryNotFound => 404,
38            Error::FetchCacheVote(e) => e.status(),
39            Error::FetchEnsemble(e) => e.status(),
40            Error::EnsembleNotFound => 404,
41            Error::InvalidEnsemble(_) => 400,
42            Error::ExpectedTwoOrMoreRequestVectorResponses(_) => 400,
43        }
44    }
45
46    fn message(&self) -> Option<serde_json::Value> {
47        Some(serde_json::json!({
48            "kind": "vector",
49            "error": match self {
50                Error::InvalidProfile(msg) => serde_json::json!({
51                    "kind": "invalid_profile",
52                    "error": msg,
53                }),
54                Error::FetchRetry(e) => serde_json::json!({
55                    "kind": "fetch_retry",
56                    "error": e.message(),
57                }),
58                Error::RetryNotFound => serde_json::json!({
59                    "kind": "retry_not_found",
60                    "error": "retry not found",
61                }),
62                Error::FetchCacheVote(e) => serde_json::json!({
63                    "kind": "fetch_cache_vote",
64                    "error": e.message(),
65                }),
66                Error::FetchEnsemble(e) => serde_json::json!({
67                    "kind": "fetch_ensemble",
68                    "error": e.message(),
69                }),
70                Error::EnsembleNotFound => serde_json::json!({
71                    "kind": "ensemble_not_found",
72                    "error": "ensemble not found",
73                }),
74                Error::InvalidEnsemble(msg) => serde_json::json!({
75                    "kind": "invalid_ensemble",
76                    "error": msg,
77                }),
78                Error::ExpectedTwoOrMoreRequestVectorResponses(n) => serde_json::json!({
79                    "kind": "expected_two_or_more_request_vector_responses",
80                    "error": format!("expected two or more request vector responses, got {}", n),
81                }),
82            }
83        }))
84    }
85}