pub enum Error {
Config(String),
Provider {
status: Option<u16>,
message: String,
},
Unsupported,
LowConfidence {
best_guess: Value,
confidence: f64,
},
Deserialization(String),
SchemaError(String),
ToolIterationLimit(u32),
ToolNotFound(String),
Timeout,
StoreError(String),
Sqlx(String),
}Expand description
Errors that can occur in ferro-ai operations.
Variants§
Config(String)
Configuration error (missing env var or invalid value).
Provider
HTTP provider error with optional status code for retry logic.
The message field carries only provider response text.
It MUST NOT contain the API key or auth header.
Fields
Unsupported
This provider does not implement the requested capability.
Returned by capability methods a provider lacks (e.g. AnthropicClient::embed()).
Never panics — callers check for this variant to implement fallback behavior.
LowConfidence
Classification returned confidence below the configured threshold.
Fields
Deserialization(String)
Failed to deserialize the provider response into the target type.
SchemaError(String)
Schema normalization failed (malformed schemars output or unexpected structure).
ToolIterationLimit(u32)
Tool dispatch loop exceeded the configured max_iterations without finishing.
ToolNotFound(String)
A tool name referenced in a provider response is not registered.
Not currently constructed by ToolRegistry::dispatch. The dispatch loop
intentionally surfaces unknown tool names to the LLM as a ToolError message
(model-recoverable, per D-13/SC#6) rather than aborting the loop. This variant
is reserved for future direct-dispatch helpers (e.g. a dispatch_single that
calls one tool by name and must distinguish “not registered” from handler errors).
Callers pattern-matching on Error should not expect this variant to be
reachable from dispatch in the current implementation.
Timeout
Request timed out after all retries were exhausted.
StoreError(String)
Confirmation store operation failed.
Sqlx(String)
sqlx database error from the pgvector store.
Only reachable when the pgvector feature is enabled and
PgVectorStore::store or PgVectorStore::nearest is called.
The message is sqlx::Error::to_string() — it does not contain
embedding data (f32 arrays are not included in sqlx error messages).
Implementations§
Source§impl Error
impl Error
Sourcepub fn is_retryable(&self) -> bool
pub fn is_retryable(&self) -> bool
Returns true for errors that should trigger a retry.
Permanent HTTP errors (400, 401, 403, 404, 422) are not retried.
Transient errors (429, 500, 503, 529) and network errors (status: None) are retried.
All non-Provider variants (including Unsupported and Timeout) return false.
Trait Implementations§
Source§impl Error for Error
impl Error for Error
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Auto Trait Implementations§
impl Freeze for Error
impl RefUnwindSafe for Error
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl UnsafeUnpin for Error
impl UnwindSafe for Error
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.