pub struct RouterProvider { /* private fields */ }Expand description
Multi-model router — routes requests to different provider+model combos based on a task hint encoded in the model parameter.
The model parameter can be:
- A regular model name (e.g. “anthropic/claude-sonnet-4”) → uses default provider
- A hint-prefixed string (e.g. “hint:reasoning”) → resolves via route table
This wraps multiple pre-created providers and selects the right one per request.
Implementations§
Source§impl RouterProvider
impl RouterProvider
Sourcepub fn new(
providers: Vec<(String, Box<dyn ModelProvider>)>,
routes: Vec<(String, Route)>,
_default_model: String,
) -> Self
pub fn new( providers: Vec<(String, Box<dyn ModelProvider>)>, routes: Vec<(String, Route)>, _default_model: String, ) -> Self
Create a new router with a default provider and optional routes.
providers is a list of (name, provider) pairs. The first one is the default.
routes maps hint names to Route structs containing provider_name and model.
Trait Implementations§
Source§impl ModelProvider for RouterProvider
impl ModelProvider for RouterProvider
Source§fn chat<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
request: ChatRequest<'life1>,
model: &'life2 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<ChatResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn chat<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
request: ChatRequest<'life1>,
model: &'life2 str,
temperature: f64,
) -> Pin<Box<dyn Future<Output = Result<ChatResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Structured chat API — the single required method. Read more
Source§fn context_window(&self, model: &str) -> Option<usize>
fn context_window(&self, model: &str) -> Option<usize>
Context window size in tokens for the given model. Read more
Source§fn supports_native_tools(&self) -> bool
fn supports_native_tools(&self) -> bool
Whether provider supports native tool calls over API.
Source§fn supports_developer_role(&self, model: &str) -> bool
fn supports_developer_role(&self, model: &str) -> bool
Whether the given model supports the
developer message role (OpenAI-spec).
When true, app-owned instructions are sent as a developer message.
When false, they are folded into the provider’s system-equivalent role.Source§fn warmup<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn warmup<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Warm up the HTTP connection pool (TLS handshake, DNS, HTTP/2 setup).
Default implementation is a no-op; providers with HTTP clients should override.
Source§fn chat_stream<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
request: ChatRequest<'life1>,
model: &'life2 str,
temperature: f64,
events: UnboundedSender<ProviderStreamEvent>,
) -> Pin<Box<dyn Future<Output = Result<ChatResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn chat_stream<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
request: ChatRequest<'life1>,
model: &'life2 str,
temperature: f64,
events: UnboundedSender<ProviderStreamEvent>,
) -> Pin<Box<dyn Future<Output = Result<ChatResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Optional streaming chat API. Read more
Source§fn native_capabilities(&self) -> Option<ProviderNativeCapabilities>
fn native_capabilities(&self) -> Option<ProviderNativeCapabilities>
Provider-native capabilities outside the chat/tool turn loop. Read more
Source§fn submit_media<'life0, 'async_trait>(
&'life0 self,
request: NativeMediaRequest,
) -> Pin<Box<dyn Future<Output = Result<NativeMediaResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn submit_media<'life0, 'async_trait>(
&'life0 self,
request: NativeMediaRequest,
) -> Pin<Box<dyn Future<Output = Result<NativeMediaResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Submit a provider-native media operation.
Source§fn poll_media_job<'life0, 'life1, 'async_trait>(
&'life0 self,
job: &'life1 NativeMediaJob,
) -> Pin<Box<dyn Future<Output = Result<NativeMediaResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn poll_media_job<'life0, 'life1, 'async_trait>(
&'life0 self,
job: &'life1 NativeMediaJob,
) -> Pin<Box<dyn Future<Output = Result<NativeMediaResponse>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Poll an async provider-native media job.
Auto Trait Implementations§
impl !RefUnwindSafe for RouterProvider
impl !UnwindSafe for RouterProvider
impl Freeze for RouterProvider
impl Send for RouterProvider
impl Sync for RouterProvider
impl Unpin for RouterProvider
impl UnsafeUnpin for RouterProvider
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
Mutably borrows from an owned value. Read more