pub struct AiProvider {
pub name: String,
pub kind: AiProviderKind,
pub upstream: String,
pub auth: Option<AiProviderAuth>,
pub path: Option<String>,
pub credential_pool: Option<AiCredentialPool>,
}Expand description
One AI provider (DW-075 ai.providers[]).
Fields§
§name: StringProvider name; unique within the ai: block. Referenced by
ai.models[].provider.
kind: AiProviderKindWire-protocol adapter kind. Selects the request/response translation applied to every call routed to this provider.
upstream: StringName of the upstreams: entry that carries this provider’s
transport (endpoints, TLS trust, pooling, timeouts, breaker).
The adapter builds provider-specific paths; the endpoint’s
authority becomes the dialed host, exactly like a proxy route.
auth: Option<AiProviderAuth>Authentication attached to every call to this provider: a verbatim header. Optional — a provider behind an internal network (a self-hosted gateway fronting an Ollama-style endpoint, for example) may need none.
path: Option<String>Full request path override for this provider. When set, the
transport uses this path verbatim instead of the adapter’s
built-in path. This bridges providers whose API path differs
from the adapter’s default (e.g. z.ai’s coding-plan endpoint
/api/coding/paas/v4/chat/completions vs the OpenAI adapter’s
/v1/chat/completions) without an external reverse proxy.
When unset, the adapter’s per-kind default path is used.
Applies to both adapter-translated and passthrough requests.
credential_pool: Option<AiCredentialPool>DW-080 (Ent): a credential pool for this provider. When set,
the gateway rotates across multiple API keys to aggregate
rate-limit headroom (the LiteLLM pattern). Each entry is an
AiProviderAuth (same shape as auth); the pool is used
INSTEAD of auth — validation rejects a provider that sets
both. At request time the pool picks one credential per
request (round-robin by default); when a key returns 429, it
is temporarily quarantined and subsequent requests rotate to
the next. Pool exhaustion (all keys quarantined) degrades
gracefully with a 429 + Retry-After, not a panic. Ent-only:
rejected at validation when the ent cargo feature is off.
Trait Implementations§
Source§impl Clone for AiProvider
impl Clone for AiProvider
Source§fn clone(&self) -> AiProvider
fn clone(&self) -> AiProvider
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for AiProvider
impl Debug for AiProvider
Source§impl<'de> Deserialize<'de> for AiProvider
impl<'de> Deserialize<'de> for AiProvider
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 AiProvider
impl JsonSchema for AiProvider
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 AiProvider
impl PartialEq for AiProvider
Source§impl Serialize for AiProvider
impl Serialize for AiProvider
impl StructuralPartialEq for AiProvider
Auto Trait Implementations§
impl Freeze for AiProvider
impl RefUnwindSafe for AiProvider
impl Send for AiProvider
impl Sync for AiProvider
impl Unpin for AiProvider
impl UnwindSafe for AiProvider
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<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