#[non_exhaustive]pub enum TextModelError {
NotConfigured,
Rejected(String),
Transient {
retry_after: Option<Duration>,
},
Transport(String),
Unsupported(Capability),
InvalidSchema(String),
SchemaViolation(String),
ImageLimit(ImageLimit),
}Expand description
Completion failures.
NotConfigured sits on the error enum here,
unlike SendOutcome::NotConfigured and
PushOutcome::NotConfigured: a completion has no
“delivered but not configured” middle state, so an unwired tier is an
error the caller matches, not an outcome it inspects.
Transient deliberately carries only retry_after, where
PushError::Transient also carries a message: with
no provider text of its own there is nothing to scrub, and provider text
belongs on Rejected and Transport.
The two variants that carry provider text are sanitized in Display,
the same way PushError’s and
MailError’s are (issue #235). What an adapter wraps
is the provider’s own words, and a prompt is exactly the kind of value
that rides back in them — a drafting module quotes a customer’s note, and
the provider’s 4xx quotes it straight back. Display therefore runs it
through crate::logging::scrub_text; Debug still shows the raw
string for tests.
#[non_exhaustive]: a port’s failure set grows with its shape, and
Unsupported is exactly such a growth — a caller
that matches the variants it knows and treats anything else as a
transport failure should not have to recompile when one is added.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
NotConfigured
The tier asked for has no adapter — the venture did not wire it.
Nothing is wrong with the prompt: a module may degrade, the way it
degrades on a NotConfigured mailer, and
RoutingTextModel answers this for every tier it has no
adapter for.
Rejected(String)
The provider refused the request (a 4xx), or refused the prompt’s
content or schema; not retryable without a change.
Transient
A transient failure (a 5xx, a 429, a transport error): retry
later, and not before retry_after when the provider named one.
Carries no message — provider text belongs on
Rejected and Transport.
Transport(String)
The request never completed as a conversation — the adapter could not reach the provider, or the answer did not survive the hop.
Unsupported(Capability)
The model behind this tier cannot do what the prompt asked for —
a prompt carrying Prompt::tools or image Parts reached an
adapter whose TextModel::supports is false for
Capability::Tools or Capability::Images, so the adapter was
never called. A fixed sentence, never provider text, so there is
nothing to scrub.
InvalidSchema(String)
The schema itself cannot be honoured: it uses a JSON Schema keyword
the built-in validator does not implement (a $ref, a pattern,
an if), or is malformed. This is a caller bug — the schema was
written by the caller, not the model — so the model was never
called. Raised by
TextModelExt::complete_json
before the first request.
SchemaViolation(String)
The model’s answer did not conform to the required schema, after the
one repair retry
TextModelExt::complete_json
allows. Carries only the schema path and reason the answer failed
(for example the property "price" is invalid: …) — never the
model’s own output, which may hold the personal data the schema
was there to structure.
ImageLimit(ImageLimit)
The prompt’s images crossed a bound Prompt::check_images
enforces: too many, one too large, or too large together.
Implementations§
Source§impl TextModelError
impl TextModelError
Sourcepub fn retry_after(&self) -> Option<Duration>
pub fn retry_after(&self) -> Option<Duration>
How long the provider asked the caller to wait, where it said. An
Unsupported capability is not a back-off: no
wait makes a model grow a capability it lacks.
Trait Implementations§
Source§impl Clone for TextModelError
impl Clone for TextModelError
Source§impl Debug for TextModelError
impl Debug for TextModelError
Source§impl Display for TextModelError
impl Display for TextModelError
impl Eq for TextModelError
Source§impl Error for TextModelError
impl Error for TextModelError
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 TextModelError
impl PartialEq for TextModelError
impl StructuralPartialEq for TextModelError
Auto Trait Implementations§
impl Freeze for TextModelError
impl RefUnwindSafe for TextModelError
impl Send for TextModelError
impl Sync for TextModelError
impl Unpin for TextModelError
impl UnsafeUnpin for TextModelError
impl UnwindSafe for TextModelError
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,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.