pub enum UnknownModelPolicy {
Allow,
FailClosed,
Alert,
}Expand description
The unknown-model pricing policy (DW-AI-03
ai.unknown_model_policy): what the gateway does when a provider
model has no entry in the ai.pricing table. The default (allow)
preserves the original fail-open behavior (cost 0, never a crash);
fail_closed rejects the response with 403
ai_unknown_model_pricing so an unpriced model cannot serve
traffic silently; alert proceeds with cost 0 but logs a WARN and
increments dwara_ai_unknown_pricing_total{model} for observability
without blocking the call.
Variants§
Allow
Proceed with cost 0 (the original fail-open behavior). A misconfigured price table must not 500 a request.
FailClosed
Reject the response with 403 ai_unknown_model_pricing when the
model has no pricing entry. The provider call has already been
made (cost is computed from the response usage), but the
response is not returned to the client — the unpriced model
cannot serve traffic silently.
Alert
Proceed with cost 0 but log a WARN and increment the
dwara_ai_unknown_pricing_total{model} metric. The call
succeeds; the metric and log surface the gap for operators.
Trait Implementations§
Source§impl Clone for UnknownModelPolicy
impl Clone for UnknownModelPolicy
Source§fn clone(&self) -> UnknownModelPolicy
fn clone(&self) -> UnknownModelPolicy
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for UnknownModelPolicy
impl Debug for UnknownModelPolicy
Source§impl Default for UnknownModelPolicy
impl Default for UnknownModelPolicy
Source§fn default() -> UnknownModelPolicy
fn default() -> UnknownModelPolicy
Source§impl<'de> Deserialize<'de> for UnknownModelPolicy
impl<'de> Deserialize<'de> for UnknownModelPolicy
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for UnknownModelPolicy
impl JsonSchema for UnknownModelPolicy
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreSource§impl PartialEq for UnknownModelPolicy
impl PartialEq for UnknownModelPolicy
Source§impl Serialize for UnknownModelPolicy
impl Serialize for UnknownModelPolicy
impl Copy for UnknownModelPolicy
impl Eq for UnknownModelPolicy
impl StructuralPartialEq for UnknownModelPolicy
Auto Trait Implementations§
impl Freeze for UnknownModelPolicy
impl RefUnwindSafe for UnknownModelPolicy
impl Send for UnknownModelPolicy
impl Sync for UnknownModelPolicy
impl Unpin for UnknownModelPolicy
impl UnwindSafe for UnknownModelPolicy
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§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, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more