TierSelector

Struct TierSelector 

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

Type-safe selector for a specific model tier

This newtype wrapper validates that at least one endpoint exists for the specified tier at construction time, then provides type-safe selection from that tier.

§Tier Selection for LLM Routing

When used by the LLM-based router, the tier choice impacts routing performance:

  • FAST (8B): Lowest latency (~50-200ms) but may misroute complex requests. Risk of bad routing decisions outweighs latency savings.

  • BALANCED (30B): Recommended default. Good reasoning for classification with acceptable latency (~100-500ms). Best balance of accuracy and speed.

  • DEEP (120B): Highest accuracy but very slow (~2-5s). Router latency may exceed the time to just run the user query on BALANCED. Rarely worth it.

§Construction-Time Validation

The tier is validated at construction (checks that at least one endpoint exists) and stored immutably. The selector cannot switch tiers after construction, but tier selection itself is a runtime parameter, not a compile-time guarantee.

Implementations§

Source§

impl TierSelector

Source

pub fn new(selector: Arc<ModelSelector>, tier: TargetModel) -> AppResult<Self>

Create a new TierSelector for the specified tier

Returns an error if the ModelSelector has no endpoints for the specified tier. This validation ensures the router can never be in an invalid state.

§Arguments
  • selector - The underlying ModelSelector
  • tier - Which tier (Fast, Balanced, Deep) to select from
§Errors

Returns AppError::Config if no endpoints are configured for the specified tier.

Source

pub async fn select(&self, exclude: &ExclusionSet) -> Option<&ModelEndpoint>

Select an endpoint from this selector’s tier with health filtering and exclusion

§Arguments
  • exclude - Set of endpoint names to exclude (for retry logic)
§Returns
  • Some(&ModelEndpoint) if a healthy, non-excluded endpoint exists for this tier
  • None if all endpoints for this tier are unhealthy or excluded
Source

pub fn tier(&self) -> TargetModel

Get the tier this selector operates on

Source

pub fn endpoint_count(&self) -> usize

Get the number of configured endpoints for this selector’s tier

Source

pub fn health_checker(&self) -> &Arc<HealthChecker>

Get a reference to the health checker for external use (e.g., marking success/failure)

Trait Implementations§

Source§

impl Debug for TierSelector

Source§

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

Formats the value using the given formatter. 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
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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. 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.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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