ai_lib/provider/strategies/
builder.rs

1use crate::{
2    api::ChatProvider,
3    provider::strategies::{FailoverProvider, RoundRobinProvider},
4    types::AiLibError,
5};
6
7/// Helper to compose provider strategies declaratively before handing them to `AiClientBuilder`.
8pub struct RoutingStrategyBuilder {
9    providers: Vec<Box<dyn ChatProvider>>,
10}
11
12impl Default for RoutingStrategyBuilder {
13    fn default() -> Self {
14        Self::new()
15    }
16}
17
18impl RoutingStrategyBuilder {
19    pub fn new() -> Self {
20        Self {
21            providers: Vec::new(),
22        }
23    }
24
25    pub fn with_provider(mut self, provider: Box<dyn ChatProvider>) -> Self {
26        self.providers.push(provider);
27        self
28    }
29
30    pub fn extend<I>(mut self, providers: I) -> Self
31    where
32        I: IntoIterator<Item = Box<dyn ChatProvider>>,
33    {
34        self.providers.extend(providers);
35        self
36    }
37
38    pub fn build_failover(self) -> Result<FailoverProvider, AiLibError> {
39        FailoverProvider::new(self.providers)
40    }
41
42    pub fn build_round_robin(self) -> Result<RoundRobinProvider, AiLibError> {
43        RoundRobinProvider::new(self.providers)
44    }
45}