AiRuntime

Struct AiRuntime 

Source
pub struct AiRuntime { /* private fields */ }
Expand description

The per-generation compiled AI table (DW-075): the provider pool with resolved credentials plus the model alias map. Built at dataplane refresh from the published config; immutable once built.

Implementations§

Source§

impl AiRuntime

Source

pub fn compile(cfg: Option<&AiConfig>, gateway: &Gateway) -> Option<AiRuntime>

Compile from the ai: config block. None when the block is absent (no AI surface). Secret references that fail to resolve here (a validate-vs-build race with the environment, or a file deleted since publish) fail the PROVIDER closed: the provider compiles without its auth header and every call to it will surface the provider’s own 401 — the loud, attributable failure — while an error log records why.

Source

pub fn mcp(&self) -> Option<&Arc<CompiledMcp>>

The compiled MCP gateway (DW-087); None when no ai.mcp block.

Source

pub fn a2a(&self) -> Option<&Arc<CompiledA2a>>

The compiled A2A surface (DW-114); None when no ai.a2a block or the block is inert (feature off / disabled).

Source

pub fn experiments_config(&self) -> Option<&AiExperiments>

AI-14 (#202): The experiments config (prompt versioning, A/B tests, evals). None when no ai.experiments block.

Source

pub fn prompt_overrides(&self) -> &[(String, String)]

AI-14 (#202): Runtime prompt overrides (prompt_name -> version).

Source

pub fn resolve<'a>( &'a self, alias: &str, ) -> Option<(&'a CompiledProvider, &'a str)>

Resolve a model alias to its provider and provider model id (the DW-075 single-target view; failover lists and canary splits resolve to the same primary).

Source

pub fn model(&self, alias: &str) -> Option<&CompiledModel>

The compiled model entry for an alias (routing introspection and tests).

Source

pub fn route<'a>(&'a self, alias: &str, pick_key: &str) -> Vec<&'a RouteTarget>

Route one request (DW-076): the ordered candidate list to try. A canary alias yields exactly ONE candidate — the deterministic weighted pick for pick_key (the request id); a failover alias yields [primary, alternates...]. An empty result means the alias does not exist. Policy aliases (DW-085) and experiment aliases (DW-086) return an empty list here — they need the async route_with_policy path (the classifier call is async for policies; the experiment pick is sync but returns an experiments::ExperimentDecision the dataplane records). The sync route stays for tests and the non-policy dataplane path.

Source

pub fn route_with_canary_index<'a>( &'a self, alias: &str, pick_key: &str, ) -> (Vec<&'a RouteTarget>, Option<usize>)

DW-091: like route but for canary aliases the single picked candidate carries its INDEX (0 = baseline, 1 = canary for a 2-version canary split). The auto-canary controller needs the index to record the outcome on the correct side. Returns (candidates, canary_index) where canary_index is Some(idx) only for canary aliases.

Source

pub async fn route_with_policy( &self, alias: &str, pick_key: &str, prompt_text: &str, ) -> (Vec<RouteTarget>, Option<PolicyDecision>)

Route one request with policy/experiment evaluation (DW-085 / DW-086). Like route but handles Policy variants by calling the async evaluate method, and Experiment variants by doing the deterministic weighted pick. Returns owned RouteTargets plus an optional PolicyDecision the dataplane records as a metric (None for non-policy models). For experiment models, the experiments::ExperimentDecision is returned separately via route_experiment. For non-policy/non-experiment models, delegates to the sync routing logic. An empty result means the alias does not exist.

Source

pub async fn route_with_policy_and_canary_index( &self, alias: &str, pick_key: &str, prompt_text: &str, ) -> (Vec<RouteTarget>, Option<PolicyDecision>, Option<usize>)

DW-091: like route_with_policy but also returns the canary index (0 = baseline, 1 = canary for a 2-version canary split) when the alias is a canary alias. The auto-canary controller needs the index to record the outcome on the correct side. Returns (candidates, policy_decision, canary_index).

Source

pub fn route_experiment( &self, alias: &str, pick_key: &str, ) -> Option<(RouteTarget, ExperimentDecision)>

Route one request for an experiment alias (DW-086): the deterministic weighted pick selects a variant, returning the RouteTarget and the experiments::ExperimentDecision for analytics attribution. Returns None when the alias is not an experiment alias or does not exist.

Source

pub fn experiment(&self, alias: &str) -> Option<&Arc<CompiledAbTest>>

The compiled experiment for an alias (introspection/tests).

Source

pub fn provider(&self, name: &str) -> Option<&CompiledProvider>

The compiled provider by name.

Source

pub fn provider_names(&self) -> Vec<String>

DW-080: the names of all compiled providers (for admin API credential pool status enumeration).

Source

pub fn provider_count(&self) -> usize

Number of compiled providers (config introspection/tests).

Source

pub fn model_count(&self) -> usize

Number of model aliases (config introspection/tests).

Source

pub fn with_rebuilt_canary( &self, alias: &str, new_weights: &[u32], ) -> Option<AiRuntime>

DW-091: rebuild the canary split for alias with new weights and return a new runtime with the replacement. The providers and other models are shared (Arc bump / clone). new_weights is the new weight per canary version in config order (baseline first, canary second for a 2-version canary). The total weight MUST stay constant (the caller enforces this). Returns None when the alias is not a canary alias or the weight count does not match the version count.

Trait Implementations§

Source§

impl Clone for AiRuntime

Source§

fn clone(&self) -> AiRuntime

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AiRuntime

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for AiRuntime

Source§

fn default() -> AiRuntime

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AnyExt for T
where T: Any + ?Sized,

§

fn downcast_ref<T>(this: &Self) -> Option<&T>
where T: Any,

Attempts to downcast this to T behind reference
§

fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>
where T: Any,

Attempts to downcast this to T behind mutable reference
§

fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>
where T: Any,

Attempts to downcast this to T behind Rc pointer
§

fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>
where T: Any,

Attempts to downcast this to T behind Arc pointer
§

fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>
where T: Any,

Attempts to downcast this to T behind Box pointer
§

fn downcast_move<T>(this: Self) -> Option<T>
where T: Any, Self: Sized,

Attempts to downcast owned Self to T, useful only in generic context as a workaround for specialization
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T, X> CoerceTo<T> for X
where 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

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> ServiceExt for T

§

fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>
where Self: Sized,

Apply a transformation to the response body. Read more
§

fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using HTTP status codes. Read more
§

fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>
where Self: Sized,

High level tracing that classifies responses using gRPC headers. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,