ai_lib/provider/strategies/
builder.rs1use crate::{
2 api::ChatProvider,
3 provider::strategies::{FailoverProvider, RoundRobinProvider},
4 types::AiLibError,
5};
6
7pub 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}