pub enum FallbackReason {
EmbeddingFailed(String),
SlotExhausted,
OAuthQuota {
backend: &'static str,
},
BackendMismatch {
requested: &'static str,
resolved: &'static str,
},
DimZero,
Cancelled,
Timeout {
operation: String,
duration_secs: u64,
},
}Expand description
G58/S1: reason an embedding call could not be completed and the caller must fall back to a non-vector retrieval path (FTS5 prefix + LIKE).
Returned by try_embed_query_with_fallback so the recall and
hybrid-search handlers can surface a structured vec_degraded /
warning envelope instead of a hard AppError::Embedding exit 11.
Variants§
EmbeddingFailed(String)
The LLM subprocess failed (rate limit, OAuth contention, quota exhausted, model unparsable response, divergent dim, etc.). Carries the original error message for observability.
SlotExhausted
The LLM slot semaphore was exhausted: 8+ concurrent LLM subprocesses blocked the acquire beyond the backoff window (50ms + 100ms + 200ms + 400ms = 750ms total). Resolved at v1.0.85 (GAP-003 / ADR-0043).
OAuthQuota
OAuth usage quota exhausted on the named backend. The caller should retry with an alternative backend (codex ↔ claude) before falling back to FTS5-puro.
BackendMismatch
The user requested a backend that differs from the one that actually executed the embedding (legacy “synonym for codex” bug from v1.0.83). Resolved at v1.0.84 (GAP-002).
DimZero
The embedding returned a zero-dimensional vector, signalling a structural bug (the LLM did not produce any floats). Distinct from OAuthQuota (quota exhausted) and EmbeddingFailed (subprocess error).
Cancelled
The embedding was cancelled by an external signal (SIGTERM, etc.).
Timeout
The embedding exceeded its time budget. Carries the operation name and the elapsed seconds for diagnostic logging.
Implementations§
Source§impl FallbackReason
impl FallbackReason
Sourcepub fn reason_code(&self) -> &'static str
pub fn reason_code(&self) -> &'static str
Stable, machine-friendly reason code used by JSON envelopes
(vec_degraded_reason). Mirrors the v1.0.84 contract extended
at v1.0.85 with 4 new variants (GAP-003 / ADR-0043).
Trait Implementations§
Source§impl Clone for FallbackReason
impl Clone for FallbackReason
Source§fn clone(&self) -> FallbackReason
fn clone(&self) -> FallbackReason
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FallbackReason
impl Debug for FallbackReason
Source§impl Display for FallbackReason
impl Display for FallbackReason
Source§impl Error for FallbackReason
impl Error for FallbackReason
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()
Source§impl PartialEq for FallbackReason
impl PartialEq for FallbackReason
Source§fn eq(&self, other: &FallbackReason) -> bool
fn eq(&self, other: &FallbackReason) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for FallbackReason
Auto Trait Implementations§
impl Freeze for FallbackReason
impl RefUnwindSafe for FallbackReason
impl Send for FallbackReason
impl Sync for FallbackReason
impl Unpin for FallbackReason
impl UnsafeUnpin for FallbackReason
impl UnwindSafe for FallbackReason
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ErasedDestructor for Twhere
T: 'static,
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
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.